Day 11 – Favourite hacking environment – music, light, seating, etc

This post is part of my 30 days of geek challenge.

This question does lead on from the previous one somewhat, I see that some other fellow bloggers who will remain nameless ended up merging days 10 and 11 together.

My favourite hacking environment is still at my home desk – whilst I’m getting more used to hacking on the go using just the laptop, I still prefer the more immersive experience of my home setup, larger display and good audio.

So my home environment is:

  • My darling Lenovo X201i laptop on it’s docking station.
  • 22″ 1920×1080 Viewsonic LCDs (one for my laptop, one for guests and another on the floor somewhere plugged into the server).
  • IBM Model M keyboard
  • Bluetooh Thinkpad Mouse
  • NAD 3020i integrated amp (hidden behind laptop/LCD)
  • JPW “bookshelf” speakers

I tend to hack best in the dark, so I cover up my views of the Wellington city and harbour and sit in the dark with loud music staring into the screen for hours.

My musical tastes vary, but I tend to code to either metal/heavy rock, electronica or techno usually, however pretty much anything in my collection is fine with me :-)

Seating is important for me, I can’t stand substandard chairs, I ended up shelling out for a decent gas lift which was worth every cent.

Day 10 – Picture, screenshot and specifications of your primary computer.

This post is part of my 30 days of geek challenge.

This is tricky to answer since I have 40 or so computers, however I’m going to ignore my servers and give the primary computer title to my laptop.

Since early 2010, I’ve been using a Lenovo X201i laptop, it’s a great little ultralight laptop, which I love since I carry it everywhere with me and hate bulky/heavy laptops.

The specifications on mine are:

  • 12″ laptop chassis
  • Intel Core i5 M430 @ 2.27Ghz
  • 4GB RAM
  • 320GB hard disk
  • 802.11b/g/n & bluetooth
  • Integrated 3G Modem
  • 9-cell long life battery (standard unit ships with 6-cell, there is also a lightweight 3-cell option). I tend to get around 6 hours life, but if I tweak, I should be getting about 8 hours.

There’s several feature that I really love about this laptop that are hard to find elsewhere:

  • Stylish industrial business appearance. I know that some people think the Thinkpad series are ugly, but I love their 90s style hard edge shape and all black colouring
  • Works nicely with Linux – helped by the fact several Red Hat staff and kernel hackers own this model. ;-)
  • Features a trackpoint pointer – I hate touchpads, so disabled it and just use the trackpoint.
  • Nice keyboard – whilst never as good as a model M, it does manage to do a very nice job and is very pleasant to type on, with a good key depth and click feel.

It’s not perfect, there are a few annoying limitations/issues that I have with it:

  • I would have preferred the laptop to have a very ultralight 3cell battery with a clip on bottom battery for long-life roadwarrior situations since it means I could more easily alternate between portability and weight depending on the situation, without needing to plug in to change battery packs.
  • Lenovo did some weird stuff to the BIOS/firmware, I’ve updated it a couple times now to resolve some issues and used to have to apply a number of kernel patches to get suspend to work nicely.
  • Not really a fault, but I wish I had brought the tablet variation of this laptop, the ability to rotate the screen and use it as a tablet would be awesome.

Overall, it’s a brilliant little laptop and I will certainly consider the Thinkpad series again when I have to upgrade in 2012/2013.

Isn’t it cute! I love it so! :-D

At work I tend to operate with it purely in laptop mode, whilst at home I dock it to have the larger external screen and keyboard, but I’ll comment more on that with tomorrow’s blog post. :-)

Finally, here’s a screenshot of my desktop:

I cleaned it just last week, the junk folder in the bottom right corner is full of the old contents which was so bad it kept lapping over other files. :-/

The bottom left corner shows my workspaces, I currently use 10 workspaces on my computer, typically for dedicated tasks – I usually have:

  1. Local sysadmin
  2. Project Space
  3. Project Space
  4. Project Space
  5. Project Space
  6. General browsing/Twitter
  7. Instant Messaging & Task List
  8. Evolution (Email)

I have no clue how windows users survive without a decent multi workspace functionality…. so handy being able to jump between then with the CTL+ALT+ LEFT/RIGHT combination.

In the top bar, you’ll see my shortcuts to most commonly used applications and notification icons for backgrounded applications such as Lifera (RSS reader) and Rhythmbox (music player).

