Friday, March 26, 2010

Flip bits, not burgers.

FINALLY!
An interview for a Java developer position at RIM. April 14, here i come.
They don't know this, but they're going to hire me whether they like it or not. If it's not going to happen now I'll just design a kickass Blackberry application, then I'm in for sure.
Just watch.

But I really want this to be now.

Our application now uploads and downloads without error, it even accesses the php script that generates the user profile based on the unique identifier (currently email), however we're considering changing that to the device ID, because asking 9 year olds for email is not too practical.

Then again, designing an iPhone project for 9 year olds isn't exactly swimming in the reality pond. Ever seen a 9 year old with a $900 iPhone? Right? I know. What can you do, welcome to SFU, where innovation is a rare animal.

I had to go to the hospital today, and had an interesting conversation with the attending physician.
When the subject of my studies came up, he mentioned that he remembers when they've only just started adding Computer Science into the degree curriculum, and how hard it was for CompSci grads to get a job at the time. I mentioned in retaliation that in his office I had first witnessed someone actually using a type-writer. (He's very old and set in his paper-dependent ways). He did confess to slight jelousy of a coleague of his who recently computerized his office, with voice-recognition dictations that immeditately get sent to the right referrals and other such technomagic.

Then why doesn't he do it as well? Yes, it will decrease processing time significantly and reduce the liklihood of files getting lost, but my old assistant is set in her ways, and frankly I've never seen her by a computer. Also there are other offices that still use paper, how would I interface with them?

-- scanner and printer.
-- templates.
-- voice activated dictation and search.
-- custom-made design to fit your office.

Tons of reasons to automate your office beurocracy.
But the cost of doing so is high.

True. So I suggested he contacts one of the local Universities. We're doing mock projects anyway, why not do his office automation as a project, with a Professor supervisor, get some spice and meaning into these pointless 275 classes.

He thought it was a brilliant idea.

Why doesn't the 275 Prof. think of that? Too much work? Responsibility?

Sad.

Beyond the rim.

At long last I get a semi-positive response from RIM. Evidently I've been shortlisted for a Java developer position (says the email), which may or may not lead to an interview.
Giving me hope yet keeping me firmly on the ground. Gotta love RIM.

Our iPhone project is finally getting somewhere. I finally managed to get the network controller interface to interact with the web serrver the way it's supposed to. What a pain that was. Network programming is a sonofabitch.

Good marks on the technical assignments. If Noel only knew. It's funny that one of the teachers that influenced me the most, and one of the sharpest individuals I've encountered teaches first year English at Langara. Highest mark I ever got with her was a C+, but man oh man, was I proud of that.

Being a programmer is very stressful. I guess it's the combination of deadlines, stupid team-mates, and the unrelenting expectation for you to master every aspect of the field.
I have never met an animator who did not frown at my knowledgebase the moment he realized I have never used photoshop. As it turns out, specialists will always judge you by your familiarity with their realm of the industry.

I suppose it makes sense. Physics branched out of Math, which branched out of Philosophy.
The further you go into detail, the less you have in common with others...

I think I finally know what I want.
One stress-free life with 2 sugar.

Tuesday, March 23, 2010

Unit Integration

For this phase we work on profile persistence (storing profile attributes to disk) and web connectivity (transfering the profile .plist to the website via ftp).

Feature freeze is end of day wednessday.

Here's what bugs me. Engineer 1.  was supposed to get the property list in order (persistence), and has since posted 3 broken commits in which the system crashes every time it tries to save to file.
This is because he didn't actually add the .plist to the repository, so naturally it can't save anything.
Instead of fixing the problem, we have spent the last 2 days arguing about whether it exists.

I just don't understand this mentality. What's to argue about? the file is not in the project tree, and it's not anywhere on disk. done deal, it doesn't exist, and it doesn't get created. Accept it and figure out why.

Maybe he's trying to write to a location he has no permission to write to? maybe he's expecting a directory that isn't there to be there?

who knows.. one thing for sure, you're not going to fix it if you don't acknowledge there's a problem.

Why do I have to waste 2 days in which i could have been adding features and integrating my own changes. just download your own damn commit and figure it out yourself the moment someone raises a complaint. What a stupid attitude.

the sad thing is i had already designed a working persistence scheme, and the only reason i'm not using it is because he announced on monday that his version "works perfectly".

