A hackerspace in the building
Oct 16th, 2014 by miki

I have invested quite a lot of time and energy the last weeks, on a project of mine that has had a long time building in my consciousness.

Last September I sent out a cry for participation on, for people wanting to be part of a hackerspace in my hometown of Esbjerg, Denmark. Although Esbjerg is home to quite both technical and heavy duty industries, servicing offshore drilling and wind farms in the North Sea, there really isn’t a community were technical like-minded can meet up and have fun using their skills. My hope was to find fellow tinkers/hackers/makers/creative people for joining in on having fun with technology with me and whoever wanted to be part of the party.

During the next 3/4 year I received about 6 emails from interested parties in and around the city of Esbjerg. So in late August I acted on an idea I have long had, of the hackerspace being a part of a creative workshop that is voluntary  driven in a culture and concert venue called Tobakken. After some talks, organization of interested parties and some thoughts at both sides, we are in the process of establishing what we, in lack of a better name, currently refer to as Hackerspace/Makerspace Esbjerg.


A picture from the first meeting at the location. Mikkel is talking about important stuff, as can be seen from the neck-grab position :).


You can see some more shots of the physical space here;

Most of the organizational efforts and communication is in the Facebook group at the moment, but I’m trying to push stuff over to a dokuwiki-site, which I think is much more appropriate.

You are more than welcome to chime in, if you happen to be in Esbjerg and miss an outlet for the creative technological cravings inside. See you in the space!

Subversion on Debian ARM: commit failing with space in URL
Sep 16th, 2014 by miki

Working on a Beaglebone Black based product, running the latest Debian GNU/Linux system image (bone-debian-7.5-2014-05-14-2gb.img) from the BB HQ at I just had the following strange experience.

Using Subversion I wanted to commit a change to a file made locally on the BBB. The file resided  in a working copy of a repository on which I had done the initial work on my x86_64 laptop. The working copy was checked out and updated on the BBB without any problems, but comitting I got the following error:

debian@beaglebone:~/VCAS_FR$ svn ci rc.local -m"Append to vncserver.log."
Authentication realm: <https://svn.xx.xx> Subversion Repository
Password for 'yaya': 
Sending        rc.local
Transmitting file data .svn: Commit failed (details follow):
svn: File not found: transaction '414-1', path '/trunk/BBB%20deployment/rc.local'

This failed repeatedly, and checking out a fresh new working copy exhibited the same result.

For the fun of it, because file name issues are long gone in my everyday computing life, I tried to remove the space from the directory path. And voila, unexpectedly it succeeded!

debian@beaglebone:~/VCAS_FR$ svn ci rc.local -m"Append to vncserver.log."
Authentication realm: <https://svn.xx.xx> Subversion Repository
Password for 'yaya': 
Sending        rc.local
Transmitting file data .
Committed revision 416.

Without spaces, things actually did work. Apparently there's an issue with ARM built subversion and repositories containing spaces.

URL before
debian@beaglebone:~/VCAS_FR$ svn info | grep URL
URL: https://svn.xx.xx/trunk/BBB%20deployment

URL after
debian@beaglebone:~/VCAS_FR$ svn info | grep URL
URL: https://svn.xx.xx/trunk/BBB_deployment

Investigating a bit further narrowed down that the Debian distribution uses an old (old, old) subversion 1.6.17 release from 2009:

