Wednesday, September 2, 2009

Attention Seeking Headline

Rant delivered with conviction of superiority.

Saturday, August 1, 2009

Teh Suck

Grrr

Tuesday, July 28, 2009

Consolation: It's not you, it's the other guy.

I have been doing some freelancing work but it hasn't really been buttering the bread on a consistent basis. I avoid PHP which doesn't really leave much else job wise. Normally I value my time and flexible working hours far more than dollars so a full time job isn't something I'd really look for. Once you have been poor long enough however you start resorting to desperate measures and thinking of all sorts of crazy ideas. Boredom sets in and you even do things like offer your services practically free. Fail with consolation:
it is also clear to me that you possess attributes that would make an excellent employee - talent, enthusiasm and dedication. I would have no issues with offering you work if I were able to get XXXX to that stage... I am more than happy for you to put me down as a reference for any job opportunities, as I would highly recommend you to any employer.
Now whether the guy was just politely fobbing me off or he actually meant that I'm not entirely sure half the time. I've never particularly thought of myself as `talented` when it comes to code. `Persistent` like a retarded dog who doesn't know when to stop, sure.

When you can't practically give yourself away and you again decide you really want stable cash what do you then? 'I know! I'll look for a *well paying* job. What a shrewd and cunning plan!'

As I'm starting to get reasonably fluent with python, not needing references every 10 seconds, I naturally looked for jobs using that. There were however none available that didn't require `3 years experience` and `knowledge of finance` etc. The `python` keyword did however turn up another interesting advertisement.

We're a Richmond-based software development studio specialising in web technologies such as Flex and Ruby on Rails. We are looking for a passionate and energetic developer to join our team of three.

We're more interested in what you can do than what you say you can do. So prove yourself with your attitude and with your code.

We're looking for someone who's spent their evenings and weekends working on their own projects, and has something to show for it. We have a particular love of open source collaboration, and you should too. Tell us about the projects you watch, and the projects you contribute to: do you have accounts with Github, SourceForge, or RubyForge?

We want to be floored by your enthusiasm to work with new products, programs, and languages. Dynamic or functional languages like Python, Ruby, Actionscript, Erlang, and Haskell are looked upon favorably. We're not interested in your academic transcript, your 2-day ScrumMaster black-belt, or your Microsoft certificates, but we are interested in real talent, sharp skills, and unmatched motivation.

You must send through a cover letter describing your pet projects or open source projects, example source code from the project, and your resume to recruitment@silverpond.com.au. We won't consider any applications which don't have all three.

Normally I wouldn't have even bothered applying for something like that but I thought, if that guy will give me a reference then I may as well try it. I didn't really have much time to create an application or research the position all that much as I was away on a trip helping my father with a building project. Being an unfit person who would normally spend way too much time on a computer, after a days work I was quite tired in my poor fitness. I mostly reused an old application for another Job at a game development firm.

I was somewhat suprised when I got a positive sounding response from the recruiter/director of the company "I'm free to chat late this week or early next week, so I'm looking forward to hearing from you"

We eventually had a chat a few days later, which I wasn't exactly well prepared for. There was some initial awkardness with some nerves causing to me blurt out "good thanks and yourself" completely out of phase. It then smoothened out somewhat and I was happy to find the team was a group of 20 somethings and that it wasn't an issue I didn't have any experience with the technologies they used. I didn't really have many decent questions prepared ( it was actually my first job interview! ) but regardless at the end I was left with the impression it went well enough. The recruiter wanted me to come in a few days later for some facetime with the rest of the team.

As it turns out I never got that opportunity. Someone else had done their homework and really impressed them so well with their phone interview they got the job solely on that. I found this out as after as I asked the recruiter for any particular reasons the other candidate was chosen (over me). I was very appreciative with the email he replied with:

1) The candidate we chose asked questions about the projects we're doing and suggested improvements to them

2) The candidate also outlined what he could contribute to the team, and offered a timeframe to do them in.

Of the 80 of so applicants it was between the candidate, one other person and yourself. Your energy and enthusiasm is highly commendable. I'll touch base with you later in the year, say November, and see where you're at.
Overall, I have mixed feelings. I'm somewhat disappointed that I didn't have greater time to research the company more and also that I didn't make better use of the time I did have. The biggest disappointment is the fact that I missed out on a job where they didn't care that I lacked a degree or even any real experience with their tools of choice. "I don't really know ruby.." I had said. "It won't be an issue" was the reply. Similar conversations re: git / rails / flex. However it's somewhat encouraging to have made the short list from 80 candidates. That I feel pretty good about.

