What have you done for me lately?

Don’t worry! This is not yet another “I haven’t blogged because…” post. It’s similar though: it’s to aggregate all the cool material I’ve been producing lately instead of writing on my personal blog!

Without further ado, here’s the goodies from the past:

Oh yeah, there’s also some stuff going on in the present:

Finally, here’s some cool stuff I might possibly do in the near future:

  • I’ve worked several months in a Java/Maven/Spring project, which lures me to write about the differences between Java and C#. No promises though!
  • 2018-01-xx: excited to start on a project that uses ClojureScript, hurray for opportunities to learn stuff! Might even write about it, here or on Infi’s blog.
  • 2018-xx-xx: blog post about Top 100 Games is in progress, though no promises here!
  • 2018-xx-xx: a side project that gets sidelined a lot, I still intend to finish EmpGrid some time.

Several things on these lists I want to blog about, but I’m not ready to commit to anything yet. Stay tuned!

Job Hunting Checklist

Having recently switched jobs, now is probably the best possible time for me to write about the applicant’s side of vacancies and job searches in IT. Specifically, I want to give my take on maximizing the chance you’ll land a job at a place you’d want to work at. Put differently, below is (mostly) my own plan for finding a new job.

But wait: that’s not specific enough for a blog post yet! There’s a lot to job hunting. So let me narrow it down to the asynchronous ways to communicate with prospective employers.

What I mean here by “asynchronous“? Well, that includes just about everything that’s not real-time (face-to-face or phone conversations, chat, etc.). I will run down these “channels” one by one, including specific tips for each.

By the way, I hear you thinking: “But that sounds like just a big check list!?”. It is. But hey: check lists are great! Use this one to your advantage. Let’s get started with the basics.

General tips

Several things are important for all of the async channels. Remember:

  • Choose a great avatar you’ll be happy with for a long time to come, and stick with it. Everywhere! This will take a few years to settle in, but after a while it’ll help people recognize you across the board.
  • Be smart about your e-mail addresses. Preferably, you’d get your own domain, use addresses like some-org@yourname.com and github@yourname.com. Alternatively, use the + sign lifehack to differentiate. This will help you separate incoming mail reliably, lets you know who’s leaked or sold your e-mail, and gives you a minor edge with tech orgs because they’ll notice you’ve given things some thought.
  • Do or do not, there is no try. To put it in my own words: either do something right, or don’t do it at all. For example: it’s better to have no LinkedIn profile than an out-of-date one.
  • Try to do as many of the list below as possible, but consider this tip strictly lower priority than the previous tip!
  • Use language correctly, or at least as correct as possible. It’s easy to use a spell checker, proofread, do some proofreading, and do some more proofreading. Tip: read your writing (semi) aloud to yourself to find bugs in your writings.

Okay, so enough with the generic mumbo jumbo. Off to specifics!

Your CV

A lot has already been written about this, so I won’t repeat the basics. But I will make a few important additional points:

  • Decide: short or long. Both are fine. If you go short: try to fit everything on one single page. This is really hard (I could never do it!), but if you can manage it’ll demand respect and it’ll be useful to the reader. If you go long: use “scannable” text and styles (tables, bullet lists, emphasis, and so forth).
  • Use a (non-default) theme. The theme (and sticking strictly to it) will help prevent your CV from becoming ugly. Only try to make a “beautiful” CV if you know how to design or have help in this department.
  • Read “The Non-Designer’s Design Book. It’s a “Must-Have” if you insist on tweaking styles (like me), and when you’re also (like me) not a great designer. It’ll at the least help you prevent your CV from becoming ugly.
  • Use serif fonts. Sans-serif might look nicer on (non-retina) screens, but most of the time folks will read a print of your CV. On paper, a serif font is easier to read.

Open Source platforms (Github, Gitlab, etc)

This one’s not for everyone. Whatever you do or don’t do: be conscious about your choices. That doesn’t mean everything has to be perfect, but do mind the things that are easy to get right. Think about cleaning up utter garbage repos, using correct language when commenting on issues, etc.

