Friday, September 18, 2015

Install additional nginx modules with MacPorts

This example install headers more module.
Download it from Github

unzip files to /opt/local/src/headers-more-nginx-module-0.25

Go to command line and execute:

sudo port edit nginx

Now in the editor add the following lines (replace version if necessary):

variant header description {Add header} {
    configure.args-append --add-module=/opt/local/src/headers-more-nginx-module-0.25

sudo port install -v nginx +header

Thursday, September 10, 2015

5 useful things you can do if your notebook breaks

Yesterday my MacBook left me with a blinking folder on the display.
Now I need to wait 10 days until repair is done... Unless I can rent one  tomorrow. Fortunately I still have a phone and tablet to write stupid blog posts that nobody reads.

1. Read a book

  • a book or a kindle reader

2. Think about future projects

  • brain
  • pen and paper or whiteboard or a stick and sand
One of the reasons I became a freelancer was to have more time for my own projects.

3. Hunt new clients

  • smartphone with internet access
You can ignore me or run but in  the end I'll get you all.

4. Write a blog post

  • smartphone with internet access
Here we go...

5. Think about other people

Probably the most important point. Contact people you haven't heard from for a long time. Old friends, your parents or sieblings also like to hear from you.

My experiences with recruitment agencies

Since 6 months I'm working as a frontend backend web developer on freelance base now. As a freelancer you need to care for yourself about getting new contracts with companies.
One "comfortable" way to get new contracts is to get in touch with so called interim recruitment agencies.
If you are registered on xing or linkedin with freelancer status usually you don't need to do anything yourself because you will soon contacted by recruiters. Half of my contacts are recruiters.
Today I'd like to share my experiences with recruitmemt agencies.

What are recruitment agencies

One of my favorite Saul Goodman scenes from Breaking Bad.
For me this basically sums up the whole purpose of their existence.
They tell you they know someone who might have a job opportunity which completely fits to your skill set.

Recruiters for permanent positions

My first contact with recruiting agencies tracks back 5 years and it wasn't all that bad.
For getting permanent positions the agencies can be quite helpful in my opinion. Though I never got a position through an agency for different reasons I felt good about the business relationship.
I got job offers and interview appointments.
They also prepared me for the interviews, told me who I'm dealing with and whats the language spoken in the upcoming interviews. They also gave me hints about tests so that I was able to prepare myself properly.
Furthermore negotiation of my income was in my hands since the agency receives a one time payment from my future company.

Interim Agencies

So I thought using these companies to get new contractors as a freelancer can't be that worse. I chatted with a recruiter about my freelancer business and he told me no problem: I know a guy...
I got and interview which was pretty good from both sides. I had a good impression and the company was eager to work with me as well. 


So everythings perfect?
No, it was not because of the men in the middle, the recruiter.
For interim contracts the agency is very interested in your hourly/daily rate because they'll get a share.
This was one of the first sentence the recruiter told me: "Do not talk about money with the company. I will do the negotiation for you."
And boy do they negotiate...
I told the recruiter my desired hourly rate and he told me no problem.
After the interview the recruiter got positive feedback from me and the company so it was time to do some money talk.
Soon he called me to tell that he couldn't reach my hourly rate. It would be 5€ less. According to him the reason was: "I couldn't do anything. They came up with this rate."
Yeah right. Since they were talking about my rate excluding the agency share the company came up with it.
Ok so fare I thought. Agencies must earn their coin too.
Then the company emailed me directly to tell me that the investment into my person would be too high. They offered me a permanent position which I turned down.
So much about negotiation. I simply became unattractive because of the additional money the agency adds to my rate.

Save your contacts

Meanwhile I got another opportunity directly through a social network.
As green as I was I immediately told the recruiter about my new opportunity and also mentioned the company name. Later the day my new contact gave me a call to tell me a recruiter called him recently and offered him contacts.
I was pretty surprised and somehow dumbfounded... and very disappointed too. The recruiter used my contact without telling me and offered him his army of developers.
Fortunately my contact still wanted to do business with me.
Lesson lerned: Never reveal your business partners to recruiting agencies
Now if I send out my profile to agencies I will never reveal company names. I just write the dates of the projects, what I did there and the to which industry the projects belong to.

The start date

After 4 months I thought its time for a new try. Not every agency could be bad.
I was looking for a new contract starting in a month and made sure my new recruiter knows this.
Soon I got an interview. After the talking and test they asked me for availability. I told them: in a month. I could see their suprise. Damn I thought not again. But they told me it will be okay.
Then I was in contact with the agency again. They did the negotiation and contract details. The recruiter told me that the company said they like me to start next week (I rolled my eyes).
No I told him, I can start in a month not earlier and I made it clear in the beginning.

Ok he told me he will doublecheck with the company.
On the next call the recruiter assured me that my date would be ok and he will send out my contracts soon.

Finally a happy end... I thought.
I signed the contract and send it back to the agency.
After two weeks I got a mail from the agency written that they are sorry but the company withdrawed from the contract and decided to go for someone who is available earlier.
Awesome. Obviousely the company was looking for a guy who is available asap from the beginning. The agency messed up telling them my start date. Then the company thought its best make a contract with me until someone with earlier availability comes along... Not the nicest move from them too I have to admit. Nevertheless if the agency would have communicated my start date from the beginnimg the company would have declined to save the hassle... at least thats what I think.

Alternatives to recruitment agencies

Try to get found

One rule I learned is that its better to be found than to actively search for new clients.
Make yourself a website with references and contact details.
Spread the link on every given opportunity you have.
If you go to a meetup add your url to your meetup message.
If you speak on a meetup make sure your url is visible.
If you are a active member in a forum add your url to the footer and your profile to make sure its visible on each post.
If you don't have references I suggest you create something on your own. For coders this is pretty easy and fun too because you don't have any constraints. Use cutting edge technology and make sure the code looks good and is well tested. Then I suggest to make it open source.

Search social networks

Register on each and every business network possible (e.g. xing, linkedin, angellist).
Search on xing or linkedin for companies that might have projects you can work on.
For me this is pretty simple because almost every larger tech company has its own IT departement. Try to get in touch with leading persons like the CTO. If he needs resources you can be sure he will write you back. If he don't need resources but is smart enough he will add you for the case he needs someone. If he won't add you don't stop here. Try to contact the HR person of the company.

Other job resources

I got a few contacts through
There you have to pay if you want to get in touch with someone who has a job offer. Nowadays many recruiting agencies are registered there too. So read the description and if it says "For a client..." then its a recruiting ageny.
There are other job portals like etengo or
I haven't had experiences with them until now but would be glad if you share your experience.

Tuesday, December 16, 2014

Welcome my newest project:

Hi folks,

I'm not dead yet but have been working on my newest project. Its called StorySeq and you can make stories out of animated sequences.

Please checkout and maybe create a funny christmas story.

Thursday, October 16, 2014

Changed! - The App


I prodly present Changed!.
Changed! looks for changes about texts you care.
I've been using it mostly for prices, but you can use it for almost everything.
The app is available for iOS and Android.
You can find more information at

Tuesday, August 19, 2014

Simple Database Migration-Class using sqlite and fmdb

Checkout the project at github
Then execute "git submodule init" and "git submodule update" to fetch fmdb.
The submodule is at tag 2.3 so it should be stable.

I'd like to present you how I will do database migrations on iOS devices.
The app is running an sqlite db containing a settings table with a db_version entry.
The migration class has defined updates for different database versions. They are presented in a dictionary with versions as keys and "blocks"/closures as values.
For example in the first version of the app normally the base scheme with tables which will be created.
In the second version the app needs an additional table. And in version 2.1 a column has changed and a new column will be inserted.

Then it goes like this.

first time the app starts, version 1.0 of the db scheme:
- db scheme will be created and queries for first version are executed

user is updating the app and starting it
- migration script is executing queries for version 2.0

and so on.

The script is working like that:
There is a Db class that has a version constant.
Now AppDelegate starts the DbMigration script. The script compares the constant of Db-Class with the version found in the settings-table in the database. But wait, first start, there is no database nor a settings table. Thus DbMigration script decides all queries needs to get executed. At the end it inserts the Db-class-constant into the settings table of the database.
After an update the Db-class-constant might have changed and differ from the version in the settings table. Then all the update statements in the migration script that have version greater than the db version will run.

Monday, August 18, 2014

Optional return values cannot have type

This'll crash if resultset is nil with "fatal error: unexpectedly found nil while unwrapping an Optional value":

var resultset: FMResultSet = db.executeQuery(
    "SELECT * FROM settings WHERE id = ?",
    withArgumentsInArray: [10]

While this will run without fatal:

var resultset = db.executeQuery(
    "SELECT * FROM settings WHERE id = ?",
    withArgumentsInArray: [10]

Update 25.08:
They can have a type if the question sign is used:

var resultset: FMResultSet? = db.executeQuery(
    "SELECT * FROM settings WHERE id = ?",
    withArgumentsInArray: [10]