30. Juli 2010

GitHub, I like…

Toying around with GreaseMonkey I wrote a little userscript that integrates the Facebook Like button into GitHub repository pages (click here to install it). Nothing special, but maybe you like it too :)

Next up: Stop messing around with GreaseMonkey and learn how to write Safari Extensions.

21. Juli 2010

Loading GreaseMonkey userscripts from a server

Codeshelver relies heavily on the GreaseMonkey/GreaseKit userscript to customize the GitHub dashboard and repository pages. As I have got some more ideas for extending these functionalities (i.e. adding a list of recently shelved repositories to the dashboard) I was searching for a way to load the userscript from my server so that the users do not have to update the userscript manually everytime I add new features.

It turns out to be fairly simple, because you just have to split your userscript into two parts: The first one is the userscript that the user adds to his browser and which just loads the second part, namely a javascript file that gets integrated into the webpage and which contains the real functionality.

myapp.user.js

This is the userscript that you offer to download/add to the browser: It just integrates the real userscript from the server, so that the users do not have to update their userscripts and it also disables the userscript functionality in case your server is not available. The latter can be seen as a bug or a feature (depends on your use case), but for codeshelver.com this is a feature, because if the server is down you are not able to shelve repositories anyway ;)

(function() {
  //
  var script = document.createElement('script');
  script.src = 'http://myapp.com/userscript.js';
  script.type = 'text/javascript';
  document.getElementsByTagName('head')[0].appendChild(script);
})();

userscript.js

Here goes the real functionality :)

var Userscript = {
  init: function() {
    alert("Hello :)");
  }
};
Userscript.init();

As I said this is pretty straight forward, so go ahead and enhance the web!

18. Juli 2010

Codeshelver: Tagging GitHub repositories

Codeshelver lets you clean up your GitHub watchlist by storing repositories you would like to remember on your shelf.Last week I polished my latest spare time project so that I could release it into the wild: Codeshelver lets you clean up your GitHub watchlist by tagging repositories you would like to remember. If you are a GitHub fanboy like me you probably know the problem: Almost daily an interesting project appears in your timeline and you want to remember it, because you might need something like that in the future. You hit the watch button and from now on you are notified about every single commit, issue and wiki change of that project- This is great for code you are using on a daily basis but doesn’t make sense for repositories you would just like to remember, because it practically spams your dashboard timeline with things you are not really interested in.

I had the idea for this project on my mind for some time, but didn’t get around to realizing it because I lacked the motivation to build it with the common stack of technologies. A few weeks ago I started to play with NodeJS and tried to come up with something that was beyond the Hello World examples so I stumbled upon ExpressJS, which could be described as the Sinatra of NodeJS. And so I had my use case for trying out some new technologies to which I also added GreaseMonkey and CouchDB to make it more buzzwordy.

All in all it was fairly easy to develop the app as I just had to knit some good libraries together like express, node-couchdb and nodejs-autorestart which I’m currently using to make the deployment a little easier. Talking about deployment: I had some problems figuring out how to do it the best way, everyone seems to be using Ubuntu’s Upstart and Monit for deploying NodeJS apps. I’d prefer a more generic solution, but I haven’t found a really satisfying way yet, so I’m just killing and restarting the processes.

There are some features in the pipeline that I’d like to add once some more people are using the service and I gather more data, which would offer the possibility to evaluate things like trending and interesting repositories. Now that ExpressJS 1.0 is around the corner I’ll migrate the app and will most likely use CoffeeScript for that, because it looks very promising and easy to integrate – it will also give me one more buzzword up my sleeve ;)

Please go ahead and try Codeshelver, let me know what you think and leave comments and feedback here!


14. Juli 2010

Installing a current CouchDB (and Erlang) from source on Ubuntu 8.04 LTS

Two weeks ago I had quite a hard time getting CouchDB up and running on my VPS, but with some help from Jonathan and Lars it finally worked. My main problem was that Erlang wasn’t configured with SSL support and that the CouchDB version I was using (0.11.0) did not play nice with the latest Erland (R14A), so that I had to get CouchDB from the SVN repository. Now that CouchDB 1.0 is here, I thought it might be a good opportunity to summarize the steps I had to take to install the latest Erlang and CouchDB 1.0 on my Ubuntu Hardy system…

diesen Eintrag lesen »

10. Juni 2010

Was macht eigentlich… ?

Half a year ago I promised to let you know about my experiences becoming a freelancer. Not having written more than a few project announcements since then is actually a good thing, because it means I’m too busy to blog ;) Nevertheless: Here is an update of what I have been doing the last months and about what I plan to do for the rest of the year :)

