The Architecture Analogy For Programming Is Wrong

Software Development has taken a lot of inspiration from architecture. Seems to build stable buildings, you have to plan as much as possible beforehand. Once things are put in concrete, it is too late or very expensive to fix mistakes and bugs. In analogy most IT companies try to do a lot of planning before sitting down to code.

I believe they might have drawn the wrong analogy, though: the final piece of software is not like the building. The proper analogy for the software is the final plan the architect emits. Building the building is more like then running the completed software on the computer, it happens when the work of the architect is already done. To be sure, while building buildings or running software, you’ll still notice the one or other flaw that you have to fix “on the fly”. But that doesn’t contradict the general notion.

Why does it matter? Because this misguided paradigm is stifling software development and turning it into an expensive and arduous chore. It is very difficult and therefore expensive to plan everything in software development beforehand.

Unfortunately I don’t know much about how architects really go about drawing their plans. There might be some interesting lessons there. To be sure there has to be some structure (a building needs windows, doors, stairs, toilets, …), but I suspect overall it is much more free form and creative than misguided software development. For now I just felt like throwing that thought snippet out there… Please comment.

Posted in Uncategorized | 3 Comments

Setting up a git repository that is accessible via HTTP WebDAV

I finally managed to set up a git repository on my debian server that can be accessed via http WebDAV. Since there were a few stumbling blocks I could not find any information on, I thought I should blog a quick note. This won’t be interesting to many visitors of my blog, but perhaps it can save some people a bit of time if they run into the same problems as I did.

First I have to say that I don’t know very much about the ins and outs of git yet (and the same goes for WebDAV). I merely tried to follow some tutorials for setting up a central git repository. I am not even sure if access via http is a very good idea. But I am sharing the server and before git we used subversion via WebDAV, so it seemed like the most consistent way to go the same route for git.

For the most part I followed the instructions found in this “git server over http tutorial” on kernel.org

This almost worked, but left out issues with https and a strange command named “git update-server info” that needs to be run on the server after each commit. Luckily it will be run automatically eventually, but the first time it has to be run by hand (or so it seems).

Since the tutorial at kernel.org covers most steps, I’ll describe the problems I had first and then try to give a very brief summary of all steps in at the end of the article.

git update-server-info, file ownerships and update hooks

One issue I ran into was that after trying to push to the server, git push would end with

Updating remote server info
PUT error: curl result=22, HTTP code=403

And after that I could still not pull the changes from the server into another clone.

I could not find any info on this on the net. It turned out that there were some files in the git repository that were not owned by www-data (the apache2 user). I suspect it happened when I executed

git update-server-info

on the server, which I was supposed to do once in the beginning (according to a website I unfortunately can’t find anymore now). So making www-data the owner of all files by executing

chown -R www-data /path/to/git-repo

fixed that.

As for the initial call of git update-server-info, I am not sure. Maybe it would not have been necessary had the “hook” worked from the beginning. But in case there are problems, it is probably worth executing.

git update-server-info

in the root directory of the git repository once. After that, check again that all file permissions are correct (www-data should be the owner of all files).

It seems in subsequent git push calls git triggers the update-server-info hook automatically.

Frankly it makes me feel a bit uneasy – it seems WebDAV allows writing to the git repository and executing files – could it overwrite the executable and then execute it? A bit more than what I would like to allow guest users. But WebDAV and git where implemented by smart people, so for now I’ll assume that it is going to be OK (and I don’t have guests on there yet anyway).

HTTPS, self-signed root certificates and curl+ssl on OS X with MacPorts

The other problem I had was that I wanted to allow HTTPS access only. Our apache server uses a self signed root certificate that somehow had to be made known to git. Otherwise git operations would fail because it could not validate the certificate. The tutorial on kernel.org writes that you can disable the validation, but that is a temporary solution at best.

Apparently git uses libcurl, so making the certificate known to curl fixed the problem. However, by default curl on OS X does not even have ssl support built in if it is installed via MacPorts. I found a blog article on enabling https support which explains that the remedy is to install curl with options as follows:

sudo port install curl +ssl

First the old version has to be uninstalled, though (or MacPorts has to be convinced in some other way to do the upgrade – Update: via Twitter @MacPorts told me to use “sudo port -fn upgrade curl +ssl”). This turned out to be very complicated for someone who does not know MacPorts very well. Simple port uninstall commands would fail because of dependencies, and even

sudo port uninstall --follow-dependents curl

Would fail because sometimes there would still be multiple versions of packages around and MacPorts would then not know which ones to uninstall (yeah right, because I want to keep the outdated package??).

After a bit of Yahoogling I found that I could purge all the outdated packages with the command

sudo port -f uninstall inactive

The -f is for force, however, so it uninstalls even if there might be some dependencies. I have not yet checked if any other packages have stopped working. Also, for the future I know to run “port -u upgrade” instead of “port upgrade”, as the -u flag is supposed to tell MacPorts to uninstall the outdated versions right away.