If you do decide to work on open source, note that you don’t necissarily need to become a maintainer of a high esteemed project to be noticable. Here are some easier ways to get started:

  • Pet projects are something to put online. Place a big disclaimer that the code should be viewed as such, and you’re fine putting out non-production-worthy code.
  • Create a demo project that shows off how you prefer to code. It’s fine to “reinvent the wheel” or even create yet another “To Do App”, as long as you focus on the code being in “your” style. Place a big disclaimer that the code should be viewed as such, and you’re fine.
  • Create Issues for other projects. Creating an issue with a good repro is usually well-received, and displays qualities very important in day-to-day tech work.
  • Find up-for-grabs issues in a project you’d like to contribute to. Or even open your own (most projects will welcome improvements to documentation, for example).

On a side note, it can also be good to spend some time looking at the source code of open “famous” source projects in your tech stack. It hones your code-reading skills, and demystifies the black boxes they tend to be. Although this isn’t directly visible to prospective employers, it does have intrinsic value and might be a gateway to your own contributions some day.

Community Forums and Q&A (Stack Overflow, etc)

On the one hand I see this different from the previous point (Open Source), on the other hand it kind of isn’t. Specifically Stack Overflow (of which I’m somewhat a fan, as they distribute all content freely, for one because the data is licensed by users at least under CC-By-SA.

Asking questions is probably the easiest way to get started. Note that exemplary questions are a great way to show off your skill: being able to grasp and neatly summarize a reproducible problem is perhaps the number one skill a developer can have. I’ve asked multiple questions I’d proudly show off as part of my resumé.

Answering questions is a lot harder. This is another whole topic on itself so let me just sprinkle some basic advice. First, the “gamefication” can be fun but should not be your primary motivation. Instead, answer to learn about topics. Choose a low(ish) traffic tag to answer questions in, or you’ll get frustrated by the fastest gun in the west: other people will answer extremely fast so you don’t seem to have a chance. And finally: keep at it.

My first few questions and answers on Stack Overflow were pretty bad, but practice makes perfect! For every ten answers with even one upvote there’s at least one that turns out to help a lot of other folks. Seeing a small “+1” trickle in on an old question is a great, warm feeling.

A personal website

Get a personal domain, preferably something with your name in it. Make it a single page with at least:

  • A very basic bio: one or two lines of text about who you are.
  • A generic e-mail address (one that doesn’t matter if it gets a bit of spam).
  • Links to any social media accounts, e.g. Twitter, LinkedIn, but also Meetup, Goodreads, or other media that are professionally relevant.
  • Links to open source profiles, e.g. your GitHub profile or Stack Overflow flair.

Then, optionally, you could do any of these:

  • Link to your blog (see next section).
  • List of your projects, e.g. pet projects, portfolio stuff, your master’s thesis, etc.
  • Link to interesting other sites, e.g. tech blogs you enjoy.
  • A short occupation history if you’re inclined to make that public.
  • Some schema.org info and meta tags for SEO and generally showing off mad skills with details.
  • Ninja-counter-recruitment in your source code, just as organizations do.

A personal blog

Also not for everyone, but it certainly does help showing off enthusiasm, writing skills, and really whatever you want to show off. Blogging about tech is great, but mixing with non-technical posts works even better.

And in addition to exposure, there’s a far more compelling reason to blog: writing helps you organize your thoughts. Having to clearly express your thoughts or opinion about something should also make you think really hard about that thing.

Gaining a bigger audience is a challenge on its own, not usally directly related to the writing itself. So think long and hard before you decide to go down that road, because you’ll have to double down on community-building to get somewhere. But then again: I feel you can get a lot out of a blog without a big audience, too, by just writing to organize your thoughts.

Social Media

Warning: only do this if you enjoy it! The days of “needing” to be on social media to fit in are gone with Gangnam Style and the rest of 2016. Having said that, social media can be helpful in building your online profile.

First up: be consistent. Be consistent with your tag line, title, etc. Be conscious about what you make public and what you keep private. Don’t be afraid to create only a simple account that just links through to another platform; for example, you could create a LinkedIn profile that just tells folks to check your own website.

For the rest this comes down to personal preference. For me, Twitter and a wee bit of LinkedIn are primary professionally used social media. Google+ I find useless for most things, and Facebook is purely a thing for friends and family for me.

As a footnote it’s also worth noting that there are outliers. Goodreads is something I only use because I find the platform interesting, and I keep my professional bookshelf there. Also, Meetup.com has been popular the last two years, so I guess that also counts as a medium to be conscious about.

In closing

Bear with me while I digress a bit. Suppose you want to set up a perfect romantic date with someone. To maximize chances of success, you prepare all the things that can be reasonably prepared. You make sure there’s food, drinks, music, but also toilet paper, running water, etc.

Now let’s zoom in on the food. If you’re a chef or if you like cooking you might go out of your way a bit to cook something fancy, though you probably shouldn’t go too risky (unless that’s part of your charm…). If you hate cooking dinner you might order in something nice, and focus more on other things. In other words:

  • Do or don’t do! There is no “try”.
  • Min-Max All The Things™ that you do.

Back to the point. Maximizing your chances for a perfect job works the same as setting up that perfect date night. Be conscious about what you focus on. Be smart about what you do or don’t do. And whatever you decide you will do: do it right!


Footnote: his was also cross-posted to the Infi company blog.

WordPress, Rowspan, and Feedly

From my previous blogpost I learned that combining WordPress, the rowspan attribute, and Feedly will result in a Picasso-like rendering of your post. This blog doesn’t have “Meta” in its title, and that’s not for nothing. So let’s examine this beast.

Here’s the markup:

And here is that exact table in this very blog post:

Header 1 Header 2
Top-left cell with rowspan = 2 Top-right cell
Bottom-right cell

This will render just fine in both the WordPress editor, like this:

Table with rowspan

And it will also render just fine in WordPress itself, like this:

Table with rowspan in WordPress

 

You can check out how this rendered in Feedly by visiting the actual website for this blog:

Table rendered in Feedly

Which is ugly, but technically just fine! (It’s only missing or ignoring the full-width css attribute.)

So, what went wrong with my previous post? In case you wouldn’t believe me (but you do, don’t you?!), here’s an annottated rendering of that post in Feedly:

Faulty table rendering

Basically, the green bit should’ve come below the table, but instead it got lumped into the bottom right cell. If I check the rendered html in Feedly using the Chrome dev tools, I can see that it does indeed do this.

I’ve checked in my RSS feed and found the culprit, it’s actually WordPress that renders faulty html:

There’s a rogue </p> tag there! In WordPress and its themes this doesn’t matter, as it’s probably simply ignored. But Feedly seems to parse and slightly rewrite (for adding in inline styles for rendering) the post html, causing rendering issues.

Lesson learned: be wary of how WordPress will render your post. :-)

