DealExtreme orders

Comments Off

DealExtrme, always useful stuff! Some of the things I’ve ordered, listed here so I can easily find it and order even more…

V117 Dual-Side SSOP16 / TSSOP16 / SOP16 SMD to DIP Adapter Boards Set - Green (2 PCS) E5YK Stainless Steel Aquarium Five Head Water Tank Regulating Valve - Black + Silver 5 x 5.5mm DC Power Extension Female Cable - Black (10 PCS) Male + Female DC Power Converter Connector Adapters w/ Terminal Blocks For CCTV Camera (Pair) Male + Female DC Power Converter Connector Adapters w/ Terminal Blocks for CCTV Camera (Pair) 1-to-2 Power Splitter Cable for CCTV Security System Camera (DC 12V) 5 x 5.5mm DC Power Extension Female Cable - Black + Silver (10 PCS) Aquarium Fish Tank Tubing Straight Connector T Splitter for 4mm Air Line (24 PCS) 5.5 x 2.5mm Plug AC Power Adapter - Black (AC 100~240V / EU Plug / 135cm-Cable) Ethernet Shield with Wiznet W5100 Ethernet Chip / TF Slot GM700 1.5 1298A 12.6V 9800mAh Rechargeable Li-ion Battery w/ US Plug Power Adapter Hubsan H107-A26 Body Shell for H107C R/C Quadcopter - Red + Black Hubsan H107-A21 Body Shell for H107C R/C Quadcopter - Red + Silver H107C-008 R/C Helicopter Replacement Blades for JD385, 310, 310B, YD928, F180, V252, H107, H107L Replacement 3.7V 500mAh 25C Lithium Polymer Battery for Hubsan H107 4-Axis - Blue + Black 0.9 XL7105-SY DIY 2.4GHz A7105 NRF24L01 Wireless Module for Arduino (2 PCS) 433Mhz RF Transmitter Module + Receiver Module Link Kit for Arduino / ARM /MCU WL - Green Hubsan H107C-A24 3.7V 380mAh Li-po Battery for H301C R/C Quadcopter - White 20906 6mm Silicone Hose - Translucent White (5.44m-Length) Hubsan H107-A02 Replacement Blades for X4 H107 Quadcopter - Black + White (4 PCS) E5YK Water Tank Adjusting / Regulating Valve - Black (10 PCS) E5YK Stainless Steel Aquarium Five Head Water Tank Regulating Valve - Black + Silver Desktop Wire Cord Cable Clip Organizer - Yellow + Green + Red (6-Piece) E5YK Aquarium Fish Tank 1-to-6 Air Splitter - White E5YK Water Tank Adjusting / Regulating Valve - Black (10 PCS) Aquarium Fish Tank Flexible Silicone Air Line Tube - Black (18m) 20903 Silicone Tube - Translucent White (5m) E5YK Inlet Air Pipe Air Control Valve for Fish Tank / Aquarium - Yellow (20 PCS) E5YK Aquarium Suction Cup Airline Tube Holders Clips - Transparent + White (10 PCS) DX 2014 Desk Calendar with 12 Months Hubsan X4 H107C 2.4G 4CH R/C Quadcopter w/ 0.3MP Camera - Black + Red (Mode 2) Protective PU Leather Case w/ Card Holder Slots for LG Nexus 5 - Deep Pink Protective PU Leather Flip-Open Case w/ Holder for Google Nexus 7 - Red Detachable 59-Key Bluetooth V3.0 Keyboard Case for Google Nexus 7 II - Blue M-013 Door Entrance Guard ID Card - White (10 PCS) 125K RFID Card Reader Module / RDM630 Series Non-Contact RF ID Card Module for Arduino - Green + Red 3.7V 350mAh 30C Li-ion Battery for Hubsan X4 RC Quadcopter + Walkera V120D06 - Silver Hubsan H107-A05 3.7V 240mAh Li-ion Polymer Battery - Black Hubsan R/C Spare Parts H107-A06 USB Charger for H107 / H107L R/C Quadcopter - Black Y-11 1 Female to 3 Male DC Power Splitter Adapter Cable - Black (35 cm) Male + Female DC Power Converter Connector Adapters w/ Terminal Blocks For CCTV Camera (Pair) Jtron Building Universal Terminal Block / Quick Connector 5 Holes / Wire Connector - Grey (5 PCS) 3P Universal PA6 Terminals - Grey + Red (10 PCS / 250V / 20A) 4-Channel 5V Optocoupler Isolation Relay Module w/ High Level Trigger - Blue Hubsan H107-A02 Replacement Blades for X4 H107 Quadcopter - Black + White (4 PCS) HSYY01 Micro Gear Water Pump Motor w/ Hose - White + Silver ENC28J60 Ethernet LAN / Network Module for 51 AVR STM32 LPC Ethernet Shield with Wiznet W5100 Ethernet Chip / TF Slot Jtron 0.36 HD2V04 HDMI to VGA + 3.5mm Audio Jack Converter Adapter Box - Black Universal AC Charger w/ Dual USB Output for Iphone / Ipad / Ipod - White (US Plug) USB 2.0 to Micro USB Charging Cable for Samsung / HTC / BlackBerry - White (200CM) Raspberry PI Acrylic Case - Transparent 5V 2A Wall Power Adapter for Scanner / Surveillance Camera + More (US Plug) W-1 E27 Automatic Rotating 3W 300lm Colorful RGB Light 3-LED Lamp for Decoration (85~265V) E14 6W 500lm 6500K White 15-SMD 5630 LED Light Bulb - White (220V) Lexin E14 4W 350lm 34-5050 SMD White Light Corn Lamp (220~240V) USB Terminal Power Adapter Voltage Current Tester - Grey + Black GH-10W 10W 430lm 9-LED Red + Blue Light Plant Grow Light Module - Silver + White (7.5~8V) Jtron 0.36 8-Channel 5V Relay Module Shield for Arduino (Works with Official Arduino Boards) JY-MCU 5V 3V IIC UART SPI Level 4-Way Converter Module Adapter HSYY01 Water Pump Motor w/ Hose - White + Silver 20906 6mm Silicone Hose - Translucent White (5.44m-Length) Aquarium Fish Tank Flexible Silicone Air Line Tube - Black (18m) E5HT Aquarium Air Tube - Transparent Blue (10m) Aquarium Fish Tank Tubing Straight Connector T Splitter for 4mm Air Line (24 PCS) E5YK Aquarium Fish Tank 1-to-6 Air Splitter - White USB Powered Flexible Neck 10-LED White Light Lamp - Blue (27cm) 4-Port High Speed USB 2.0 Hub - Black (60cm-Cable Length) Mini USB 4 Ports Hub 4-Port USB 2.0 HUB w/ Independent Switch - Black 5V 2A Universal Power Adapter Charger - Black (AC 100~240V / EU Plug / 3.5 x 1.35mm) Raspberry PI Acrylic Case - Transparent Protective Neoprene Bag Case for DSLR Camera Lens - Black (Size XL) Protective Neoprene Bag Case for DSLR Camera Lens - Black (Size L) HSYY01 Water Pump Motor w/ Hose - White + Silver W3-9 Immersible Water Pump for Miniature Garden - Off-white SZF280 PVC Mini Water Pump Motor - Beige Miniisw SW-015 1.5W Polysilicon Solar Panel - Black Miniisw SW-008 0.8W Solar Powered Battery Panel Board - Black Protective Jellyfish Pattern Silicone Back Case for LG E960 Nexus 4 - Multicolored Replacement Sound and Music Activated Spectrum VU Meter EL Visualizer - Smile Face (4*AAA) 5.5 x 2.5mm Plug AC Power Adapter - Black (AC 100~240V / EU Plug / 135cm-Cable) 1.5 5.5 x 2.5mm Plug AC Power Adapter - Black (AC 100~240V / EU Plug / 135cm-Cable) HDMI Female to Micro HDMI Male Adapter 40-Compartment Free Combination Plastic Storage Box for Hardware Tools / Gadgets - Translucent White 24-Compartment Free Combination Plastic Storage Box for Hardware Tools / Gadgets Panel Mount 10A 250V Fuse Holder - Black (5-Pack) Optical Triple Triangular Glass Prism Spectrum - White Dupont 4-Pin Female to Female Extension Wire Cable for Arduino (40cm / 10-Piece Pack) Dupont 4-Pin Male to Female Extension Wire Cable for Arduino (40cm / 10-Piece Pack) Universal DIY Bakelite Plate PCB Board - Brown (2-Piece Pack) Universal Glass Fiber PCB Board for DIY Project - Brown Prototype Universal Printed Circuit Board Breadboard - Brown (5-Piece Pack) Nano V3.0 AVR ATmega328 P-20AU Module Board + USB Cable for Arduino Nylon PP6 DC 12V 50mA Tact Switch - Black (100-Piece Pack) 1N4007 1000V 1A Unilateral Rectifier Diodes Set - Black + Silver (50 PCS) LM7805L 5V Voltage Regulator ICs (10 PCS) 2.54mm 1x40 Pin Breakaway Straight Male Header (10-Piece Pack) GP LR44 A76 1.5V Cell Button Batteries 10-Pack 5 x 20mm Glass Tube Fuse Set - Silver (100 PCS) LCD Keypad Shield for Arduino Duemilanove & LCD 1602 (Works with Official Arduino Boards) Protective Plastic Case for 3.5 635~645nm 800~1000MCD 5mm LED - Red (100-Piece Pack) 510~520nm 800~1000MCD 5mm LED - Green (100-Piece Pack) S1306 8-in-1 Gradual ABS Lens Filters + Lens Mount + Ring Set for 77mm Lens Camera - Black Unique Black 4 Series Armed Notebook - Rambo Knife (60-Page) Convenient Rectangle Sticky Note Memo Pads (4 x 100 Pieces) Stainless Steel 1/4 C2-07 Creative Inflatable Shoe Boot Support Spreader - Milk White (Pair) Double-Sided Glass Fiber Prototyping PCB Universal Board (12-Piece Pack) Double-Sided Glass Fiber Prototyping PCB Universal Board (3 x 7 / 5-Piece Pack) Prototype Universal Printed Circuit Board Breadboard - Green + Silver 3mm & 5mm Light-emitting Diode - Green + Red + Yellow (100-Piece Pack) Breadboard Jumper Wires for Electronic DIY (65-Cable Pack) 4 Channel 5V High Level Trigger Relay Module for Arduino (Works with Official Arduino Boards) 2-Channel Relay Shield Module for Arduino (Works with Official Arduino Boards) AMS1117 5V Power Supply Module Emolux 62mm Multi-Coated UV Lens Filter - Black Sound and Music Activated Multi-Mode Flashling EL Hearts T-shirt - M (3*AAA) Silica Gel Reusable Moisture-Proof Bead Desiccant - Blue Male + Female DC Power Converter Connector Adapters w/ Terminal Blocks For CCTV Camera (Pair) Universal Heavy Duty 6F22 9V Battery DSTE NB-7L Replacement 7.4V 1200mAh Battery for Canon G10 / G11 - G12 / SX30 IS - Grey 1/4 Universal Aluminum Alloy Straight Flash Bracket for Camera - Black Universal Aluminum Alloy Tripod Bracket for Speedlight / Camera- Black Universal Handheld Jar Opener White Magic Beans with Assorted Messages (10-Pack Growing Plant) Genuine Acecamp 2429 20L Outdoor Water Resistant Dry Bag - Yellow 1000mA Car Cigarette Powered USB Adapter/Charger (DC 12V/24V) DIY 433MHz Wireless Receiving Module for Arduino (Works with Official Arduino Boards) 433MHz Wireless Transmitter Module Superregeneration for Arduino DIY 16-Key AD Keypad Module - Blue 4 x 4 Matrix Switch Module - Green ES-71 II Lens Hood for Canon Mini Prototype Printed Circuit Board Breadboard for Arduino (5 PCS) Ceramic Capacitor for DIY Electronic Circuit - Red (270-Piece Pack) Solderless Breadboard with 400 Tie-Point (White) USB to RS232 Serial Port Adapter (Transparent Green) FreArduino Soil Humidity Sensor for Arduino (Works with Official Arduino Boards) Double-Sided Glass Fiber Prototyping PCB Universal Board (3 x 7 / 5-Piece Pack) DIY HR-202 Humidity Detection Sensor Module - Blue Aluminum Alloy Straight Hot Shoe Flash Bracket for Camera - Black Flash Diffuser for Canon 580 EX / EX II / YongNuo YN560 / YN565 Speedlite (3 PCS) HT RJ45 RJ11 Cable Tester Stainless Steel 1/4 Mini USB 2.4GHz 150Mbps 802.11b/g/n WiFi Wireless Network Card Adapter - Black USB 2.0 2.4GHz 802.11b/g/n 150Mbps WiFi/WLAN Wireless Network Adapter Ultra-Mini Nano USB 2.0 802.11n 150Mbps Wifi/WLAN Wireless Network Adapter 6.3V 3300uf Aluminum Motherboard Capacitors (20-Piece Pack) DIY ZIF DIP IC Socket Set - Green (8 PCS) Solder Tip Refresher 3-Pin Triode Transistor for DIY Project - Black (20 x 10-Piece Pack) Aluminum Electrolytic Capacitor for DIY Project (120-Piece Pack) DisplayPort DP Male to HDMI Female Adapter Cable - Black (15CM) Gold Plated 1080i HDMI V1.3 M-M Connection Cable (1M-Length) 11x12 132-Panel Brain Teaser Magic IQ Ball Micro USB To HDMI MHL Adapter - Black Gold Plated HDMI Male to DVI 24+1 Female Adapter 62mm Digital Camera Lens Cover Digital Camera Lens Cover/Cap with Strap for Canon (62mm) 7.4V 1200mAh Lithium Polymer Lipo Battery Pack for Lama or 4-CH R/C Helicopters HC-SR04 Ultrasonic Sensor Distance Measuring Module 4 x AA Battery Case Holder (3-Pack) Stainless Steel Triple Razor Blade Set (4-Pack) USB 2.0 Smart ID Card Reader - Silver 30cm Breadboard Wires for Electronic DIY (40-Cable Pack) Cree XR-E Q2 Emitter with Star 3W LED Emitter on Star (Multicolored RGB)