With that cleared up, I could uninstall and reinstall curl and curl +ssl. One more thing to do about the certificates problem: make it known to curl. Our certificate was already in PEM format, so all there was to it was to add the text from the PEM certificate to /usr/share/curl/curl-ca-bundle.crt and git stopped complaining about the certificates. curl will name the location of it’s ca-bundle, in case it is located elsewhere on your system. I really added the certificate manually by opening curl-ca-bundle.crt in a text editor and copy+pasting the root certificate text (UPDATE: I just realized that MacPorts replaced that file when updating curl+ssl – looking for workaround). There are tutorials for importing the certificates from Firefox, but I don’t think they necessarily work for OS X. However, Firefox might provide an easy way to convert certificates to PEM, as it lets you choose the format for exporting certificates (in “Preferences”->”Advanced”->”View Certificates”).

Update: on Ubuntu 9.04 I also had problems to let curl know about the certificate. What worked where the instructions found at help.ubuntu.com for “Importing a Certificate into the System-Wide Certificate Authority Database”.

However, somehow git on Ubuntu does not ask me for a password and just fails with error code 22 (unauthorized). As a workaround for the time being I tried to hardcode my password into the remote URL (username:password@url), but that led to an error message (same as this one). Putting my login information into ~/.netrc as follows worked:

machine domain.name
login foo
password bar

I am not very happy with that, though, as it puts my password into a file in clear text.

quick steps summary (on Debian Linux)

Create directory for repository, either below apache2 DocumentRoot (usually /var/www) or some other lcoation you deem suitable

mkdir myproject.git

Init git repository with –bare option (apparently to make sure it never gets into unclean state – it should not be used the same way a local git repo is being used). Make accessible to www-data (apache user).

cd myproject.git
git --bare init
git update-server-info
chown -R www-data.www-data .

(note: install git with apt-get install git-core, the package “git” seems to be something else). Enable WebDAV (it seems I did not need the dav_fs as suggested in the kernel.org tutorial)

a2enmod dav

Configure apache for allowing WebDAV to the git repository. I also require SSL – however I won’t go into this. The infrastructure already existed on my server and I don’t want to search for tutorials now. There should be plenty of tutorials on setting up SSL for apache2. The same goes for setting up BasicAuth. Also I did not add my changes to /etc/apache2/httpd.conf but to the respective VirtualHost config file for my domain in /etc/apache2/sites-available (as our apache2 serves multiple domains).

My config looked something like this:

Alias /git/myproject /path/to/git/repo/on/server

<Location /git/myproject>
SSLRequireSSL
DAV on
AuthType Basic
AuthName "yourDomainForBasicAuth"
AuthUserFile /etc/apache2/path/to/password-file
Require user username-in-passwordfile
</Location>

Restart apache2 with /etc/init.d/apache2 restart and things should be ready to go. As described at kernel.org, configure the remote location for your local git repo as follows

git config remote.upload.url https://<username>@<servername>/git/myproject/

I suppose “upload” is actually an arbitrary name you can choose. The trailing “/” is important. From then on you can just

git push upload master

to the repository. (If the project is not yet in git, execute “git init” in the top level directory of the project first).

On the other hand, to check out the project from the server into a new working directory (let’s call it “my-project-dir”), I did

git clone https://<username>@<servername>/git/myproject/ my-project-dir

Not sure actually if that is the best way – git has so many variations. But when I had done it like that, the way to push changes to the server would be

git push origin master

I suppose because I pulled the project from the server, the server repo is now known as “origin”, no need to configure anything else. There is a certain logic to it apparently.

I have not yet set up passwords via .netrc as described in the kernel.org tutorial, so that step is optional.

Posted in Uncategorized | 3 Comments

Creating “Twitter This” Links


“Twitter This” Link Generator
Link Preview:  


Enter the text you want to be tweeted in the “Text To Tweet” field. In “Link Text” you can enter a text that should appear as the name of the link. If you then press “Create Links”, the “Twitter This URL” field should contain the “Tweet This” link. For your convenience the “HTML Link Code” field contains a full HTML link element you can Copy+Paste into your web site (make sure you copy all of it, I recommend right clicking into the field and choosing “select all”). “Link Preview” shows you how the link should look on your web site.

Note that the form only works on my blog, on blog aggregators the JavaScript will probably be missing.

Nicole Simon has brought to my attention that creating “Twitter This” links is not as trivial as it might seem. I hope to remedy the situation by providing a simple tool for creating such links.

What is a “Twitter This” link? Simply, a link that brings the user to the Twitter page with a prepared status text field. All the user has to do to tweet your prepared text is to click the “Update” button. For example, if you click this link, you should be transferred to Twitter with the prepared status message

A handy form for generating “Twitter This” links, created by @Fractality : http://bit.ly/twitterthislinks

(Following this link does NOT tweet the text, you still have to press “Update”. Why don’t you go ahead and just tweet it – thanks! :-) ). It even works if you are not currently logged in to Twitter. After you login, you should also see the prepared status update form. Alas, it does not (yet) work if the user has no Twitter account yet and decides to sign up on the spot. After the signup process, the text is lost (but if the user clicks on your link again, it will then work).

In my opinion, this is the preferred way to encourage users to tweet about you. Many Twitter applications ask for the user’s login credentials instead and then proceed to post in the user’s name. Admittedly, sometimes that might seem more effective because users might not even realize it is happening at first – so they will tweet about you even if they never intended to do so. But I consider it a slightly dirty trick, which might alienate users in the long run. Also, personally I have never given my login credentials to a Twitter app (OK, maybe once or twice, but I regret that now), and many users might feel the same.