debian@beaglebone:~/VCAS_FR$ svn --version
svn, version 1.6.17 (r1128011)
   compiled Mar 15 2014, 21:37:31

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see
This product includes software developed by CollabNet (http://www.Collab.Net/).

Probaly, this has been fixed since, a quick investigation in svn issue tracker revealed no open issues regarding this. I'll look further into this later, and of course report it appropriately if this is an unknown issue.

But as you see, you can still experience basic issues on the latest and greatest stuff out there. Be wary!
Howto: disable HDMI blanking in Ångström on BeagleBone Black (BBB)
Jul 9th, 2014 by miki

A very annoying feature of the Ångström image that is shipped with the BeagleBone Black, is that a display connected to the HDMI output of the board will by default be blanked when powering up, and is first woken when any pointer activity occur (touch/mouse).

This seems to originate from the fbdev that is used for displaying graphics, and it took me some time to figure out how to cirumvent it. The normal X commands for controlling blanking of “xset -dpms” or “xset s off” did nothing, and neither did the terminal options of “setterm powersave off” or “setterm powerdown 0″. I went all the way back to old ANSI escape sequences trying “echo -e ‘\033[9;X]‘” without success.

Luckily I fell by at’s framebuffer tips, which listed the sys-fs node named /sys/class/graphics/fb0/blank that controls blanking of the low level framebuffer, thus executing (as root)

echo 0 > /sys/class/graphics/fb0/blank

disables blanking and wakes up the BBB HDMI output.

To do this at every boot (really login) you can use the Gnome Startup Applications Preferences (gnome-session-properties) to execute this at Gnome autologin, or add it to whatever startup script you see fit.

Beware that you might need to delay the execution when using the gnome-session-properties, I had to put in  a sleep, but that probably depends on what other stuff is starting up from it.



Itches to Scratch
Mar 30th, 2014 by miki

“Every good work of software starts by scratching a developer’s personal itch.”

The above sentence quotes the first lesson from Eric S. Raymond‘s essay/book “The Cathedral and the Bazaar”, which has become a kind of bible within the FOSS ecosystem. In his text Eric investigates motivations and social organisation of free and open source software projects. Itches are known initiators of many both large projects and minor changes to FOSS software. Itches, and the scratching of those by developers in the FOSS community, highlights a FOSS software user’s right to access, modify and redistribute the source codes behind FOSS software. With access to the underlying source code of FOSS software, a developer is able to scratch an itch, and is usually very motivated by this, because it often is a very personal itch.

I’ve long been trying to keep a list of itches I want to scratch in free software projects/products. Realizing that most of these were lost in transit in the chaotic neuron mess of my brain, my intention now is to, also,  keep track of them textually using this site.

This effort will be an ongoing, and probably ever expanding, mix of my private personal itches and itches related to and spun-off from my software development work done as a professional embedded developer, but still personal itches.

You can head over to the static page at and take a look at my past and present itches.

Text globalisation != unattended search’n'replace
Mar 24th, 2014 by miki

Scouring the net looking for data and specifications of Google’s Nexus 7 tablet (wanting to try out the Ubuntu Touch Developer Preview) , I got myself into the Nexus 5 smartphone specifications too. Here I noticed a peculiar grammatical difference  in how the specs is presented, which also exists in the specs for other products (at least the Nexus 7 also).

The issue is a result of internationalization (i18n) and localization (l10n) of the specification texts as presented to users in different regions of the globe. I’m a native Dane, so my search ended correctly (helped by my browser language setting and Google geo-ip) up on the Danish Google page at

In accordance to Danish grammatical rules, the localization of the text had led to the use of a comma (“,”) instead of punctuation mark (“.”) as decimal point in the specification of the phone processor’s clock frequency, presenting the English text

  • Snapdragon™ 800, 2.26GHz processor

in Danish as:

  • Snapdragon™ 800, 2,26GHz processor

This changes the meaning of the sentence in Danish to a listing of three features, namely “Snapdragon™ 800″, “2″ and “26GHz processor” which is both incorrect, incomprehensible and ambiguous.

From my grammatical point of view, a better solution in both English and Danish would be to parenthesize the clock frequency, which is in reality a sub-specification to the actual processor model:

  • Snapdragon™ 800 (2,26GHz processor)

This text doesn’t hit my abomination trigger, and also better models the information’s true inheritance as being not side-ordered, but a sub specification to the the processor model.

How and if this kind of subtle difference between locales and languages should be handled in internationalization systems I can’t really comprehend. It’s a complex task even without this, but this example clearly emphasizes the need for proofreading by an actual native speaker of all languages, before completeness and non-ambiguity  can be guaranteed.

(An even more peculiar fact, is that the textual similar Android revision reference “Android™ 4.4, KitKat®” is not localized, and thus in the Danish localized text is identical to the English.)

Google Play; no interaction with policy breaking app provider
Aug 8th, 2012 by miki

When dealing with policy enforcement for products that you distribute from business partners and whose sales your organization directly profits from, you’d think that you’d want to engage in some kind of communication with your peers before making drastic moves like shutting down distribution of these products. Especially when your peer is a national lottery organization partly owned by a European state, who is strictly professional about their business and which probably has a non-significant turnover facilitated by the product.

Well, if your are Google and runs the Google Play software distribution system for the Android platform, you apparently couldn’t care less. At least that is what a move today by Google implies, when banning an Android gaming app by Danske Spil, the national Danish lottery, who has a governement enforced monopoly on lottery in Denmark. This was done without any interaction with Danske Spil which of course was taken by surprise when realizing this, as reported (GTrans) by Danish tech magazine Version2.

Admittedly, as it stands now from an objective point of view, the app clearly breaks the content policy of Google Play which states that “We don’t allow content or services that facilitate online gambling”. So the real question, apart from the peculiar  behaviour of Google towards this app provider for Google Play, is for Danske Spil; “How on earth did you think you could distribute an app through Google Play which so blatantly is in direct violation of the content policy?”.

Maybe the endorsement by the Danish legislation has risen to their heads, making them think their monoploy in Denmark made them so special that they could ignore Google’s standard policies? The current response from Danske Spil is that the app had been previously “approved” by Google, whatever that means because to my knowledge there is no verification procedure as such for content on Google Play (that’s a point for further investigation when time permits) .

At the moment not only the app itself, but also the provider page for Danske Spil A/S is inaccessible at Google Play, even though marketing from Danske Spil still tries to lure new users to the lotteries provided by the app, both from the web, TV and electronic billboards.

If your business model relies on outside partners (and which doesn’t?), this might be a good occasion to take the time for a second thought about what dependencies it has. And especially who is in the power to pull the carpet below it without interacting with you.

If I had a business with parts, components or services not under my in complete control, I’d prefer a partner which had a fellow human representing him, with which I could meet and look into his eyes. That way a social bond is created, which hopefully increases the probability that I will know if anything is about to happen that affects my business.

Principal Vista refund in DK
Jan 17th, 2011 by miki

Nice story in the media (GTrans) (+2 (GTrans), 3, (GTrans)) in Denmark right now, is of a consumer who filed a complaint to The Danish Consumer Agency regarding reimbursement of his OEM Windows license, and won in a principal judgment (warning Google Translate exaggerates the price by some decades, the correct refund is DKK 850 ~ EUR 114 ~ USD 151 ).

He wanted to use his new computer for Linux only, but the store (a supermarket) and the computer manufacturer would only accept a refund for the complete purchase, regardless of the Windows Vista license offer to get a refund for the bundled software.

The consumer agency ruled in favor of the consumer, citing his right for reimbursement as pr. the license agreement, and the Danish consumer law that interprets in favor of the consumer when doubts arise.

This is very good news for the rights of Danish consumers, after we were let down by Poul-Henning Kamp’s recent loss in court (GTrans) about a similar complaint.

Go get those Vista refunds!

But remember for Windows 7, the license reads “you must return the entire system on which the software is installed for a refund or credit”, effectively making any product distributed with Windows 7 a madatory subject to the Microsoft tax.

UPDATE 2011/01/18 20:40:

A followup article at ComputerWorld Denmark (GTrans) states that HP Denmark doesn’t think the ruling will have any “practical effect” on their business. They believe very few consumers are interested in alternative operating systems,  and haven’t seen any demand for it in the market. How a demand can be established without a product,  HP doesn’t have any insights into, as they have never had alternative offerings.

Even though we all know what the OEM license says, an OEM director from Microsoft Denmark cleverly enough states that; “we can not and should not interfere with the wording of return policies, including whether the software can be returned with the PC only“. In the last blow to any logic, the HP response is to; “await a statement from Microsoft, and then implement a solution“.

Street View Googling Denmark again
Aug 19th, 2010 by miki

Just saw the Google Street View car driving by at my daily whereabouts in Esbjerg, Denmark. Did get a little exhilerated and spilled some coffee in excitement and attempt to wave at the cameras (Hi mom!!) . Here’s a shot of the car taken by itself when passing my home at it’s last visit in 2009.

Apparently Google Streetview has started collecting data again here i Denmark, as they did in Norway, Sweden, Ireland and South Africa in July. Now with the Wi-Fi privacy issue resolved.

The following netfrenzy brought me to the official schedule at which shows some mid to large sized cities in Denmark beeing up for an update, including Esbjerg. Strangely I haven’t noticed any lack of imagery in my local area. I know that most of Denmark was beeing photographed during July and August 2009, so something must be missing, or of inferior quality since they are coming back.

I also found a fun Street View Partner site; Legoland in California has allowed Street View to take a tour through the park. Fun for me, because the Lego Group HQ and original Legoland Billund is close to Esbjerg, and I have been going there regularly wiht the kids. Going to be fun to take them for a virtual walk in the park in California ;). The Billund park doesn’t seem to have been mapped internally, though.