Comments Off

Historical Cost of Computer Memory and Storage

Comments Off

I’ve finally gotten around to update the graph and data at Since it has been a while since last time, I thought I would be left with a gap in the data. However, John C. McCallum who collected the original data got my back. I’ve incorporated his newer data points, as well as automated my own collection. Hopefully, it will not go quit so long between updates in the future.

RAM prices up

Due to a fire at the Hynix Fab plants in 2012, RAM prices are significantly up, and still at 2012 prices. Joel Hruska at has an interesting analysis into its effects. In the chart below, he notes that prices doubled after the fire. The latest data I’ve collected show that it’s going in the right direction again. However, as Hruska also points out, the market for desktops is in decline, and laptops, tablets and phones will not need the same memory types.


HDD / Magnet disk prices go sideways

In 2011 flooding in Thailand caused major damage to HDD factories of Western Digital, Samsung, and Toshiba. Prices have almost recovered from that by now, however it means a set-back in the HDD trend by almost three years.

In another article by Joel Hruska, he includes the graph below from Backblaze who plotted real and estimated prices on different HDD types. Although he takes issue with Backblaze’s extrapolation, it did get the significant lag of the trend right.

Furthermore, larger drives have yet to materialize. The 6 TB HGST (owned by Western Digital) Ultrastar He6 has been out for a while. Paul Alcorn at discussed the details in a review a few months back. The trick is to put a whopping seven platters into the drive (as opposed to the normal three to five). However, to make that work, the drive has to be sealed and filled helium; thus its name. The new technology comes at a higher prices: It retails at Amazon for $476.99, or $0.0794/GB. That’s more than double the Seagate 3TB at $109.99 or $0.0367/GB.