How does one create such links? It is rather simple: add a parameter named “status” to the Twitter URL, like this: http://twitter.com?status=your_message, where your_message is your message. The minor issue is that your_message has to be URL encoded. That means certain characters in the message have to be escaped, for example “<” becomes “%3C”. Most programming languages have utility methods to do this. For example you could simple paste the following snippet into your browser’s URL field and press return:

javascript: encodeURIComponent('a text that needs encoding');

(except you have to be careful about ‘ and “, so that approach is not 100% failsafe).

To make it easier for you, I have created a simple form for creating such URLs, which now resides at the top of this post.

Finally, if you liked this post and/or find the link generator useful, please twitter this. Also follow me on Twitter @Fractality.

Posted in Uncategorized | 3 Comments

@OfficeWorkout – Twitter bot to keep you fit

I have created a new Twitter bot: @OfficeWorkout tweets a random workout suggestions every 30 minutes. It should remind you to move your body occasionally if you are a screen worker.

I am looking for more suggestions for workouts that mesh well with office life. Best way to tell me would be to leave them in the comments for this post. Thanks!

Posted in Uncategorized | 3 Comments

A big problem with OpenID: phishing

Hopefully I won’t embarrass myself too much with this post, because I haven’t really researched the ins and outs of OpenID. From using it a couple of times I got the impression that the concept has a big flaw, though.

Usually what happens when I try to sign up to a site with OpenID is that the site forwards me to my OpenID provider. Then I have to login to that OpenID provider’s site and confirm to the OpenID provider that I want to login to the original site.

And that is the problem right there: some random site of the internet forwards me to my OpenID provider, where I proceed to enter my login credentials. That is a classic phishing scenario.

How can I be sure that the site I am being forwarded to is really the site of my OpenID provider? Phishers are experts at mimicking other sites. They could forward me to another site that looks almost the same as the site of my OpenID provider. Often this is done by slightly misspelling the name of the site, in some cases the name even looks the same because there are different letters in other languages that look the same, so it is impossible to spot the difference.

There are some mechanisms that try to prevent site spooking, such as HTTPS, but I think the reality is that none of them really are good enough. The only way to make sure you are on the site you want to be is to type in it’s url by hand, without making any spelling mistakes (even then it is probably not 100% sure, because the domain name resolution system could also be tampered with – but that is another topic altogether, and I don’t know much about it). For the same reason one shouldn’t click on links in emails, for example if you get a link by (supposedly) ebay to check your auction, that email could be from a fake ebay linking to a spooked ebay that will phish your ebay login.

But I don’t want to educate about phishing, there is enough information about it on the internet already. I just wanted to raise my concerns about this problem with OpenID.

Many might feel that the problem is not really severe, or maybe it is just a problem of the particular implementations of OpenID that I have used. My own feeling is that as web developers we have a responsibility to not encourage dangerous behaviour on the side of our users, therefore OpenID in it’s current form has lost a lot of appeal to me.

One possible way to deal with the problem would be to always stay logged in to one’s OpenID provider and never log in when being forwarded to it. Hopefully if you are already logged in, you don’t need to login when being forwarded, you only have to confirm the authentication request of the original site.

Please leave comments and correct me if I am wrong. Thanks!

Posted in Uncategorized | 4 Comments

Impressions from the iPhone Tech Talk in Berlin (kind of)

The bad news is, Apple needlessly slapped a “confidential” sign across the tech talk today, so nobody is allowed to write anything about it or post any pictures.

I think I can nevertheless write some thoughts I took away, without giving away anything about the content of the sessions. So what I write might have been inspired by the lectures, or by something completely unrelated, like surfing a web site or talking to people.

Some things to know first: I left early because I got bored, so I missed roughly the last two lectures. Also, I don’t have an iPhone myself yet, and my friends would perhaps even describe me as an Apple hater. I really don’t like Apple’s restrictive policies, and I don’t even like OS X, but that is a story for another post. The iPhone is nice enough to make me overlook the general flaws of Apple. For one thing, I gave up on mobile games development with Java because it became too tedious to support all the available devices. The iPhone is one device (OK, strictly speaking three: old iPhone, iPhone 3G and iPod touch) that has sold several million times, making it possible to develop useful applications targeted at one device only. And Apple really got a lot of things right, I don’t think any other phone comes close in usability.

If I don’t have an iPhone yet, it is because I don’t like the conditions of the T-Mobile Germany contracts. Specifically the UMTS bandwidth limitation seems silly, since the iPhone makes it possible to surf normal web sites. So I would expect the T-Mobile bandwidth to be consumed rather quickly.

Without a doubt, a lot of fun can be had with the iPhone, and a lot of fun applications already exist.

What follows is mostly me venting my frustration about having to use Objective-C. I had to say it somewhere… It is not the only thing I took away from the tech talk, but it was a tech talk after all, so you can guess about the main topics. I had a nice idea for a possible iPhone app while dozing in the lecture, and I also met some nice people, so going there was not all in vain. Oh, and I got a T-Shirt, too.

Objective-C, the strange beast