Also a hilarious joke on Google Streetview from an interesting group of people; The Free Art and Technology (F.A.T.) Lab. Will be digging these nutty people out for sure.

Raw HTTP session with telnet
Jul 21st, 2010 by miki

Once in a while it is useful to dismiss abstractions and layers that makes daily routines easier and take the raw approach. Like when debugging a software problem that doesn’t make sense, it is nice to see the underlying basic stuff is behaving nicely, to better be able to locate where the unexpected occurs.

In the IP world of the internet, the swiss army knife for debugging interprocess communications in a totally protocol agnostic way is called ‘telnet’. Telnet opens up a communication channel between your local computer and a daemon/server on a specific port on a specific IP address. Then it gets out of the way for you to talk directly to the daemon in clear text.

Knowledge of how to interact using a specific protocol can be very useful to check server availability and functionality. All common protocols in use on the internet (like DNS, HTTP, SMTP, POP3, IMAP, XMPP etc.) can be debugged like this, because all of them transfers data in clear text (or at least initiates other transfer types from a clear text session).

Below is a basic HTTP session to my web server using telnet command line on a Linux box. Full specifications for the HTTP protocol can be found in IETF RFC2616. I keep forgetting this, and end up digging around for it when needed, therefore this blog post.

Red text is local text input by me. Blue text is local text by telnet application. Green text is server response.

