Semipol Blog Index

  1. New Site and Static Site Generators

    For several years I have been using Wordpress as a platform for my blog. However, I never really needed anything dynamic. The amount of comments was very low and apart from that, I did nothing fancy which required dynamic content. Additionally, I was kind of tired to install Wordpress updates over and over again. So I moved this blog to a static...

    Read more
  2. Letting Enigmail use gpg-agent for passphrase caching on OSX

    Since one of the recent upgrades of Enigmail (the GPG extension for Thunderbird) and completely switching to GPG version 2 on my Macbook I ended up with the situation that Enigmail did not cache the key passphrases anymore and I had to enter them over and over again. This is caused by the fact that GPG2 requires to use gpg-agent and Enigmail's internal passphrase management cannot be used anymore. Therefore, a setup is required that enabled the gpg processes spawned by Enigmail to talk to a running gpg-agent instance.

    Read more

  3. Revamped FlickrExifTagger moved to Github

    I revived the FlickrExifTagger script and updated my own Flickr stream with it to add machine tags specifying the lenses I have been using to all photos I took during the last years. For this purpose I improved the code to better support custom rules and moved the project to Github.

    During this process I also updated the software section in this...

    Read more
  4. Applying the Changes of a Single File from a Git Stash

    In order to apply only changes for a selected file from the git stash you can use the following command line (bash):

    1
    
    git diff stash@\{0\}^1 stash@\{0\} -- path/to/your/file | git apply
    

    Based on the Stackoverflow question: How would I extract a single file (or changes to a file) from a git stash?

    Read more
  5. Python Highlights

    Nice parsing differences between python versions:

    1
    2
    3
    4
    
    languitar@cinnabar:~$ python2 -c 'print("test", "42")'
    ('test', '42')
    languitar@cinnabar:~$ python3 -c 'print("test", "42")'
    test 42
    
    Read more
  6. My own cloud: Seafile

    Continuing with my journey to replace publicly hosted cloud services with self-hosted solutions. One of the nice developments of the recent years are services like Dropbox or Google Drive, which really simplify some use cases. For example, in my own workflow I mainly use these services to a) synchronize unix configuration files, b) synchronize some...

    Read more
  7. My own cloud: Tiny Tiny RSS

    In the light of the recent NSA issues I have been reconsidering whether I really need to use public cloud services or not. The main benefit that I see in publicly provided services (despite the technical setup) is large amount of users that potentially enhance the service. There needs to be a tradeoff between these benefits and the data that one...

    Read more
  8. Bash alias: Build on all CPU cores

    Linux:

    1
    
    alias makej="make -j $(cat /proc/cpuinfo | grep processor | wc | sed -r 's/^ +([0-9])+.*//')"
    

    Mac:

    1
    
    alias makej="make -j $(sysctl hw.ncpu | awk '{print $2}')"
    
    Read more
  9. Sharing the git config across different computers with individual modifications

    As I am working on a lot of different computer I wanted to share some of my configuration files across these computers to have similar working environments on all of the machines. An easy solution to do this is e.g. for git to put the .gitconfig file (along with other configuration files) into a folder inside the Dropbox (or other syncing tool),...

    Read more
  10. How to set up a build system in C++, Python and Java

    I don't know why, but setting up the build system for a new software project and maintaining it seems to be something people are always afraid of. I've often heard people say "Eclipse does the job. It's just additional work." This usually leads to confusion and a lot of bulk and weird solutions several days later when the project starts to evolve...

    Read more