Starting a New Series

It’s been a while since my last post. I miss writing though, so here’s my plan to get back on track. I’ll do it similar to last time I needed to “reboot”, only I haven’t decided on a topic yet. Here are my current ideas:

  • Infographic katas. This would be a nice opportunity to refresh my Photoshop skills.
  • Finishing my projects. I’ve got several smallish OSS projects, I’d love to be finishing them; or, if not finishing, then at least wrapping them up. Writing about it may be what’s needed to get me started.
  • Graphs.  I love to find weird correlations and graph them, not much unlike an XKCD copycat. Perhaps such a series could be fun.
  • Review OSS codebases. I’ve been meaning to do that more structurally anyway, to get a better grasp of how some of them work. I may as well use it as content for my blog.

I’m not sure which one I’ll pick, if any of them. But at least I’m back on my feet thinking about writing again!

1995: It was a very good year…

Apparently, 1995 was a very good year. But wait, I get ahead of myself!

Recently I had a conversation with a friend about CMSes. We were confused, disagreeing on whether “Django” was a CMS or a web application framework. Neither of us was entirely sure, both of us being developers in the Microsoft stack.

Given that looking for (meta-)comparisons, and coming up with (sometimes far fetched or even disrespectful) parallels is a “secret” hobby of mine. So why not attempt to insult as many technology zealots in one go as I can by comparing popular technologies? At the very least I’d find out if Django is a CMS or web framework.

Turns out it is both.

Of course, finding parallels is hard and at times nearly impossible. Platforms and technologies differ and overlap at times, making a tabular comparison quite a challenge. Here’s my (first) attempt at a comparison:

Web App Framework(s) Example CMS(es) Package Manager(s) IDEs
C# (and VB.NET)

Current: 5.0
Originated: 2000
Microsoft