My main gripe, however, is the programming language. Most people I talked to say that it is not so bad, but my programmer instincts make me shy away from Objective C for several reasons. Granted, most of them probably sound like nitpicking and my objections might make me seem petty. But I have become a programmer out of laziness, and so I absolutely can’t stand it if a programming language is making me do stuff that isn’t necessary.

Header files (Shudder!!!)

Objective-C seems to be a strange beast: on the one hand it apparently is “fully dynamic” (Apple speech), meaning among other things that methods are not statically linked at compile time. On the other hand it borrows from C and C++, with ugly pointers cluttering the code, but much, much worse, forcing you to write header files for your classes.

I am not a language designer, but for the life of me, I can not get these two aspects combined in my head (dynamic linking and header files) – either one feature seems to make the other one pointless. Dynamic means you can modify classes at runtime, so what is the point of the header files?

I have programmed in languages without header files for 10 years now, so I can confidently say that there is no excuse for header files. I think they only exists because of the laziness of the developer of the compiler. But then again, those guys had several years to improve their compiler. What is up with that?

For the non-programmers: a header file basically means that I have to program every object and method in my program twice. Once to tell the compiler that it exists, and once to actually implement it.

It is certainly not difficult, but just as certainly it is not fun. For someone with my condition it becomes very difficult to do because I generally have a very hard time doing things that I see no point in doing.

No garbage collection

Another gripe is that Objective-C for the iPhone does not have garbage collection, so the developer has to take care of erasing objects by himself. Curiously, many people I talked to seemed to agree that this makes sense for a mobile device, because resources are so limited. Well, it seems the recommended maximum memory consumption for an iPhone app is 25MB. I have developed games for mobile phones in Java that had only 800KB available as runtime memory, with garbage collection. No problem whatsoever. A slightly more plausible explanation: garbage collection usually runs in a background thread, and having that thread constantly running might consume more energy. But honestly, I don’t believe it, that is just a weak excuse.

Also, you don’t even manage memory directly in Objective-C, but you have to manually take care of the reference counters. This makes even less sense to me, because I don’t think that is what makes garbage collection difficult. Rather, I would expect counting the references to be compiled into the executable. There might even be garbage collection going on in Objective-C, something still has to free the memory when the reference count has reached zero, after all. Again, this just reeks of laziness on behalf of the developers of the compiler.

Maybe inserting the reference counting into the executable would inflate the memory footprint marginally, but honestly, these days the size of the code is never the problem. Most memory is consumed by the data, for instance images that are being loaded by the application.

Hungarian Notation (Shudder!!!)

One more unbearable thing I have seen in code snippets from Apple: it seems it is customary in Objective-C to use the useless kind of hungarian notation. That means it is customary to call a widget UIWidget instead of Widget, because it belongs to the UI. Joel On Software has the ultimate essay on hungarian notation and how it should be done, mandatory reading for every programmer in my opinion.

Again, this might sound like a non-issue, but it makes me feel almost like the heroine of William Gibson’s “Pattern Recognition” upon seeing the Michelin Man: it is almost as if I am psychologically allergic to this ugliness and extremely bad taste. It sounds innocent if you see just one line, but imagine thousands of lines of code littered with hungarian notation. It is unreadable, unless you train your brain to just not notice it. But why should I have to do this to my brain?

More ugliness

I have mentioned the pointers, something I also haven’t seen in years. Going back to using pointers makes me feel like coding in the stoneage, and they also look ugly. In the same category as the header files fall the interfaces (forgot their real name, but they work exactly like the interfaces in Java). I see no need for them in a dynamic language, so please don’t make me use them. At least possibly one really can get away with not using them, I don’t know for sure.

Hope in the form of alternative programming languages?

Which brings me back to my original gripes with Apple. Is there hope of relief in the form of alternative programming languages coming to the iPhone eventually? Apple certainly hasn’t leaked any plans, and worse, they officially outlaw interpreters of programming languages. The reason is clear: with an interpreter of another programming language (for example a Java virtual machine), people could circumvent the Apple AppStore and get applications from other sources.

This alone does not prevent other languages, though, at least I don’t think it does. I think it would still be legal to use an interpreter just for one’s own application, without exposing it to other applications. Or one could use another language that compiles to Objective-C. One such language seems to be Objective-J. Still, I think the rule against interpreted languages at least slowed development efforts for alternative programming languages for the iPhone.

There are rumors that there will be an adapted (=restricted) version of Flash eventually, but it is not yet clear if it will be possible to write iPhone applications with it, or if it will just enable web sites.

I have found a Lua bridge to Objective-C, but it doesn’t sound as if the iPhone is supported so far.

Personally I still have some hopes for Javascript. There already is a Javascript interpreter in the iPhone, coming with Safari, that can also be instantiated from within an iPhone application. I don’t know yet how much one can interface with the usual iPhone features from Javascript, and if it is possible to run Javascript without actually displaying the WebView (Safari/WebKit). Most people I talk to about this are of the opinion that one should write iPhone Apps in Objective-C to get to use all the fancy features, but I am not fully convinced yet. I hope at least for some apps on can get away with Javascript (obviously not if you are writing a 3d game), so it might be sufficient to get one’s feet wet in iPhone development. Even just to be able to write some parts of the application in JavaScript would be a relief.

