Hours.app Beta is out!

We are in beta. I am part of a great team, and we are building Hours. Hours is a new take on Time Tracking, and we think that we are ready to get your feedback. Head over to www.thehoursapp.com and grab your beta, we’d love to hear what you think about it. P.S.: iPhone version is in the making, will be out by the end of this year. And, if you think hours is worthy, spread the word :-)

Howto: Install Jenkins on OS X and make it build Mac stuff

This guide is intended for Lion users. I just tried it on my machine, and it works. Let’s hope it works for you as well.

What’s covered:

  • How to install Jenkins as a standalone Service
  • How to configure a Job that builds a generic Mac-Application
  • Configuring Public Key SSH-Access ( Useful for git )
Prerequisites
  • Java must be installed
  • XCode ( any version that works on Lion will do )
  • You shouldn’t have any services running on port 8080

Installing Jenkins

Jenkins is available as a native package from the Jenkins homepage.  Just install it, as you would install any other package. After you’ve done that, you might want to check if http://localhost:8080/ is reachable. If it’s not, you may have to launch the .war-File by opening it. It’s located in /Applications/Jenkins/.

In case the server is running, you’ll most likely get a 404 ‘not found’ message from the winstone-server that is bundled. If you dig in your syslog, you’ll find a reviling stack trace that indicates that a file can’t be found..

java.io.FileNotFoundException: /Users/Shared/Jenkins/Home/war/META-INF/MANIFEST.MF (No such file or directory)

I don’t know why the package is broken, but it’s quite easy to fix this. I found some great advice on ColonelPanic.net.

First, we’ll create a dedicated jenkins user. At this point, there isn’t one, so just type this into your terminal

sudo dscl . create /Users/jenkins
sudo dscl . create /Users/jenkins PrimaryGroupID 1
sudo dscl . create /Users/jenkins UniqueID 300
sudo dscl . create /Users/jenkins UserShell /bin/bash
sudo dscl . create /Users/jenkins home /Users/Shared/Jenkins/Home/
sudo dscl . create /Users/jenkins NFSHomeDirectory /Users/Shared/Jenkins/Home/
sudo dscl . passwd /Users/jenkins

Now that you have created the user, it’s time to tell the LaunchAgent that came with the install package to use this user to run Jenkins. The file you have to change for this is located at /Library/LaunchDaemons/org.jenkins-ci.plist . Just open it in your favorite editor and change the value of UserName to jenkins.

	<key>UserName</key>
	<string>jenkins</string>

After doing that, the Home folder of jenkins, /Users/Shared/Jenkins/Home needs a new owner.

sudo chown -R jenkins /Users/Shared/Jenkins

After doing all that, saving the modified launch file and chown’ing the Home, unload and reload the service:

sudo launchctl unload -w /Library/LaunchDaemons/org.jenkins-ci.plist
sudo launchctl load -w /Library/LaunchDaemons/org.jenkins-ci.plist

Now you should be greeted by Jenkins if you try again localhost:8080. If not make sure that you followed the steps above correctly. If you did that but it still doesn’t work, please leave a comment.

If you need to access your git repos using a public ssh key, you can generate one now by logging in as the jenkins user and running ssh-keygen

# su jenkins
Password:
bash-3.2$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key...

You can then upload the file to wherever you need it.

 Create a Job for a XCode Project

Before we dive right in, you need to install the git-plugin. This is done by navigating to “Manage Jenkins” from the welcome screen and then selecting plugins. There are about a million, but you just need git for the moment, as I assume that your project is using git. Once you’ve installed the plugin, set up your git username and email in the “Manage Jerkins” “Configure System” menu. If you omit that step, the source retrieval will fail.

Having setup Jenkins now, it’s time to do some real work. The welcome screen should look similar to the one below, so just go and create a new free-style-software-project. This is the simplest approach possible, but it’s always nice to get results fast… The job configuration screen should show up now, and it’s time to enter some details.