ASP.NET: WebForms & MVC DotNetNuke, Orchard NuGet Visual Studio, MonoDevelop, SharpDevelop
Java

Current: 8
Originated: 1995
Oracle

Spring, JSF, Struts, Google Web Toolkit, etc. Liferay, Hippo, Open CMS, Pulse Maven Eclipse, IntelliJ, NetBeans
PHP

Current: 5.6.0
Originated: 1995
The PHP Group

Zend 2, CakePHP, CodeIgniter, Symfony WordPress, Drupal, Joomla! Composer PhpStorm, PHPEclipse, Zend Studio, NetBeans, Sublime Text
Ruby

Current: 2.1.2
Originated: 1995

Ruby on Rails Radiant, Refinery, BrowserCMS RubyGems n/a
Python

Current: 3.4.1
Originated: 1991
Python Software Foundation

Django Django-CMS, Plone Pip, PyPM n/a
JavaScript (Node)

Current: 5
Originated: 1995
Joyent

Node.js Ghost, KeystoneJS, Hatch.js, Calipso npm n/a
Perl 5

Current: 5
Originated: 1987
The Perl Foundation

Catalyst, Dancer, Mojolicious Bricolage nCPAN, PPM n/a

There were two main takeaways from this comparison for me. First, apparently “Django” is a Python web application framework, and “Django-CMS” is, well: a CMS. Second, 1995 was a very good year: Wikipedia lists 4 out of 7 languages as originating in 1995.

Guess it was a very good year.

The Cost of Buying a House

Buying (and moving into) a house will cost you some downtime in blogging. Some 127 days of downtime, to be precise. But, for me, it was worth it!

Now to get back into the game. For a few weeks now I’ve been trying, but haven’t been able to do so. Why? Not sure. How will I solve it? By doing what I do best: dissect the situation into a well organized overview.

Here’s a list of all the topics I feel I may write about.

Metaphors & Analogies

I love metaphors and analogies, especially when it comes to explaining IT stuff to non-technical folk. This includes but is not limited to the subtype “explanations for x year old” (here’s a great example with Dependency Injection). Some specific topics I enjoy:

  • The difference between Stubs, Fakes, and Mocks, possibly using Santa Clause in the explanation.
  • Differences between types of software testing.
  • Finding appropriate titles for bug tickets that appeal to non-technical folk.
  • A concise description of what I do at work.

Tools of 2013

Maybe I should write about some the tools I started using (more) in 2013:

  • KnockoutJS, a client (JavaScript) MVVM library.
  • Jenkins (CI software) and/or PowerShell scripting.
  • Browser charting libraries.
  • CSS extensions like SASS and LESS.
  • Twitter Bootstrap.

Tools of 2014

Some things I may want to get into some more this coming year:

  • Even though I sometimes hate it: Java. But only if I can get my hands on a Glass.
  • Check out the competition for KnockoutJS.
  • Some of the Apache projects like SOLR, Hadoop, etc.
  • Differences between various DI Containers.

Pet Peeves

Here are some things that keep coming back:

Hmm, surely I have more pet problems? Maybe I should retrofit any I think of into this list.

Gaming

Two things come to mind for this category:

  • An overview of my favorite / most played games;
  • Something about my latest “addiction”: DOTA 2.

Miscellaneous

Making lists is one of the things I’m good at, but still I always end up with this category. Oh well, some final thoughts I may (or may not) write about:

  • Things about The House.
  • Choosing and/or building a home entertainment solution.
  • An update about my Book List.
  • Anything that can serve as a vehicle to practice making Infographics.

In any case: stay tuned!

Stack Exchange Challenge: Full-time

I’ve finished my self-imposed Stack Exchange challenge. What a great feeling: finishing things. Only one thing left on my to do list: create a small epilogue. And this is it.