Meanwhile, I keep hopes for finding alternative languages for iPhone development. Please let me know if you find any. I probably won’t use Objective-J, though, because it seems too proprietary for my taste. If I learn a new programming language, I want it to be as universally useful as possible.

Ultimately it is the end product that matters, of course. I have programmed in the Linden Scripting Language for Second Life before, which is the crappiest language I have ever seen. Nevertheless it was fun, because the things you could achieve with it were so much fun. Probably it will be the same with iPhone development. Once I really get started and get to see results on the phone, Objective-C won’t feel so painful anymore. Still, I wish there were other options. Options makes me remember: I have also heard people say that XCode is not all that great either, and apparently it is not so easy to use alternatives. Too bad.

Posted in Uncategorized | 2 Comments

Community Camp 2008 in Berlin

Thanks to the Deutsche Bahn, who cancelled my trains to Munich that I wanted to take this weekend, I got to attend the community camp 2008 in Berlin instead. Basically, the community camp was like a Barcamp, but with a special focus on (online) communities. (Of course I also got to attend it thanks to the organizers who made it happen in the first place – a big thanks in their direction, it was great!).

It has been over for almost five hours now, but somehow I feel like I can’t think clearly at the moment. Since I can’t do any other work, I’ll try to gather some impressions from my notes and jot them down for the blog. Andreas has also written about the last session we attended, mobile communities.

I’ll try to be briefer than with my Barcamp Leipzig recollections. The main effect of barcamps on me is to fill me with all sorts of ideas, that might not even be directly related to the sessions I attended.

A/B testing for websites

The first session I attended was about the site relaunch of friendscout24 and how the used A/B testing to increase their conversion rate of new users by 10%. It was interesting to see an example of applied A/B testing. They used a tool called “Optimus” (apparently not exactly cheap) to automatically test variations of images, texts and structure of their start page. Optimus automatically finds the best combination. For example, allegedly the image on the start page did not make much of a different (variations like blond woman, dark haired woman, couples, romance, etc.) in Germany, but a huge difference in Italy.

It got me thinking about ways to integrate A/B testing into existing web frameworks like Ruby On Rails. It is a bit of a pity to have to resort to an external tool, if you know in advance that you’ll need it anyway. Maybe a lot of time and effort could be saved by integrating the possibility of A/B-Testing from the beginning.

Tchibo Ideas

The next session I attended was a presentation by the Tchibo Ideas page, an attempt at crowdsourcing ideas for new products that Tchibo could produce and sell. This interests me greatly, because there is hardly a product that I am fully satisfied with. I constantly wonder about processes that would enable “common people” to affect the products they can buy. I find it very frustrating to own a faulty product and not be able to do anything about it (sadly, the odds that the producer will listen to my complaints are very slim).

Personally, I have great hopes for Rapid Prototyping in the future, which means that hopefully people can produce the things they want in the form of Open Source Hardware. Open Source Hardware means that everybody can change the things they annoy him. It already works for Software – personally I am a Linux user because in many ways it supersedes other operating systems. But for non-programmers, it is still too difficult to change anything about Linux, so it is more tailored towards geeks (oversimplified – actually Linux is already very good for non-geeks, too). So it is very interesting how to make it easier for everybody to improve the products they use by themselves.

But I disgress – to my disappointment (but also relief, because it means I can still become a pioneer in that area), Tchibo doesn’t offer any special tools for ideas shaping. They offer the basic features you would expect: people can propose “problems” and “solutions”, that can be rated by the community. Similiar things were already seen at Cambrian House among others (famous examples include Dell’s ideastorm or Ubuntu brainstorm).

Usually I am very wary concerning creativity competitions where you might end up giving away your idea for a couple of hundred € (I think the most you can win at Tchibo is 10000€), because I fear the other party might make a whole lot more money from my idea. However, Tchibo seemed surprisingly fair – I am not sure if the option still exists if you submit an idea the normal way, but you can also opt to submit your idea to Tchibo privately first, in which case they evaluate it and secure all kinds of rights for you. They might end up producing your idea and giving you a share, which is the way it should be.

Also, it might be worth considering that even if your idea is potentially worth a lot of money, if you were never going to realise the idea, a couple of hundred bucks might still be better than nothing.

Also Tchibo wants to include the designers in their marketing campaign, that is, their picture might be on the final products and so on. Of course I can’t vouch for them (check out their terms for yourself), but it really sounded as if they were genuinely trying to be fair. I signed up for their service, even though reception in bloggerland was mostly bad – I think a lot of prejudice against Tchibo, but who knows.

A bit disappointing: most “problems” and “inventions” on Tchibo Ideas so far are really unattractive, for example when I checked yesterday somebody proposed a device for cutting spaghetti. For me, such a device is an abomination. There is already so much useless crap in our world, that I think we are doing a better deed by reducing the clutter in our households than by adding to it with luxury junk. On the other hand, maybe I should really get some of those clips for washing socks, because I truly hate sorting socks. (I plan to build a Lego Robot for doing that one of these days, but who knows when I’ll find the time – the clips are an easier solution).

I had to leave early on Saturday, so I missed out on a couple of sessions and the party. Although that reminds me, one big inspiration from the community camp and also the recent Barcamp Berlin: BEAN BAGS! They had bean bags (provided by CrownCrow), and it was a good reminder about how comfortable they are. I must get one eventually (Andreas recommends checking out the bean bags from Muji).

