Saturday, February 25, 2012

Ikea hacking

My wife wanted a big closet in our garage. It needed be big enough to hold the washing machine, dryer and fridge. Sadly, Ikea had nothing on offer.



When we went to Ikea, we noticed that the biggest closet had a depth of 60cm. This was not enough to fit the devices we wanted to install in it, so I decided to take a different approach. First, we selected the sliding doors we would like in front of our closet. Then, I went on to measure in the Ikea showroom the exact size of the elements of the closet that were in contact with the sliding doors. I downloaded the instuction manual for the sliding doors to see where the holes would have to be and how the different pieces would fit on the closet.
Armed with that knowledge, I made a design for our own closet. It's more then 6 meters wide, floor to closet and 70cm deep (net depth, without counting the doors). Everything was constructed from the cheapest furniture board material, pre-laminated in white. To assemble the closet, I chose to dowel it all together with 8 mm dowel and the Wolfcraft doweling jig (excellent and indispensable piece of equipment!).
The result was a nice closet. The only downside was that all the sawn edges where not free of burs, so I used some silicone to seal all edges. This gave everything a wonderfull finish. I used the leftovers from the fiberboard to close the gap between the top of the closet and the ceiling. At the bottom, I constructed a sturdy wooden base and glued it to the ground. After moving the 3 elements of the closet in place (2 meters each) I attached them with screws to the wooden base (this is the only place where screws are used).

When the closet was finished, I got myself 3 sliding door pairs from Ikea. The cheapest version costed only €89, whereas sliding doors meant for DIY are a minimum of €400/pair in this size. We opted for the more luxurious version of €229.

The end result is a closet which would cost you about €5.000 to have made and install by a professional. My cost in materials was around €1.000 and the labour was worth 5 days of work. I'm happy with the result!
More pictures in this Flickr set.

Friday, January 27, 2012

Don't buy cheap lightbulbs for your car

Yesterday I had to go to the vehicle inspection with my car. Sadly enough, the headlights didn't pass the test. If you look at the picture of the lightbeam projected on my garage door, you can see why. The light to the right is diffracting a lot of the light upwards, which would blind oncoming cars.


When you look at this closeup, you can see the diffraction pattern even clearer. Several trips between automobile inspection and the car dealership didn't bring us a solution. The conclusion was that the whole headlight unit was faulty and needed (expensive) replacement.


When I got home, I swapped the left and right lightbulbs. Apparently, the problem now also switched sides. When I inspected the faulty lightbulb more closely, it appeared to have a molten reflector. When you look at the dark area in the top, you can see clearly that on the far side of the picture it seems like the reflector material has dripped down a bit. Because of the irregular diffraction pattern this caused, the mechanics couldn't adjust the light beam correctly.


This happened with a dirtcheap nobrand lightbulb. I guess I'll be sticking with Philips lightbulbs from now on. The funny thing is that neither the mechanic nor the people at the technical inspection where able to point in the direction of the solution. If I wouldn't have found this out by accident, I would have been in for an expensive headlight unit replacement.

Saturday, December 17, 2011

Lexus: it's a bug, not a feature. And it needs open source.

This post is to pass on some information to Lexus about a bug in one of their cars. Contrary to what customer service would like you to believe: it's not a feature or a malfunction, but a software bug.

Description

This is how I found my car this morning: locked, front window lowered 75%, rear window lowered 50%. The evening before, I left the car locked with the windows closed. The first explanation for this problem that comes to mind is user error. As Lexus answered on Twitter (for which they deserve credit: good monitoring!) the car has a personalized setting that allows the windows to be rolled down with the unlock button held. Maybe someone inadvertently pressed the buttons of the key fob, which was in the house.

Problem not reproducable

I tried this and indeed: holding down the unlock button rolls down the windows. But in that case, the car is also unlocked. In my situation, the car was still locked. A second try learns that by keeping the lock button pressed the car can become locked and the windows partially closed again. Just let go of the lock button at the right moment. But even in the unlikely event that these button presses all occurred accidentally overnight whilst the keys were in the house, it can not explain the situation. Using the remote, the windows all start and stop at the same time. This brings them into a position that either the rear window is always opened more than the front window (which is longer) or in a position that the car is unlocked. In my situation the front window was lowered more then the rear window and the car was locked.

Why this is not a malfunction

Computers don't just do things by themselves. If the computer in the car lowered the windows to this predefined position, it is because someone someday programmed a routine that does exactly this. The reason why is is programmed can be anything. Just some ideas to what may have gone through the engineer's mind:
- escape-position in case the car is driven into a lake
- anti-buffeting position in case the car is driven fast with the windows in a position that could cause dangerously high forces on the window glass
- post-crash position to let airbag fumes escape without compromising head support for rear passengers

