I have not written any summary since 2010, and I don't remember much from 2011, but I want to write short summary for 2012 and 2013. They were busy years, lots of things happened!
February 2012: moved in to new flat with Gosia. That place was great, one of the best we have lived in - cozy one bedroom, in central Warsaw. We still sometimes talk about how great was living there.
April-June: I was working on new version of Apphance - library that let you report bug reports from your mobile app.
July: as a result of working on Apphance, I had the change to go to San Francisco and help integrate it with task management system and apps for one of the most well known IT company in the world. I spent four weeks on-site, and used all my free time when I was not working to travel around California and sightseeing. I definitely recommend visiting Yosemite National Park!
August: we began to plan what we want to do next, we were planning to move abroad, and our plans began co crystallize. I went for job interview for Amazon to Prague, and few weeks later for few days to London. Interviews went well and even that Toronto sounds great, we've chosen to move to London.
September: I started working at Bloomberg on 10th as Senior Software Engineer in our mobile team(we are responsible for Bloomberg Anywhere app). The team here is great, we have a lot of very talented people. Move to London went pretty smoothly, I have found a flat after a week, and we moved in at the end of the month. Our flat was in Canning Town, close to DLR and Emirates Airline.
October-March-May: We were working hard and trying to get used to new place. In March we have moved to new place near Langdon Park, only few stations from Canning Town via DLR, but with much better transport to the office and nicer flat. Then we spend some time furnishing the flat, buying appliance, etc.
June: I went to WWDC 2013 to San Francisco with couple fom guys from the company. Great experience, we rented a car and traveled around San Francisco, Palo Alto and of course Cupertino.
6th July: me and Gosia got married! We had great wedding in Warsaw, with family and lot of friends. I would like to thank everyone that came to celebrate with us! After the wedding we went for honeymoon to Turkey.
August-January: busy time at work modernizing our code base - learned a lot, and enjoyed this time the most. We were pair programming for around three months and it was good experience, we have shared knowledge, improved communication within the team, and produced something that will last a long time!
That's it. Now, following tradition from previous years let's take a look at what I have planned to do and what I have managed to accomplish:
"go with Gosia to London for few months, this time between June and September" - done
"increase income from my private development to 1000$/month" - well, fail
"learn design patterns, and how to make good design" - done
"learn test driven development" - done
Plans for 2014?
gain expertise in C++11, modern C++ development, cross platform development
go sightseeing UK a bit more: Lake District, castle in Edinburgh, York(recommendations are welcome)
learn few more programming languages: python, bash, ruby, perl
release some new Windows Phone apps
learn cmake, vagrant, jenkins(more in-depth)
build some awesome tools for analyzing git repositories (most changed files, some visualization like gource, etc.)
Last weekend(5-7 April) I have been on game development conference IGK in Siedlce. It was 10th anniversary of the conference, so even that I had to take morning flight, and then another one to be back at work on Monday morning, it was worth it.
I can’t say much about presentation that took place during the conference, as I came at the end of second day, but I have started with my team (Kamil “ayufan” Trzciński, Konrad “Rodrigo” Rodzik, Jarek “agent_j” Pelczar) in 8h game programming contest “Compo” and it was awesome!
This year, twelve teams joined the competition, producing in 8h all kinds of crazy games. Our game took 2nd place, we made top-down “tank vs tank” with multiplayer up to 4 players, with tanks controlled from a smartphone. The source code can be downloaded from bitbucket: https://bitbucket.org/gosuwachu/igk-2013/src.
As always time was short, but we managed to do everything we planned and even a little bit more. Game was written in C++ and cocos2d-x.
I just want to congratulate to all the teams that started this year, and I hope that we will meet again next year!
GMail is popular email service provided by Google. Whether it is your professional or private email, in both cases, your inbox can get filled with emails about different subjects, with some important more than others. Here I will tell you about few things that I have learnt about managing my inbox, and how to stay productive.
Keep your inbox small
When I first started using GMail, I used to keep all my emails in inbox. I quickly figured, that sometimes when I get an email I should do something about it, like pay my bills. Keeping all the emails in inbox makes your life harder, as you don't know which of things you have already done, and which not. Solution to this problem is simple: if you have an email that requires some action from you, leave it in inbox until it is finished, after that just archive it. This way you can postpone tasks, and never forget about them. You will also know what have already been done.
Do not delete emails, archive them
Keeping track of all of your emails is important. You never know when you will need some information again. Obvious example is when you need that login and password to some service that you get when you first register there, but you may also want to know if you if someone is waiting for you to reply, or to prove that you have done what you have been asked for. It is especially important when working with clients. Send email after a meeting, summarizing everything you came up with, and ask people to verify, if everything is correct. If after few months someone will get back to you, saying that you haven't done something, you will have that email. It works, and we use it a lot.
Use shortcuts
You just came to work and already have 50 new messages? An hour for digging through wasted? No. Learn keyboard shortcuts for the most frequently used actions. My favorites are:
[, ] - archive and move to previous/next message
j, k - move to previous/next message
c - compose new message
Small thing, but will save you a lot of time in the end.
Search
Google has great search engine, which also works for your emails. Instead of going through list of 5,000 messages, try to use search. You can use advanced search options to find things easier, here is the list of all the options: http://support.google.com/mail/bin/answer.py?hl=en&answer=7190.
Recently with a lot of help from guys from Polidea, we have created few useful output customization for our version control systems(for those who use terminal). So let's start with mercurial, here is part of the .hgrc file (Mercurial.ini on Windows, however some commands might not work):
# extension for paging mercurial output[pager]pager=LESS='FSRX' less
attend= annotate, cat, diff, export, glog, log, qdiff, hist
# extension do display log in graphical way[extensions]graphlog=pager=# alias for pretty printing mercurial log[alias]hist= glog --template "33[31m{node|short}33[0m33[1;34m<{author|person}>33[0m33[32m({date|age})33[0m \n\t\t{desc}\n"
We first enable and configure pager extension which basically allows you to scroll through the command output, it works pretty much like hg <your command> | less. Then we enable graphlog extension, that makes hg log to print nicely formated graph of branches, merges, commits, etc. Finally to additionally color log output we do some magic, and define our own hg log with custom template. Final result of running hg hist looks like this:
The same can be done for git. Here is equivalent .gitconfig (thanks to Wojciech Erbetowski for this):
I had the opportunity to integrate and work with CocoaLumberjack in my latest project. It is very nice logging library, with few useful features that makes it worth using:
multiple outputs, you can direct your logs to be printed in the XCode console, system console or whatever other place you want by implementing one basic protocol (that's actually what we did to have apphance logging in production builds only)
ability to define log level: error, warning, info, debug, verbose. It is even possible to define logging level, not only for the entire applications, but also for selected files in your project
it is faster than NSLog in most cases
// Add custom logging outputs:[DDLogaddLogger:[DDASLLoggersharedInstance]];[DDLogaddLogger:[DDTTYLoggersharedInstance]];// Convert from this:NSLog(@"Broken sprocket detected!");NSLog(@"User selected file:%@ withSize:%u",filePath,fileSize);// To this:DDLogError(@"Broken sprocket detected!");DDLogVerbose(@"User selected file:%@ withSize:%u",filePath,fileSize);