So although the helium technology has a long way to go, it could be the next step for higher capacity drives. At 6 TB over 7 platters, each hold only 857 GB. That is a bit off from the 1 TB platters which have been available for a long time now, and we were “promised” 1.25 TB platters by the end of this year. If the later are compatible with the “7Stac” technology, it could mean 1.25 * 7 = 8.75 TB drives in the future. If pricing also improves, it could be that the magnetic hard disk trend is back onto its 40 year track.


SSD and flash prices down

Flash memory and Solid State Drives have no accidents hampering their growth and price decline. The trend is linear (i.e. on the logarithmic scale) over the last ten years. Larger drives are also gradually becoming available, with SanDisk recently announcing their enterprise 4 TB Optimus MAX SAS, and predicting 8 TB SSDs by next year. In that Computer World article, they’ve included a Gartner graph, seen below, which predicts SSD price parity with HDD by 2017. It’s important to note that they compare enterprise drives here, which live in a completely different world than the cheapest and biggest consumer drives.

For the chart I’m tracking, it is mostly the USB sticks that make it to the top, with the best price / capacity ratio. At this point, it seems that is not because the USB sticks are getting larger, but rather that the smallest ones are getting cheaper. SanDisk is now “giving away” 8 GB drives for less than $3 (although that does not give you free shipping at NewEgg).