Support for communities, example “wer-weiss-was.de”

Impressive track record, apparently wer-weiss-was.de have been operating for 12 years now. To put that into perspective, according to Wikipedia the Mosaik browser by Netscape was released on October 13, 1994, marking the beginnings of the usable internet.

Anyway, they told some stories about their experiences with maintaining and supporting a community. I took away the recommendation of a tool called “OTRS” as an open source ticketing system, and got the idea to use Amazon’s Mechanical Turk for some moderation task (for example checking the safety of uploaded images). A lot of discussion was about the volunteering moderators. A recommendation for reading was A Group Is It’s Own Worst Enemy, but I haven’t read it myself yet. Another thing that might be worth considering is Slashdot’s fully automated moderating system, that assigns moderator powers and meta-moderator powers semi-randomly to it’s users. It might be too complicated for non-geeks, though.

Weltverbesserer-Communities (safe-the-world communities)

Next up was a session about communities that want to help making the world a better place. Again I have a special interest in that, not only because I would like to help make the world a better place, but also because I have proposed such a project at the StartupWeekend Hamburg last year: Debug The World. I would still be interested in doing that one of these days…

Unfortunately the session left me a bit unsatisfied. I jotted down a lot of links to existing “save the world” communities, but learned little about their inner workings. Ideology was a topic, but again little was learned on how to keep the ideologies on a site in check.

I felt reminded of a recent sociological experiment that showed how it was completely random what piece of music would become a hit, if users get to see other users preferences (Update: found article describing it, among other things, search for Salganik). The same could happen with a newly launched “save the world” site: the ideology of the first users might repel other users, so you are stuck with the ideology of the first users.

Ultimately I guess if you launch such a site, you have your own ideals, and will try to steer your community into that direction. I would not want fascists to use my tools to plan for their own idea of a better world, for example.

I am currently too lazy to copy all the links that came up in the session, so I can only hope sombody will eventually update the Community Camp Wiki. The speaker was working for Utopia.de, and I think two founders of Weltretter.org were in the audience sharing some interesting experiences. I wish them luck with their efforts…

Managing friends in social networks

PaulinePauline hosted a session about managing one’s friends in social communities. From the subject, I was hoping for something else: how to find new friends in social networks. Sometimes there are interesting web projects that I can not use for lack of participating friends. I have written about Twitter, another example would be Google Reader. I am curious about the sharing of blog articles among friends that Google Reader provides, but I can not benefit from it because I don’t know anybody else who uses it.

Pauline was talking about another problem, though: how to maintain your friends lists across social networks, and do’s and don’ts of the friend search in such networks. A major gripe is seeing immediately who you are already friends with in search results, but also being able to check out somebody’s profile from within the search results without having to leave the results list.

A nice touch is to use special information, for example “people that have many friends in common with you” or “people who have attended the same events as you”.

Discussion also touched possible solutions to the multi-account problem. Some networks already offer to import your friends from other networks. It seems quite feasible to attempt to copy someone’s friends from Twitter, for example, as many people show their real name in their Twitter profile. Another nice touch is to just assume a user is using the same username everywhere.

On the other hand, admitting to knowing too much about a user might creep them out. For example, it is possible to discover a users rough location by analyzing their IP address, but showing a user “people online near you”, many might be shocked that their location is known.

Another nice touch: Facebook for example tells you to connect a new user with some friends, if you invited them to the network. That way, the new users have an easier start.

I also had the idea for a service that registers your username on all new social networks. A problem could be that people could use the service to squat on usernames (like domain name squatting).

Mobile Communities

The last session I attended was the second part of a session that started the day before (which I had missed) about mobile internet and mobile communities.

Some tidbits: automatically logging one’s status might lead to a couple of problems. For one thing, if you suddenly stop logging (for example your location), it might arouse suspicion (jealous spouse). But even though, for example I would be a bit confused if I saw a friend was visiting my city and didn’t even call me. Or somebody is online at ICQ and doesn’t chat with you. Another interesting aspect: people like to start conversations from trivial things (like bad weather). If you already automatically log all trivial things automatically, you might take away some possible conversation starters. For example, you might not call a friend to say “hi, I am in Berlin” if your phone has already automatically logged the fact.

Qype was mentioned as a solution for discovering cafes nearby while on the road, but I am not sure if it can also filter for individual taste, which would be more community like.

I am interested in seeing product ratings on the go (for example by photographing a barcode of the product with my phone), and Kooaba was mentioned as an image recognition technology that might even make barcodes unnecessary. I was also shown BdSave$, which is apparently a product ratings app for the iPhone.

Talking about “augmented reality” was also interesting, Google Earth already recognises if you hold your iPhone vertically and switches to a horizontal viel of the location around you. So in the mountains, it might really be possible to see names above the summits of the mountains around you. And presumably, soon this technology combined with Google Street View will allow for advertising in the augmented real world.

That’s it for now…

Posted in Uncategorized | 4 Comments

Throwaway idea with sinister aspects: SOS pics