Maybe a sensor malfunction triggered the software routine. After all, it was a stormy night when this happened. Maybe it is rare combination of values that triggered a bug in the software to enter the 'lowered windows' routine. In any case, it is something the manufacturer should try to diagnose and correct. Not something that the user of the product should have to have replaced in a dealership.

Lessons to learn

This incident shows that many products are highly complex systems where nobody knows what software is inside them and how this software is working. In a world where companies build products using a complex network of subcontractors of subcontractors, we seldom know how to diagnose or fix these kind of problems.
In my opinion, it should be a legal requirement that all software related to safety is made open source so problems can not be swiped under the carpet and errors are more likely to be spotted before accidents happen. I don't trust the software in my car. It lowers my windows without anyone knowing why. Who knows what it can do to my braking system? Yes, the problem is probably known in the Lexus incident database, where it now will have a +1 in front of it. But Lexus might not be able to solve it and therefore would choose to contain it (assumption from my side). Because the engineer who programmed the routine can not be retraced. Because the subcontractor is not paid to investigate this. Because the unit already has been approved and tested, thus the design can't be faulty. The only solution to this deadlock in industrial design is open source software and open data on incident management.

Also in the car industry the era of bespoke software is over. Let's ask the manufacturers to open up their source code.

Sunday, December 4, 2011

Cyanogenmod 7 for Nexus One: a must-have

The Nexus One is now almost 2 years old, making it a dinosaur in mobile phone land. It's main limitation is the limited amount of RAM available. Over time, the preinstalled Google Apps have grown so large that it is almost impossible to install anything else. A few weeks ago I even had to uninstall the Flash player because I kept getting 'memory full' warnings.

The Cyanogenmod solves this problem. The first solution is that the build is much smaller than the official firmware. The way it partitions the available RAM leaves a lot more room for applications. The second solution is that by rooting your phone (through the installation of Cyanogenmod) you enable the installation of S2E. This application is available in the Android Market and allows you to use a separate partition on the SD card as an extension to the internal memory. The main reason memory is a problem on these early Android devices is that it is not possible to move or install system applications to the SD card. System applications are not only Gmail, Calendar and contacts, but also Google Maps, Google Plus and Flash player are large applications that can't be moved to the SD card. The S2E application solved this.
To install the firmware I followed the guide at http://wiki.cyanogenmod.com/wiki/Nexus_One:_Full_Update_Guide. There are 2 things that should be added to this guide:
- You should first install the Java SE SDK, then the Android SDK and then the fastboot tool
- After installing the Android SDK, you need to start the program SDK manager in C:\Program Files (x86)\Android\android-sdk and install the additional "platform-tools", which creates the directory C:\Program Files (x86)\Android\android-sdk\platform-tools
- The fastboot.exe file shoudl be installed in this directory and you should run it from this directory.
If you don't follow the above steps before installing fastboot, it will complain about a missing dll AdbWinApi.dll. (note: I added these steps in the Wiki, so hopefully they remain there)
Another thing that didn't work for me is booting in the ClockWorkMod Recovery. I tried the Amon_Ra Recovery instead and this worked flawlessly.

The result
I'm very happy that I installed this Cyanogenmod
  • The phone is much faster now. The UI is just as snappy as it was the first day I had the phone.
  • There is loads of memory available for applications. I didn't even need the extra S2E partition to move the system apps to SD, which means they still can run form the faster internal memory.
  • There is a lot more flexibility. I love features like being able to control what the trackball alerting light does. Also the ability to configure the SD card as the default installation location for new apps is great. And there's much more. 
  • There is aven a FM radio. The hardware was sitting unused in the N1 all of this time and Cyanogen now unlocks this!
Maybe in a few weeks we can even switch to Ice Cream Sandwich, the newest version of Android. Although this will not be released for the Nexus One by Google, a team of developers on XDA Developers is working on a build for the N1. You can follow their progress here: http://forum.xda-developers.com/showthread.php?t=1366897

Thursday, October 20, 2011

Logitech wireless mouse, keyboard and webcam tested

A few weeks ago Logitech gave me a wireless mouse / keyboard combo to test. I was sceptic at first, but after a while it grew on me.
In my office I use a wired Apple keyboard just for the sheer pleasure of typing on the chiclet-like keys. My previous wireless keyboard was a Microsoft combo with traditional fat keys with a long travel. The wireless failed often, leading to typing mistakes, missed letters and ssssssssssometimes unwanted repeated keystrokes. Not fun, so I went back to a wired keyboard.