Updated overall graph

Finally, the updated graph. The permanent link is

(Click for larger image)

Comments Off

Microsoft-Nokia’s new phone: It’s an Android

Comments Off

In a surprise move, the result of the Nokia buyout by Microsoft is a new Android based phone, the X2. (Yes, I double checked that it was not a 1st April story). BBC reports that the mid-range smart-phone will be Android based, but that the UI will look like Microsoft’s Windows Phone.

At an estimated price of 100 Euros, the specs are not overwhelming, with 1 GB RAM, 5 MP camera. However, interestingly it’s a dual SIM phone. That suggests it’s targeting the Asian market, where people are shopping around for the best SMS and calling rates, and dual SIM phones are very popular.

As expected, the phone will not feature the common Google service apps, like Gmail, Calendar, Hangouts, Maps, and Youtube, but instead replace them with Microsoft equivalents like Outlook, Skype, and Bing. However, it also means that the Google Play store will not be available either, so Microsoft and Nokia will somehow have to back-fill their own market. Or perhaps developers will have to submit their Android apps to yet another market. Many open source apps are already dual-hosted on Google Play and the free software based app market F-Droid.

Comments Off

Default PDF viewer in Debian

Comments Off

By some strange logic, the primary and default application for viewing PDFs in Debian is Gimp. If you want to edit the PDF, that might make sense, but that is not the most common use case. There is a bug and discussion about this, but unfortunately, in somebody’s stubborn opinion, “it is not a bug”, and was closed many years ago.

Luckily it is easy to fix. The default setting can be found in the file /usr/share/applications/mimeinfo.cache which contains this line:

Notice how Gimp is listed first, while the PDF viewers ePDFViewer and Evince are last in the list. You can edit that file (as root). Or if you prefer you can override the user local setting in /home/$USER/.local/share/applications/mimeinfo.cache, and insert something like


The change should take effect immediately, across all applications and browsers, unless the default is overridden there. E.g. Firefox and Chrome have their own internal PDF viewers, however the default MIME applications will be available for selection when the file is downloaded.

Comments Off

Trends: Old social networks are past their peak – What’s next?

Comments Off

The doom and gloom of Facebook has become a common story. For example based on of a redesign of the page, or the fact that 14-year-olds wouldn’t want to be seen on the same social network as their parents. It’s usually speculation, however according to the last link, it is now also admitted in Facebook’s own earnings announcement. Furthermore, the search trends on Google also confirm the shift in interest.

Before jumping into these graphs, it is worth pointing out some caveats, even though they should be obvious: First, historical trends are no guarantee of future events. Secondly, the numbers are not absolutes, but capped fractions of Google’s keyword distribution. Thirdly, most of the searches will be “navigational”, that is typing “facebook” in the URL bar will invoke a Google search, and then immediately take the user to the top result. Therefore, part of the shift in the search trends might be that more people are using native mobile apps where such “navigation search” is not required. Fourthly, these trends are for Google searches, which of course exclude users of search engines like Bing, Yandex, or almost any Chinese user. Finally, statistics lie and cannot always be trusted. You have been warned.

Never the less, there are noticeable changes in the social and communication network landscape. Facebook, Twitter and Flickr seem to have reached a peak and might plateau or decline, while new-comers like Instagram, Reddit, WhatsApp, Snapchat all see steady growth. And then there are the solid stayers who full-fill basic communication needs and services: Gmail, Hotmail, Youtube, etc. They stay, but without much change in their search trends.

Past their peak

The following graphs show the search trends for the terms Facebook, Twitter, and finally Flicker and Picasa compared. (The reason more of the graphs are not compared is that the numbers are often on very different scales. E.g. compare Facebook to Google+, and the later hardly registers as a blip on a flat line a bit over zero). All the sites below show clear decline past their peak point. That peak was some time in 2013 for Facebook and Twitter, while Flickr and Picasa had a peak around 2010 and bumpy decrease in interest ever since.

What’s noteworthy about the Facebook graphs is first the significant and sudden increase around the beginning of 2013. It is unclear what caused this, however looking at the country specific graphs it is more present in Brazil than the others. From the Orkut graph below, it drops right down since mid-2012. That was about the same time that network was all but turned off by Google. It could explain some of the increase in searches for Facebook.

Secondly, what’s interesting about the country specific Facebook graphs are the relatively flat lines for UK and US, while Brazil and India come later to the party, but show rapid increase. Again, this is probably due to the Orkut effect, since that is where that network was most popular. Beyond that, we should be careful reading too much into that chart, since numbers are not normalized, nor adjusted for population, etc. Still, all trends are clearly down for Facebook in every country.

For the other networks, it is interesting that Twitter seems to follow the same trend as Facebook, albeit at a much lower scale. (Compare the two in the same chart, and they are some two multitudes apart). Although there is not much linking Facebook and Twitter, they do perhaps belong to the same era of sorts. Gaining widespread popularity around the same time in 2009, the same people might have been users of both, and now start to lose interest in both. It will be interesting to see if those comparative trends continue.