that and the fact that if i completely take over the design stage the other members would be discouraged to contibute, and i can't do everything myself.

As is typically the case in this group, personal ego takes precendence over the project.

I still don't understand how is it that 4th/5th year engineers don't know about static function and when to use them, the evils of magic numbers and hardcoding, and not only do i have to teach them, i have to swim upstream while doing it because both these morons have actually worked in the industry, so who am i to teach them.

It's not saying much for SFU engineering, or the company that hired them.

If you hard-code a save path in different functions in your code, instead of using a savePath variable or getting it from a property file, e.g.

void functionA {
   doSomething("/folder1/folder2/file.ext");
}

void functionB  {
   doSomethingElse("/folder1/folder2/file.ext");
}

you'll be having lots of fun later changing all the path strings if you have to change the path.
if you then port the app from the simulator to the iphone device, chances are the save path will change, especially if you used a ~ to refer to the home directory that i don't think exists on the iphone.
in a 2000 lines project it's annoying, in a real world 50,000 lines project it's a good reason to have you fired, unles you can explain to your boss why all your programmers are hunting easter eggs instead of working on new features.

i thought this was basic, but i guess it isn't.
something to think about.

Saturday, March 20, 2010

Revision 111

By the way, before I start, if you're reading my blog and you don't understand the title, it's from a terry pratchett book about a made-up universe in which the world is a flat disc sitting on the backs of 4 elephants riding a giant turtle through space. It is a world where narrativium is an actual element. A world in which earthquakes are caused by butterflies. The specific quote is from Guards! Guards! where the city watch faces a dragon threatning to burn down their city.

If you've never read Terry Pratchett, I'm jealous, because that means there are about 34 titles of guaranteed entertainment waiting for you. If there's anything you should take from my blog, Terry Pratchett is it.

Back to business (as far as the 275 project is concerned).

We actually got full marks for the presentation and 90 on phase I.
Good job. It's nice to see results for hard work.

We also had our first meeting (after the presentation) this wednesday.
Steve was first to show up, so I got to spend 10 minutes of quality time with him. He apologized, and I told him that apologies don't change the past. I said that I find him unreliable, and that if it weren't for the instructor's indecision, he'd be off the team. I mentioned that if this was anything other than a University project, he'd be fired, and that if anything like that happens again I would personally make sure he is off the project, regardless of his past contribution or what the instructor says.

Then the other teammates showed up, and Steve apologized again, to everyone, which resulted in a minute of silence followed by John's bitter remark that in reality, if he pulled this stunt in a job situation, and as an excuse said he had a fever, his email didn't go through, and he lost his phone, his boss would laugh while handing him the pink slip.

Gotta love John.
If ever there was a man grumpier than myself, John's it.

I think Steve got the hint.

Useless member No. 5 didn't show up at all, nor did he show up to the following meeting we had today, and I'd say he's treading dangerous waters right about now.

I  announced that these kind of stunts are unacceptable, and that if anyone pulls a Steve on us again, they're off the team, even if I.... blah blah blah.
Furthermore, I added, everyone's gotta pull their weight from now on, that being addressed to useless member No. 5 who was not present.

Anyways, this is the point I predicted earlier where Steve leads this group into ruin, I pick up the reigns, and order is established.

This is where I say "I told you so."

We're up to revision 111 by now, no more trouble with SVN. We have asteroids colliding with each other, phasing through to the other side of the screen instead of bouncing off the walls. When an asteroid hits the ship, it affects the shield and ultimately the player's "lives". Score gets updated, and there's a gradual increase in difficulty with an automatic topic switch every 100 points.

We also fixed the navigation screens. We're saving the profile to a file. Serialization seems to be going somewhere, and i'm looking into the objective-c FTP transfer API, so that we can connect with the web server where we store the top scores for each player.

Not bad overall. Phase 2 is almost complete and we have wednesday set as development deadline, leaving us 5 days for document update and testing.

Phase 3 will be all animation and sound.
I'd finally get to integrate my Asteroids song as background music.

On another matter, evidently I didn't get the Autoship job.
Too bad, I kinda liked the company and I though the interview went well.