Will I continue investigating ruby / rails? My only concern is that it seems somewhat wasteful to walk away from my python experience ( It's the libraries stupid ) for a language so similiar. My `next language` to learn has always been planned to be C then possibly assembly.

I wonder if I would learn much from ruby about programming in general coming from python. Perhaps the similarities would be actually a boon to recognizing core concepts and distilling an understanding, compared to something radically different where you have no reference? I'm not really sure and I doubt I could really know for myself unless I tried. However, at the end of the day; there *does* seem to be a lot more work available for ruby/rails as opposed to python.

I can't shake the nagging suspicion I have just been "It's not you it's XXXX"d twice.

I posted on facebook, "didn't get the job and wonders why he marginalizes himself learning obscure tool-sets". A friend commented:
And don't focus on tool-sets - focus on your general problem solving abilities, There are a million different ways to solve any programming problem these days. Key thing is to be adaptable.
I agree with the notion that general problem solving ability is more important than any particular toolset. However, if you had said ability *and* a proficiency with a particular toolset it would make sense to use them where possible. Using the `right tool for the job` is part of solving problems.

Python isn't exactly an `obscure` toolset, however if you are unwilling to work with PHP you definitely are marginalized. I have a very low pain threshold in general. PHP is painful. I don't like pain. Nuff said.

Of interest to me was that the recruiter during his `wish you all the best` phonecall mentioned that the ruby community met once a month (in my home city) Perhaps learning some ruby/rails and getting involved would at the least yield some freelancing contracts. Never really been to any geek meetups. Surely beer is involved?

Monday, July 27, 2009

Ruby Tuesday

IPython is a huge part of my workflow. How to replace it?

(1:24:57 PM) akalias: Does ruby have an equivalent to python's IPython ? ie a hugely enhanced shell with better completion / syntax coloring etc?
(1:25:32 PM) dominikh: irb with auto_indent and the "wirble" gem

I have sourced a few ruby/git ebooks

Windows Ruby Solutions


(1:26:08 PM) akalias: what is the best option for ruby on windows? a vm with linux ;) ?
(1:26:25 PM) dominikh: in my opinion actually yes...
(1:26:39 PM) dominikh: don't know if you can even get a decent terminal in window

The solution is simple: remove windows from the ruby mix

I have VMWare installed and preconfigured 256MB `headless` Ubuntu webserver appliances are readily available. If I set up one of these with SAMBA file-sharing I should be able to use my existing toolset quite easily and use SSH to log in.

Now if only the internet wasn't so damn slow where I live...

UPDATE:

Net is super slow - however I discovered that I had an old Gutsy Gibbon image laying about on one of my portables. It already had colemak keymap installed. The problem was Gutsy Gibbon has reached the EOL. apt-get was no longer working
(5:00:13 PM) ubottu: wants you to know: For upgrading, see the instructions at https://help.ubuntu.com/community/UpgradeNotes - see also http://www.ubuntu.com/getubuntu/upgrading



No problem.

UPDATE:

Compiling Ruby 1.9.1 from source

Windows Ruby Options

I'm looking at learning ruby/rails/git for a full-time job I'm a candidate for. Windows seems to be very much a second class citizen in all of these worlds. Git at least has MSYS git readily available and well maintained. Ruby is another story.

The 1.9 version of ruby, I'm assuming is used by the company, was released in late 07 and now, midway through 09, there is no `one click installer` available.

You can download a 1.9 binary zip at patch level 0 ( the latest is in the high two hundreds ) but it is missing crucial dlls such as zlib and readline.

What's a windoze fool to do? I'm familiar with linux, mostly ubuntu/debian but a lot more productive in a patched up windows. I use replacement windows managers, independent virtual desktop managers for each monitor, a replacement for explorer etc

I have tried setting up a similar environment using linux before but my crappy video card wouldn't allow virtual desktop sets per monitor. Changing environments *and* languages at the same time wouldn't be that smart.

Probably the best would be to try ( in order ):

I have played with ruby under cygwin in the past and it was retarded slow so that is not really an option.

Delving Into Ruby

A lot of python users seem to hold a fair amount of contempt for ruby. They don't like the use of `perlish` punctuation and operators like `@`, `=~` and `:` and its `more than one way` expressiveness.

I have always looked at ruby code and thought the syntax seemed quite readable. Having explicit repeated sections like `self.` as instance variable in python seems just noisy and I prefer the more compact @ruby way.

Rails seems to be architected with a controller class `instance` per request, the view context sourced from the controllers instance variables.
def method
@a = 'hello'
@b = @a * 4
@c = @b * 3
end

Compare this with the typical python web paradigm. Instance variables (self.xxx) are unused as controller instances are shared between requests. Locals are built up first and then redeclared, returned as a context dict.
def method(self):
a = 'hello'
b = a * 4
c = b * 3

return dict( a=a, b=b, c=c )

The example is very basic but note in python you couldn't even validly do the following
def method(self):
return dict (
a = 'hello',
b = a * 4,
c = b * 3,
)

`a` hasn't been declared until the dict structure has been parsed therefore you can't reference it to build `b`. At best you can do
def method(self):
a = 'hello'

return dict (
a = a,
b = a * 4,
c = b * 3,
)

I have always hated that pattern (as do some other pythonistas) and would generally return locals()
def method(self):
a = 'hello'
b = a * 4
c = b * 3

return locals()

But what if you want to convert your context to JSON? At the very least you have the `self` controller instance in your context. This doesn't convert very well to JSON literals. You then have to filter keys from your context dict. It's supposed to be the Python Way to be explicit ( ie declaring your context vars rather than using locals() or horrible _getframe hacks to try and remove some repetition )

Beautiful is better than ugly.
Explicit is better than implicit.

To me, being explicit in Python (in this case) breaks the first commandment; it is fugly. Contrastingly, the compactness of the @ruby way, a trifling detail, allows a quite sweet pattern. Just prefix any variables you want in the context with a @. I appreciate it not just from a purely visual sense of aesthetics; practically it would be easier to work with.

How on earth is using @ here less readable or uglier on a whole? Could it be better? maybe .

Anyway, `It's all subjective`, `Beauty is in the eye of the beholder` and `Ugliness is to the bone` and other cliches.