Finally, Flickr and Picasa are shown together, both declining over the last four to five years. What’s perhaps most interesting here is that they follow each other so closely. So how do people share photos if not on these services? Look no further than the graphs and section below: Instagram and Pinterest are the new Flickr and Picasa.


What does decline look like?


So how does a social network or popular website decline? The following graphs show some large networks through their rise, peak and fall. The common theme in all of them: There is no coming back. Once a trend has faded, it is gone, and the users have moved on. So even if they are not on the list of defunct networks yet, expect no return to greatness. At least in fashion and culture, there is the concept of retro. With ICQ and MySpace, probably not so much. Having said that, the Wikipedia article on ICQ claims there are still 100 million users, but also points out that those are mostly in Russia and Eastern Europe. Google Search might not have such a strong foothold there as in the West, thus that popularity is not reflected in this graph.

The other sites share a similar story: Although MSN is still in use by many, Facebook, Whatsapp, and plenty of built-in chat applications in everything from Gmail to World of Warcraft have taken its place in instant messaging. Orkut has more or less been merged with Google+, and I’m actually not sure if you are able to log in to what once was the Orkut specific site.

Digg lingers on, with a few attempts to stay relevant, but most users have moved on to other forums. Mostly to Reddit, it seems, from the discussion there. See the Reddit chart below.

Finally, nobody would want to be seen on MySpace anymore. Once the hip place for up-and-coming artists, it is now a has-been. Even so, it still claims some 30 million users, and in 2011 was bought by Specific Media Group and Justin Timberlake. It is not clear what they wanted to do with the site, but it might have been cheaper to launch a new service under a new domain. $30 M is after all a bit expensive for the old domain, especially since fewer and fewer searches link there.


Who wins? Who stays?

Now for the winners of the Internet based game of musical chairs. Some clear “hockey stick charts” can be seen: WhatsApp, SnapChat, Instagram, and Pinterest have all seen drastic increase in user interest over the last two to three years, all with no or little sign of decline. Furthermore, Reddit see continued growth. Then there are a group of services which continue to linger on, with no spectacular increase in interest, but overall very solid user numbers. These include the common email services Gmail, Hotmail and Yahoo, as well as Youtube for video sharing.

In the first graph below, it is interesting to note the significant down-tick in WhatsApp’s graph. According to the news annotations on Google Trends, this was exactly at the point where Facebook’s purchase of the company was announced. At the same time, we can see a stark increase in interest for the competing service SnapChat. For $19 billion dollars, Facebook might have bought the most expensive domain name of all time in an attempt to stay on an upwards trend. It will be interesting to watch how these trends develop over the coming year.

Next is the photo sharing site Instagram compared to Reddit, however maybe it would have been more natural to compare it to Pinterest. Either way, Instagram is clearly seeing strong and increasing interest. However, what will happen when it loses its “hipster” early adopter appeal? Many of its initial users seem to have been of the type which live to shun the mainstream. Other photo upload services like Tumblr, and Imgur are also popular. The former is flatting out a bit, while the later is mostly tied to Reddit, and see steady growth.

As for the discussion forum and online community site Reddit, they continue to see consistent growth. They are catering to pretty much anybody who care to make a group on any particular topic, and have shown very little sign of censuring content. It could turn out to be the Usenet or Yahoo groups of this decade.

The next chart compares Google+ to Pinterest, more as a reference point than those two being related in any way. What’s interesting to see though, is the extreme marketing power which comes with any new product Google launches. At its announcement in June 2011 everybody wanted to know what it was about, however that interest clearly did not keep up. In that regard it’s compelling to compare it to Pinterest, which saw a similar high spike, but managed to keep that momentum going, although with little increased growth.

The penultimate graph shows Youtube, with slow and bumpy growth. The site can handle videos which attract billions of views, so it is clear that there are few or no competitors out there for video sharing at such an enormous scale. However, as a social network and communication tool it is perhaps less successful. Once infamous for the most banal useless and outright hostile user comments on the Internet, they now face user revolt over Google+ integration. If all Youtube provide is infrastructure for large files, which happen to be video, they might be overtaken. If on the other hand, they manage to take the next step into the living room, and replace the TV, they could see growth in years to come.

The final graph compares the three large email providers Gmail, Hotmail, and Yahoo. Although there are some shifts in interest for all of them, it is nowhere the ups and downs seen in the other charts above. These providers will stay around for a long time, since email will continue to be relevant even if young Facebook users might deny it. Email will continue to be used for communication with businesses, registration to almost everything on the Internet, as well as conventional letter communication. Furthermore, both Hotmail and Gmail are gateways into other products from Microsoft and Google. For example, all Windows and Android users are now strongly compelled to sign up for an account with their respective companies. Gmail also contains an alternative to Skype (which is missing from the chart; although their trend is also rather flat) voice and video communication in the form of Hangouts. In other words, these services are not fads, but rather form the backbone of basic Internet based communication. The reason the don’t see further growth, is probably because they are coming close to saturating their current markets.


Federated services

What does the future of social networking and communication look like. It would be foolish to try to predict who will come out on top. There are too many factors and too many unknowns. However, it seems safe to bet on a few basic trends, founded on core ways of communicating. These would fall into the following groups:

  • Asynchronous letter based communication; e.g. mail, email.
  • Live voice and video communication; e.g. phone and video conferencing.
  • Informal messaging, both instant and asynchronous; e.g. chat, SMS.
  • Networking, self-promotion; e.g. social networks.