Day 09 – What OS/distribution do you run?

This post is part of my 30 days of geek challenge.

I’ve been a Linux geek for almost a decade, first started heavily using Linux in 2001 as part of my youthful play (Mandrake 6, kernel 2.2 FTW! :-D ) and become a full blown Linux user in 2002 with RedHat 8.

These days, I run Fedora on my workstations and CentOS or RHEL on my servers – I love the Red Hat approach towards structuring the OS and the very rigid release policies, but there’s a number of reasons for my Fedora choice:

  • Developed by a strong community focused and driven on the goal of being a true free as in freedom operating system backed up by an ethical company (RedHat).
  • Fast-paced release cycle, every 6 months a new release with brand new features.
  • Binary-based distribution, something like Gentoo would be faster paced but then I’d have to spend a lot more time compiling and tweaking.
  • I’m familiar with the OS environment and packaging for it, infact I run my own repositories for both RHEL/CentOS & Fedora which are publicly available.

My use of RHEL (or CentOS if it’s a non-work system) for servers is mostly for the same reasons, as well as the fact that there’s a huge support life (about 7 years) for RHEL which far surpasses the hardware itself.

Of course, I haven’t always been a Fedora user, I have a rather colourful operating system background, which is why I do feel at least a slight right to be able to comment on OS debates:

  • First computers I had were i386s with Win 3.1 and MSDOS. Used to hack around with BASIC/QBASIC coding on them, tweaking games and just generally prodding everything to see what would happen.
  • First real computer came with Win 98, I spent a couple years learning HTML, hacking more BASIC and getting into C/C++ coding with 2D directx games.
  • Experimented with Mandrake 6 for a while, Linux was this amazingly awesome yet completely unfamiluar environment – very different these days, in a way it’s sad the the mystery has gone.
  • Eventually moved to Redhat 8/9 as my primary box along with a Windows XP laptop.
  • When the original Fedora Core came out, I was pretty unhappy with it – whilst I see the business focus of RedHat made RHEL more sense, I’m still sad that they killed their free as in beer release and still think it did some harm to their brand awareness – think about the fact that there would be no CentOS if RedHat still had a free release.
  • Disillusioned with Fedora Core, I stumbled through the interwebs until I found the beauty that is Linux From Scratch.
  • Linux From Scratch (and Beyond Linux From Scratch) involves compiling *everything* from the kernel up to the desktop environment and applications, all manually from the tarballs and patches – no package management tools or dependency solving. Doing it on my 433mhz Celeron with 192MB RAM would take about a week…. Those were the days. :’)
  • LFS was awesome, but difficult to maintain, so I ended up moving to my own distribution for a while (Jedo Linux) originally based off RPM before shifting to source-based portage distribution with entirely custom ebuilds.
  • Ran Ubuntu 6.06 for a couple years when I started my first job as I needed something with easier package management for work purposes.
  • Work ended up buying me a shiny Macbook, used MacOS Tiger/Leopard for two years, whilst running Ubuntu at home.
  • Moved away from Ubuntu after seeing how much Fedora had improved, started with Fedora 9 and have been using it ever since.

Aside from my personal use, I’ve supported a number of different OSes for commercial purposes: WinXP, *shudder* Vista, Win7, Windows Server, Debian (which for some reason I’ve never been a big fan of) and Solaris.

So I’m a bit of an OS slut, but these days I’d say I’m firmly a Red Hat fan and will continue to be so for the forseeable future until I decide that Linux is too mainstream now and move to something like BSD or Minix. ;-)

Day 08 – Preferred method of communication with humans

This post is part of my 30 days of geek challenge.

I’d be tempted to say “none” here, however whilst all human interaction is painful, some forms are less painful that others. :-P

In reality I’ve gotten better with interacting with people over the years, conferences, business dealings and large amounts of social pressures and interactivity for business have lead to myself becoming pretty comfortable and confident around people.

For a business conversation, I prefer email most of all, followed by phone calls. In personal life, I still love email, but tend to use Twitter and IM more for convenience and lightweight interactions.

I think overall, email is my preferred communication method – IM and Twitter can end up being too intrusive and disruptive, I love the fact I can read it when I want, mess around with filtering and rulesets and archive permanently – as it is, I have archives going back to 2003 for all my emails.