Some guy who worked on a database project with me got hired by a company who didn't even invite me for an interview. That's super frustrating, because at least in this case, I know with certainty that I'm about 10 times more qualified than he is.

I honestly don't get it. What am I missing?
Or maybe this is the hiring stage where they hire people with previous co-op experience?
Am I aiming too high?

Should I go for tech support and waste my time ?

I really, really don't get it.

Maybe it's the failed marks on my transcript... but if that is the case then I'm wasting my time even applying for co-ops.

fruss. te. ray. ting.

How do I show people I'm a good programmer?

Hey, you know what. When steve fucked us over, I didn't give up. I took the reigns and we aced the presentation. I wouldn't call it good resolution, because it forced me to sacrifice my other classes during that week and ultimately do someone else's work, which is hardly good resource management.

But it saved our group.

At least after this thing is done I'll have one more thing to throw in the portfolio.

Tuesday, March 16, 2010

Presentation

It is ironic that for someone with a blog title such as my own I preach nothing but separatism.
Steve disappeared on friday after delegating tasks and taking it upon himself to write the unit test functions for our iPhone application project.
By "disappeared", I mean he didn't answer his emails or return his calls for 4 days.
20 minutes before the presentation was due he emailed us saying he had a fever of a 104. Evidently we didn't get the memo. 4 days without communication, and that's the best he can come up with. Good one, Steve.
How much is a 104 in celsius anyways? I don't speak this savage tongue.
40 degrees? Highly unlikely.
Still no excuse for not contacting us about it earlier. 4 days without communication just before a huge deadline. How irresponsible.
I guess the instructor got hold of him and gave him a scare.

Useless group member number 5 was tasked with doing the project metrics because he didn't want to particpate in the presentation and we were busy setting it up. Metrics being: counting files, lines, file size, etc. Things a script should do, and would do (had anyone written it), and anyone who can read and write can do.
He emailed back saying he's not sure what he's supposed to do.

Here's how our QA doc defines metrics :

Number of classes in the application module / phase
Number of pages in webpage / phase
Total number of lines in all classes / phase
Total application size (of all files in kb) / phase
I refuse to believe he's that stupid, and that he really doesn't understand what this asks of him.

What kind of a douchebag do you have to be to try to get away from doing something this simple, while all your teammates (well, at least 2 of them) are spending their days and nights doing everything else.

Really, I have an interview tomorrow and I would probably be asked, yet again, about a project I'm working on, conflicts with team members, and how I've resolved them.

I'm starting to think team conflicts only get resolved in fairytales and "stories" for job interviews.