The Logitech keyboard is from the new "colour collection" line. It is available as a combo with a matching mouse and webcam. Luckily I didn't get the pink one, but I'm sure there's a market for these fancy designs. The mouse is much too small for my hands. I'm more used to bigger and sturdier mice that give greater precision in handling. But it works fine without any wireless issues. The keyboard is compact yet comfortable, although the keys are spaced a bit too far apart to my linking. It's nicer to type on then a traditional deep stroke keyboard, but not so nice as the Apple keyboard of course.
After using the combo in my office for a while I switched back to the typing pleasure of my Apple keyboard and installed the Logitech mouse and keyboard on the children's laptop. And I must say: it's a very good match when used on a laptop. There are no cables to install and the compact mouse and keyboard don't take too much room on the desk. My children now use this continuously instead of the laptop's built-in keyboard and trackpad and they don't want to switch back.


The one thing I'm keeping for myself is the Logitech C270 webcam that came in the box. My old webcam was an ancient model with very bad low light properties. This new generation of inexpensive webcams deliver crisp 720p HD images even in lower light and they also have a built in microphone. My Skype sessions definitely became more fun with this unit!
As a sidenote: all of this stuff was tested and installed on a Mac, Windows 7 and Windows 8 and worked without issues. For Windows 8 you do have to manually install the Windows 7 driver for the uni-receiver, but this is normal since Windows 8 is yet unreleased.

Saturday, September 17, 2011

Windows 8 rocks!

I'm writing this on an old HP530 laptop. Until yesterday, it was an unusably slow machine with it's 1GB of RAM and Windows Vista installed. Now that I've installed Windows 8 Developer Preview it simply rocks.


Installation
You can download the Windows 8 developer preview from the Microsoft website. After you download it, be sure to check the file for download errors. My first copy was damaged, so I had to reload the file. To check for download errors, you need to calculate the SHA-1 checksum of the file and compare it to the SHA-1 given on the download website. To calculate the SHA-1 checksum you will have to download the FCIV tool from Microsoft. When you're certain your copy is OK, you can burn the iso to a CD or create a bootable USB stick with the Windows 7 USB download tool from Microsoft.

Metro Interface
The default interface you see in Windows 8 has nothing to do with the classic desktop. You will be presented with the beautiful Metro interface designed for tablets. It provides a simplified computing experience that will suffice for 90% of users, whether they are on a tablet of laptop device. I showed it to my children and they started playing with the different tiles just by relying on their intuition. The tiles are also 'live', in the sense that they behave like widgets, showing e.g. the weather forecast on the weather application tile.
Also things like 'settings' have been incorporated in a very nice interface, both visually pleasing and with good usability. Power users can switch to the old desktop-with-taskbar interface to be able to run tradional Windows applications like Word and Photoshop.

Internet Explorer 10
Actually there are 2 versions of this browser installed. The desktop version is nothing special, but the version you get in the Metro interface really surprised me.
When you're browsing you don't see any browser chrome. You're just interacting with the website in fullscreen. Once you click the right mousebutton on a non-clickable area in the website, the chrome pops up. At the bottom you see an address bar, at the top you get an overview of your open tabs by showing large thumbnails of the tabs. Very nice and much clearer than the small favicon-with-text tabs you get in a normal desktop browser. When you start typing in the address bar, the main screen of the browser shows you suggestions based on what you previously visited and what Microsoft's search engine Bing is guessing. This is a very nice form of autocomplete.

Compatibility
Windows has a rich past, which means it supports a wide selection of hardware. In my case, the videocard of my HP530 wasn't supported by Windows 8, resulting in a screen resolution of only 800x600. But after downloading the Windows 7 driver, it just installed and worked immediately, even without rebooting. If this means earlier windows drivers will be compatible with Windows 8, a lot of hardware and accessories like webcams and game controllers will still be usable. With the small footprint of the OS (it runs perfectly fine on 1GB RAM with a 5 year old CPU) this backwards compatibility will further drive down prices of computer hardware like tablets and mini laptops. This will let Windows 8 based devices take the market by storm.

Flash
It seems like Adobe Flash is really on it's way out. The Metro version of Internet Explorer no longer includes Flash but relies on HTML 5 to display video's in websites. This is done to ensure that the Metro interface will run nicely even on low-end devices like cheap tablets. Now that browser implementations of HTML 5 are getting better and development tools are starting to mature, it won't be long before the proprietary Flash platform is (finally) replaced with the open technology of HTML 5.

Conclusion
This is a serious competitor to IOS and Android. The fact that you can have 2 computers in one (tablet UI and desktop UI) will prove to be really valuable for users that don't want to invest in 2 devices. Combine that with the developer ecosystem of Microsoft and Metro applications will soon be conquering the world.

Thursday, May 19, 2011

Samsung Galaxy Gio crash vibrates, pauses, vibrates and freezes