My prediction is that all these types of communication will stay and have strong presence in decades to come. It is maybe a boring prediction, since at its core it says that everything will stay the same. However, looking at very broad lines that has been the case for centuries. We tend to get blinded by new shiny technology and fashion, and forget that rounded corner on an iPhone does not change the basic form of communication which is voice over a telephone network.

Another example is letter or asynchronous one-to-one targeted message based communication. That has existed for millennia, with modern postal systems perhaps being one of few the significant changes before email arrived. We tend to take the fact that a letter or postcard can be sent from anywhere to anywhere in the world for granted, just as we take the Internet based electronic mail infrastructure for granted. What is important to highlight with both systems is that they are federated. That is, a message can be sent between different, possibly heterogeneous, countries or email systems / servers, without the users of these systems having to worry about infrastructure implementation. For the postal system, that is thanks to the Universal Postal Union, and for email is because of common APIs, where the SMTP (Simple Mail Transfer Protocol) is at the core. It is important, because this is a property which is missing from many modern web based communication tools.

Old style telephone networks also have this property: You can call from any wired or wireless phone in the world to any other, crossing multiple networks involving many different technologies. That has been the case for more than hundred years. “[S]ince the introduction of the public telephone system in the late 19th century, [it has stayed] mostly unchanged despite the introduction of Touch-Tone dialing, electronic telephone exchanges and fiber-optic communication into the public switched telephone network (PSTN).” (Wikipedia) The notable addition in recent times is video based calling, however that does not change the form and motivation for this kind of communication much. It is still mostly used to bring people closer together, to hear eachother’s voice, or see eachother’s face. It is instant synchronous and intimate. Which of course is why it is preferred by telemarketers; it is often harder to hang up on a call than to throw away flyers received in the mail box.

Compared to mail and phone, SMS and chat are all relatively new communication forms. Perhaps that is why it is not always clear how to relate to them. For example, is SMS and chat asynchronous or synchronous? From a technical point of view, they are both asynchronous: Both parties can send messages without waiting for the other, and message passing is starting and stopping independently. However, using it that way is typically not acceptable. It would be considered as rude to flood the other party with messages, just as it would be rude to interrupt while talking, or not let the other speak. However, how quickly are you expected to reply to a chat message or SMS? Is it instant, as the IM name suggests, or is it acceptable to linger? For how long? There are no set social protocols or rules here, and different communities will make them up as they go along.

Despite those uncertainties though, two things are clear: Instant messaging in the form of chat, SMS, WhatsApp or other implementations will stay as a separate communication form for the foreseeable future. Secondly, most of these services are currently not federated: That is, you cannot send a MSN message to a WhatsApp or Yahoo Chat user. That seems ripe for change. In fact, there is already a protocol for federated instant messaging: XMPP (Extensible Messaging and Presence Protocol) (aka. Jabber). It still has some way to go before it becomes the preferred way of exchanging chat messages, and there might in fact be other protocols which supersedes it. Regardless, the isolated short-message services we’ve seen over the last twenty years will be forced to standardize. Only then can they become stable back-bone services like the email providers seen in the chart above. The alternative is fads which come and go, which is what we can see in the graphs for the services of today.

The same is bound to happen for other web based communication as well, including video communication, VoIP (voice over IP), and social networking. Currently, you cannot call a Skype user from a Google Hangouts account. For VoIP, SIP (Session Initiation Protocol) is an important protocol, but there are many more often conflicting standards involved. For video, it gets even more complicated, with a long list of video formats, but few standards, and even fewer open standards which would be a necessity for a truly open federated system. (Email would not have gotten where it is today if the SMTP, POP and IMAP RFCs had been patented and closed).

Finally, something similar might happen for social networking, although that is the furthest out, and might not happen at all if the large “social networks” turn out to be mere promotion platforms and substitutes for self-hosted web sites. The feature that would make most sense to standardize on for social networks is the contacts or friends graph. That way, you could create a graph between users of different services like Facebook and Google+. Your contacts on your phone might also appear in your chat, and your social network, and all platforms would understand the links to other users across networks. Of course, that is exactly what many users might not want, as I touched on at the very beginning of this article. You could have something like the Google+ circles concept, where groups of friends and family can be segregated into different audiences. Is this something the causal user is ready to manage? Or will he just create different account for different purposes? Regardless, there would still be benefit in a federated social graph, as it would not matter where an account lived, and one would not have to chase the latest trend, just as email users stay relatively stable today.

On the other hand, if sites like Facebook and Google+ are mere content hosts similar to blogs and web sites, the contact graph might not be so important. It becomes a publishing platform for people who cannot or will not set up their own host and website. If that is the case, what is more important for the user, is that the content can be exported from one site and imported into another. Less he becomes a tenant or even serf locked to his host. Some services have been good at offering those features. However, it will leave them vulnerable to shifting trends and users moving on. Finally, for users who just use Facebook for the games that are hosted there, no message interchange or federation would be required. It is just a content provider and host which can be swapped out at any time. When Facebook dies, will the next FarmVille simply be hosted on Amazon EC2?




The search popularity of the major web sites and services above show the repeating cycles of culture and trends. Some sites and networks become popular, at the expense of others which fade away. Meanwhile, basic communication forms like letter writing and voice continue to be used in exactly the same way they have for centuries. The underlying technology might change, and modern objects will always seem more shiny and fashionable, but the mode of communication does not change.

The outstanding question is what will happen to the new forms of communication, like instant messaging and networked self-promotion. It seems unlikely they will continue to be hosted on separate technology islands, without any interchange. Instant Messaging might see a standard and federated service providers, like email, in the form of XMPP or other standard protocols.