The epilogue is going to be short, using the same format as the half-time post: a wrap up with links to all the bits of this series.

  1. Episode 1: Cooking Stack Exchange Challenge (March 20th, 2012)
  2. Episode 2: Programming Stack Exchange Challenge (April 2nd, 2012)
  3. Episode 3: Gaming Stack Exchange Challenge (May 14th, 2012)
  4. Episode 4: Android Stack Exchange Challenge (June 20th, 2012)
  5. Episode 5: User Experience Stack Exchange Challenge (September 9th, 2012)
  6. Episode 6: DBA Stack Exchange Challenge (October 8th, 2012)
  1. Episode 7: Area 51 Stack Exchange Challenge (May 13th, 2013)
  2. Episode 8: Area 51 Discuss Stack Exchange Challenge (June 30th, 2013)
  3. Episode 9: Meta Stack Overflow Stack Exchange Challenge (August 12th, 2013)
  4. Episode 10: Stack Overflow Stack Exchange Challenge (September 11th, 2013)

And that’s all I have to say about that. Time for a new challenge?

Episode 9: Meta Stack Overflow Stack Exchange Challenge

This is the second-to-last episode in my Stack Exchange series, and it’ll be about the Meta site for Stack Overflow: the flagship site in the Stack Exchange network. A blog post about a meta site: that’s Meta For You.

What is “Meta” Stack Overflow?

It’s a place where you can discuss Stack Overflow and its sister sites. Jeff Atwood a.k.a. Coding Horror (one of the co-founders of Stack Overflow) long opposed having such a site at all, because discussion leads to internet maddness. He finally turned after he saw the error of his ways. The community has mostly proven herself and built a great meta site.

Current Statistics

Let’s go straight to the nitty gritty!

Fact Meta.SO
Questions 54,154
Questions with no upvoted answers 6,179 (11.41%)
FAQ (questions with most links) 18,493
Top 3 questions 1222 votes, 1027 votes, 659 votes
Questions active last hour 6
All-time rep for top 3 users 226.7k, 157.8k, 96.0k
Meta questions n/a

That’s a lot of content! Some additional interesting facts:

  • The most-used tag is [discussion], a whopping total of 20,949 questions (39% of total!).
  • After that, tags 2, 3 and 4 in ranking are -as expected- [feature-request], [support], and [bug] respectively.
  • The fifth tag with 7,239 questions is [status-completed], which is 13% of total and a respectable 50% of all [feature-request] tagged questions.

All in all a very active site.

My Questions

Much to my own surprise I apparently have asked 10 questions at the time of writing. The top one is a decently upvoted feature-request (NotImplementedException), but I guess all my questions are rather boring: minor bugs and that kind of thing.

One question that stands out a bit: the one with a whopping 9 downvotes. My intentions were good, but the community apparently hates the Fastest Gun In The West vigorously.

My Answers

Again, my participation is much higher than I remembered. Mostly boring stuff again too, with a few minor suggestions on bugfixes and feature-requests. The only one I’m mildly passionate about is on using italics: semantics over style any day!

Interesting Questions

One of the most interesting questions is one that’s deleted. There used to be a question on “What Stack Overflow Is Not”. An old version can still be found using the WayBackMachine. It was a controversial move to delete it, somewhat abrupt, but turned out for the best in my opinion. You can read the explanation here.

Community Wiki

This is actually a great list of questions, explaining the most curious features of the Stack Exchange system, often in great detail. It’s slightly awkward to format a help center using this Q&A system for everything, but it does leverage the Stack Exchange engine pretty well to get community involvement.

Conclusion

This is a very active site. The community obviously loves the place. I think it’s a great place for its purpose, but I try to spend as little time as possible on Meta: the “real” sites are far more interesting.

Episode 8: Area 51 Discuss Stack Exchange Challenge

In the previous episode I discussed Area 51, the staging area for new Stack Exchange sites. This episode is about Area 51’s meta site: “Discuss“.

What is “Discuss” Area 51?

The site shares its FAQ with Area 51 itself. The relevant bit of that page describes “Discuss” as:

For more extensive deliberations and discussions regarding the proposal as a whole, we have a separate Discussion Zone.

So where the proposals themselves should have the small and detailed discussions, “Discuss” is the place to discuss bigger issues.

Current Statistics

As I see it there are three different types of tags on the “Discuss” site:

  1. Category tags (“technology”, “culture”, “science”, etc)
  2. Typical meta tags (“status-completed”, “status-declined”, etc)
  3. Actual “discuss” tags (“area51-meta”, “proposal-scope”, etc)

The first one isn’t very interesting, because the popularity mirrors last episode’s statistics. The second one is really straightforward, and not really interesting either. What is interesting, is the last tag. Here are the stats for the top tags:

Tag Number of Questions
Area51-meta 381 questions
Discussion 197 questions
Proposal-Scope 128 questions
Merge-request 104 questions
Feature-request 68 questions

It may also be interesting to dig up statistics in the format I’ve used in earlier episodes on “normal” Stack Exchange sites, even though it’s comparing apples and oranges to some degree. Here goes:

Fact Discuss.Area51.SE
Questions 2,042
Questions with no upvoted answers 392
FAQ (questions with most links) 313
Top 3 questions 111 votes, 106 votes, 90 votes
Questions active last hour 1
All-time rep for top 3 users 14.5k, 13.9k, 13.4k
Meta questions n/a

Not a very active site, compared to other “normal” Stack Exchange sites.

My Questions

There’s a rather old question I asked in 2011, but that’s not all too interesting. What is interessting is something I can’t link to: I’ve asked two moderately controversial questions (as in: they got mixed and animated responses), but both of them are completely gone from the site. No waybackmachine, no Google cache, nothing. Probably intentional, and probably part of the Area51 process, but completely obscure to me.

Interesting Questions

By and large the most interesting question on Area51 Discuss:

The above is a list of one item, and that’s on purpose, because the above is a list of all interesting questions on “Discuss”…

Conclusion

It’s great that Stack Exchange tries to have an “open” process for creating new communities. However, the process and rules are obscure, and the “Discuss” site doesn’t help all that much. I guess that if you dive deep into Area 51 the “Discuss” site is great, but it’s not well suited for “light use”. Don’t think I’ll spend a lot of time there.

Episode 7: Area 51 Stack Exchange Challenge

Episodes 7 through 9 of this Stack Exchange Challenge will be all about meta-sites. First up: Area 51, the breeding grounds for new sites in the Stack Exchange Family. This episode will not follow the regular “Stats, My own Q&A, Interesting Questions” format, because this subsite is different.

What is Area 51?

The introduction on the site itself sums things up pretty good:

Area 51 is the Stack Exchange Network staging zone, where users come together to build new Q&A sites. New site ideas are proposed, discussed, and the best go on to beta.

Key word here is “users”. This refers to a subset of existing Stack Exchange users: those that take an above-average liking to the Q&A format of the Stack Exchange network. Folks (like yours truly) that leech and occasionally “commit” to actively participate to a new Q&A site, and folks that actually actively propose, monitor, and drive new proposals.

Current Statistics

It’s not possible to roll up statistics as I did in the other episodes, as there are no “Questions” in Area 51. However, there is one interesting statistic, which is the number of proposed Q&A sites by topic:

Topic Number of Proposals
Technology 208
Culture 104
Science 74
Life 70
Recreation 50
Professional 43
Arts 40
Business 27

As you can see, Technology is twice as big as the second-largest category. This is no surprise, because the largest Stack Exchange sites (which are the most obvious gateway to Area 51) are all tech sites.

All this has an interesting effect on Proposals, and on the sites that make it into beta and beyond. These sites, no matter what category they fall in, tend to draw these very tech-savvy users that roam Stack Exchange. This causes an unusually high degree of… well… geekness on those sites. I’ve contributed my fair share of geekness, and others have too.

Interesting Proposals

The default view shows the hottest proposals, which is nice because there’s a total of 616 proposed Q&A sites. I guess from those proposals a few are (as far as I know) interesting in one way or another:

  • Atheism and Agnosticism is interesting, because the same proposal has already been shot down twice. Much to my surprise, any trace to the old proposals has been erased.
  • Stack Overflow in (French / Hindi / Italian / Spanish / etc). Some of those have even been closed before and have been restarted. Glad I’m proficient in/at/with English.
  • Lockpicking! I’m currently committed to actively particpate if this site reaches beta. Purely recreational stuff, of course…

The above proposals are the ones that piqued my interest. Have a look yourself to see if there’s any you like. To each his own.

Conclusion

The basic idea behind Area 51 seems solid. The fact that the user base is not too diverse may not work in its favor though. Not that it matters to me: most topics improve with a touch of geekness to it as far as I’m concerned. I’ll be browsing the staging area every once in a while, and perhaps one day even participate in a beta.