UPDATE:
The device appears to be grey import from Germany. Only the German firmware has this problem. It is now on it's way to the service center for a firmware upgrade. Fingers crossed & kudos for Samsung Belgium for investigating this issue, whilst it should be dealt with by Samsung Germany.

UPDATE2:
Latest firmware does not fix this problem. It occurs less than in the beginning, also probably because wifi is now off most of the time.

UPDATE3:
Firmware installed on 11/11/2011 with build number GINGERBREAD.XXKPS fixes the problems. At last! Make sure to upgrade your firmware using Samsung Kies.


I'm writing this up so other people facing the same issue with the Samsung Galaxy Gio phone can find this information via Google.
I bought a Galaxy Gio for my wife. The Gio is just released by Samsung, so it's in it's first firmware version. There is a bug in the firmware which makes te device unusable. In this post, I try to diagnose this bug.

Symptoms

When you're surfing the web, refreshing email (or have email pushed to you in the background) all of a sudden your phone freezes, vibrates once, pauzes for 2 seconds and then vibrates 3 times. Depending on how much luck you have, the phone closes the application that was accessing the internet or it keeps doing the vibrate thing whilst the screen and all buttons are frozen until eternity. In that case, the only solution is to hold down the power button during 5 seconds to power off and reboot the phone (or to remove the battery).
This happens every 1-30 minutes that you're actively using the phone. The less you use the internet, the less the crash occurs. The more stable your connection is, the less the crash occurs.

Tests performed

To check where the problem lies, I restored the phone to factory settings. It would not crash, no matter what I did if I didn't configure an internet setting.
Next, I configured a Wifi connection and started browsing. Within 1 minute the browser crashed.
As a third step, I restored the phone to factory settings again and configured a gprs access point. Within 1 minute of browsing the phone crashed. In other tries, it took 10 minutes.
As a fourth and fifth test I repeated the above tests (with GPRS and WiFi) but I configured a Google account, opened up the gMail application and clicked on 'refresh'. On both instances, the phone crashed on some occasions.
I noticed that when I introduced instability in the connection (disconnect WiFi router during test, move to location with bad GPRS reception during test) that crashes occured far more frequently

Log file analysis

An analysis of the logfiles learned that a SIGSEGV event is thrown by both the browser and gMail (and probably other apps that use internet if I would have installed and tested them. I've had the same thing happening with the weather applet and even the clock, which probably syncs it's setting to the linked Google account).
The SIGSEGV event means that the application is adressing memory that it has no (longer) access to. It always occurs after the following lines in the logfiles:

:06:12.732 I/ActivityThread( 1520): queueIdle
:06:12.742 V/ActivityThread( 1520): Reporting idle of ActivityRecord{4a301bd8 token=android.os.BinderProxy@4a3012a0 {com.android.browser/com.android.browser.BrowserActivity}} finished=false
:06:12.742 W/ActivityNative( 1520): send ACTIVITY_IDLE_TRANSACTION
:06:12.742 W/ActivityNative( 172): RCV ACTIVITY_IDLE_TRANSACTION
:06:14.002 I/browser ( 1520): Console: [object Object] http://www.google.com/m?client=ms-android-samsung&source=android-home:451
:06:14.232 I/DEBUG ( 1441): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
:06:14.232 I/DEBUG ( 1441): Build fingerprint: 'samsung/GT-S5660/GT-S5660/GT-S5660:2.2.1/FROYO/XXKC4:user/release-keys'
:06:14.232 I/DEBUG ( 1441): pid: 1520, tid: 1530 >>> com.android.browser <<<
:06:14.232 I/DEBUG ( 1441): signal 11 (SIGSEGV), fault addr 41f80020
It looks like the application (in this case, the browser) has requested data from the internet. This request is terminated by the system due to a change in connection state (or packet loss or some other hick-up in the connection). The application keeps a reference/pointer to the data it requested and thinks that the data has arrived and wants to access it. However, this pointer is invalid since the system already cleaned up the connection. Possible causes could be:
  • the system doesn't notify the application that the request is killed
  • the application doesn't update it's state correctly (which is less likely, since several applications exhibit the same behavior)

Disclaimer: I have no knowledge of Android or Samsung firmware, this is just deduction based upon general sw engineering knowledge and the data in the log file. This diagnosis can just as well be wrong.

Conclusion

Samsung left a huge bug in the firmware related to data connectivity. I can not understand that this firmware actually shipped. Don't they even do basic testing? I gave the phone to my wife and she told me that it's broken within 10 minutes of receiving it. Shouldn't a Samsung engineer have at least the same basic testing skills than an average consumer?

Samsung, solve this one very quickly or be prepared to see enormous return rates on the Galaxy Gio!

(reactions from Samsung and updates will be posted in this same blogpost)