miki@khandro:~$ telnet 80
Connected to
Escape character is ‘^]’.
GET /index.php/2010/06 HTTP/1.1

HTTP/1.1 200 OK
Date: Wed, 21 Jul 2010 09:19:13 GMT
Server: Apache
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” ““>

<… remainder of HTML document dropped …>

We are asking the server at port 80 (default http port) for the document at path /index.php/2010/06 (“GET /index.php/2010/06″). Notice the two CRLF characters after the Host header field, this indicates to the server that the request header is done, and that it should begin parsing header and send its response. Also notice that even though you tell the telnet program on the commandline that you want to access, you have to tell it again to the server in th HTTP Host field. Thats because telnet is only concerned about the IP address of the server, it resolves to the IP through DNS and forgets about it. From the servers point of view, it needs to know which of its virtual hosts you want to talk to, cause one server application on one port on one ip can potentially host thousands of separate websites (virtual hosts).

Huawei E1752 on Ubuntu 10.04
Jun 26th, 2010 by miki

Today I managed to get a Huawei E1752 3G modem (USB id 12d1:1446/140c, usually called E1552 by lsusb) running on Ubuntu 10.04 without all the hassle described elsewhere (see this, this or this or this …).

This particular modem came from the danish cable ISP YouSee, in an offering known as Mobilt Bredbånd (mobile broadband), targeting their existing cable internet customers. Pricing starts at lowest offering of 1 Mbit/384 kbit transmission speed with 1GiB/month data limit at DKK 99/month (~USD 16.5 ~EUR 13.3).

As many recent USB modems, this one is a mode switching type with multiple personalities (Option ZeroCD(TM)). At plugin it defaults to an emulated CD mass storage drive (USB ID 12d1:1446), with an onboard Windows driver and dialer (Mobile Partner). When detected by a driver knowing it’s schizophrenic nature, it can be manipulated, utilizing psychotherapeutic tricks, to switch it’s personality to the modem it actually is (USB ID 12d1:140c). Hence, on non-Windows systems some magic needs to be established to make the modem actually behave like a modem.

One incarnation (se discussion about other stuff here) of this magic is called usb_modeswitch. That is also the solution chosen by the Ubuntu distribution team, and it is present in the repositories and configured for the Huawei E1752 in Ubuntu 10.04 ‘Lucid Lynx’, so we just need to know that we need it. You do now…

Activating usb_modeswitch is a matter of installing the usb-modeswitch package. Find it in Synaptic or issue the following in a terminal:

sudo apt-get install usb-modeswitch

Now all you have to do is insert the modem and check (we like to be certain, right?) with lsusb that you have the 12d1:140c modem device instead of the 12d1:1446 mass storage device.

The Gnome Network Manager should now pick up on the new modem device, and offer you the possibility of adding a new mobile broadband connection. In my case, it defaulted to an Oister connection, but removing that and using the wizard to create a TDC connection (YouSee is a part of/close associate of TDC) did the trick, after reinserting the modem once more.

Now I wonder why my own E160G modem works without usb_modeswitch installed…

»  Substance:WordPress   »  Style:Ahren Ahimsa
© 2014 Mikini Services