For social networks and self promotion, there are some functionality to standardize on, like the social graph and contact list. However, as a self-promotion and publication tool, perhaps the standard is already there in the form of the HTML based web itself. If the user information, contacts and relations could be a separate federated service, independent of the web site, Facebook or similar platforms would no longer have such a stronghold. Some attempts at this are already in place: Diaspora,, and GNU Social are interesting alternatives. Although, all have a long way to go before they reach mainstream.

Comments Off

Git branch in zsh prompt

Comments Off

When working in a git directory, I would like to see the current branch as part of the Zsh prompt. There are more advanced use cases out there, but I’ll stick with the branch name for now.

The following lines in ~/.zshrc takes care of the prompt. There are a few gotchas, though: The git command will fail if not in a git controlled directory, so we’ll have to hide that failure message. Then, for Zsh to execute the function, rather than printing its verbatim name, the prompt_subst option has to be set. Finally, it is important to use single quotes for the PROMPT line. If double quotes are used, the first output of the function is used, and never called again.

function get-git-branch {
  b="`git symbolic-ref --short HEAD 2> /dev/null`" && echo "($b)" || echo ""
setopt prompt_subst
PROMPT='%n@%2m %~ $(get-git-branch) %# '

Comments Off

Java 8: File handling becomes fun

Comments Off

With the introduction of functional-style syntax and several new Stream based methods in Java 8, file handling finally becomes fun and easy. In fact, the new helper methods and lambda syntax even gives Python a run for its money when it comes to compact code.

Here is how you could read all lines of a file, given as a Path p (since Java 7), and output to stdout.


To make it a bit more clear what is going on, here a bit more is included and broken up.

Path p = Paths.get("myfile");
Stream lines = Files.lines(p);

A similarly neat helper function exists for recursively walking over the directory tree of the file system. Again, this prints to stdout.


Comments Off

Android SDK tools on Debian Wheezy

Comments Off

After downloading the Android SDK bundle, I could not start adb and fastboot, getting somewhat bizarre error messages like:

bash: ./adb: No such file or directory

bash: ./fastboot: No such file or directory

./adb: error while loading shared libraries: cannot open shared object file: No such file or directory

All of those were due to missing dependencies for i386 libraries. Doda’s article on the topic solved the issue. They can be installed by:

dpkg --add-architecture i386
aptitude update
aptitude install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386

Comments Off

Proto boards and microcontrollers – an overview

Comments Off

MAKE magazine has a nice write-up of several of the popular micro controllers, prototyping and hobby boards out there. 36 of them in total. Of course, that covers only a fraction of all the brands, models and variations. That list runs much much longer.

Comments Off

Hubsan X4 H107C Quadcopter

Comments Off

Lately I’ve had great fun with the miniature quadcopter Hubsan X4 H107C. I’ve already lost the first I got, and the second was this one from Deal Extreme. Right now, they all seems to be sold out, but there are hundreds of other brands to choose from in all price ranges. Starting with this single axis “flying saucer” at only $15. The first quadcopters start at about $30, and most of them seem to be copies of the Hubsan. They have a Walkera with GPS hold starting at $333, all the way up to the 6 channel version which supports First Person View (FPV) glasses.

YZ-L Mini 2-CH LED Radio Control R/C Flying SaucerHubsan X4 H107C 2.4G 4CH R/C Quadcopter w/ 0.3MP CameraWalkera QR X350 6-CH R/C Quadcopter w/ GPS / DEVO F7 5.8G FPV Transmitter RTFWalkera E002 FPV First Person View Goggle Glasses Support DEVO F4/F7

For the Hubsan X4, there are a few extras to get. First of all, the propellers will break, so make sure to get plenty of replacements. Also be aware that they are directional, so there are two of each kind in a bag. A few extra batteries are nice, since a single one will only give about 8 minutes of light time with almost an hour charge time. So to avoid spending hours charging them, some extra chargers also come in handy. Finally, a micro SD card is required for the camera; 2 GB, or even only 1 GB is plenty.

And up and up it goes! Until the wind takes it away, it lands on an inaccessible rooftop and you’ll have to get another one. :-)

Hubsan H107-A02 Replacement BladesHubsan H107C-A24 3.7V 380mAh Li-po Battery for H301CHubsan R/C Spare Parts H107-A06 USB Charger for H107 / H107L

Comments Off

Key mappings in Zsh

Comments Off

Z-Shell is a powerful alternative to Bash, but some of the details can take time to get use to, and some things just have to be changed. For example, the key binding for cursor and other special keys. Using CTRL + arrow keys to skip words might give funny characters like “;5D” and “;5C” instead. As pointed out by Luke Wilde, these keys have to be set up manually. In my case, I had to include the semi-colon in the bindkey command as well.

These should go in ~/.zshrc.

bindkey ';5D' emacs-backward-word
bindkey ';5C' emacs-forward-word
export WORDCHARS=''

Only funny thing about setting it up like that, is that if the actual character sequence “;5D” is pasted into the terminal, it will be taken as if the CTRL+LEFT key was pressed. I’m not aware of a work-around for that.

The Zsh wiki lists a few other possible key bindings, including for the Home and End keys:

bindkey "${terminfo[khome]}" beginning-of-line
bindkey "${terminfo[kend]}" end-of-line

Comments Off

Multiplexed SSH sessions for quicker connection

Comments Off

If you need to open multiple SSH connections to the same host, it can get tedious to re-authenticate for every one. And even with public key authentication and no password, the extra channel eats a bit of bandwidth. The solution is multiplexed SSH sessions: Authenticate once, and the following connections to the same host goes over the same session. It’s dead easy to set up:

