Sunday, 12 May 2013

One year

Just over a year has passed since I created my blog and I just wanted to reflect a little on how I feel everything has gone, the impact it's had on my life and go over the most popular posts to date.

Getting stuff done

My life has changed so much over the past year, on both a personal level and professional. I created my blog because I wanted to be better at what I do, I found it to be an incredible motivational tool especially since I made a commit to myself (and others) about posting. When I started, I wanted to post at least once a week and I ramped that up to twice a week in the middle as I felt I could do more. I mostly kept my promises which I'm very happy about and it just illustrates the power of blogging and making things public.

App screenshot

If you have been following me for a whole you probably could guess I also promised myself to brush up on my algorithms and data structures also. During the past year I read The Algorithm Design Manual cover to cover which taught me a lot and really changed the way that I develop software, I used to struggle determining an algorithm's time complexity for example but now it's a piece of cake.

I also released my first app on the Play Store, a widget to aid in Korean language vocabulary acquisition built primarily for myself. I have another app which I've been working on but I've put it on hold due to other work.

I became active on Stack Overflow and had a great time in the process, it's such a cleverly designed system how it encourages good/helpful behaviour by making it fun. I went really hard at this for a while managing to rack up a whopping 468 points on one day.

Designing

It's only been a year but I've redone the look and feel of the site twice. I didn't have much experience actually designing software before this as I'm not a designer.

Design stage 1
Design stage 2
Design stage 3

Pretty huge difference looking at the shots, for the first redesign I was a little scared to jump in and heavily change the Blogger template but for the second one I got my hands dirty.

Blogging, what I did right

Here are a few things I think were done right.

Learn

If you can't explain it simply, you don't understand it well enough.

Albert Einstein

A lot of my posts are actually little research projects where I am interested in a particular technology or technique so I spent a few hours to a weekend researching it and then explaining it to the world in my own words. Before my blog I just completely lacked motivation to understand something fully when investigating new technologies. This is really different when you're writing an article that's written by yourself, you need to make the material quality as it affects your image.

Labels/tags

When you're a bit of an OCD when it comes to organisation like myself you stop to think about things like at what level should I be labelling my posts.

For example I could label a post about the different between an interface and a class in C# with ".NET, C#, VB.NET, class, interface, code, programming, tips, comparison, ...", I've always found this sort of tagging not particularly good because your users will be completely overwhelmed by the thousands of tags in your list and resort to searching which would return the same results anyway. Instead I went with a much more restrained approach only considering really big keywords that I think would be useful to a user.

Blogging, what I did wrong

This was my first blogging experience, naturally I made a few mistakes along the way.

Code formatting

I started off doing my code format in Visual Studio, copy and pasting to Word and then copying and pasting into Blogger which preserved the VS styles. I knew this was bad but I didn't really know what people did in these cases (and didn't want to figure it out when I was writing my first few posts). I remedied this later by including Google prettyprint and writing my code in <pre> tags.

Search

I'm kicking myself a little because I still don't have a search facility on the blog. It was enabled for a few months but I got rid of it when I did the second redesign. Unfortunately the Blogger widget is made with tables (yes, tables Google!) and as you know tables aren't the best for styling and accessibility so I got rid of it. This will probably be of more use to me than anyone else because I frequently use a good number of the articles as references. I just haven't gotten around to re-enabling and trying to style it in a nice, responsive way.

Most popular posts

Here is a list of the most popular posts to date (based on +1s/likes), naturally listed in reverse order to heighten suspense.

10. Blog redesign #2

I redesigned the site in September first, a short period after that I realised I totally hate white text on dark background so I gave it another go in January. This time I really went all out, redoing the logo, giving the menu another level of navigation, making it responsive, adding some high pixel density graphics and paying attention to the typography. I was really happy with the result. Since then I've only done a few small tweaks, nothing major.

Blog redesign 2

9. Data-bind a Knockout.js model infinitely deep

I went with a new format with this post, normally my posts are code snippets with brief technical discussions or more in a more reference-like format. This one was a full blown knockout tutorial using a running example.

Knockout

8. SASS mixins vs placeholder selectors

A little explanation on the difference between using mixins and placeholders in SASS.

7. Organising the app groups on your start screen

Pretty much the first thing I tried to do after installing a few apps was figure out how to organise my start menu. Seeing as it was not immediately obvious, I made a little tutorial.

Windows start

6. Algorithm: Merge sort

I wrote a series on sorting algorithms which was really fun, this was one of the more in-depth ones containing three different implementations of merge sort.

Merge sort

5. Manipulating the size of List<T>

This came about purely because I discovered that List.Capacity existed and was curious about the memory implications of using it. Originally it just explained Lists in C# but I some addition research for ArrayLists in Java after coming across this question on Stack Overflow and included that in the post.

4. Start using System.Threading.Tasks.Parallel now!

A little after I used the System.Threading.Tasks library for the first time, I wanted to share how super easy to use I found it.

3. Data structure: Binary heap

Part of my series on data structures which explained how min-heaps and max-heaps work with an accompanying implementation.

Minheap

2. The A* pathfinding algorithm

I'm glad this one was number 2 as it probably took the longest time of any to make. It was also my first really big post also spawning my first 'page', a demo of the algorithm written in JavaScript.

A*

1. Triangles in CSS

By far the most popular post. A detailed look at how triangles work in CSS.

Triangle