diesen Eintrag lesen »

7. März 2010

“Digitaler Schimpfweltmeister”: DISSER für’s iPhone

Als Stephan Griesenbrock und Daniel Knobloch mir Ende letzten Jahres die Idee für ihre DISSER App für’s iPhone (und iPod Touch) vorstellten war mir schon klar, dass die App ein sehr großes Potential hat: Ein schlüßiges Konzept um eine witzige und bislang so nicht umgesetzte Idee, eine gut zu erreichende Zielgruppe und angebrachte Sharing-Funktionen für soziale Netzwerke, so dass auch der Grundstein für eine virale Verbreitung gelegt ist. Aber damit, dass die App direkt so einschlagen würde, hat von uns dreien selbst bei dem guten Feedback das wir von Freunden bekommen haben keiner gerechnet.

Wir schreiben heute Tag 4 nach Livegang im App Store und der Disser hat sich bis ganz nach oben an Position 1 der meistverkauften Apps in Deutschland gepöbelt. Der helle Wahnsinn, vor allem weil es so schnell ging – was aber wiederum der sehr Marketingarbeit der zwei Jungs aus Köln zu verdanken ist: Rund um den Disser wurde vor dem Livegang ein umfassendes Gesamtpaket inklusive Website, Projektblog, Facebook Fan-Page, Marketing-Video und Pressematerial geschnürt, so dass die App nicht nur auf dem iPhone stattfindet. Schnell trudelten die ersten sehr guten Rezensionen und Video-Reviews ein: So schreibt beispielsweise iPhone-Junkie Carsten Scheibe im Stern.de Blog: “Der Disser ist eine überaus professionell umgesetzte Fun-App, die auf jedes iPhone und auf jeden iPod touch gehört.”

Auch das Feedback der Nutzer im App Store und auf der Website sind super: Viele wollen den Wortschatz des Dissers erweitert sehen und schlagen selbst neue Wörter vor, so dass sich ein sehr kuriose und amüsante Liste von Vorschlägen ansammelt, die wir möglichst schnell mit einem neuen Update herausgeben werden. Wir sind gespannt auf die nächsten Tage, freuen uns über weitere Reviews und Vorschläge und bedanken uns bei allen Nutzern für’s Herunterladen der App – sowas macht echt Spaß! :)

15. Februar 2010

Using MongoMapper with Rails 3

There is a really nice introduction at the MongoDB site on How to get started with MongoDB and Rails 3. I used this as a starting point but had to do a few more things before I was fully satisfied and got things running with MongoMapper. At the time of writing this the official repository is not Rails 3 compatible (because it does not implement the ActiveModel interface, yet), so I had to go with the rails3 branch of merbjedi’s repository. Use the following line to add the dependency to your Gemfile:

gem "mongo_mapper", :git => 'http://github.com/merbjedi/mongomapper.git', :branch => 'rails3'

And while you are at it, add this line to include some handy generators for Rails 3, including one for MongoMapper models:

gem "rails3-generators"

To use the generator set the orm config in your config/application.rb to :mongomapper

config.generators do |g|
      g.orm :mongomapperend

… and you are good to go!

btw: If you are like me and you prefer to have some kind of GUI for quick database lookups, check out MongoHub. It is in a very early stage of development, but at least you get to see your databases and documents.

12. Februar 2010

ZENDOME für das iPhone

Es ist soweit und ZENDOME – ein Kundenprojekt an dem ich in letzter Zeit gearbeitet habe – ist nun kostenlos im App Store erhältlich. Die Applikation wurde im Auftrag der ZENDOME GmbH entwickelt und ermöglicht die Planung von individuellen Event-Landschaften, die beispielsweise auf Messen oder für Ausstellungen verwendet werden. Der Benutzer hat die Möglichkeit, die verschiedenen geodätischen Dome zur ZENDOME.domescapes zu kombinieren und damit seine Veranstaltung vorzudenken. Ist eine Planung erstellt lässt sich schnell und unkompliziert ein Angebot anfordern.

ZENDOME iPhone-Applikation