In your ~/.ssh/config file add the following lines. (Make sure that file has user permissions only, i.e. 600).

Host *
   ControlMaster auto
   ControlPath ~/.ssh/master-%r@%h:%p

It takes effect immediately. SSH twice to the same host to verify.

Comments Off


Comments Off

For some unknown reason, the default character set in Debian 7 (“Wheezy”) is different to Ubuntu 12.04 (“Precise Pangolin”). The former uses latin1, while the later utf8. (This could also be down to other local configuration I’m not aware of). The difference between the two is rather subtle, and might go unnoticed. One visible effect is when using letters with German umlaut or Scandinavian specific letters in ordered text. For example, the Norwegian letter Å (aring in HTML) is the last of the alphabet, but when using latin1, it is interpreted as an A (or possibly double a: aa) and ordered first. See this bug report and discussion for more details and examples.

The character set is specified in multiple places in the MySQL DBMS: On the database, table and for the client, server, connection, result set and underlying system. To view the current settings, these two commands give an overview (see here for details):

SELECT * FROM information_schema.SCHEMATA;

The output will be something like:

| def          | information_schema | utf8                       | utf8_general_ci        | NULL     |
| def          | test               | latin1                     | latin1_swedish_ci      | NULL     |
| def          | myTESTdb           | latin1                     | latin1_swedish_ci      | NULL     |
| Variable_name            | Value                      |
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |

The above is from the Ubuntu 12.04 system where there were no problems with the character set of text values in the tables. Notice that are some latin1 settings there, but that seems to be fine. The difference on the Debian 7.0 system was that these variable were set to latin1: character_set_client, character_set_connection, character_set_results. One way to change them is through the SET commands in MySQL console:

SET character_set_connection = utf8;

However, that will not persist the settings. Furthermore, it will not be enough to fix the tables. Instead, the config file /etc/mysql/my.cnf has to be changed with the following lines. (from this discussion).

collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Finally, after that is done, the MySQL server restarted, and the data with the special UTF8 characters have to be re-inserted. That is a bit of a pain, and I did not dig too far into how to resolve a problem with existing that. There is a discussion on how to alter the DB and tables here, but I suspect the data will still contain the wrong characters, so it will not be enough. Fundamentally, the byte representation in lation1 and utf8 for these letters are different, so that has the be replaced somehow, as far as I understand.

An alternative to all this is to get it right from the get-go. The MySQL documentation outlines how a new DB can be created with a specific character set. Again I’m not sure if that is enough, as the settings in the my.cnf file deal with the encoding of the client, connection, and result. There are probably several ways to solve the issue, though.

Comments Off

Removing Lens Distortion in GIMP

Comments Off

User yourgimptutor has a nice tutorial on how to remove lens barrel distortion using GIMP. The steps boil down to:

  1. Use the filter “Lens Distortion”: Filters -> Distorts -> Lens Distortion
    For a wide angled photo with the Canon EF-S 17-55 mm lens at 21.0 mm on a 50D body (1.6 crop) I found that adjusting the “Main” slider to +20 gave a good result.

  2. Use the Perspective Transform: Tools -> Transformation Tools -> Perspective
    The edges of the image can now be dragged out to the corners to fill the canvas size.

Comments Off

chroot to ARM

Comments Off

chroot allows you to “run a command or interactive shell with special root directory”, as the man page says. However, it is assumed that the second level root directory is built for the same CPU architecture. This causes a problem if you want to chroot into an ARM based image, for the Raspberry Pi, let’s say. qemu-arm-static, some “voodoo” and several tricks come to the rescue. The process is documented well at Sentry’s Tech Blog, and the original seems to be by Darrin Hodges.

After downloading and unzipping the image, it has to be mounted. There are a few ways to go about this, but I found the easiest was to use plain old mount with an offset. The typical RPi image file is a full disk image, as opposed to a single partition or ISO though. We are after the second partition, which in our case starts at sector 122880. (See this discussion for how to find the correct starting sector using fdisk).

mkdir /mnt/rpi
mount -o loop,offset=$(( 512 * 122880 )) 2014-01-07-wheezy-raspbian.img /mnt/rpi

Next we’ll copy a statically built QEMU binary for ARM to the mounted image. You might need to install QEMU on the host system first. Furthermore, we need to mount or bind the special system directories from the host to the chroot.

apt-get install qemu-user-static
cp /usr/bin/qemu-arm-static /mnt/rpi/usr/bin/

mount -o bind /dev /mnt/rpi/dev
mount -o bind /proc /mnt/rpi/proc
mount -o bind /sys /mnt/rpi/sys

Next comes the magic. This registers the ARM executable format with the QEMU static binary. Thus, the path to qemu-arm-static has to match where it is located on the host and slave systems (as far as I understand).

echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register

Finally, it’s time for the moment of truth:

chroot /mnt/rpi

uname -a
Linux hrb 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 armv7l GNU/Linux

In some cases, the error “qemu: uncaught target signal 4 (Illegal instruction) – core dumped” occurs. User kinsa notes here that the lines of the file (i.e. on the slave, /mnt/rpi/etc/ has to be commented out (with a # in front).

Congratulations, you now have an ARM based chroot. What to do with it? Maybe install a few “missing” packages before copying over to one or more SD cards, set up the users, modify passwords, etc. Or take advantage of the CPU and memory of the host system or compile from source.

apt-get install htop tree ipython ipython3 gnuplot

As a final note, when done, you want to clean up the mount points.

umount /mnt/rpi/dev
umount /mnt/rpi/proc
umount /mnt/rpi/sys
umount /mnt/rpi

Comments Off