First of all, we need to setup the SCM section, so Jenkins knows where to get the sources from. Just enter your repos git-URL in the appropriate field. To test the whole thing, you can use any git-hosted project you like that homes a XCode-Project.

If you want, you can run a build now to make sure that the git-setup works correctly, but it isn’t required to do so.

As you can see in the screenshot, the next step is creating the build-phase. You can just enter xcodebuild, which will then build your project and Jenkins will notice if it doesn’t work and display it, but I think it’s more interesting to both build a project and archive the App that was built. To achieve that, I created a simple two-line-command

xcodebuild
cd build/Release; zip -r $BUILD_TAG.zip *.app/

Jenkins can archive specific artefacts that were created during the build. To save the generated zip-file just enter the **/*.zip pattern in the “Archive Artefacts” field. If you haven’t built your project yet, there may be a big red warning saying that the filter doesn’t match any files, but it’s safe to ignore it.

Of course, this is the most minimal build setup you could use, but for my purposes it’s completely sufficient. The BUILD_TAG used is a unique tag that can be used for filenames. After you’ve saved the changes to the configuration, it’s time to run a build and see if it works.

There are a lot of ways to go from here, but I hope this tutorial helped you to get Jenkins up and running!

iMac+Bootcamp: Blinking Cursor, nothing else.

There was a time ( according to the history of computers ), when a flashing, blinking cursor lead to a feeling of deep satisfaction, just because the graphics controller worked. We passed that time, left it 30 years behind.

So what I was trying to do, which resulted in a blinking cursor, was something advertised as being dead simple: installing Windows on my iMac. In a short: I tried it for a week now, it doesn’t work. And even if it’s going to work one day, it’s not dead simple. So why rant about it?

Macs are cool, somewhat expensive yet wonderful computers. Since I had my first Macbook in .. 2007 I never thought about switching back. It almost always worked flawless, I never experienced a big issue be it hardware or software. Until bootcamp. Sucks. And Apple could do whatever it wanted to, I always felt the need to protect a company whose products are so outstanding ( which is still true for the most parts ).

But back to the technical aspects. What I tried. Each approach gets a paragraph.

Day 1. Using Bootcamp-Assistent to repartition my boot drive. Doesn’t work, alright, stick with a smaller partition. Works. Reboot to install windows. Black screen ( actually, two black 24″-screens with an immensely upscaled white cursor blinking in the top left corner ). Alright, power button, once again, option key pressed, selecting that Windows-CD-Icon, once again, black fu ( I’ll stick with black fu from now on ).

Day 2. Removing the partition and recreating it, using the BC-Assistant. Trying to reboot using bootcamp. Without any success. Reseting PRAM and VRAM. About a dozen times. Fun thing is that resetting the PRAM unpaired all my bluetooth devices from the EFI, so I couldn’t select my standard HD as a Boot device anymore. Trick is to plug in a regular USB-Mouse and keep on pressing it’s primary button until the CD gets ejected. But, still the black fu around.

Day 3. Calling Apple Support. After having a nice chat with the guy at the other end, we figured that removing the BC-Partition and recreating it ( see day 2 ), everything should be working fine. It wasn’t, of course. So I decided to clean things up. Saved my whole system to an external drive, deleted the internal disk, restored it, repaired all permissions and stuff. Recreated that BC-partition, shut down, PRAM, NVRAM-Reset, All cables disconnected except power and 2nd display, Black fu. Apple Support was not available due to their availability times.

Day 4. Resignation. I’m writing a blog post on how pissed I am.

Any tipps? hints? anything?

Why filenames and folders matter. not.

Just read a satirical post in a german magazine, concerning the different kinds of file-sorting on desktop machines. Unfortunately, the article is unable to figure out the core evil, that is, the ultimate need to store everything in files and folders.

Honestly, try to remember the last time you tried to find a web page using, for example, the open directory project. I tried to remember that fact really hard, but as far as I’m concerned, I’ve been fine with the google search on top of my browser for the last years ( at least the years stored in my flawless built-in brain ).

The fact emerging is that with an ever rising size of storage media and a subsequent increased information density, it’s close to impossible to manage files in a single hierarchy. And yes, Operating Systems should abandon the concept, at least for users. Of course, some kind of unique identification and retrieval path is necessary at least for applications to work, but not for users to find their files.

Are you using spotlight, Mac’s built-in search, or Google Desktop or some other desktop search? You should. You’ll never want to get back to actually looking for a file, it’s so much more handy to just find it by searching for some text it contains.

And oh yeah, this idea is nothing really new, at least not, if you’ve heard about grep. It’s a utility available on all POSIX-compliant systems that simply searches for a given string or regular expression in an arbitrary number of files.

Once again, please make computers for people, not for anyone else.

Hallo, ADAC

Hallo, Adac.

ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC ADAC.

Achso, und natürlich spezielle Grüße an das Impressum des Adac

New blog project, busy doing the rest.

I jsut want to apologize for not being able to post regularly lately, and in the near future. I’m just very busy doing reports, taking care about my new blog project and some other projects running along. I will surely keep you up-to-date on those projects, not only because they involve great technologies, but also because you should really get to know the amazing people I’m working with.

Stadt Reutlingen: Zickenkrieg in der Heimat

Nichts technisches heute, sorry. Aber nichtsdestotrotz sehr wichtig.

Leider bin ich nicht mehr live bei dem dabei, was so geschieht. Leider ist Reutlingen nicht mehr meine Heimatstadt, bzw. mein Lebensmittelpunkt. Das ist zwar in mancher hinsicht traurig, Stuttgart ist aber viel schöner. Und viel netter. Bisher.

Was Reutlingen ausmacht. Das haben mich schon viele Leute gefragt, und ich konnte immer mit einem verwegenen Nachtleben ( bis 23 Uhr im Aussenbereich ), einer tollen Kulturlandschaft ( Danke, KuRT ) und natürlich einer großen Zahl von sehr engagierten, tollen Leuten erzählen. Es scheint mir, dass Reutlingen, bzw. die Stadtverwaltung, jetzt endgültig den Realitätsbezug unter dem neuen Belag der Wilhelmstraße begraben hat und sich, ganz im Stile mittelalterlichen Gutsherren, nicht so sehr um die Anliegen der Bürger als vielmehr um die eigene Eitelkeit kümmert. Eine Übersicht der Prestigeprojekte wäre lustig, aber auch lang. Aber für den geneigten Leser:

- Stadthalle ( feststellung: Eine Stadthalle ist etwas grundsätzlich anderes als ein Kongresszentrum )

- Wilhelmstraßen-Sanierung

- Scheibengipfeltunnel

- Rathaus-gegen-Shoppingcenter eintauschen, dafür Neubau eines Rathauses

Quatsch und Mumpitz der Vergangenheit:

- Parkleitssystem

- Kreuzeiche-Stadion

Wie man unschwer erkennen kann, hat all das viel mit Prestige zu tun, zu großen Teilen aber wenig mit dem Bürgerwillen. Das mag in einer representativen Demokratie ab und an vorkommen, sollte aber gründlich überdacht werden wenn es zum Regelfall wird.

Frau Bosch feiert gerne. Viele Feste, so zum Beispiel das Urtraditionelle Fest zum Schwörtag. Kennste nicht? Das Gefühl können einige Teilen, ein wichtiger historischer Tag eben. Neben diesem alljährlichen Event der regionalen Spitzenklasse beglücken uns in diesem Jahr auch die Heimattage mit einem Brauchtumsfeuerwerk. Es ist seltsam, das Wort Brauchtaum impliziert Notwendigkeit wo keine ist. Aber wir lassen ja jedem seinen Spaß. Wirklich? Natürlich nicht.

Man stelle sich das Stadtmarketing Reutlingen vor. Höchstengagierte Schwaben, die alle Register ziehen um ein durchweg positives Image der Stadt zu kommunizieren. Leider sind bei der Ausführung Mängel vorhanden, es wurde zum Beispiel einfach vergessen, die Domain www.heimattagereutlingen.de neben www.heimattage-reutlingen.de auch zu reservieren. Undenkbar, das linke Chaoten diese, von der Stadt offensichtlich nicht reservierte Domain jetzt für ihre Schandtaten missbrauchen. Oder eben doch fassbar, das sich einfach ein paar junge Leute einen Spaß erlauben.

Jetzt kann man auf mehrere Arten reagieren: sich den Fehler eingestehen und mit den nun wirklich nicht schlimmen Folgen leben, oder in bester Kleinkind-Manier: trotzig, überzogen und uneinsichtig. Ein Dialog wurde gesucht, doch leider wurde es von den linksradikalen Turbochaoten abgelehnt, dem Streich ein Ende zu setzen. Was bleibt der Stadt dann auch anderes übrig als rechtlich gegen die Verfasser vorzugehen? Nicht viel. Der GEA schreibt in unfassbar schwammiger Art : “Weil der Name der offiziellen Reutlinger Heimattage-Internetseite geschützt ist”. Aha, was ist denn geschützt? Die Inhalte wegen mir, der Domain-Name? Kann ja sein, die Bombenleger verwenden ja allerdings den Namen ohne Bindestrich, und eine Marke Namens “Heimattage Reutlingen” ist, zumindest in Deutschland, nicht registriert. Im übrigen hat sich nur die Stadt Müllheim “ihre” Heimattage Markenrechtlich schützen lassen, vorbildlich.

Wie ich erfahren durfte, wurde den Verfassungsfeindlichen Verfassern jetzt eine Unterlassungserklärung zugestellt, mit der Androhung einer Klage sollte diese nicht unterschrieben werden. Es wird auf Verwechslungsgefahr hingewiesen. Wer diese findet, zwischen “Save se heimat” und dem anderen Unfug ( man nannte es Satire ), der möge mich darauf hinweisen, ich hatte nicht so viel Glück.

Und zu guter letzt sei der Stadtverwaltung noch ein Hinweis ans Herz gelegt, den man sonst eigentlichen nur jugendliche Intensivstraftätern gibt: Es hilft allen, wenn destruktive Energie in konstruktive Umgewandelt wird: zum Beispiel in Form einer neuen Schaukel für den Volkspark. Oder echten Alternativen für Jugendliche in Reutlingen. Vielleicht aber auch ein wenig Einsatz für bezahlbare Busfahrten. Oder einfach ein bisschen mehr Bürgernähe.

Und ein bisschen mehr Humor, bitte.

Hello World

I’m still here, ok? There is just a bunch of stuff keeping me from doing the rest of the stuff that would be keeping me busy under normal circumstances. To cite a friend of mine ( in not so perfect english, though ) : such is life.

After having annoyed with may day-to-day pains ( I haven’t, so be grateful ), let’s get a bit productive here. First of all, I plan on releasing the authentication framework I talked about recently here on github or some other hypersocial site. I’m sure that some of you might find it interesting, while others are going to hate it. Such is life, cont’d.

Rails is still filling up most of my day, but after moving to Stuttgart last week, I finally managed to think of other, maybe somewhat more interesting stuff. A good exercise was certainly to return to some unsolved facebook puzzles ( read: all except one ) and to talk with some inspiring people about … a lot of technical geek-o-rama.

I told you to be grateful for not having to skip over my boring stories, but here you go. I managed to bring up my IKEA-kitchen by myself, and I didn’t die. And, more fascinating, I even destroyed the Harddisk of my EEEEEE Pc without any physical interaction required. I wasn’t even using it. It was actually my girlfriend playing Tetris or something similar, when suddenly, the system froze. And the harddisk emitted a sound resembling a crashing airplane in small scale.

Have a nice night, I will.