Besonderer Wert wurde auf eine intuitive Benutzung der Anwendung gelegt. Um dies zu erreichen wurde auf die aus dem allgemeinen iPhone-Kontext bekannte Gesten und Aktionen (bspw. Pinch/Zoom, Drag and Drop, Scrolling, etc. ) zurückgegriffen und einfache Interaktionsmuster benutzt. Es gibt bereits Erweiterungspläne für kommende Versionen: So ist insbesondere eine iPad-Variante angedacht, da die größere Bildschirmfläche natürlich mehr Platz für eine komfortable und detailreiche Planung bietet. Noch etwas zum technischen Hintergrund: Das Projekt wurde mit Xcode und CocoaTouch-Standardtechnologien wie UIKit, CoreGraphics und CoreAnimation innerhalb von vier Wochen realisiert und hatte insgesamt einen Arbeitsaufwand von ca. 40 Stunden. Weitere Projektdetails und Informationen plane ich in naher Zukunft in einer kurzen Fallstudie zu veröffentlichen.

10. Dezember 2009

Going solo

A few months ago, after the birth of our daugther (yeah, Lotta!) and during my parental leave, thoughts arose about realizing an idea I’ve carried around with me since I finished my studies: Going solo, working on my own projects and earning a living as a freelance software developer. A few weeks ago I realized that plan and decided to quit my current job at neuland, though it wasn’t an easy decision: working for neuland has always been fun, especially because of the nice environment and the multitude of different personalities of the people working there – some of which are now close friends of mine. Nevertheless I felt that deep urge of doing something on my own and having sold venteria in summer makes taking the plunge a little less risky.

Alright, so where am I heading? A new focus will be iPhone/Cocoa app development and I’ll keep on working with Ruby on Rails – I’m really looking forward to all the great enhancements planned for Rails 3.0 and I just love doing web development, so that I won’t burn all the bridges ;)

The bootstrapping went pretty well so far, I joined a really nice coworking environment and got an office at the infamous Abfertigung. As far as I can tell I’ll be surrounded by a bunch of very nice, creative and innovative people. Furthermore it’s good to know that I can, but don’t have to work from home – that makes meeting clients and finding quiet hours to get work done (I’m lookin’ atcha, Lotta) a lot easier ;)

Hopefully I’ll find the time during the next weeks to write about some of the aspects of becoming a freelancer as I know some of you are interested in that and I’d like to take you along on that journey. I think it will be a pretty interesting time and I’ll learn tons about myself, meet nice and interesting people (including clients ;) ) and most important of all: still have the time to enjoy my family… we shall see :)

8. Dezember 2009

Syncing Socialite across multiple Macs (using Dropbox)

If you are working on multiple Macs (i.e. having a personal and one at work) you probably know this problem: You would like to sync some application data between these machines, so that you don’t have to manage separate todo-lists, items in your inbox that you’ve already read on one machine but are marked as unread on the other, etc. I’m using Dropbox (disclaimer: If you sign up using this link, I’ll get some more disk space, thank you!) to sync various applications (Things, Billings and Socialite for example), but you can use any other cloud storage solution if you like.

In this little tutorial I’ll explain how to sync the data with Dropbox and I’m using Socialite as an example. It basically works like this for any app that stores its data in an Application Support folder, but Socialite requires some extra steps people are frequently asking about, so here we go:

  1. Go to your Dropbox folder and create a new folder called Synced Application Support (or whatever you like)
  2. Quit any running instance of the application you would like to sync (in this case Socialite).
  3. Got to your ~/Library/Application Support and move the Socialite folder into the Dropbox folder you just created (Synced Application Support)
  4. Open your Terminal.app and symlink the moved folder:
    $ ln -s ~/Dropbox/Synced\ Application\ Support/Socialite/ ~/Library/Application\ Support/Socialite
  5. Start the app and see if it worked

After this five steps you should be up and running with most of your apps (syncing Things is as easy as that). Unfortunately Socialite requires some extra steps if you are using Twitter (and who isn’t these days), because it keeps the OAuth authentication tokens in the keychain, so that you need to sync them too. Fortunately this isn’t a big deal, because now you know how to sync your data, so go ahead and…

  1. Quit Socialite
  2. Open your Keychain and create a new keychain called Socialite and save it within your Synced Application Support/Socialite folder
  3. Right click the new Socialite keychain, edit the settings and uncheck the checkboxes so that you won’t be bothered with authentication request every now and then
  4. Use the search bar at the upper right corner to search for twitter.com and move all items used by Socialite to the new Socialite keychain
  5. Start Socialite and see if your Twitter services are still working – if not: Delete all items in your Socialite keychain, remove the Twitter services from Socialite, restart Socialite, add them again and move the freshly created twitter.com items in your Login keychain to the Socialite keychain.

Okay, that’s it, I hope it’s helpful to some of you and I also hope that someday syncing will be baked into Socialite, though Realmac Software currenty doesn’t have any plans for implementing that.