What a total waste of time.
On the bright side of things, I have come to re-appreciate organized code, timely schedules, svn clients that work (not xcode), team members who pull their own weight (a fairytale -- but what can I say, I'm a dreamer), and integration testing.

For the next phase, I think half the allocated time should be for integration testing. I think that's a good strategy with a weak team. Better to produce less, but have it proven, tested, and working.

One more time for posterity: FUCK YOU, STEVE.

Oh that felt god.

And now to prepare for tomorrow's interview...

Sunday, March 14, 2010

Too Much Stress.

Life is not so much fun when you're constantly under stress.
The sad thing is I'm mostly stressed by doing other people's work, so it's not even a consequence of my lack of planning. We have over 1000 lines of code that's a mess and only 3 out of 5 functioning team members. I cleaned it up as much as I could but I still don't think it's organized enough to allow proper unit testing. Quite frankly though, I just don't care.

In the spirit of Robert Pattinson, It bothers me that in 36 hours, instead of implementing new features, all I did was restructure everything and then fix the broken dependencies that inevitably arose.
What a total waste of time. And the worst of it is that now my team mates will have learned nothing and for all I know this process will repeat itself in the next phase.

I can't wait for this project to be over, it is by far, the worse team I've ever been apart of. I think I'm going to do like the flash designer in my previous team, bail out on all future meetings, stick to the programming and let them deal with everything else, I've had enough.

Tuesday, March 09, 2010

SVN and xcode

XCode is the OSX IDE. If you want to create an iPhone application, it has to be in Objective-C, it will probably use the COCOA frameworks and therefore you will be using XCode. There are no alternatives.
I don't usually work with IDEs so using XCode didn't require much of a paradigm shift for me. XCode does however advertise SVN support, which is true in part. By completing a quick series of steps I was able to connect to our Google-Code repository.  And this is where all the fun began.

First of, you just can't commit through XCode. At least not while using SVN and Google Code. You get certificate errors, and nothing goes through. You can check out, yes, even import, but no commits.

Then there's the human factor. It's a group project, right? That means other people, that means mistakes.
Someone imported entire folders, and soon enough we had a repository full of redundant folders that resulted in checkouts of 280 files instead of 15. There were also folders within folders of the same thing that kept cycling through revisions because people didn't delete them.


The XCode SVN support isn't very useful so I tried to use commands from terminal, because after all, OSX is UNIX. That seemed to work, but I still couldn't figure out how to commit, or rather, how to get through the Google Code security certificates.
Finally, I found an SVN client that works on a mac, and isn't too difficult to use. Like all mac/linux applications it's buggy. But who cares, it works.

svnX is the new messiah.
I deleted all the unnecessary folders from the repository and imported the latest version.
Revision 86 is finally something we can work with.
I still get certificate errors every time I login, but it seems to get through anyway, either because I checked out once through the terminal and accepted the certificate or because it "just works". (you can't accept the certificates through the svnX GUI, because it's not supported. You get the message, but you don't get to answer it).

More gripes about this project work:

I spent about 2 hours last night deleting global counter variables, and using meaningfully named constants such as "type = CORRECT_ANSWER" insted of type = 0.
This after I spent about an hour just trying to make sense of the mess, delegating code that was in the controller class to separate objects and pulling out my own hair.

The 2 computer science students in my project don't like coding, and the 2 engineers seem to have picked up their coding standards from assembly and fortran.

Oh i do love group projects.

Wednesday, March 03, 2010

Another Day Another Interview

This is by far the worst interview I ever had.
DBA position at SAP - phone interview.
I actually don't think I want to work for SAP anymore.
They asked me what I know about MS SQL.
I said i know how to create a database, import tables, manipulate data, integrate it with JDBC applications, etc. They weren't impressed. They asked me what experience I have?
I said I did a project on my own that downloads information from IMDB and determines which movies I would like to see, based on correlations with movies I already rank high. It infact also downloads them, which the guy didn't like to hear. They don't like this kind of pirate activity at SAP.
I mentioned that it's only piracy if you download illegal movies, it's up to you what you do with it, but I could tell it wasn't going well with him. Too bad, it's actually a very interesting project.
Then he asked me why I go to SFU and not UBC?
Now what kind of a fucked up question is that.
From this moment on I was on the defense and felt like I was on trial.
The guy even asked me if I'm authorized to work in Canada.
WTF. Don't they read all the crap they get from the co-op office?
What, you're surprised that I have no technical experience? Why do you think I'm applying for a co-op in the first place?

This was a sharp contrast to the last SAP interview.
Turns out it's way harder to impress someone when you don't see them, they don't see you, and you have an accent. Stressed me out like crazy.

I spent about 2 hours practicing SQL queries and reading about databases, although of course, I can't tell whether they use oracle, ms or whatever, so I have to keep it general, but still. I had about 5 pages open ready to assist me with any technical questions that might arise.
Instead I get interrogated about nonsense.

I'm very disappointed in myself and in SAP.
The interviewers didn't seem very prepared either.
I got the feeling that instead of looking for reasons to hire me, they were looking for reasons to write me off the list. Left a very bitter taste in my mouth and totally messed up my day.
Understand that the previous interviewers (for the other position) were very nice and created a wonderful impression of a welcoming work environment. This was a sharp contrast.

I wonder if they're aware of the negative publicity generated for their company every time they treat their applicants like crap.

Monday, March 01, 2010

Hockey

You know, I never thought I'd catch he tolympic bug, but it got me bad.
Somewhere around the 3rd day of festivities I found myself watching the daily recaps and getting updated on the hockey matches. Now, I've never watched hockey before, I just don't follow sport, but this time I guess there was an element of national pride that made me feel like a stakeholder.
So I learned the rules and laughd my ass off every time someone got crunched and solved the mystery of why Canadian fans boo their own goalie.
It's so stupid it's adorable. I just can't help myself now. "Louuuuuu!" is the new national cheer as far as I'm concerned.
Good job Olympic games.
I had a lot of fun during these past 2 weeks.
Thank you.