This idea sprang from my paranoia: sometimes I imagine walking down a lonely alley and being attacked by thugs. I wonder if I saw them from the distance and they looked suspicious, would I take some pictures of them? Would photographing them make them think twice about attacking me? On the other extreme, they might get angry and try to destroy the camera, not without hurting me beforehand.

It is probably not a good idea on relying on the ability to take a picture in an emergency situation like that. Nevertheless, since I just ordered a new mobile phone with GPS capabilities, I wonder about using it for a kind of emergency service. The idea is simple: in an emergency, take a picture and send it to a known address. A service at that address will notify emergency services. Since the picture has GPS information embedded, emergency services can find you easily. From the photo, they might get a good impression for the requirements of the situation.

Another possibility would be for existing photo sharing services like flickr to watch out for certain tags. That way the user would not have to remember an extra address for the emergency photos.

Thinking about it a bit more, some enhancements come to mind. Emergency operators could cooperate with phone network providers to call you back and determine your location even if you don’t have a GPS receiver (this could also work for calls and SMS – not sure if it is being done already). With modern mobile phones, it might be possible to make a life video connection to the scene of emergency and have somebody give you instructions through the phone (for example instruct you how to try to revive somebody). It might be useful to have a software and service that already integrates those features – in theory emergency services might be able to call you on your video phone just like that, but without a standardized way, it is probably too complicated in the actual emergency situation.

Sinister Aspects

While I am not sure how useful such a service could be in reality, some possible sinister aspects also come to mind:

  • What if the pictures were open to the public? Some weirdos might be hanging out on the site watching for pictures of bad accidents. Presumably the site would have to be accessible for emergency services only.
  • On the other hand, such a site would be a good source of pictures for newspapers and blogs. Maybe a healthy money could be made, which could be donated to a foundation to support victims that don’t have good health insurance.
  • The worst: what if the service took off and people would start to photograph everything that seems somewhat suspicious. In no time, we would have a very bad police state situation, worse than fascism, were any activity that is ever so slightly out of line gets reported immediately. Not something I would want to be responsible for.

Since it relies on cooperation with emergency service, this idea would probably not make a good startup. But it might be worthwhile to pitch it to the authorities. Working on a contract that goes back to an idea of my own would still be better than working on something that has nothing to do with my interests whatsoever. Also, contracting with the government is probably a very good deal – after all, they usually don’t care about money, as it is only the taxpayers money they are spending, not their own.

Because of the complications, this is another throwaway idea I probably won’t tackle. But I would be interested in your opinions. If you think it might have some merit, I might change my mind about it.

Posted in Uncategorized | Leave a comment

Throwaway idea: SMS Jukebox

Recently talked about this idea with a friend. I hope he doesn’t mind me sharing it.

The idea is simple: offer a service where people can queue songs into a playlist of an internet radio or audio stream by sending an SMS to some number. This could be used as a Jukebox in bars and restaurants.

The thought is not new, I remember pondering related ideas years ago, when Bluetooth was coming up. However, by now the conditions make it easier than ever to create such a service. I think making it based on a website would be best, because clients could easily put up a computer display somewhere to display the jukebox options. It is easy to sign up for SMS services, so that customers could pay small amounts of money to play a song. SMS is much more reliable and easier to use than bluetooth.

A fun side effect could be to create a playlist of “music you might like”, like last.fm, that would automatically adapt to the taste of the venues customers.

A problem could be that random people could send SMS and make the jukebox play nasty music, even if they are not at the venue. Probably there would have to be a feature where the owner of the bar creates a selection of appropriate music that people could choose from.

Another question would be if a website would be enough (customers would have to use the terminal to see what music is available), or if a mobile website would be called for that customers could browse on their phones.

The biggest problem is getting rights to the audio files, and paying appropriate taxes for playing music in public places. I know nothing about this. Maybe for a simple version music from Seeqpod or Skreemr could be used, or an online radio like Last.fm. It would be cool if there already was a service where people can create their own internet radio streams, that could be controlled from the service. Probably there is – if so, I estimate the SMS Jukebox could be programmed within weekends time

It is too bad that there is no wholesale for online music (that I know of anyway), so that people could create interesting services around music. As it stands, probably a lot of money has to be paid to lawyers to make deals with the music industry. Apple and Amazon could do it, but for smaller businesses, it is hard (I think). Or they just scrape by in the grey areas of unclear legitimacy, like the aforementioned seeqpod and skreemr. Not something I would recommend, although I applaud their chutzpah.

By internet search I found only one existing SMS Jukebox project, which seems to be provided by the mobile phones operator Orange in France. This is also a reason that I think my friend will not mind me sharing the idea.

Another caveat of the idea is that I have no idea how to market it to bar and cafe owners. Anyway, that is why I file it under “throwaway ideas”, because it is unlikely that I’ll tackle it myself for the time being. Older throwaway ideas of mine can be found at Cambrian House.

On the other hand, maybe I should just go around and ask in bars in my city if they would be interested. I am still looking for a nice project for the summer.

Posted in Uncategorized | 2 Comments

Barcamp Leipzig (part 2)

continuing from Barcamp Leipzig (part 1)

Storytelling for Companies

I have difficulties to recount what I learned from Till’s presentation, although it gave a lot of food for thought. The subject is a bit hard to grasp for non-marketeers, though, and towards the end the main thread got somewhat drowned in too many off-topic comments from the audience. So we actually only got to see the first few slides of the presentation.