Day 07 – Preferred smartphone platform. And which do you use?

This post is part of my 30 days of geek challenge.

Being an open source geek, it probably won’t surprise you that I’m a fan of Android, Google’s open source operating system for mobile phones.

I currently own an HTC Magic G2 running CynogenMod 5 (Android 2.1) and am loving it, whilst it has it’s faults (mainly this model lacks CPU/RAM) it’s a great little phone.

Incase you’re not familiar with Android,

  • Open source operating system developed by Google and released under an open source license.
  • Wide range of Android phones and devices (inc tablets and laptops) released by a variety of manufacturers.
  • Runs the Linux kernel and some open source libraries but doesn’t have the typical linux userspace, instead most of it is written in Java running on the Dalvik JVM.
  • Designed to be an open platform with the ability to install or distribute any application.

There’s a number of good reasons why I’d chose it over Win Mobile, iPhone or Symbian:

  • One of the more open platforms – most of the OS is open source and I can customise it or use other people’s modifications – ATM I’m running CynogenMod on my phone to take advantage of OpenVPN and some applications which require Android 2.x
  • Symbian and Win Mobile (version 6, I haven’t seen 7) is an entire generation between the new smartphone operating systems like Android and iPhone. And Apple’s products are far too locked down and restrictive for me to support them.
  • No forcing users to use a specific OS/application (eg itunes) just to load files or content onto the phone – just mount like a standard USB storage device.
  • Range of vendors providing huge selectivity of platforms.
  • Ability to develop for Android on Linux systems.

Android isn’t perfect though, there are certainly some limitations/problems that I’m not completely happy with:

  • Vendors/carriers implementing their own lockdown in the phone bootloaders to try and prevent users from running unauthorised kernels. (looking at YOU Motorola!)
  • Performance – a lot of the Android phones (particularly the earlier models) are very laggy, I suspect the CPU/RAM is just a bit too scarce compared to the actual requirements of the phone.
  • A number of components are still proprietary – such as Google apps (including the marketplace) and the telephony drivers for the server.
  • Google’s marketplace doesn’t clearly differentiate between proprietary or open source applications, making it difficult if you want to aim to only use open source applications.
  • Vendor variation and telco control.

This last point is a big issue for myself – Google allowed the vendors too much flexibility to customise the phones and still call them “Android”, what is already happening is that some vendors are reskinning or customising the firmware, whilst others are not releasing updates, so thatsome of the phones are stagnating on old versions of Android.

To make it worse, the telcos have control over update distribution rather than the vendors, so you have to wait for your telco to approve and push out updates and experience shows they aren’t the fastest or most efficient organisations.

But, despite some of it’s faults, over all it’s a pretty decent OS and certainly gives Apple a run for their money whilst utterly thrashing the older OSes like Symbian and WinMobile 6.

And it runs Linux ❤

Day 06 – Primary geek fuel (snacks/drinks)

This post is part of my 30 days of geek challenge.

Finally an excuse for posting a picture – blog posts are always far more interesting when there’s a picture. ;-)

My primary geek fuel would have to be cola of some variety, historically I drank mostly Coke, but lately I’ve been trying to cut down on my can a day and instead I buy a 4-pack of Royal Crown Premium Draft cola once a week to enjoy over the weekend – it’s deliciously brilliant stuff (although a little pricey as it’s an AU import), very smooth to drink – doesn’t last nearly long enough!

Other than sugary substances, I tend to start the day with a Soy Latte (would have more if it wasn’t for the cost/inability to make them at home) and have a growing coffee consumption going on, tends to be the less cola I drink, the more I go for coffee.

In terms of snacks, I’ve been cutting back on processed snacks such as M&Ms, chocolate and cornchips and been demolishing bags of flavoured peas lately – the wasabi peas pictured are so great, go well with almost any beverage (alcoholic or not).

Day 05 – Quick nifty hacks you’re proud of

This post is part of my 30 days of geek challenge.

I often make quick hacks (aka customisations, workarounds, fixes) to systems in order to solve a problem or limitation, or just nifty bits of code.

