rDBLP — Easy BibTeX Management for your Research Paper

31 08 2010

Maintain your LaTex bibliography files using DBLP

It’s always the same, you write a paper / thesis and you are searching for source, than you modify them until they fit into the format you are currently using. But this should not be. A better way is to extract the right key from DBLP and automagically create the correct bib file. You think this is magic? No it’s not, it’s so easy.

There are only two prerequisites for using rDBLP on your computer:

  1. Make sure Ruby and RubyGems are installed
  2. Make sure you have a working internet connection

To install the gem execute this from you command line:

sudo gem install dblp

Once this is done you can use it directly for any LaTex file. Imagine you have LaTex file containing somewhere the following citation.

The entity shaping used in web services as discussed in \cite{DBLP:conf/IEEEscc/GrundKZ08}...


When you run now the dblp command in your terminal, the program will read the auxiliary files from the compilation and extract the requested DBLP citation sources. Than it will download them and store them directly in a file called “dblp.bib” which you can use in your LaTex document.

dblp my_file

To make it really easy, here is a screencast I did for my small little tool:

If you have any questions, feel free to ask via mail or contact me using Twitter.


Relational DBMS vs Document Oriented Key-Value Stores?!?!

5 06 2010

In the recent days document databases get big buzz from all different areas: programmers who search for freedom or VCs who search for the next big buck. But there is a big disadvantage: the bigger the noise is the less the people using buzzwords like cloud or key-value store, understand whats behind. So let me start with a short disclaimer: I am not against key-value stores or any other document oriented database!

But nonetheless I think it is required to clarify what a standard relational database can do, especially how powerful a language like SQL is. So lets clarify this by some examples and let me give you my take on the buzz. To make it more entertaining consider this a small Q&A session with a key-value store guy and me as the defender of relational DBMS.

“When I’m working with documents I just dump everything into the object and can map-reduce everything! SQL cant do this.”
Sure you can dump anything in an object, but SQL has a different heritage: SQL is a declarative language that is designed to express the What instead of the How. If you want to express algorithms directly on the database use stored procedures!

“But stored procedures are bad, because they are not portable!”
Ah get that, but how about your custom map-reduce code? Writing custom code for querying data is nothing more than using the data store API directly and is a stored procedure.

“In SQL I can’t create my own functions, I’m limited to MIN,MAX,AVG. That’s so bad!”
Whew, I hope that you did not stop reading about SQL in ’89 or ’92. The SQL standard provides everything you need to define user-defined functions and custom functions. Any major DBMS allows you to even write them in any programming language you can program.

“You know, I want to be flexible, stream content of different types. SQL cant do this!”
Maybe you are missing a point here that is called normalization. Yes, SQL is restricted to flat tables but you can use normalization and queries to create any list of your content.

“But SQL is so slow, every time I create a join I’m lost. Look, XXX-DB is so fast using static indices once I created a map function!”
Dude, using and index to increase query performance is as old as I am. You want indices, go create them! If you don’t know what queries you use, you wrote a bad application. For any other case you might go for index optimization techniques well researched in the last decades.

“But it runs in the cloud! This makes it even more faster and scalable.”
Gnargh, I’m pretty sure you know about all this parallel database research going on since — decades. Just because it is a key-value store does not make it scalable and faster. Please dig deeper.

To conclude, please understand me I’m not against key-value stores or document databases, they have their very specific terrain — as do standard relational databases. So what might be a good example for a key-value store document oriented application? When looking at the characteristics of such databases one thing that comes to my mind immediately is the following: Since every object is stored by a unique key all those applications benefit where the workload is almost only single object lookup and no aggregations take place. Since hash functions that are used to build the indices for the keys are ideal for partitioning scale-out can be implemented easier. Another important fact is the ability for semi-structured data, here document oriented storage system clearly win over relational systems.

The only thing I wish from people propagating document oriented storage is that they do not only talk about it because its cool but because they can sketch a valid use case. If you feel like you don’t know enough about the possibilities of standard relational databases talk to people who do or read something about it.

Did I offend you? Challenge me, let’s discuss!
– Martin

[slimtimercli] Version 0.1.8 published

5 02 2010

It’s been while since I worked on slimtimercli but today I received a pull request via Github telling me that evaryont polished the gem and updated it and fixed some bugs. I took a few minutes to make slimtimercli use gemcutter and published it again — with version 0.1.8.

I love open source software!

– Martin

Be kind? Re-Kind! – Easy Reformatting of Scientific Papers

31 01 2010

The first time I held a Kindle in my hands I thought, this might be a game changer – at least until you start reading scientific papers which have a two column layout. Which is great for printed media, but as soon as you want to read it using a device zooming won’t help. Thanks to a hint of Christian I found this blog entry from Steven Wittens presenting the idea of cutting a two-column PDF page into 4 pieces. The complete program was written in Python and a no-brainer to execute – if you love the command line as I do. Unfortunately lot’s of my colleagues don’t and were wishing for a nice UI to easily drag and drop files to rework.

Based on the idea of Steven I rewrote the code and added the possibility to have multiple configurations (as how many columns you are splitting and how many vertical splits you want to make) and put it together using Titanium application. The result is a neat desktop app that presents a simple UI for the task.

To select files that you want to split just drag and drop them in the dropbox and click on process as soon as you are finished. The output files will be in the same directory as the input files but with a rekind appended to the filename.

To download the applicaton for Mac or Linux go to its Titanium application page, the complete source for the Titanium project and is available on Github using the MIT license.

As usual I’m glad for any feedback and feature requests.


[PyPalm] 0.20.17 released

26 01 2010

Today I released PyPalm version 0.20.17 and it adds one bugfix and one feature:

The bugfix fixes the issue that one could encode the $L() call with single quotes instead of double quotes – both can now be used. The feature was proposed by Johan in the comments of this entry and adds a default text (which is the key) for each untranslated item and prepends the key with “_%_” so that when preparing your application for translation you see if you found every string that needs localization.

As a last step I added backwards compatibility for all those people without Python 2.6 and no built-in json support. If you have at least simplejson installed everything should be fine.

But please, feel free to report any bugs!

[PyPalm] Screencast Available

1 01 2010

There is a screencast for PyPalm available on Vimeo. Have fun.

– Martin

[PyPalm] PyPalm 0.20.10 adds localization support

1 01 2010

As a short new years present I upgraded PyPalm to version 0.20.10 🙂 and added scene and localization support. The first one comes handy when creating new scenes for the application. To add a new scene to your application call the following command from your terminal

pypalm new_scene MySceneName

where MySceneName is the name for your new scene. The second new feature of PyPalm is more important and even more helpful. When developing applications, especially web and mobile applications, customers are often scattered around the globe and localization is a key factor for the success of an application. The Mojo toolkit of Palm supports localization via the $L() method and integrates nicely into the application. But what is still missing is the possibility to extract the referenced keys automatically! PyPalm adds this featured and supports direct language integration with automatic creation and update of the referenced language files.

To configure your application for localization add the “languages” key to your framework_config.json file and add all languages you want to support.

  "languages" : ["de_de"]

In the example above the configuration supports German in addition to the original language. Now execute PyPalm localize on your command line

>> pypalm localize
Updated de_de

For all configured languages the necessary strings.json file will be created and already existing files will be merged with the updated ones from the current parse run of the application.

The source code is available as open source at Github and if you have any questions or feature requests don’t hesitate to drop me a note. If you want to install PyPalm and need a short introduction, check this blog post.

– Martin (grundprinzip)