Buying a laser cutter for your Hackerspace

15 Nov

Buying a laser cutter for your Hackerspace

At my local Hackerspace, many of us wanted access to a laser cutter. I had plenty of ideas of what to use it for and it's also one of the "Maker tools" that are the easiest to get started with. I started looking at DIY lasers like the Lasersaur project, but I felt like they were above my skill level and a little too big in size for our limited space. Now that we've purchased a laser cutter, I've gotten several questions from friends and other hackerspaces/makerspaces about the purchase process, how well it works and what to look for/avoid when buying a China-laser. Here's some of my experiences.

Picking a brand / model

We tried to save up for a laser that we could buy from a local supplier, but it was simply out of reach. Then I started looking into Ebay lasers. Ebay lasers are 3-5 times cheaper than what the commercial suppliers offer here in Norway. The drawback is that they come without any warranty or support. I gave it some thought and decided that we really needed to have a decent laser @ Bitraf - both for myself and for attracting new members.

I scoured different forums, but CNCZone in special and looked for reviews of China-made laser cutters. After much reading, I opted for a Redsail X700. It has a 700x500mm work area, a 60 watt CO2 laser tube, motorised Z-height and that's about it. They claim a lot of other features like auto-focus, but that's not really true. It can move along preprogrammed X, Y & Z paths and blast a laser that moves at up to 300mm/sec. There is no way to runtime-adjust the strength of the laser. It's on or off, but it runs off a PWM output so you can blast it for shorter or longer periods to "fake" that a bit. Setting the laser power on these cheap lasers are basically the same as setting the PWM frequency.

By comparison - a professional laser can tweak this quite a bit and even adjust the focal point at runtime. Using this, you can do a 2cm deep 3D engraving without leaving the wood burnt. With these chinese lasers you can easily engrave and cut at various "strengths" as well, but it's something you set per object. The software that comes with China-lasers are also extremely crappy, but I'll get back to that later.

Buying expensive stuff from Ebay

I looked around and there's at least 5 companies on Ebay that sells the X700. You won't find them by searching for the RedSail brand though, so search for "60W CO2 laser" and then you'll see the listings. After looking around, I went for the ebay seller CNCCheap. I decided this based on the usual thing you do on Ebay, I looked at the buyer ratings. It turns out that this is highly irrelevant for anything that ships in a container and takes longer than the maximum review-period to arrive. This post is in many ways a review of cnccheap and I'll tell you right away - they're not the least professional.

Up until I transferred the money, the sales personell at CNCCheap were really snappy. I asked questions and got replies back by the next day. The list of standard accessories is quite long:

  • Laser Engraving software Package (English Version)
  • User Manual (CD)
  • CW-3000 chiller
  • Air exhaust fan
  • Air Pump
  • Communication cable
  • 3 Reflect optics (installed in the machine)
  • 1 Focus optics (installed in the machine)
  • 1 60 watt laser tube
  • Other tools

These are all things that you'll need. The Chiller is crucial to keep the temperature of the CO2 laser tube where it should be. Water circulates inside the tube and keeps the fancy 3-layer glass tube at just above room temperature. The air exhaust fan and air pump (for air-assist) are also pretty much required, as are the rest of the list. They also offer a good list of accessories:

  • Honeycomb
  • Reddot Positioning
  • Rotary tool
  • Motorised up and down platform
  • Extra optics
  • Extra laser tube

I basically went for the "full package" of accessories with one exception - I did not buy an extra 60 watt laser tube. Why? I had learned that CO2 laser tubes only last about a year and then you have to replace them, so why keep a spare that you'll only throw it away? Turns out this was actually my biggest mistake. More on that later, but always buy that spare tube...

It feels a little odd to buy something worth $3800 via Paypal/Ebay, but not to worry! Ebay has their buyers protection, Right? Just 4 weeks after I hit the Checkout button (and before the laser arrived), the purchase disappeared from my Ebay history. Repeated emails / tweets to Ebay's support never resolved this and I never got an opportunity to leave my 1-star review of CNCCheap as a company. So - keep in mind - don't select your laser supplier based on the Ebay rating. Look around for real-world cases of companies that offer good service. CNCCheap is not one of these. I ordered the laser the 11th December 2014.

Shipping and getting it in the door

I read about the shipping process online and it's pretty straightforward. The seller will ship the laser to the nearest harbor and they'll also help you organise the last part as well. A local shipping company will then pick it up when it arrives, do the paperwork and after you've paid them - they'll deliver it to your door. Pretty straightforward. Due to unforeseen circumstances (these apparently happen all the time in shipping), the laser took quite some time to arrive in Oslo, Norway. I received the laser the 25th February 2015

The package was huge! It was well packaged and secured and had no obvious damage. Unpacking the laser we quickly realised that getting it up the stairs would be an issue. One of the Bitraf members had one of these neat electrical trolleys for moving heavy loads up stairs. Immensely useful, so if you have stairs - find someone that has one of these!

Assembly and sparks flying!

Setting the machine up was easy enough. Not because of the incredibly crappy documentation offered, but due to some videos I found on Youtube (from RedSail, not CNCCheap). The documentation was 10 pages of assembly for a different laser cutter and then 120+ pages on a different software than what we received. The software itself (AutoLaser) was delivered on a recordable CD. So much for "original software"? Me and Jon assembled the machine the same evening but it didn't work at all.

When we hit the Pulse-button, sparks flew about inside the laser Powersupply. A laser excites the gas inside the laser tube by shooting 27.000 Volts though it. You don't want to be near it when this goes wrong. Here's how it sounded:

The rest is a fairly long story that I'll condense here for brevity, but a log is here (in Norwegian) and my chat-log with the CNCCheap salesperson Lucy is here. Here's some dates and briefly what happened:

  • 2015-03-15 We confirm by testing that the laser PSU is working and that it's the lasertube that is dead
  • 2015-03-16 CNCCheap was told about the problem. They recognised the problem and said that they would ship a new tube.
  • 2015-03-25 The package arrives in Norway, but it's declared as worth $5. We need a proper invoice to get it out and CNCCheap takes forever to supply us this
  • 2015-04-07 We get the package and discover that they didn't send a laser tube - they sent us another power supply?
  • 2015-04-08 Despite solid proof, the seller refuses to send a new tube since they don't believe us. I get tired of arguing and order a tube from someone else.
  • 2015-04-14 New tube arrives and works on first attempt!
  • 2015-04-15 CNCCheap is told about the working tube and they still protest. They even go as far as claiming that we are past the 3 month warranty. Then I explode....
  • 2015-04-27 CNCCheap finally admits that the tube does not work, but insist that we smash the old tube. Apparently, they really don't trust us despite our problems...
  • 2015-05-04 Two and a half month after telling them about the defective tube, we receive the replacement.

Five and a half month after ordering it, we eventually have a working laser cutter on the cheap. We also realised that we never received the exhaust fan promised, but the non-working laser made that quite irrelevant. With the help of members Peter, Mubin, Kyrre, Vidar, Torfinn and Jon we finally got it up and running, but without their debugging experience from high voltage circuits I'd never make this. Thanks a bunch guys! I suggest that you find some allies that know a bit about high voltage circuits before buying.

Among the things we solved:

  • The interlock switch was loose
  • The safety connector to the chiller may be inserted the wrong way despite having a notch
  • Soldering the anode and cathode wires are incredibly hard. Use stranded wire as shown in this instructable, wind it really hard around the anode and then solder. Don't forget to add the isolation before soldering!
  • If the display does not light up, check the red emergency button. It's of really low quality.

Big thanks also go out to the other RedSail owners on CNCZone. They deliver much better support than the resellers or Redsail themselves. If you want to see how it looks when you intentionally break a laser tube, check the video below:

Breaking the old tube was a requirement from CNCCheap. They wanted to ensure that I did not try to fool them into sending me a new tube while the old one was actually working.

How we like it

Despite the incredibly unprofessional behavior from CNCCheap, we're happy with the machine. You really should avoid CNCCheap at all cost and I truly think that RedSail should kick them as a reseller for treating customers like this. They are not the only bad reseller though, so be sure to check for good reviews by trusted sources.

Overall I'm pretty impressed with what we can do with this thing given the price. We can engrave lots of different materials and we can cut the following with good results:

  • 8mm clear acrylic
  • 6mm MDF board
  • 6mm plywood
  • leather

These are the max thicknesses we've cut. Anything less also goes fine obviously. 

The AutoLaser software is notoriously bad. It's unstable and only imports DXF format without crashing. It does work fairly well apart from those very noticeable flaws. The undocumented meny system on the machine may seem like a joke as the English is very poor. There's also three different "Enter-buttons" depending on what part of the menu you are in, so the usability of this thing is practically zero.

The most important thing you need to know is that "Back" actually means "Home" and that the X700 has several undocumented (but nice) features. To zero the X-height on the material, you either click 12 times in the crazy menus, or use the undocumented command of pressing the dot-button and then pressing Enter. To show the outer bounds of the area to be engraved, press the Range-button and then enter. There might be more of these, but it's hard to tell. These we stumbled on by random chance.

We started using the machine without a filter. Then I built a DIY filter. It did well for a while, but now we're getting a commercial grade filter. My self-built filter sent all the warm air out of the building. This is convenient during summer, but not so much during winter. The commercial filter will clean the air enough that we don't need to vent it outdoors.

Below is a video of the most elaborate project I've made thus far. It's a timing gate for the Nerdy Derby race at Teknisk Museeum in Oslo. I learned quite a bit from that - but primarily that objects made of laser cut wood should not be in public spaces were kids run around wink

React with Javascript package managers

13 Nov

React with Javascript package managers

One of the best ways to learn new software is to take on a commercial project and force yourself to use it. I do this all the time and with all the cool kids ranting about React, I felt that it was time to do a project based on it. It's been a bit painful, but I've come to enjoy the way React works. It's actually quite beautiful!

I've used Angular before and React feels much more solid and natural. It does require that you learn how React thinks (or want you to think), and that part might take a little time. Here's some of what I've learned while using React.

Javascript - the new frontend AND backend favorite

To create a HelloWorld on the web, all you need is a HTML page with a few lines of inline JS. How can a 200+ file download possibly be an upgrade from that? It just does not make sense that a simple HelloWorld-project should become a folder with 139Mb of Javascript based libraries, right? Like it or not - Javascript is the language that takes over both frontend and backend development these days.

You can use it old-style (and write it all by hand) or use one of the many hundred frameworks that are out there to make your life easier. So while the initial download may be large when using frameworks, the files will normally be cached by the browser. If you use a CDN for your framework, odds are that it's already cached.