I think some of my favourite are:

  • Forward porting a legacy Intel video driver for XOrg to a backported version of XOrg in order to obtain proper video functionality on my Toshiba Libretto U100 laptop with Fedora 12.
  • Writing backup software for a telecommunications company which connects to a legacy network device via telnet and proceeds to dump the configuration and OS binary data out over the same telnet session, capturing it and then storing it in a file on the backup server.
  • Writing a tool to convert a budget USB scanner into a network scanner that outputs PDF files using scanimage for Linux and some PHP glue.
  • Various little scripts, such as an automatic shutdown script to watch a process  (eg a number of downloads) and shutdown upon completion.

There are plenty of other examples that I’m sure I could look at, the above is what came to mind late at night. :-)

Day 04 – Greatest application written to date.

This post is part of my 30 days of geek challenge.

This is actually a tricky question, after all, how do you define what your greatest application is? Is greatest the largest, the most complex, the niftiest or the one that you find most useful?

I’m going to go with the Amberdms Billing System for my entry, it’s a 49,447 line PHP web application providing accounting, billing, time keeping and invoicing functionality.

  • Standard double-entry accounting.
  • Timesheets/timekeeping.
  • PDF invoice generation
  • ISP service billing, including data usage and VoIP call record charging.
  • Mostly object orientated PHP built on the Amberphplib framework.
  • Fully open source under the GNU AGPL software license.

It’s fully open source and my startup Amberdms Ltd provides hosted versions as well as software development/customisation services around it.

Reason for the selection is that it’s the largest/most complex application I’ve written, as well as having some significant uptake by others.

It also lead to the development of the Amberphplib framework, which whilst not perfect, has become a valuable base for a number of my web applications and provided a huge learning curve for building the next generation web application frameworks in future.

Day 03 – What does your day job involve?

This post is part of my 30 days of geek challenge.

As of this week I’ve just taken on a new full time job, so this has changed a little… :-)

Last month I was running Amberdms as a full time venture, which involved:

  • Lots of project management
  • Handling (herding?) staff
  • Software development
  • Support services between anything from entry level desktops up to linux servers and networking.
  • General business operations, customer interactions, etc

As of November, Amberdms has scaled down to a side venture purely for the software side of the business and I’m now working full time for my old employeer, Prophecy Networks.

My job title is “Consultant Systems Engineer” which I guess is really a combination of:

  • Project Management
  • Pre-sales and customer interaction, including writing proposals, etc.
  • Software development, focusing on web-based applications and system scripting.
  • Engineering support services focusing on enterprise Linux/UNIX and networking systems.

My new job at Prophecy is very self-driven/independent in a way, which meets my entrepreneurial desires and I have a lot of input into customer projects, recommending/designing solutions, implementing and having all the fun, with other staff being responsible for the day-to-day operations and support once deployed.

So far it’s been good fun and I’m looking forwards to the projects that are being lined up for the next few months. :-)

PS: Great to see many other geeks getting into #30daysofgeek, check back to the main article’s comments section for other great blogs. :-)

Day 02 – Preferred programming language?

This post is part of my 30 days of geek challenge.

PHP > SEX

As much as this will make some of you gag and want to cause me physical pain (or more so than normal anyway) I have to admit to being a complete and utter PHP fanboy. :-O

Yes, PHP is quirky at times, but it’s fast, lightweight, easy to develop simple or complex systems with and has a huge number of useful functions and extensions.

I love it’s multi-dimensional hashes/associate arrays, it’s syntax style and the way it feels to write and engage with, it suits me just right. :-)

The other fantastic reason why I love PHP is the vast amount of resource information available online via php.net – being able to lookup any function and see not only the official documentation, but also hundreds of user submitted comments and examples is fantastic.

I’ve developed many major web application projects in PHP (these days mostly in object orientated MVC-style structures) including:

PHP has a bad rep for being “insecure” which is more a problem with stupid configurations (eg register_globals) or the fact that a lot of new programmers start with PHP and don’t always understand the security implications of developing for the web.

Aside from PHP, I’m pretty fluent with Perl (although I kind of hate it) and know bits of C/C++ although not enough to code anything that exciting, my C knowledge is mostly enough to fix a bug in some existing code or hack in a new feature in a simple application.

I want to expand my C++ knowledge and I’m considering looking at Java (for writing apps for Android) as well as possibly experimenting with Python, Ruby or one of these other new  cool languages that people are using. :-)