A few months ago I started studying for the MCTS 70-513 exam on Microsoft WCF (web services). Before I started I had already heard of a phenomenon I knew under the name “TestKing”: test-questions to prep you for the actual exam. As I found out, “TestKing” is just one of the more well-known Brain Dump providers: cheat sheets with just about all the possible questions you may get on your actual exam.
Turns out a lot of people use these prep sets, usually as a companion to quite a bit of study time. They ginormously improve your chances of passing the exam, partially because they shield you from (amongst others) the utterly worthless type of question: “In which namespace does BadAssClassXyz live?”. In fact, it seems you can pass an exam with nothing else but about 20 hours of cramming those brain dumps.
Early on, I decided I would try to get the certification without using brain dumps.
Okay, glad I got that decision out of the way. Time to make a plan of attack, time to find out how much study time would be needed to pass the exam without resorting to cheating. So I hit up a typical Google query, but that turned up nothing. Following that I searched Programmers.SE, finding only this meagre question which just links to companies providing test exams or brain dumps. In the end, the only thing remotely useful was a blog post I didn’t find until one week before my exam date: this overview of MSDN links for reviewing the exam objectives.
Turns out, nobody knows, or at least nobody has posted online how much time studying for MCTS exams typically takes. Is it 40 hours? Maybe 150 hours? Or even a 1000 hours? Sure, the answer will always be “it depends” to some degree, but if only someone had posted how much time it took him/her this could help get a general idea.
So I decided to diligently keep trackof my study hours, and publish them on my blog once I had passed my exam. By now I’m the proud owner of an MCTS 70-513 certificate. So stay tuned for part 2 in this series, where I’ll post the study plan actuals that turned out to be good enough for me.
This is a follow-up to my previous post on Hg Hosting Providers. I found that on the surface all four of them were very similar. From the four providers I investigated, CodePlex overall felt most intriguing, so I decided to start by trying out that one.
Note: I participate in another project, which I will be uploading to Bitbucket (because that’s the only one that supports small private projects at no charge), so I may be doing a follow-up on that provider too.
Sign Up and Project Creation
The CodePlex home page lures you into creating a project with a big, purple, Metro-style button:
Step 1 – Create Project Button
When you hit the button you’ll be asked to either sign in or register:
Step 2 – Sign in
If you don’t have an account yet (like I did) you can register for one on the spot. I decided to create an account linked to my Windows Live ID:
Step 3 – Register
The hardest part is the Captcha: damn those things can be a challenge! After finally completing this mini-game, it turned out CodePlex had forgotton all about my intention to “Create a Project”, and instead presented me with my personal (and very empty) project home page:
Step 4 – Account page
Luckily, there’s another (though less obvious) “Create a Project” link on the page. There’s only a small number of fields you have to complete:
Step 5 – Create Project
The whole point for me was to choose Mercurial hosting, but it’s noteworthy that both TFS (which also supports SVN clients) and Git are an option too. Hit “Create” and if all goes well you’ll be directed to the brand new project’s home page:
Step 6 – New Project Overview
The project has now entered the “Setup Period”. This gives you 30 days to set up the project, i.e. before you have to go live. This was in fact a welcomesurprise to me, because since this was my first time coordinating a hosted project the setup period allows me to calmly check out all the features.
Importing the Existing Repository
Keeping in mind that eventually I would be hosting the code online, I had already started with a Hg repository, committing my changes locally. There are several advantages to using version control while still flying solo, amongst others having backups and traceability.
I already suspected it wouldn’t be too hard to merge an existing repository into a new hosted project, and I even got some response to my question on Twitter, indicating it should be possible. The only thing I was worried about is that the username for commits would be “wrong”, because my computer user name “Jeroen” is different from my new CodePlex user name “jeroenheijmans”. To get everything to work I took the following steps:
A simple copy/paste back-up of the existing repository, just to be safe.
With some effort I got this Hg convert trick to work, changing the user name in commits for the existing repository to my CodePlex username.
Make a clone (a.k.a. check out) of the project repository from CodePlex to a new local folder.
Copy the existing repository over the clone from CodePlex.
Some of the hidden files in the .hg folder have to be overwritten. I double checked all files with Notepad++, and in all (my!) cases the clone’s file could be safely overwritten.
Using TortoiseHg I now pushed all the changes. In the previous step the CodePlex URL was probably lost, but that was easily remedied by entering it once more.
To be honest, in hindsight I don’t know if step 4 and 5 are really necessary. I guess you could safely try just pushing your existing repo to CodePlex: if it doesn’t work surely you’ll get an explanatory error message?
Either way, after completing the above steps my CodePlex project contained a complete history of 40+ commits, only minutes after setting up the project!
CodePlex Features Overview
After importing the source code it was time to investigate the various CodePlex features. Given the 30 day setup period I was able to check out all the features without having to worry others may see my silly mistakes. Here’s my first impression of the available features:
Home is the first thing you see if you go to the project URL (which is a nice subdomain of CodePlex: http://yourproject.codeplex.com). It mainly contains some text to explain what the project is all about, and you’re invited to edit it (with Wiki-style markup). Worked nice and easy for my simplistic purposes.
Downloads is the section where you can offer releases, which can have various properties as well as attachments such as binaries or installers. So far I’ve only created two “Planned Releases”, which worked pretty straightforward.
Documentation is Wiki-based. So far I’m headed straight for the quintessential documentation pitfall: I’ll create it once the product’s finished.
Discussions looks like a forum-based commenting area. Given that the project is one we do together with friends we may not get to use this option much.
Issue Tracker is a very basic work-item system. It contains the bare essentials, but not much more. This was a bit disappointing to be honest, I would at least have liked to have some basic formatting, but apparently that’s still a work item on CodePlex itself.
Source Code is the section where… well… you can find the source code! It shows all commits in descending order, and even though I haven’t tried it yet it also shows forks and pull requests. If you click on a commit you get to see the diffs for changed files.
People shows all the coordinators, developers and editors on the project. It’s also the place to invite your team mates to the party!
License is where you can view and change the license for your project. CodePlex allows you to choose from ten different OSI licenses. I’m leaning towards picking the BSD license, but this license stuff feels like a snake pit (with it’s own acronym: IANAL).
So far this list of features seems pretty sufficient. At least: I haven’t “missed” a feature so far.
Conclusions
All together I’m pleasantly surprised by how easy it was to set all this up. I’m not sure (yet) how it actually compares to the other hosting providers I considered, but so far I’m happy I chose CodePlex.
I’m fairly certain our project will be published some time soon, and when it does you can find it at bieb.codeplex.com: join the party!
Most usually, I’m a very organized person. Even before I was programming (when I was making Hero Quest maps in Q&A and WordPerfect) I would still want periodic backups of my data. Given all that, I’ve remained remarkably oblivious of Version Control for quite a long time. Here’s an overview of my VCS history:
1990 – 1992 Derp derp, playing Commander Keen and friends.
On a coding project with friends, one of them suggested we’d use one of the DCVS systems: either Hg or Git. After a short debate (and after reading endless flamewars between the two) we decided on trying Hg. My “re-education” started with reading the HgInit tutorial by Joel Spolsky. Here’s a quote that stuck with me:
It turns out that if you’ve been using Subversion, your brain is a little bit, um, how can I say this politely? You’re brain damaged. No, that’s not polite. You need a little re-education.
True as it is.
To be honest though: I still don’t mind using SVN. At work we have an existing repository from which we’ll probably not be switching, and it even has some advantages over Hg. However, for any new project I would choose a DCVS, either Git or Hg, depending on the circumstances.
So for my latest pet project I’ve started a Hg repository as well. So far I’ve just been committing locally, using it as a backup and history mechanism. However, with friends and family joining on the project I will probably be moving the repository to an Open Source Hosting Provider. There’s a few that came to mind, and I’m currently considering four of them. Even though there’s a decent Wikipedia comparison article, I still decided to make my own comparison table with features I find interesting:
Google Code
Bitbucket
CodePlex
SourceForge
Source Control
Hg, Git, SVN
Hg, Git
Hg, Git, SVN, TFS
Hg, Git, SVN
Issue tracker
Custom
JIRA
Custom
Custom
Wiki
MoinMoin-based markdown
Creole-based markdown
Yes
Daring Fireball-based markdown
Forum
No
No
Yes
Yes
Private projects
No
Yes
No
No
Licenses
Any, single-licensed
?
10 OS licenses available
Any OS license
Authentication
Google Account
Bitbucket account
Codeplex + optional Win. Live
SourceForge account
Projects
250,000+
93,000+
28,000+
350,000+
Currently I’m leaning somewhat towards CodePlex, for no particular reason or rationale. Or perhaps I’ll end up trying them all before deciding. Either way, I’ll sleep another night on it, for now.
Okay, I’ll admit it: I love making lists. I’m one of those people that can make a list of things to do, and add one or two things I’ve already done, just so I can enjoy that feeling you get when you check something off the to-do-list. Do you recognize that feeling?
For books I know there’s wildly popular sites like Goodreads, to keep a list of things to read, get suggestions, and so on. I wanted something simpler, and something I have control over. So I decided to put it up on my blog as a page, just like all the (other?) hipsters with blogs. Not so much a reading list to tell others what they should read, but more a track record where I can quickly look up things I’ve read before.
The book that inspired me for this reading list (shown in the image) is The Pragmatic Programmer, amongst others. Who knows; perhaps this post will inspire others to (re)start a reading list as well?
Want to know what I have been reading? Check out my book list.
This weekend I decided to deep dive in a StackOverflow question on the combination of pseudo-elements and the IE8 (and lower) filters. Even though it seemed to me the question couldn’t be answered with 100% certainty, I still gave it a shot. A similar but better answer got accepted (damn you, “ScottS”!!), but that’s besides the point. The most important thing I learned from answering this question, is understanding the magic in IE (especially version 8 and below). So, for reference, here are the important links of articles that made me understand IE a bit better:
On having Layout, a piece from 2008 explaining the details and consequences of IE’s take on layout.
The kicker from all this research is that I now finally understand this remotely related line of CSS I’ve seen (and even used) a lot:
1
*zoom: 1;
This is a CSS hack to get some versions of IE to behave nicely. So far, nothing new. However, after reading the above articles, I finally understand what it does: it forces the hidden IE property hasLayout to true. And that’s useful for quite a few cases where you’d expect things to have layout, but when they don’t by default.
Hack or not, I’m glad I understand things a wee bit more now.
My next Stack Exchange Challenge post will most likely be about the Programmers SE. One part of the challenge is to actually ask a question I have on the topic. The question I came up with (to be honest, this has been bothering me for months now) took quite some time to write down carefully. So, as I don’t have my next SE Challenge post ready yet, I decided to cross-post my question here on my blog as well.
The Question:what are the practical considerations for the syntax in class and id values?
Note that I’m not asking about the semantics, i.e. the actual words that are being used, as for example described in this blogpost. There are a lot of resources on that side of naming conventions already, in fact obscuring my search for practical information on the various syntactical bits: casing, use of interpunction (specifically the - dash), specific characters to use or avoid, etc.
To sum up the reasons I’m asking this question:
The naming restrictions on id and class don’t naturally lead to any conventions
The abundance of resources on the semantic side of naming conventions obscure searches on the syntactic considerations
I couldn’t find any authorative source on this
There wasn’t any question on SE Programmers yet on this topic
Some of the conventions I’ve considered using:
CSS naming conventions
UpperCamelCase, mainly as a cross-over habit from server side coding
css-style-classes, which is consistent with naming of css properties (but can be annoying when Ctrl+Shift+ArrowKey selection of text)
with_under_scores, which I personally haven’t seen used much
alllowercase, simple to remember but can be hard to read for longer names
UPPERCASEFTW, as a great way to annoy your fellow programmers (perhaps combined with option 4 for readability)
And probably I’ve left out some important options or combinations as well. So: what considerations are there for naming conventions, and to which convention do they lead?
A little while ago this interesting Stack Overflow question caught my attention. The question is about drop caps: a typographical gimmick where the first letter of a paragraph is very big and prominent. In older texts this could be even more than “prominent”, for example this page from an old Dutch Bible:
Drop caps in an old Dutch Bible
Of course, the CSS pseudo-selector :first-letter seems perfect to achieve this effect on the web. The question on Stack Overflow used that as a starting point, and is about a particular situation where IE wouldn’t render correctly. While trying to find a solution to that particular problem I found out things were not so simple, and posted this answer. The answer basically came down to “no way to get it right in all browsers”. With rather “standard” CSS rules, various browsers gave varying results:
Various browsers render drop caps differently
Not very satisfying at all! After thinking about this some more, I decided to try and at least get a “minimal” example of drop caps working in all current browsers. To keep things “minimal” my first try will:
Not bother with padding for now (just set them all at zero);
Not bother (yet) with browsers <IE9;
Stick to the basic 26 characters from the latin alphabet;
Stick with uppercase versions of those characters.
It took some time, but I did come up with decent results. You can show the example html file on my blog, or view it as a jsfiddle. The example contains a reset style and some coloring so you can see the results clearly. However, the nitty gritty is in this bit of CSS:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
p
{
line-height: 1.2em;
}
p.big-first-letter:first-letter, /* Main Experiment with pseudo-selector */
span.big-first-letter /* Experiment benchmark using spans */
{
float: left;
text-transform: uppercase;
line-height: 1.0em;
/* Twice the line-height of a, minus a wee bit
for Opera, which apparently has rounding issues.
Other browsers don't care as much. */
font-size: 2.399999em;
}
This actually gives acceptable and mostly consistent results. Here’s a screenshot of how this renders in up to date versions of my browsers (all on Windows 7):
IE9Google ChromeOperaFirefox
Great! However, one browser is still not playing nice. No, not everyone’s “favorite” browser IE is acting weird, but Firefox is! Have a closer look at the left (:first-letter) rendering in Firefox: the height of the drop cap isn’t what we want it to be. However, some searching on Google leads to a related Stack Overflow question as well as this question, ultimately leading me to a bug from 2007 in Firefox. Guess it can’t be done easily then.
End of the road? Perhaps. But perhaps also a great opportunity to try and create a jQuery plugin that creates drop caps…
At work I spend most of my time looking at a computer screen. At home I also spend most of my time looking at a computer screen. Basically: I spend a lot of time looking at a computer screen. Recently I’ve been looking for ways to make this as pleasant as possible. So far I’ve come up with the following:
From the same article I found out Windows 7 has a built-in screen setup procedure in the media center app (it turns out LCD factory settings are on “eye scorching brightness”).
Work in progress: getting a new set of hi-res screens at work. See point 9 on The Joel Test.
I’m also experimenting with inverted color schemes for my programming tools: C# and JavaScript disguised as Ruby!
In the next few months there will be more changes to my setup, most likely. First up would be a second LCD, although I can’t seem to decide if I want the exact same monitor twice, or perhaps a different one next to my HD one. Either way, so far these changes were more than welcome: can’t imagine how I got along without them.
Lying is useless: I’m addicted… to music. Just about whatever I do, I will have music in the background. Especially when I’m working on the computer: programming, photo-shopping, video-editing, gaming all require music.
Different activities and varying times of day require different types of music for me. Luckily, I enjoy just about all kinds of music. The growing popularity of Spotify has driven both di.fm and last.fm radio from my favorites, and allows me to pick just about anything I want to hear.
This brings us back to the topic of this post then (hope no-one was expecting a guide on how to program music on some device), music for programming duties! I realized I put on certain types of music whenever I’m in a certain type of zone. So here’s a go at my music choice per programming task.
Task
Music Genre
Creating C# interfaces, designing server side code
Footnote: recently ghettofunk has been a great fallback for any programming task. Stickybuds!
Hopefully I’ll be able to look back at this post some time in the future and create an updated overview. Perhaps this will even inspire someone to up a music-programming cross table of their own. If you do: let me know!
Around 1995 I started creating web pages. HTML was my friend, and analogous to the story of Adam and Eve, a companion called CSS was created. I considered HTML to be the robust male of the relationship, and CSS giving the beautiful female touch to my web pages.
Then Darkness came.
A brand new player invaded my perfect little web world and tried to make it into a love triangle. Enter JavaScript. At first this new technique looked awesome to me. I knew Turbo C++ 3.0 (with a nice DOS look and feel) as well as Visual Basic, and was eager to add some dynamic features to my web pages.
Oh how I underestimated the complexity. I knew no patterns, none of my code had ever been reviewed by others, and I tried to figure out everything with trial and error. Plus: I didn’t understand the DOM at all. So I ended up writing stuff like this:
1
2
3
4
5
6
The above snippet must have cost me a week to figure out. I was so frustrated I wanted to ban JavaScript from my pages as much as possible, which is exactly what I did when I learned to use Perl to add dynamic features to web sites.
More than a decade passed, but Darkness was still looming. I tried to stay in the Light with my happy couple HTML and CSS (only tolerating incidental guest appearances by JavaScript). I even turned to WinForms programming in .NET so I wouldn’t have to face the Darkness.
But then my ASP.NET days came, and it turned out: JavaScript was here to stay. However, my second encounter with JavaScript was mediated by jQuery, which had powers rivaling those of Dr. Phil himself. That library makes JavaScript feel like the love child of HTML and CSS, with a dynamic twist.
And so, JavaScript is getting a second chance. Any leftover JavaScript frustrations were explained in this presentation: I started to use JavaScript without ever learning it. So I picked up the corresponding book by Douglas Crockford, which shall be followed by The Definitive Guide. Hopefully this will allow me to Learn to Stop Worrying and Love the Bomb.
Foot note: at the time of writing, the piece of JavaScript code in this post is still running in production, in a Web Shop created in the 90’s, using Perl 5, HTML4, CSS2, and a hint of JavaScript…