by Alan Skorkin on February 8, 2010
I saw a post by Max Klein today, How to become rich even if nobody is following you on twitter, it made me sad. Go have a read – I’ll wait…
Do you know why I am sad? Because, there is a name for what he is advocating, it’s called spam! I’ve been interested in marketing (the regular kind and the online kind) for almost 2 years now and nothing Max said is a revelation. The shadier parts of the online marketing world have been doing it for years, it’s got many names, micro-niche blogging, micro-niche sites, made-for-adsense sites etc. It’s not new, but it has hung around for years, because it works. You heard me, it works, which doesn’t make it any nobler.
I know he is not just advocating building made-for-adsense sites, it’s not the method, it’s the attitude that goes with it, that is the real issue. Lets not care about providing any kind of value, lets not worry about any sort of professionalism, all we want to do is scam some suckers out of $1 a day and believe you me there are plenty of suckers on the web. Let’s turn our craft into a factory that produces cheap, low-value crap, but can churn it out in hundreds and thousands. And maybe after a little while we start calling ourselves a ‘guru’, no ‘junior vice guru’; oh hell, let’s not mince words – ‘marketing consultant’. We’ll branch out into SEO and ‘brand management’. We’re no longer in the code business, we’re in the making $1 a day business.
by Alan Skorkin on February 7, 2010
No, not the doll – it was a girl I met while out with my mates :). Apparently girls with that name actually do exist, but more about that later. How often have you been in a situation where you feel powerless to change the accepted state of affairs? Stupid question – it happens all the time especially if you’re plain-old ordinary Joe developer (as opposed to shiny and go-getting Joseph manager). The way I see it, this feeling of ‘drowning in the status quo’ actually has two phases.
- You see something wrong (that is out of your immediate control) and you’re eager to change it, so – bright eyed and idealistic – you seek out your immediate management, or business representatives, or whoever you think has some authority, only to be met with some of these classics:
- “The business would never go for it”
- “We’re too invested in this technology, process, tool etc.”
- “Some battles aren’t worth fighting”
- “The customer has specified the tech stack (lets not rock the boat)”
- etc.
by Alan Skorkin on February 2, 2010
Of course, we’re not going to write a full-on search engine in this one post, that would take at least 2 :). But, surprisingly enough, given our knowledge of inverted indexes (which I talked about previously), we can actually cobble together a very basic boolean information retrieval system relatively easily, all we need is a little bit more knowledge and a couple of algorithms, so guess what this post is going to be about.
Boolean Queries
So, what are boolean queries? I guess the best way to explain it is to contrast boolean queries with the type of search we know best – web search. Web search is an example of a ranked retrieval system. In a ranked system users typically use free text queries to define their search parameters and the results returned by the system are ranked in order of relevance (hence the name). A boolean system on the other hand has the following properties:
- users employ a special syntax (i.e. operators such as AND, OR, NOT etc) to define their queries
- the results are not ranked by relevance (being a boolean system)
by Alan Skorkin on January 31, 2010
Oh yeah, we do TDD, after all we’re an agile team! That’s what we tell our peers and it is even true, it is just not true 100% of the time. But everyone kind of agrees not to dig too deep – after all they are in exactly the same boat – and we all get to feel good about our process and how we do things in our neck of the woods. Let’s face it, we all fall back into non-TDD practices every day, that doesn’t mean we don’t write tests it just means we don’t always write the tests first. For some reason people often feel like they need to cover this up, as if they loose some credibility by not being a TDD maniac and that’s patent nonsense. In the kind of work we do as developers, it is perfectly natural to not be doing TDD all the time, the breadth of technology we work with on a daily basis almost demands this. Let’s examine a typical TDD scenario (or at least typical for me) and perhaps things will get a little clearer.
by Alan Skorkin on January 27, 2010
Whenever several people get together to form a team, issues always arise, that’s a fact. Developers are just not a very homogenous bunch (or is that humans), everyone has an opinion, everyone thinks their way of achieving the goal (whatever it happens to be) is best, it is a recipe for confrontation. Of course we all learn to work together eventually, teams gel or at the very least learn to function, it takes a while but we live with it, after all it is just the forming, norming, storming before we get to the chunky goodness that is performing. However, just because there is no obvious dysfunction doesn’t mean the team is a well oiled machine. We find a common framework, but our opinions and values are still the same and potentially different from those of our team members; and so the tension simmers.
As agilists we know the importance of getting along with everyone, of putting people first and being pragmatic – does that mean we’re immune? Have you ever worked on an agile team, it’s all hat tipping and tea parties, isn’t it?
by Alan Skorkin on January 26, 2010
If you’re into Ruby and are not yet using RVM (ruby version manager) you’re doing yourself a disservice. It’s a great little tool that allows you to easily have multiple Ruby installs on the one machine and will manage all the associated complexity for you (@markmansour originally put me onto it). You can switch between different Ruby versions instantly and if you need to make sure that your code works with multiple Ruby versions (e.g. 1.8 and 1.9, or 1.8 and JRuby), then you will really, really love it. Well, I hope you’re excited, so lets get you set up with your very own RVM install, you do need Linux (I am using Ubuntu), so if you need to work with multiple Rubies on windows, may god have mercy on your soul.
Installing RVM And Multiple Rubies
Ok, first thing first, RVM is a ruby gem so you will need to have some sort of Ruby install on your system already. It is a bit of a pain, but a small price to pay for the blessing you’re about to receive. Setting up rvm is pretty simple.
Firstly, install the gem:
by Alan Skorkin on January 26, 2010
A little while ago I wrote a tiny little crawler, at the time I promised myself that having dabbled in crawling I would also cover searching, indexing and other web-search related activities. Little did I know back then just how sparse my knowledge in the area actually was, although some of the comments I received regarding the limitations of my crawler should have probably clued me in :). I can’t rightly say that I am an expert now, but I did learn a little bit in the last few months, enough to know just how complex this area can be. Regardless, I feel that I have reached a milestone in that I can now write about search without making a complete idiot out of myself (I hope :)), which means it is time to fulfill that promise I made to myself.
I’d actually love to cover the ins and outs of writing a big-boy crawler, but that’s a story for another post, for the moment I’ll begin with the fundamentals:
- some basic terminology for you to throw around at parties
- the anatomy of a basic index, the fundamental underpinning of any search engine
by Alan Skorkin on October 5, 2009
Is what they should have called a 3 page whitepaper. Instead they wrote a 100 page book and sold it for $30 ($20 on Amazon). I am talking about High Performance Websites. I don’t like to rant about books, I believe you can never read too many, but in this case paying that much money for a 2 hour read stretched even my credulity. And still I would have been happy if it was 100 pages packed full of awesome content. But, you guessed it, in this case, if you cut out the filler you could really fit all the useful info into about 3 pages (which would have made those 3 pages a really awesome resource).
Still I can’t be 100% critical, the book did teach me a few things I didn’t know before, and if you’re predominantly a back-end developer you will probably pick out a few useful tidbits as well. Still, after you finish it you kind-of wish you stopped reading after the table of contents, which would have covered 80% of the useful info in the book (but of course you wouldn’t know this until you’ve read through the whole thing). Luckily, since I’ve already been through it, I can save many other people the time and the money and create a summary – which is what this book should have been to start with.
by Alan Skorkin on October 1, 2009
Every couple of years or so I seem to come full circle and arrive at the same conclusion, there must be something wrong with me. You see, I hate coding and listening to music at the same time! That’s right, all my friend seem to be able to do it, most people I know swear by it, even popular media tries to push us that way, but I just can’t do it. Music distracts and annoys me when I am coding, am I the only one?
There are 2 schools of thought when it comes to listening to music and doing creative-analytical activities like coding. It all hinges on your right brain (as opposed to your wrong left brain :)).
- Some people believe that doing a right-brain activity such as listening to music, fully engages that half of the brain. This means that there is no leftover right-brain capacity to devote to your coding task. This will not prevent you from coding effectively, but it does prevent you from being able to do things that are normally associate with the right side of the brain such as, intuitive leaps of logic when debugging, or seeing large patterns in the code and bending them into different shapes. Instead your coding will be more logical and formulaic relying on prior knowledge and opinions you have formed about coding style and practices.
by Alan Skorkin on September 29, 2009
I’ve recently written about redirecting the output of commands (standard out and standard error) to a file using bash. That is part of fundamental bash usage, but what if you want to redirect the output of a command to a file but also have that output go to the screen. Well, the bash shell has a handy little command that allows you to do just that. The command is called tee.
Rather than redirecting the output of a command to a file using the standard technique e.g.:
alan@alan-ubuntu-desktop:~/scrap$ ls -al > blah.txt
alan@alan-ubuntu-desktop:~/scrap$
You can instead pipe the output to tee and use that command to save the output to a file and at the same time echo everything to the screen e.g.:
alan@alan-ubuntu-desktop:~/scrap$ ls -al | tee blah.txt
total 8
drwxr-xr-x 2 alan alan 4096 2009-09-29 21:16 .
drwxr-xr-x 37 alan alan 4096 2009-09-29 21:14 ..
-rw-r--r-- 1 alan alan 0 2009-09-29 21:16 blah.txt
-rw-r--r-- 1 alan alan 0 2009-09-29 21:09 file1.txt
-rw-r--r-- 1 alan alan 0 2009-09-29 21:10 file2.txt
alan@alan-ubuntu-desktop:~/scrap$
Simple but very useful in certain situations.