I've always known JS and it's very close to Actionscript. Learning React has not only been yet another nail in the Flash coffin (it's really completely dead). Learning React has also taught me several new programming concepts that I'll keep using for other projects.

How React is different

I've had to do lots of refactoring every time I've understood how a new thing worked in React and that’s been a bit painful. Initially I tried to fight against how React worked since I wanted to be in control. The React way of doing things is to not do things directly, but to always do things based on state. The data model controls the GUI in reactive programming. React only re-renders if an object has changed, so to change something on screen, you need to implement a visual change in response to an object/variable changing. This happens asyncronously since the React DOM and the browser DOM are two different things. With React, you never manipulate the DOM directly. It always happens because of a change in the data model of the app.

Changing an object/variable to change the GUI sounds cumbersome until you've used it. The super-neat thing about this is that if you do things correctly, you'll be able to start your app from ANY state and also to change it while it's running! You just set the variables and the app will render straight to this state! No more clicking 20 times to get to a certains state for debugging. Now you just set the data of that state and you're there? Understanding how to solve things "the React way" is what really takes time, but once you get the hang of it you'll wonder why not all software is based on this principle.

A React application starts at a root component, that then renders sub-components that renders sub-components. It takes time to understand where in such a hierarchy certain data should be, how it's passed most effectively and how to implement the visual changes in response. I won't say I'm completely on top of this yet, but I really feel that I'm getting a lot back from this approach of working. The very clean separation of responsibilities between each component makes you much less afraid of breaking stuff than with other ways of working with code. You basically jump straight to the module you want to work on and do your thing, knowing that it won't break stuff. I really recommend trying out this way of developing web apps if you haven't!

Getting up to speed

When you start out with React, you'll most likely start like me using the in-browser JSX transformer to convert JSX to pure javascript at runtime. This process is called "transpiling", since you're not really compiling but rather converting the React's custom JS format (JSX) to plain ECMAScript JS. Following the official docs from Facebook, you'll get your project started but to really grasp the full power of React, you should go through setting up the NPM and JSPM package managers.

Why? For one thing - most of the example code you'll find online will require it. Package managers are great tools since they keep track of all the dependencies used in your project and they download all dependencies from CDN's. The most important is however that they can convert your app to a pure JS class that is much faster than the runtime-compiled JSX script.

So how do you get started with Package Managers? There's several to choose from, but if you've played with Node.js you probably already have "npm" installed? If not, click here to learn how to install it. Once you have npm installed, open a terminal window (or CMD command line on Windows) and type:

  sudo npm install jspm -g

This will install JavaScript Package Manager (JSPM) on your system and make it easy to install any library you want to use. JSPM seems like a solid choice among a flurry of others that pop up and then disappear and it can pull in code-packages from both npm and github.

To create a new project from scratch, you'll make a new folder, go into it and type the following:

  npm init
  jspm init

This will create a couple basic files that the package manager needs to keep track of what libraries your project is using. It will also download some base packages you need to start developing: Systemjs makes it easy to include libraries on your app. Babel compiles JSX to a variety of JS (including ECMAScript 6 / ES2015), makes sense out of error messages and adds support for missing features in some browsers. You'll find these and some others in a folder called "jspm_packages". With these files in place, you'll want to get ready for React programming by installing React itself:

  jspm install npm:react

These are now added as dependencies in the package.json file in your folder and you can start using React with a package manager to ease your development.

JS and it's blazing speed of development

This talk from Jack Franklin was of great help to me in learning JSPM, but it's also quite typical in the JS-world that the talk from May (6 months ago) is already full of "bugs". JS libs are rarely consistent over time, and if you try to run his code, you'll get errors like:

  Warning: React.render is deprecated. Please use ReactDOM.render from require('react-dom') instead

If you then try to use that code, you'll realise that you didn't install the package "react-dom" since that wasn't needed 6 months ago. Looking at the official documentation from Facebook you'll see that you should not use the import-statement as Jack does, but rather use "require" like this:

var React = require('react');
var ReactDOM = require('react-dom');

Running that will give you the error:

  Error: require is not defined

Facebook just takes it for granted that you've installed the "browserify" package. This is what give you the require-statement and other goodness since there's no such thing in JS. They take this for granted in all their doumentation, so be aware that you'll need that to have browserify or webpack installed if you want to just cut and paste their examples. They do actually mention it on their Getting Started page, but if you're new to Javascript package managers, it's quick to skip that single mention.

But - armed with your new knowledge about JSPM, you could just pull it down

  jspm install npm:browserify

The problem is that this requires that you reconfigure your app from scratch, and since you're now following Jack's great tutorial, you should rather do the following:

  jspm install npm:react-dom

Once that is in place, you can use "import" rather than "require" like this:

  import React from 'react';
  import ReactDOM from 'react-dom';

I don't find these error messages intuitive at all, so I thought I'd better jot this down for Google to find, so others can skip some frustration smile

Using "import" or "require" syntax is just a matter of preference. You can use both, but since none of them actually exists in JS they're implemented as Polyfills - placeholder syntax for methods that may or may not end up in the ECMA language.

Why Javascript should become what students learn first

When I started using Node.js on both the server & client some years ago, I never thought it'd become as popular as it is today. Now that I'm teaching a bit, I keep thinking that it's crazy that students don't learn JS in school. Think about it - why should students not learn a language that can cover both the client and the server? It is after all the programming concepts you should be tought at school, not the syntax. The Syntax is bound to change and keep changing, but the general concepts of programming is something that you'll carry with you from one language to the next.

If I could affect the students carriculum at University and higher education, I'd use Javascript as the first programming language to learn. Once students know the basics of the language, I'd make a frontend and a backend track. Having one language for both makes it quicker to get past the syntax and tooling stage, and get into the concepts and useful stuff. The frontend track would be focused on using React, Angular and other frameworks. It would be more about how to learn frameworks than creating big projects. Knowing how to learn a new framework is much more useful than focusing on the fine details of a language.

The backend track would be foused on Node.js making multiuser apps and games, controlling hardware and persisting data. Compared to starting with Java, C,C++ or PHP, this would be much more useful to the students. They'd get results faster, they'd learn skills that are instantly useful in a job situation and they'd have a huge and great community to learn from. Once they've learned JS, they'll easier pick up the more advanced features in more mature languages. JS is basically a much better starting language.

Call me! (with Adafruit FONA)

09 Sep

Call me! (with Adafruit FONA)

About a year ago, Adafruit launched the FONA. It's a neat little breakout board that packs all the features you'd want in a phone such as Calling, SMS, Data and Lipo battery operation and charging. Add to that a good API that is easy to extend and we have a winner.

By itself, the module can't do much, so you'll need a microcontroller of some sort. My preference is using a Teensy 3.1 since these are just incredibly flexible, fast & cheap. They're also small and placement friendly. By now I've used the FONA for two commercial projects and I thought it'd be nice to collect my experiences in this post.

Call for pizza using the ad on a bus station

The first project had me build the FONA into an advertising board. Check this video to see it in action. The large timer was connected to a motor that pulled it slowly back to zero. At each end position of the timer, there was a manual switch that triggered the FONA in different ways. When the timer was set to 15 minutes, the Teensy set the FONA to call up the pizza delivery. If the person turning the timer wanted, they could get a free pizza within 15 minutes. When the timer was set back to Zero, the Teensy prepared the FONA for the next customer.

As can be seen in the video, it was a snowy morning and I got to do some extra troubleshooting in the bus shed since the timer motor accidentally burned out the evening before and the replacement motor made so much electrical noise that it messed up the sensing on the button pins. I solved this by moving the button pins to analog pins and using a different threshold than the normal digital I/O used.

The FONA used a normal headset-mic to pick up the sound. To play it back I used some more Adafruit components - a 3.7W amplifier and these neat transducers. Despite being only 5W, it was not a problem to hear the sound on a busy Bus-stop when attaching the transducer firmly to the board itself. While the person waited for their pizza, we also played them some cheezy elevator-music. This came from the Teensy using the Audio Adaptor board. I really dig this board. So many cool audio things you can do. Really powerful!

The installation stood there for a whole day and worked without any issues despite the moist weather.

Call anywhere in the world for free!

The second project had us set up a telephone booth that looked kind of like a 1.2 meter tall iPhone. It was to promote the mobile provider MyCall and the idea was to make a phone booth where you can call for free (3 minutes at a time). JCDecaux also made a nice video for this one that highlights that the campaign gave 30% boost in sales.

The interface to the user was a 47" touchscreen showing a multi-screen AIR app that communicated with a Teensy 3.1 via Serial. Before calling, the user was asked to input their existing phone number. After their free call was finished, we used their phone number to send them a polite SMS telling that MyCall offered great prices on calls abroad (their specialty). The project stood outside in a very public space (outside the Oslo central station) for 10 days and worked without a single error. I'm really happy with the stability of the FONA/Teensy combination!

Both projects were done for JCDecaux with MesseTjeneste making the enclosures and me doing the software + electronics.

Fona tips and tricks learned

Here's some things that are nice to know about FONA that you won't find on the (as always) solid tutorial pages on

A lipo battery is indeed Required
The FONA needs a battery to be able to source the required power upon connecting to the network. A 2.2A / 5V dedicated power supply was not enough, but a half-charged 150mA lipo in addition to the USB connection did the trick. The lipo battery is now added as a requirement on the FONA product page.

GSM calling produces serious EMP
Once a call was placed or the FONA connected to the network, the audio chip in the Teensy Audio board was completely messed up. It produced random and unpleasant audible noise. I solved by moving the FONA away from the Teensy, putting them in two separate boxes. I also tried shielding them from each other, but I got very varying results. Much easier to just move them away from each other.

Not all SIM cards will work
I initially picked up a dirt cheap SIM card at a kiosk and it worked right away. This was from MyCall, the company I later made the kiosk for. I then needed to make a copy of the installation, but when I tried to use a SIM card from Norway's largest telco Telenor, it didn't work.

The SIM worked like a charm when inserted into a phone, but on the FONA I was unable to connect to the network. The SIM unlocked successfully, but I was denied access to the network. I later learned that holding down the KEY button for 20 seconds can solve this.

Library only covers some
I needed to blink some lights while a call was in progress and play some audio when the call ended. There currently isn't a method in the default library to check this, but all I had to do was to look up the SIM800L datasheet to find the required AT command.  I then looked through the Adafruit code to see how they had implemented similar features and added this (gist). It's all just serial AT-commands that are wrapped nicely. Super simple!

Using Teensy
Since the Teensy has several Serial ports, you may need to make some minor changes to the default FONA sketches and lib. I've detailed these in this gist.

Ideas aplenty

My initial thought seeing the FONA was to build a phone, but I still haven't done that. Instead, I've used it for installations. Using a phone rather than wifi or bluetooth has advantages and drawbacks, but there are some pretty cool things you can do with this. As an example of something I'd love to do:

  • Imagine an interactive window display controlled via SMS?
  • Using it as a transparent network access point?
  • Click-this-big-button-to-talk-to-support/sales?
  • Circuits that allow you to check status or remote control vending machines or controls? It would be really simple to make a machine send an SMS if it fails to do it's task, so it can alert you that it needs service.
  • It could also be perfect for simple surveilance of hunting spots or beehives in rural areas where there's no phone coverage
  • Turning on the heat at the family cottage via SMS

It's so many cool things you can do with this when you don't need to think about having wifi available!

I really dig how easy it is to build connected installations with the FONA board and it looks like others also think so since Adafruit has now expanded the range to also include a board with a GPS and some convenient starter packs. I'm looking forward to play much more with FONA in the future!

Fixing avr-eclipse paths

20 Aug

Fixing avr-eclipse paths

Just before summer, I started consulting work for a hardware startup here in Oslo. As part of this I've gotten to play around with and integrate lots of new toys such as VISA card readers and various communication solutions. I also inherited some AVR code for a circuit developed specifically for the project and yesterday I set up the tooling.

I guess I could have used all sorts of software alternatives to program the microcontroller, but since the people that created the codebase used Avr-Eclipse, I figured that I'd check it out. Using a GUI makes finding the right fuse settings a breeze and I love to have proper syntax highlighting and completion. Setting it up was easy using this guide, but getting the code to compile properly was somewhat difficult so I thought I'd jot down what I learned in case it helps others.

Setting path for AVR tools in Eclipse

All my problems boiled down to Eclipse not using the PATH variables for avr-gcc and avrdude. On my system I have CrossPack installed for working with pure AVR projects and then I typically use the Arduino tool + Sublime for anything Arduino-related. The Arduino tool automatically adds some things to PATH on the Mac/OSX so in theory, avr-eclipse should just find and use this. It didn't. Instead it pointed to an old, uninstalled version installed by MacPorts on my old Mac that got ported over to my second Mac. All the folders were empty as I unsinstalled MacPorts to use Brew instead several years ago, but the "smart" feature insisted that these empty folders were better than looking at the system PATH variable. I altered the PATH values to point to the CrossPack installation but that didn't help either.

The creators of the avr-eclipse plugin have tried to add some smarts to the configuration, but that failed completely for me. To set the correct location of the AVR tools you want to use, open the Eclipse menu > Preferences and then expand AVR > Paths like this:

Forget the Rescan button if you know what path you want to use. If you don't know the path to avr-gcc and the other tools, just open a terminal window and type:

which avr-gcc

This will tell you the path of the avr-gcc that can be reached through the normal PATH settings on your machine. Now you'd think that this is all you need to do, right?

Fixing the standard includes

I kept getting errors like this.

undefined reference to `debug'
undefined reference to `asm'

It basically means that AVR-eclipse can't find the class definitions for these files. To fix it, Right Click the name of your project in the Package Explorer window and select Properties at the bottom of this menu. This brings up the local preferences for the project. Go to the "C/C++ General" entry and expand the "Paths and Symbols" option. Make sure you're linking to the right version of the include files here:

If you've set the correct AVR hardware and the right programmer, you should now have a working setup. Hope this helps someone as it was rather hard to google all the bits required to get to this.


Testing with Testflight

10 Jul

Testing with Testflight

After Apple purchased Testflight, the service has been integrated into the workflow when publishing apps. Any app with a distribution profile can be sent to users for testing and the process is actually quite smooth compared to the old version. First your build is vetted by Application Loader (or XCode) and then you turn on testing for that specific build. I did however run into an issue worth publishing in case others run into it.

Normally, you'll just flick a switch to turn on Testflight Beta Testing and the app is ready to be tested by all internal to the team. In my case, I could flick the switch but nothing happened. I called Apple Developer support, but the guy I talked with completely failed at understanding what my issue was and he insisted on sending me something I knew was incorrect. He just wouldn't listen when I tried to tell him that something was wrong:

I eventually understood that the first of the two warnings (... must contain the correct beta entitlement) did not have anything to do with my certificate or provisioning file, but rather a missing directive in my app descriptor. Some googling led me to this article that explained how one had to add the beta-reports-active key to the Entitlements part of the descriptor. I now got an error when uploading the 

Build 168 does not contain the correct beta entitlement.

After reading all the replies to this thread I realised that I should not set the mobileProvision-file to be for AdHoc distribution. It should just be a Distribution profile for App Store. That's it.

I also had another issue getting my AIR app published this time. After updating to the latest XCode, I got the following error when uploading the app:

Invalid Bundle: The bundle does not support the minimum version os specified in info.plist

Turns out one have to add a bit about MinimumOSVersion to the InfoAdditions-section of the descriptor file as well. My entire iPhone descriptor settings are now like this:


Popcorn Time!

06 Jul

Popcorn Time!

Just a little summer sigh... I keep reading articles like this one (translated to English) about the famed Popcorn Time software that let's anyone view pretty much any movie when they want. In this article, the word "strømming" means "streaming" and the headline is that streaming of pirated movies has more than doubled the last year.

Nobody but the movie industry is surprised! We all want to stream movies like we've been able to for music for quite some time now.

In my opinion, Popcorn Time is Netflix done right, but without any legal issues holding them back. Suing Popcorn Time or it's users will not solve the problem. Just as with music - new distribution models will pop up and they'll be your competition in the future. The longer you wait, the worse you basically make it for yourself.

How NOT to attack this

The obvious way to attack this is what the movie industry is currently doing. They slam the Digital Millennium Copyright Act in the face of those pirating instead of removing stick (or even forest) in their eye. They drag kids and parents to court for illegally watching movies. I wonder why one have to work in IT / Web to understand that this will not solve a single problem? Why can't they just understand once and for all, the old distribution model is gone and they have to solve this with software & licensing?

What the movie industry SHOULD do

First of all, they should read this 7 year old review from the EFF of what happened when the RIAA sued more than 30.000 individuals. They gained nothing, but rather lost their public reputation as a watch dog for the industry. People don't pirate movies or make services like Popcorn Time to be evil. They are solving what the industry does not do itself - the obvious way to distribute movies.

There is no practical reason not to distribute movies digitally. There may be legal / monetary issues regarding the licensing of each film, but that is irrelevant to the end users. When the music service WiMP (now part of Tidal) started here in Oslo, they had 1 programmer and 8 lawyers. That's how clumsy these things are in music. I don't expect it to be easier with films, but that's no reason to hold on to an antiquated system? The first studio to clear legalities and make their ENTIRE back catalog of movies available will be the winner.

For several years, record labels report about increased purchase and use of music - thanks to the streaming services. As soon as Hollywood understands that they can activate their massive back catalog of assets, they will make the illegal streaming services will disappear - just as the P2P music pirating disappeared. The first company to make a Spotify for movies (offering movies from most or all studios) will be filthy rich.

Nobody really wants to pirate movies. It just happens to be easier than getting them legally.

Image by Tim Cowley, CC By-SA 4.0


Including Native extensions on OSX

01 Jun

Including Native extensions on OSX

Making a small GUI project that controls some hardware today and stubled upon a bug that I solved when using the neat COM-port extension for AIR by Nick Kwiatkowski.

I got the following error upon compiling:

Process terminated without establishing connection to debugger.
Not supported native extensions profile

This comes from the AIR project being set to target all platforms by default. By adding the "supportedProfiles" tag in the application XML, the problem will disappear:


This solves the first problem, but you'll most likely get another one:

Process terminated without establishing connection to debugger.
The content cannot be loaded because there was a problem loading an extension: Error: Requested extension com.quetwo.Arduino.ArduinoConnector could not be found.

This comes from the Native Extension not being included with the project by default. Right click your Project -> Properties -> Actionscript Build Packaging -> Native Extensions and check the checkbox under Package. Flash Builder may incorrectly claim that "This ANE is not used in the application". If all goes well, your project should now compile.

Also be sure to read the old FAQ on Google Code to get your Arduino Connector project up and running on both Windows and Mac as you'll find that the DLLs pthreadGC2.dll and libgcc_s_dw2-1.dll are required.

Filament review: Printing with potatoes?

26 Apr

Filament review: Printing with potatoes?

One thing that fascinate people about 3D printing is the fact that the PLA plastic we often use as material is made from Corn. Now you can get a bioplastic made from potatoes as well! In this review of the bioplastic called Biome3D I'll highlight how it prints and how it differs from other materials. It has some quite useful properties!

The majority of PLA available comes from the company Natureworks. They sell the raw material to plastic manufacturers that add colorants and other chemicals to achieve their desired properties. The Corn based PLA most often used for 3D printing is the Ingeo 4043d grade but you can find other variants and producers.

The potato based bioplastic I'm testing here, is made in the UK by the company Biome Plastics and it's primarily sold through the website 3DomFilaments. I initially purchased some samples, but I picked up a couple more rolls since I wanted to test some more.

Not as brittle

The first thing I noticed is that it's nowhere as brittle as PLA. This is a major advantage. When you take a piece of the filament and bend it, it acts more like ABS. It bends and becomes more white in color. You won't break it until you bend 10-12 times. The material is strong and allows quite some bending before it breaks. It's not anywhere as tough as PET though, but much more suited than corn based PLA for applications that will be experiencing any degree of flexing. It is still stiff and solid and it barely shrinks at all. 

When printing, the layers bond really well and I can extrude it nicely all the way down to 175C - a very low temperature for my printer. It also has a nice, matte shine to it and theres basically no smell when heating the material. What I find the most fascinating about this material is how different it looks from other filaments when extruded!

Different consistency

When this material flows out of the nozzle, it behaves different than other 3D printing filaments I have. If you just push material out of the extruder, it will not hang as a nice, thin string. Instead, it will become a "lump" that gets a "skin", but keeps filling from the inside with hot material until the lump becomes so heavy that it falls off and create a new lump. Check the video below to see what I mean.

In other words, this material seem to "store" heat longer than other filaments. You can very much feel that if you try to squeeze one of the lumps of plastic that fall down.

The Biome 3D filament goes soft at 80-90 degrees, but you can print it at much lower temperatures than most other materials. As can be seen from all the horizontal stripes in the picture at the top here, cooling is essential. My printer is currently in the middle of a conversion to dual Flex3Drive (Writeup on this brilliant tech soon!) so I barely have any cooling. This shows clearly as lines along the prints. Lowering the temperature helps a lot and it prints well down to rather low temperatures.

Post processing!

This stuff can be sanded! Normal PLA will melt as soon as you start sanding or polishing it, but the Biome material seems to have a high enough Glass Transition temp that you can actually work it quite a bit before it deforms. That means that normal sanding is possible, but also tumbling with various mediums.

As can be seen above - my lack of cooling causes stripes in the print. I didn't sand the piece in the middle all the way down as the grooves were quite deep, but you can see how well it works. PLA will heat up and melt as soon as you sand it, but the Biome 3D filament holds up well as long as you don't repeatedly sand the same spot. I was even able to sand it using a Dremel as long as I kept moving to allow some cooling. It is impossible to polish the material to a shine like you can for ABS as it's matte by nature. I have not tested how well paint sticks, but I'll do a test and add that here later.

I can't find a proper datasheet, but the ability to sand the parts made me think that the Glass Transition temp was higher than the 70C typical for other PLA and lower than the 110C for ABS. I did some testing by submerging a printed part in 70C tap water. This revealed that it does indeed deform at this temperature and it also deformed at 60C. At 55C the object held up, so a Glass Transition temperature of 60C seems likely. That's actually lower than some PLA variants and makes it unsuited for parts that are exposed to heat. In other words - this won't replace ABS as a way to print spare parts for your dishwasher or similar tasks.

I also tried flame polishing the material. It does bring out a gloss but it's extremely hard to not apply too much heat. Since the heat builds up inside the material, I managed to get what looked like a perfect finish, but then after a few seconds it looked like above. The heat in the material kept melting it... I also tried to treat it with acetone, but it has no visual effect. It does however seem to dissolve the plastic to some degree.

All golden?

Now this seems all very cool, but there must be some negative things also? Of course there is, but they're not that bad. If you follow the manufacturers recommendation and use a heated bed at 60-70C, you'll see the prints sag at the bottom (Elephant's foot). I've actually seen this in all my prints to some degree, despite lowering the bed temperature to 40C. Like said before - a lot of cooling is required when printing with this plastic as heat is "stored" in the plastic. In other words - extra fans may be required.

Another thing that might be more of a problem is the inconsistencies I found with the spooled material. The diameter was quite consistent (+/- 0.2mm on my 2.85mm filament), but I had one case where it was way above normal (3.2mm). The material is spooled in a way so that it does not unspool perfectly. Towards the end of the roll it actually managed to pull my extruder back across half the build platform when the steppers turned off. This is probably easy to remedy and they've just started producing filament so they'll surely fix this. They should however also fix this:

Melted onto the filament was a lump of plastic from the production. This would have ruined the print on any printer. I happened to notice it, but you really don't want to see stuff like this. The material comes in the colors white, black, red, yellow, blue, green and pink so the selection isn't exactly stellar, but this is sufficient for many. Only opaque colors exist for now, so no translucent yet. When I purchased, I was first sent 1.75mm plastic despite ordering 3mm. As a compensation, they gave me half a roll of another color - so while the webshop isn't completely routined, they do offer good customer service.

In other words - I like the filament, but they need to ensure the quality is consistent. With that, I think this can be a good replacement for the fossil ABS filaments. I especially like that you can sand it and that it's more flexible than ABS/PLA!

BAMM settings for Biome3D filament

The BAM Makeblock printer has a Flex3Drive extruder with a Hexagon nozzle. I use the following settings with this material:

  • Temperature: 175-190C
  • Speed: 50-100mm/sec
  • Retraction: 2.5mm
  • Extruder tension: normal
  • Heated bed: 40C
  • Fan: full (& then some)


Beta testing for Makeblock

01 Apr

Beta testing for Makeblock

Some weeks ago, I was asked by Makeblock if I wanted to review a kit that they are putting on Kickstarter? I guess they asked my since I've written about some of my other Makeblock experiences and use it for most of my robotic projects, and of course I wouldn't mind testing out something new. But - I got an idea - who better to test it than my 10 year old daughter Vera? They liked the idea and sent the kit off.

Disclaimer: the kit was given to me, but because of Norwegian customs regulations it is impossible to get anything "for review purposes". Due to that, I had to pay both handling fees & vat of the theoretical price, making it a fairly expensive project, but hey - I get some quality time with my daughter & she get's to make another robot!

First day - rough start

The kit came in one of those nice, blue Makeblock boxes that I have a few of already. As soon as the courier arrived with the package, my daughter started asking what day we were building? Due to family plans, the first day of building took a few weeks to work out. 

The kit is quite impressive when you lay out all the parts - stepper motors, beams, wheels, nuts-n-bolts, electronics, sensors.... It's a really solid kit and it is the foundation of no less than 4 different robots. It's quite an ingenius little kit in that it contains all the kinds of drawing robots that you'd want to build - a pantograph arm-style robot (mScara), a Polargraph wall-drawing robot (mSpider), an egg-bot for drawing on round objects (mEggBot) & a PenBot (mCar, same kind as the NITH Penbot I designed some years back). Vera very soon found out that she wanted to build the mScara robot first!

The day arrived and Vera thoroughly liked hanging at Bitraf (my local hackerspace) a whole day while building! The deal was - she would test the kit and I would sit next to her working on something else. If she got a problem, she would ask me for advice. Turns out, she needed a lot of help. The reason? We only had a video of the robot being dis-assembled and no instructions on how to build it. I contacted Makeblock and they said that unfortunately that wasn't finished yet but we could get it very soon. 

Oh well. It was after all Saturday so she had candies while she mounted the electronics and peeled the foil off the plastic parts. We had planned another build-day and this was after all a Beta test, so we could not expect it all to go perfectly smooth.

Second day - success!

About two weeks later, we had another build-day at the hackerspace and this time we had instructions! This day, Vera kept building and only asked me twice for advice so the instructions were rather good! The only things she asked about where "Do I use this length or this length screws" and other simple things. At the end of the day, we got the robot working and she chould start drawing!

We'll keep exploring the kit in the weeks to come, but we really like it already. Vera's reaction to opening it was that of a kid opening a massive box of candies and the software makes it a breeze to change between robot configurations. Vera did not think it was difficult to build the robot at all. She has a little LEGO experience that I think came in handy, but I think this kit would work for all kids that enjoys tinkering and building.

Judging by the Kickstarter campaign, it's not just Vera & I that thinks this is a cool kit! For now they've reached their goal and it's well on it's way to reaching the first stretch goal of $100.000 grin

ESP8266 and stability

24 Mar

ESP8266 and stability

Like many others in the Maker Community I've spent a lot of time playing with the dirt cheap ESP8266 wifi chip. It is the cheapest way to add wifi to your project and it's easy to get hold of. My hope was that it would be solid enough that I couldbuild permanent installations and fun Internet Of Things (IoT) devices with it, but the darn thing keeps crashing. I've been testing it since the 0.91 firmware and all the way up to the current 1.0 version and it's not possible to keep the device running for a prolonged period of time.

I've spent more than a weeks worth of time getting it to not crash at random intervals, so I thought I'd share what I've learned in case others find it useful.

Setting up for development

The best way to hook up these dev boards is to use the ESPlorer software (java) and getting a USB to Serial converter. If you have a version that offers 3.3V on both data and power lines (such as this one), it is the most convenient. If you can't find a 5V USB to Serial, you should know that the Serial pins (RX/TX) are supposedly 5V tolerant, but the power must be 3.3V or you will fry the chip. The ESP modules will pull a couple hundred mA, so powering it from a good 3.3V power source such as a LM1117 / LD33 can be a good idea.

There's many guides to hooking up the various development boards, so I won't detail that part, but lets look at the software side of things! When you buy the ESP-01 breakout boards from ebay, you never know what version of the firmware it comes with. Most likely it will be an old one so you'll probably want to update it. But - what firmware should you use?


NodeMCU is a firmware that adds a LUA layer on top of the (somewhat stable) official 0.95 Espressif SDK. This seems to be the most stable firmware you can currently use and it is also the one that is the easiest to get started with. It is well documented and offers good tools. Rui Santos has a great guide for hooking up an ESP-01, burn the NodeMCU firmware and setting it up as a webserver.

Briefly said, you hook up the ESP directly to a USB to Serial converter (3.3V!), download the NodeMCU Flasher tool, select the COM port and hit the Flash Button.

When that is done, download the ESPlorer software to talk to it. LUA is a very straightforward language to learn and if you're used to closures like in Javascript, you'll feel right at home. NodeMCU has a nice, documented API and several libraries that you can add for special hardware like LCD's, WS2812/2811 LEDs, sensors and more.

The NodeMCU firmware is based on the original Espressif SDK and thus inherits all the bugs it comes with. This means that the hardware will crash just as often, but since it always restarts after a crash, it will re-run your LUA script on startup. This makes NodeMCU good enough for devices that will just send some sensor data to a webservice such as Thingspeak. It will not work as an access point doubling as a webserver though. It'll crash and hang just as often as with the original firmware, so for me this is a showstopper. I want to make IoT gadgets that serve up a web interface as well as an open API.

Stock firmwares

Updating the firmware is quite easy if you use the NodeMCU Flasher. This has a nice, minimal GUI and everything is point and click. It's Windows only though, so if you like Python, check out the esptool. All the officially Espressif SDK's contain a "bin"-folder that has the precompiled files and a text description of what memory addresses to copy each .bin file into.

My initial idea was to use the UART in the ESP boards with a Microcontroller. Most my projects are based around the Teensy 3.1 and since it has 3 serial ports, so it's a breeze to do UART communications with. However, no matter how hard I tried, I couldn't make it 100% stable. After a few hours, it just crashed and restarted. It could run fine over night, but it would always crash after some usage. If there was a lot of traffic, it would crash more often and my intent was to basically bombard it with data continuously. I tried all the different versions of the firmware and even the official 1.0 version that was released this week is buggy beyond repair. It is actually so buggy that Espressif recently started an official bug-hunt...

That pretty much rules out using the official firmwares. How about making your own then? Espressif provides an SDK and the required code to compile your own version. Building it yourself is quite easy if you have a Ubuntu VM. Just follow the instructions outlined here. This will however not solve all your problems. Some of the codebase is Open Source, but other parts are provided as "binary blobs" so you can't really know what bugs are hiding inside. You can however exclude those parts of the Espressif SDK that you suspect to be causing the problems, so if want to program the ESP8266 directly check this neat guide on Hackaday.


This "Transparent Bridge" is the solution I'm currently experimenting with. It's a completely dumbed down firmware that can take a TCP connection on any port and relay it to the Serial port (RX/TX). Just apply power, connect to the WiFi access point that it sets up, Telnet to the default address and you can set it up to join your local network / access point. You can then up the BAUD rate to whatever you want/need and change the Port to for example 80 to make it work easily with browsers.

Anything sent to the ESP will then show up on the Serial connection. When you write back to a connection, you can serve data (like a webpage). Currently, this seems to be the most promising solution, but it requires some more testing. The basic idea is to use as little as possible of the buggy Espressif SDK as possible. To get the ESP Transparent Bridge firmware onto the device, just load the premade .bin files using the NodeMCU Flasher tool like this:

I'll post back here when I have more details & results on this setup.

But why care if it's buggy?

You might ask yourself - why on earth should one care about this chip if it is so buggy the creator has to host a competition to find all the bugs? The thing is - at $2 you can put wifi into ANYTHING! A typical wifi-shield for an Arduino will cost you from $30 and up to $90. Just a plain breakout board from Adafruit will cost you $35 and the CC3000 that it's based on isn't exactly stable either. A $2 chip that works would open up so many possibilities, so that's why I still care after fiddling this much with it.

A little about the hardware

I presume that you already know a bit about the hardware if you're reading this. If not, here's some details. The ESP8266 is a small powerhouse and this is a small 101 on the hardware. It's an ARM processor that runs at 80Mhz and can be overclocked to the double. It has up to 16 GPIO pins available and it does SPI, I2C, UART & more in hardware (fast!). It offers great range and you can get one for as low as $2 on ebay. Physically, it is a tiny 5 x 5 mm Integrated Circuit that needs a little supportive components around it to be useful. There is a series of dev-boards that offers this: ESP-1, ESP-2, ESP-3, ESP-4, ESP-5, ESP-6, ESP-7 and so on, all the way up to ESP-12. They differ with regards to pin spacing, internal/external antenna and the number of GPIO pins broken out. It was hard to locate all the pinout diagrams, so I've gathered them all in a github repository that I'll fill with useful code and resources. The original datasheets has some decent info, but check the ESP8266 wiki for more details.

The ESP-1 is typically the cheapest and most available. It only has 2 I/O pins broken out and uses 2.54mm headers. They are however clumsily combined into a 2x4 arrangement making them impossible to breadboard. It's not hard to make an adapter, but the ESP-2 is more practical for breadboard use. This also has a third I/O pin broken out, but requires an external antenna. The different versions all offer useful features, but the ones to avoid are ESP-5 and ESP-10. These do not have the pins required for updating the firmware exposed.

The version that seems to attract the community is ESP-12. It has FCC certification, RF-shielding, ADC and 9 GPIO's. It is included in the NodeMCU devkit that you can now get from TronixLabs and several other Open Hardware vendors. I'm looking forward to getting a couple of these to play around with. Other devboards that look interesting are the new one's from Olimex.