The basic idea (as I understood it) is to present your company in a way that appeals to audiences (especially journalists). Several classic motives of storytelling come to mind as a template. A popular example is “David against Goliath”. If you are a startup, chances are good that the story would apply to you. So rather than proclaiming “we have the best product”, you could tell the story of how you were dissatisfied with the status quo and decided to try to improve the situation against all odds. If you ever walked across an IT business fair like the Systems in Munich or the CeBIT, you might know what this is about. There are so many companies who sound exactly alike – “we solve all your problems, and we have the best products” – but it is never clear what they actually do. A very frustrating sight.

It really is hard to recount, because I think it will only become clear once you try it. I haven’t tried it, but I can imagine what it could be like. As Till and commentators said, often the story takes on a life on it’s own. People start to muse about possible continuations for the story, and you yourself start to fit yourself into the story.

A lot of the off-topic comments were from the “Alternate Reality Gaming” crowd, in my opinion they missed the point a bit, because that was not the kind of storytelling Till had in mind. I could be wrong, though. Eventually, they decided to hold their own session for Alternate Reality Games, which I also attended.

This marked the end of the sessions for Saturday. In the evening there was also a party for barcamp attendees, but since Andreas and I first went home to see my girl-friend, we arrived there only late, and we also didn’t stay long. I felt I had already exhausted my capacity for socializing for the day, so that there was not much point to being at the party.

Sunday unfortunately I had to leave quite early to catch my train, but I got to see two more sessions.

Alternate Reality Games

Alternate Reality Games are games in which a team of puppet masters sets up fake clues and circumstances in the real world, to allow players to play in an alternate reality. For example, apparently recently some people received parcels with mysterious contents, without ever having signed up for a game or ordered anything. Those inclined could start deciphering the clues and presumably stumble across the generated story. An early example was Majestic a game that would communicate with the players by phone, among other things.

I am not sure how big the marketing impact of these games is, as I never stumbled across them before, but usually communities form around solving the game. At the moment The Lost Ring appears to be a bigger ARG, sponsored by McDonalds (other links are listed on the barcamp leipzig page). It also has a german branch – apparently the story is that around the world several people woke up without memories, and the goal of the players is to help them on their way. One of those people is located in Germany. As an example for actions the presenter mentioned to meet for sports with that person (ie go running), or try to talk to him to cheer him up and so on. I find it hard to imagine – how can the person go running with hundreds of players? But of course it is interesting in a way. A younger me would probably have gotten excited about it, but at the moment I felt that “normal” reality is interesting enough and I don’t really need to get involved.

Apparently there are also grassroots movements of people trying to organize non-commercial ARGs, but often they underestimate the effort that goes into them, and they fail. Thing to remember.

AntMe

Tom from AntMe seems to be a genuinely nice guy, and to be honest, I envy him a little. I have always been interested in Artificial Life, but industry jobs in that area were rare. With AntMe, Tom seems to have found a way to make money with Artificial Life, Game Programming and getting girls interested in Computer Science. Of course he had to sell his soul to Microsoft to do that, but it seems a small price to pay.

But slowly from the beginning: AntMe is a programming game, in which you program ants to harvest sugar and fruits as fast as possible, all the time evading the hungry, ant-eating bugs. You can write programs to control the ants and upload them, to be rated in the Highscores list. There is also a multiplayer modus where you compete directly with other ant colonies.

That is just great, fantastic, especially as apparently Non-Programmers actually seem to get it and enjoy it. The ants are programmed in C#, which explains the Microsoft endorsement (basically, I guess they pay the bills and salaries): they use it to win people over to C#, possibly even make C# the first programming language they ever learn. It sounded as if AntMe also visits job fairs, girls-days and the like to present the ants and get people interested in programming. A few days ago apparently there was something like a “girls-in-science day”, so Tom got to present the ants in front of a large audience of teenage girls, who actually liked it. I can’t really get over this – it is even more amazing than earning a living with Artificial Life programming ;-)

The game itself is very nicely done, with cute 3d graphics. I was sceptic at first because the ants seem to know a few tricks that real ants don’t, but once you see them running diligently across the screen, you can’t help but like them. Tom also had lots of stories about the ways the AntMe community managed to outwit the programmers of the simulation. For example they created a kind GPS system which allows ants to go to absolute coordinates, something they were never meant to be able to do. I was also interested in the “Ticket Ants”, which seem to be among the most successful AntMe competitors: if a sugar heap is found, they calculate exactly how many ants are needed to carry it away, and create tickets for the task. Idle ants then start accepting the tickets and getting to work – you can’t get much more efficient than that. I am interested because I wonder if “logistics” can really perform better than nature – it seems for the virtual ants the answer is yes, but of course real ants face other constraints (they don’t have a centralized server, for example).

Sadly, my aversion against C# is too great, so that for the time being I probably won’t join in the fun. But who knows. I understand the reasons for it being C#, and for some people it definitely is a suitable language (like if you know you will always stay on the Windows Operating System). Actually, as a Java developer I used to be interested in C#, but now I think it is not different enough from Java to warrant the effort of learning it for me, and I want to move to dynamic languages anyway.

Posted in Uncategorized | Leave a comment