Archive 12.3.2011 - 6.4.2011

Python Package Index : pip 1.0. For the sake of completeness, I'm blogging this even though pip is already a fixed part of the Python infrastructure for me. But maybe one or the other has not yet played around with pip, then now is probably the right time to do so. In my opinion, you should always use it together with virtualenv, because then you can easily install exactly the right dependencies for each project and keep them separate from other projects.

sunng87/jip. I'm not currently doing much with Jython, but jip sounds very practical: it's an analog to pip, but for Java libraries. So a simple command-line tool that downloads the necessary jar files and puts them in the right place. Integrated with virtualenv. Much more pleasant for me than, for example, dealing with Maven or similar Java-usual infrastructure tools.

Exploring Beautiful Languages: A quick look at APL. Simply because APL has always fascinated me. Even if I never want to be in the position, based on my own experiences with it, to have to maintain an APL program - for me, APL is the quintessential example of write-only languages.

How I learned to stop worrying and write my own ORM. A bit of background information on why Dapper was developed and which use cases it solves - it is essentially used where direct SQL access was previously "tunneled" over Linq for performance reasons, because Linq2Sql is inefficient there.

Dapper-dot-net - Simple SQL object mapper for SQL Server. Could potentially be quite interesting at work. C# also offers Linq, but according to their measurements, Dapper seems to be significantly optimized for performance.

philikon / python-weave client is even more interesting than the other tool: a Python library for accessing Mozilla Sync. With this, I could build various small tools that automatically mix links into bookmarks or extract them from the sync and move them into other bookmark files. Or how about a cron job that takes links from bookmarks in a special group and automatically posts them to the weblog? All sorts of fun things are possible ...

philikon / weaveclient-chromium. Not yet tried, it is a Chrome extension that integrates Mozilla Sync into Chrome and Chromium. With this, you could finally exchange bookmarks between Chrome and Firefox without having to go through XMarks. If someone now also builds this extension for Safari, I would be happy - the fact that I cannot properly sync between browsers, but each one cooks its own soup, is highly annoying. Mozilla Sync is free to use and behind it is a company that I trust much more in this area than all the others.

Bill Gates: “In toilets, we’re the kings”. As the head of Microsoft, I found him annoying. As the organizer of his Foundation, I find him amazing. I'm not fooling myself - he is an exception, other billionaires are probably far less motivated, but never mind. One is a start. And maybe it's just the nerd in him who wants to do something with all that money, simply because he wasn't just there for the money and the power. And that might also explain some of his time at Microsoft - he really believed in his work there. Well, if his foundation continues to save lives, then I'll forgive him Windows. I don't have to use it.

Video LightBox - embed videos with Lightbox effect on your website!. I don't do anything with video, but it looks quite interesting - it's a standalone tool that generates the files for video embedding and can send them somewhere via FTP, for example. Mac and Windows versions.

Pipe is a module with infix syntax for chained function calls over potentially lazy streams (internally these are generators). Unlike stream (which I mentioned here before), it does not support parallelism, so it's just syntactic sugar. However, I prefer the sugar from stream (i.e., the syntax) and the parallelism of stream is also more interesting than just providing a slightly different syntax.

Crumb Cake

Today, I didn't cook again because I was in Hamburg yesterday, but I did bake a cake. I like crumble cake, among other things because it is so easy to make. Here's what goes in (for a 26cm springform):

  • 300g flour
  • 200g sugar
  • 150g butter
  • 1 egg
  • 1 pack vanilla sugar
  • 1/2 pack baking powder
  • some cinnamon
  • 250g apricots (so small can)
  • some cranberry jam (optional)

The preparation is then quite simple:

  1. Mix flour, sugar, vanilla sugar, baking powder, cinnamon - all together.
  2. Drain the fruit (the juice with tonic water and ice cubes makes a delicious non-alcoholic cocktail)
  3. Preheat oven to 180C
  4. heat the butter
  5. beat the egg
  6. mix butter and egg into the flour+sugar mixture
  7. knead with a mixer and dough hook until crumbly dough is formed (can also be done with a fork and by hand, but with a mixer it is more comfortable)
  8. distribute 2/3 of the dough in the greased springform and press it onto the bottom, possibly also make a small edge
  9. poke a few times with a fork into the bottom
  10. spread cranberry jam on the bottom of the dough
  11. distribute apricots on top
  12. distribute the remaining crumble dough evenly on top
  13. bake the whole thing in the oven at 180C for 45 minutes
  14. take out and let cool (don't be so greedy, even if it smells good)

You can put cream on it, or just eat it as is or sprinkle powdered sugar on top (though it already makes a pretty sweet cake, so don't overdo it). Tip: don't leave the edge area too thick, otherwise it will be a rather hard part that is difficult to cut later. And of course, you can almost freely vary the fruit, apple puree instead of fruit works great, as do cherries or plum puree (but it will probably be quite firm). The nice thing about it is that you can have almost everything on hand in stock and the eggs you can maybe get from the neighbor (I just didn't expect to want to bake when I went shopping quickly on Saturday).

Miscellany from Hamburg

Was in Hamburg on Saturday again - why not enjoy the beautiful weather in one of the most beautiful cities in Germany. The pictures are all taken with the Leica M8 and the Elmar-M 2.8/50, except the last one, which is taken with the Ricoh GRD II. Nothing special, just a collection of what I looked at. And in color, because I want to show it to Juliana.

Pängelanton

The Karnevalsverein Pängelanton operates a small railway museum in Münster Gremmendorf and in front of it stands this black-and-red beauty built in 1902. I am a railway enthusiast and this little locomotive is indeed a rarity that also motivates visitors from farther regions to visit. Photo taken with the Ricoh GRD II.

markrendle/Simple.Data - GitHub. I should check this out, it looks quite interesting - an ORM for .NET.

Send in Münster again

In Münster, it's Send again. This time for a whole week because of the large rides - the Ferris wheel and the roller coaster are already quite impressive. One doesn't quite realize how big the Send actually is, only when you see the large rides during setup and then later at the finished Send, the whole surrounding area makes it clear. The Hindenburgplatz is also considered one of the largest inner-city open spaces in Germany. Photos, by the way, again with the M8.

Tuckesburg and the old zoo

The Tuckesburg is the old residence of the executioner in Münster - and later the retirement home of Prof. Landois, the founder of the Münster Zoo and the developer of the Aa Lake. I've already had this some time ago, but it's always a nice subject. Photos with the M8 and the Elmarit-M 2.8/50.

Basho: An Introduction to Riak. I should take a closer look at this, it has a quite clean and simple architecture and all nodes in the system are equal (this is similar to Cassandra). The whole thing is written in Erlang here, but interesting is the MapReduce interface: functions can be delivered as JavaScript code and the communication goes over a simple JSON interface.

HBase vs Cassandra: why we moved « Dominic Williams. Not entirely uninteresting blog post that dares to compare Hadoop/HBase with Cassandra and tries to highlight the different focuses. His conclusion: HBase is more for warehousing, Cassandra more for transaction processing. Alone, this would make something like Brix even more interesting if it could really combine these two aspects.

Brisk – Apache Hadoop™ powered by Cassandra | DataStax. I should also keep an eye on this, as someone is marrying Hadoop with Cassandra as a backend. This makes higher-level layers from the Hadoop project also usable with the high performance of Cassandra and, above all, with the freer update of data in Cassandra and its eventually-consistent model.

HIVE: Data Warehousing & Analytics on Hadoop. A point that particularly interests me at the moment: evaluations, especially BI, of large amounts of data. Hadoop provides Hive as a solution for this. Access to HIVE can not only be made via Thrift, but also via JDBC and ODBC.

Apache Thrift. Also worth taking a closer look, in principle something similar to Google Protocol Buffers, but more prevalent in the Apache environment. Therefore, in areas like Hadoop, it is often chosen as the path of choice for accessing services from various languages. A small comparison of the two protocols. I like that Thrift not only allows binary representation but also a JSON-based representation - this makes the integration of Thrift APIs into web solutions easier, as JSON is native to JavaScript.

The Secrets of Building Realtime Big Data Systems. This is how I came across Cascalog and ElephantDB: a talk by the programmer of both projects about Big Data. He is also currently writing a book "Big Data". Could be very interesting.

nathanmarz/elephantdb. Same author as for Cascalog, here he built a distributed Key/Value-Store on Hadoop with Clojure. Also not uncool.

nathanmarz/cascalog - take a closer look, a marriage of Clojure and Hadoop for easier evaluation of large data sets. The interesting thing about Cascalog: it draws ideas from Datalog and forms a query language for Hadoop data sets in Clojure.

JavaScript Quotations - interesting link about a metaprogramming feature for JavaScript. In this case for a very interesting JavaScript implementation: written in F# and for the CLR world, runnable under .NET and Mono.

Microsoft Shuts off HTTPS in Hotmail for Over a Dozen Countries | Electronic Frontier Foundation - a villain who thinks evil about it. Surely pure coincidence that the list of affected countries reads like the "elite" of democratic states. The hypocrisy of large corporations is actually only surpassed by FDP economic ministers.

Enterprise Java Development Tools | SpringSource. I should take a closer look, as it was recently about J2EE and EJB alternatives, and this is one of the more well-known alternatives.

Trinity - Microsoft Research. I should take a closer look at this, it sounds somewhat like distributed Redis (in-memory structures that are persisted) combined with a query semantics that is more based on graph relationships (comparable to RDF Triple Stores).

Programming, Motherfucker. Do you. speak it?

Why Cloud9 Deserves your Attention - browser-based IDE in Javascript on server and client. And source of the current version available on github.

Django-nonrel - NoSQL support for Django. Provides a first approach to integrating various NoSQL databases into Django at the level of the Django ORM. Backends for MongoDB (no thanks), AppEngine and Cassandra are in the works. Cassandra is particularly interesting to me at the moment.

WordPress › Really Static « WordPress Plugins. Well blogged, because it allows you to generate static pages directly from WordPress (this could also be done with WP Super Cache and its directly cached pages, but these are not automatically updated) and perhaps this could be an interesting way in the long run. Okay, I would probably have to forego some elements to make the whole thing work without "artefacts" - but many of them are actually dispensable. For example, a tag cloud would be frozen at the state of the last rendering if it is part of the page. Similarly, information such as "latest comments" or "latest posts". The same goes for calendars, which have more marked days on newer pages than on older ones. This is also the main reason why I have repeatedly abandoned baked sites - on the other hand, are these problem cases really important for a blog?

Vundle 0.7 is out. I usually use Pathogen, but Vundle has some features that make it quite interesting - maybe I should play around with it. On the other hand, I haven't made any updates and changes to my Vim installation for a long time. But since all vim.org scripts are now on GitHub, Vundle's GitHub integration is certainly very interesting.

Stuffed Peppers in a Tomato Bed

Sounds good, doesn't it? Tastes good too. This time, it wasn't terribly complicated to prepare the meal, although you do have to juggle several pots and pans (okay, one pot, one pan). In my case, the pot was a casserole because the peppers were really huge. Here's what I put in:

  • 2 large peppers
  • 250g mixed minced meat
  • 100g feta cheese
  • a handful of olives (black, natural, pitted)
  • 6 tomatoes
  • tomato paste
  • half a bunch of basil
  • 1 onion
  • 1 1/2 cloves of garlic

The preparation is quite simple; you should have a large pot or casserole ready, in which you can comfortably place the peppers. Otherwise, it went like this:

  1. Chop onions, chop garlic, put both on a plate
  2. Chop olives, put on a plate
  3. Chop tomatoes, put on a plate
  4. Chop basil, put on a plate
  5. Preheat the oven to 200° so it can preheat
  6. Heat the pan with olive oil
  7. Sauté onions and garlic in the pan until translucent
  8. Add the minced meat, fry until crumbly (just like for Bolognese - simply use the pan spatula to break up the clumps)
  9. Once the minced meat is nicely browned and mixed with the onions and garlic, add the olives
  10. Reduce heat and add some of the tomatoes (amount about 1-2 tomatoes), add some tomato paste, mix, cover, let it cook for 5 minutes, season with spices (in my case oregano, thyme, pepper, salt)
  11. Remove the lid, increase heat slightly, add the feta cheese and mix well, let it melt
  12. Once the feta cheese is well mixed with the minced meat, turn off the heat
  13. Cut the tops off two peppers, remove the core, remove the "ribs"
  14. Fill the peppers with the minced meat mixture, cover with the tops (previously also remove the core and stem there, basically only a ring remains)
  15. Distribute the remaining tomatoes and basil in the large pot, place the peppers in it
  16. Tip: if they don't want to stand up, make a tripod for the peppers with meat needles at the bottom, then it holds
  17. Put the whole thing in the preheated oven and let it simmer for 20 minutes
  18. After 20 minutes, take it out and serve on plates, blend the tomatoes and basil with a triple mix

For me, as usual with bread, but pasta or rice go wonderfully with it. This doesn't result in such a pudding-soft pepper, it should still have a bite. And the filling is not the usual concrete block, but rather comparable to a thick Bolognese. For me, there was still a beer with it, simply because the weather outside was shouting "beer" with all the sun today.

Adobe Photoshop Lightroom 3 * Exporting using Publish Services. Well, Adobe has Photoshop.com - and just expanded it. And promotes it as a better alternative to Flickr. How serious Adobe is about this can be seen in the Publish Services in Lightroom 3. Facebook, Flickr, and SmugMug are offered out of the box. Even on the Lightroom Exchange, I found nothing about connecting to Photoshop.com. Well done, Adobe. Very convincing.

Privacy advocates: Piwik instead of Google Analytics - that's a good start, concrete suggestions for what site operators should do if they want statistics. We should probably take a closer look at work to recommend it to customers who ask for statistics.

After Church Club

Finally managed to make it to the Hot Jazz Club on a Sunday again. Tom's introduction: "Today with me, so there will be blues. And only blues. You can't defend yourself against it."

Kiepenkerle (Kiepenkerls?)

The Kiepenkerle are kind of a landmark in Münster. These two were in front of the Lamberthi Church when I walked by. The one made of stone is always there, the other one gives city tours. Mainly photographed for Juliana - she already knows the Kiepenkerl at Spiekerhof. And yes, I know, they are not actually Kiepenkerle, because they don't carry a kiepe, they are just the guys.

Update: I've included the Kiepenkerl from Spiekerhof here.

Door Figures

These door figures were created by Berndhard Kleinhans and are located at the Überwasserkirche in Münster at the side entrance on the south side. Photos taken with the Leica M8 and the Zeiss C-Biogon 2.8/35mm.

By adding extra code to a digital music file, they were able to turn a song burned to CD into a Trojan horse. When played on the car's stereo, this song could alter the firmware of the car's stereo system, giving attackers an entry point to change other components on the car.

via With hacking, music can take control of your car | ITworld.

Satellite Photos - Japan Before and After Tsunami - Interactive Feature - NYTimes.com. Slide the slider left and right.

Programming Languages - Progopedia - Encyclopedia of Programming Languages. That was the programming language wiki I was looking for recently when the deletion frenzy struck Wikipedia again. I think I already mentioned it in the old blog.

Instagram now has official APIs. It completely passed me by. Maybe I can eventually get around Tumblr to get my Instagram pictures into the sidebar. On the other hand, Tumblr has been doing quite well lately, and why change something that works (the curse of any further development - good enough).

pdict.py at master from segfaulthunter/sandbox - GitHub. A PersistentHashMap for Python - so a functional data structure that does not allow changes, but provides a new structure with minimal change compared to an existing structure with substructure sharing to the original structure. A rather interesting implementation. There are also further explanations of the ideas behind it. And an alternative implementation of the same idea.

ShutterSnitch. Interesting little app with which you can receive images via WiFi on the iPad and automatically tag them with metadata and geocoding - could be a rather interesting combination with an EyeFi card in my Sony or my Panasonics (the M8 unfortunately cannot be used with EyeFi - the SD slot on the M8 is too narrow for the EyeFi and the metal body blocks too much of the weak signal). Simply connect the camera, put the iPad in the backpack and walk around and take snapshots and occasionally use the iPad as an extra-large lightbox.

Rob Galbraith DPI: Alex Majoli points and shoots. Just as a reminder that it's the photographer who makes the pictures and not the camera. So the design of the image. And yes, "flat depth of field" is not always the answer to "what makes a good picture".

HowTo: Using Radio2. Well, ok, I understand his motivation. But well - I click on the "Press This" bookmarklet from WordPress and write a sentence - I've customized the bookmarklet form with JavaScript and Custom Post Types (in this case Aside) does the rest. And up top I already have a link blog - and it also has its own feed. And it's also quick, enclosures are also easy to make and tagging works right away. Sorry, Dave, but somehow I already have all of that! Update: I just set up a Twitter account and now I'm pushing new posts there. Let's see what comes of it.

Threads are great, but not every problem is a nail

If you want to have a good laugh: Node JS and Server side Java Script. Here, someone from the Java camp complains that Node.JS really isn't to be taken seriously and then produces the best example why something like Node.JS (and many other alternatives for server programming) exists - because the Java code gets longer and longer with each step. And even after several iterations for an example that is quite simple to implement in Node.JS (or e.g. with gevent in Python), a few errors and gaps in the Java code are already mentioned in the first comments.

Don't get me wrong - Java has a lot of good solutions for programming with multiple threads in the standard library. Probably the largest selection of possibilities for programming with multiple threads of all currently available languages. But as so often in life: threads are not the answer to all questions of parallelization. Especially when it comes to high request load, the assessment in the comments that 20K threads are already very high is ridiculous - tell that to the programmers of Eve Online, where every ship in their virtual universe is modeled as a microthread.

Java is an interesting platform, precisely because it comes with many low-level libraries with which you can do very interesting things - and which are helpful to build reasonable high-level constructs on top of them. For example, in combination with languages like Clojure or Scala, the thread monster loses some of its terror. But sometimes the answer is not the thread, but asynchronous IO (both for disk access and network access) and the intensive use of coroutines or continuations.

Also, the incomprehension of Java programmers about the approach of solving the multi-core problem simply with several parallel processes and message-passing between them is quite strange in 2011 - after all, 2009 and 2010 were the revival years for Erlang (don't forget, the language has existed for much longer) and the central idea of Erlang is precisely to set network- and CPU-spanning message-passing as the standard in order to achieve very simple parallelizability and scalability.

Java programmers always remind me of the COBOL programmers of my early days, who in every language and every programming approach deliberately picked out the things that were solved differently in COBOL (and sometimes even perhaps a bit simpler) - but then fell flat on their faces when they had to solve real problems outside the COBOL comfort zone with them.

The best thing about Java is the JVM and thus a platform that makes the multi-paradigm and multi-language approaches possible with which you can then use the tools for problems that are appropriate for them. And even then, sometimes the answer is still Node.JS or another small, lean, asynchronous server. Because even with a large collection of various hammers, you will still get a screwdriver for the screw.

The risks of technology cannot be abolished. But the way we deal with it can be changed. Facilities like nuclear power plants, which can cause unimaginable damage, should not be operated by any state. And people who make money with such facilities, like our esteemed nuclear industry, should clearly be branded as irresponsible lobbyists. They have the situation under control in their speeches, while the reactor hall is already falling apart behind them.

via Dieses Vertuschen und Verzögern ist ein unfassbarer Skandal: Die Methoden der Atomlobby - taz.de.

Minestrone for the whole family

Well, I simply refused to take less than a whole vegetable each, and suddenly there was quite a lot. So better have a large pot ready! But the minestrone tastes damn good. What I put in:

  • 1 bell pepper
  • 1 zucchini
  • 3 tomatoes
  • 3 celery stalks
  • 1 large carrot
  • 3 small potatoes
  • 100g streaky bacon
  • Parmesan with rind
  • 150g green beans
  • 2 purple onions
  • 2 cloves of garlic
  • 1/2 bunch basil (fresh)
  • 1 tablespoon tomato paste
  • a handful of olives (black, pitted, natural)
  • 1l vegetable broth
  • 50g butter
  • olive oil
  • approx. 50g spaghetti (broken into pieces)

The preparation is really hard work and in the first phase there is not much peace. And it's best to group the vegetables as indicated below, because they go into the pot one after the other - everything is first fried. But otherwise it's actually quite simple:

  1. Dice the bacon and put it on a plate
  2. Dice the onions and garlic and put them in a small bowl
  3. Dice the potatoes, celery, and carrots and put them in a bowl
  4. Chop the beans and put them in a bowl
  5. Dice the bell pepper and zucchini and put them in a bowl
  6. Heat the pot with olive oil and the butter
  7. Fry the bacon for 2 minutes in it (stir vigorously!)
  8. Put the onions with garlic in the pot and fry for 2 minutes (stir vigorously!)
  9. Put the potatoes, celery, and carrots in the pot and fry for 2 minutes (stir vigorously!)
  10. Put the beans in the pot and fry for 2 minutes (stir vigorously!)
  11. Put the zucchini and bell pepper in the pot and fry for 2 minutes (stir vigorously! if your arm feels like it's about to fall off: that's normal, keep stirring!)
  12. Put the lid on, turn down the heat and let the vegetables simmer for 15 minutes, stirring occasionally
  13. The arm can't rest unfortunately, because now the tomatoes are diced and if desired the olives are cut small (I always leave them whole in soups).
  14. Before the 15 minutes are up, throw in the olives (after about half the time)
  15. Chop the basil
  16. When the 15 minutes are up, put the vegetable broth in the pot, stir
  17. Put in the tomato paste, chopped tomatoes and basil, season with pepper and salt
  18. Throw in the parmesan rind (I tie it with kitchen string so it's easy to fish out again)
  19. Bring to a boil, turn down the heat and let it simmer gently for an hour (on my monster pot half a point on the electric stove is enough)
  20. Fish out the parmesan rind and throw it away
  21. Put in the spaghetti and cook for 10 minutes

I then eat the whole thing simply with bread. You can also put sour cream in the soup, or very Italian, grate parmesan on top. With a glass of wine.