Our work has created a very dirty little character called Stinky Chicken. You can buy this little fellah over at our shop at www.bigfish.tv/shop or watch his videos at http://www.bigfish.tv/stinkychicken/
Our work has created a very dirty little character called Stinky Chicken. You can buy this little fellah over at our shop at www.bigfish.tv/shop or watch his videos at http://www.bigfish.tv/stinkychicken/
Believe it or not, someone actually applied for a job with this material at a Brisbane based game development house. I’ll let the application/response do the talking:
hello people, im applying for a job.
firstly i will give u a breife description of my self,
DOB: 01/02/1972
sex: male
employed at Unifold australia, i make soundproof operable walls and acordian doors, i manage the alloy section. I have been gaming all my life and have pretty much played 90% of all games on every console, gaming is all i do , some people would say i dont have much of a life but i will never stop gaming even if i loose my arms lol.At the moment i am widely involved with xbox online, no not xbox live but Kai xlink and xboxconnect, i have learnd alot about game files and how to install new maps/programs and mods, so on and so forth. my education isnt what most people would call normal. i am an moderaton of our clan site http://www.titans-and-gods.com , we are a black arrow clan originally but have started a few different game divisions. I am the leader of H2 division. Anyways i left school early and spent most of my time learning in the library and gaming on the library pc when i wasnt gaming on the intelevision,atari or commodore 64 at home. I am planning on opening a xbox live cafe or something of the sorts when i get in front of my bills and soon. but to be honest i think the buisiness may suffer because i would be gaming too much lol. if your looking to employ a vetran gamer who knows what a glitch is or bad coding and knows what too look for (even the slightest glich i might add) and also i know a good game when i play it, i always give any game a good try to see if it has any qualitys, some games people call crap are not so bad if ya give them a chance. because i know the amount of effort that goes into them and am willing to do the same for the people who create them and so i play em through, alot of games i have played have had bad coding or camera and so on so forth but to be honest some games developers have been releasing latley heve been less entertaning that space invaders(now thats a classic right there), 1 space shootemup i will always love is GYRUSS, i spent 8 hours straight on that once.
fell free to give me a buzz if ur looking for any beta game testers or people for concept ideas because i have seen so many storylines for games and desighn ratios that i am a walking game he he he, but please let me know if your interested, my mbl number is 0400700@@@ and home is 0738002@@@. hope my long letter didnt bore ya too much he he, oh and by the way here is work number in case i dont hear my mbl 073806@@@ , just ask for Jamie and they will put you through to my section.
i also am involved with alot of aussie xbox gamers online also so i can give u even more feedback on games once they hit the market, i had a ps2 and game cube but xbox just stole my heart, i play only a few pc games but loike em all i play most of em right through. well thank u for reading my application oh and i used to work for EB at browns plains Brisbane, i would send u my resume but i screwd my pc hard drive last weekend and have had to reformat. i lost freakin everything and im not a happy chappy lol. if ya want me to let me know and i will peice together a new one but atm i have to crash for work and ita 1am, i have been gaming most the night. ok later people and have a great easter weekend please. game game game he he he ;o))
A reply was made from HR at the game dev house:
Hi Jaime
You did not include a resume with your application for the Quality Assurance position. Successful applicants for Quality Assurance positions will need to be able to communicate well in written as well as verbal language. You will improve your chances of gaining a QA position if you employ correct spelling and grammar when composing further correspondence.
Thankyou and good luck
well well well so all the gamers who work for you must also be nerds like yourself lol.
look i left school when i was 13 and my GRAMMER! is not so great, i thought your company made games for gamers and get games tested by gamers not stuck up people who pick on some casual spelling mistakes of a person who didnt complete school. i dont want to be a programer for u people nor do i care if u only interview people who can spell perfectly, i was offering you and the company you work for my experienced knowledge of games and how they should run and weather they will satisfy the gaming public as for the RESUME you obviopusly didnt even read all of my email, in it i told you My pc hd! (thats HARD DRIVE FOR THE MENTALLY CHALLENGED ) got wiped and i lost alot of important programs and files ie: My f*ckin resume u stupid noob, i was going to spend the time tonight to type one up but obviously its a waste of time since u didnt even read all of my email in wich i told u about my resume problem if u are going to have a stuck up attitude like , whaaa whaaa whaaa ur spelling isnt perfect then i dont think working for people like u are even worth giving my time to for any amount of cash.
if this is the way you address gamers who apply for work then bugger me ur in a shit load of trouble if u think they will work for your company for long with that attitude towards them (most gamers didnt even finish school because they are hardcore gamers, and or they wanted to learn about the things that intrest them not what school say you have to learn, my intelegence level should not be judged by my grammer nor should any body else’s. i could do Quality Assurance better than most and i am very profesional at what i do). this is Australia u stupid chick and you dont address a casual email offering help to you with the shit thats underneath this message, i bet your not even australian and if u are you probably have snobby stuck up parents who spoilt you rotten(i left out periods and commas just to piss you off by the way he he he) so for the most part i will be sure to mention to the gaming community that games made by your company suck(by the way i speak to over 20 different gamers a night and over 150 or more different gamers in a week and i will make the effort and take the time to let them know about #bleep# and there employee’s who dont even do their jobs properly like reading application emails completley) (gee i better not make any more spelling mistakes you might get a tumer or something lol), how about i just tell all the hackers i come accross in the future that u deserve some attention, just my personal opinion by the way not a threat :p, u want gamers to like your products well pull your head in and wake up to yourself, start reading the application emails properly too, im sure your getting paid to do so.
So how about doing your job properly and take some time to think about what u have just done, not that i think you have the smarts to even realise, im not talking GRAMMER smart’s either kid. now the time i was going to use to type a resume has been taken up by this response, if u had read my last email properly your response should of been,
“No worries jamie get ur resume to us as soon as you can and could u please use spellcheck next time just for presentation.
Thank you very much and good luck”
But no no no u decided to take the slackers way out and just look and see if their was an attachment and when u didnt see one u just pasted the same response u have given all day to emails without attached resume’s now thats very unprofesional and u deserve to be demoted just for that.
Oh by the way if you have even read this far, its not your POSITION thats important its Your Disposition!, and unfourtunatly u have made me errr from mine but after today and the weekend with losing over $3000 worth of programs i do not care what you think and for the record i had backups but someone decided to steal them and i didnt get the chance to do them again
Ok well have a lovely easter and drive safe on the roads please, people like you who cant even do their job properly end up killing kids with their cars because they dont concentrate on the road the way they should.
HAPPY EASTER! :o))
from your friendly neighbourhoodPS: i will be visiting your site now just to have some fun he he he and stir the shit out of #bleep# for employing such a slacker, im sure you have a complaints section dont you?
A site i was working with was using pagination quite extensively with lots of records and associations. This was producing unnecessary high load on the database and wait times on the production site. Caching had to be done. Unlike normal returned data from finds etc. Paginated data can not be cached as easily, as the paginate method needs to be called to generate the pagination numbers etc. So what was done was to do a custom pagination query with cache built in. So in your app_model.php file add in:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | function paginate ($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) { $args = func_get_args(); $uniqueCacheId = ''; foreach ($args as $arg) { $uniqueCacheId .= serialize($arg); } if (!empty($extra['contain'])) { $contain = $extra['contain']; } $uniqueCacheId = md5($uniqueCacheId); $pagination = Cache::read('pagination-'.$this->alias.'-'.$uniqueCacheId, 'paginate_cache'); if (empty($pagination)) { $pagination = $this->find('all', compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive', 'group', 'contain')); Cache::write('pagination-'.$this->alias.'-'.$uniqueCacheId, $pagination, 'paginate_cache'); } return $pagination; } function paginateCount ($conditions = null, $recursive = 0, $extra = array()) { $args = func_get_args(); $uniqueCacheId = ''; foreach ($args as $arg) { $uniqueCacheId .= serialize($arg); } $uniqueCacheId = md5($uniqueCacheId); if (!empty($extra['contain'])) { $contain = $extra['contain']; } $paginationcount = Cache::read('paginationcount-'.$this->alias.'-'.$uniqueCacheId, 'paginate_cache'); if (empty($paginationcount)) { $paginationcount = $this->find('count', compact('conditions', 'contain', 'recursive')); Cache::write('paginationcount-'.$this->alias.'-'.$uniqueCacheId, $paginationcount, 'paginate_cache'); } return $paginationcount; } |
This will then take over from any paginate calls and generate a cached version of the dataset for the paginated items and the pagination controls, unique to each page and query set. I am in the process of trying to convert this over to a behaviour, will post up if i get a chance to complete it.
Of course you need to specify the caching rule in core.php, something like:
1 2 3 4 5 6 | Cache::config('paginate_cache', array( 'engine' => 'File', 'path' => CACHE .'sql'. DS, 'serialize' => true, 'duration' => '+1 hour', )); |

**Please Note** If you bought a new phone with 3.1.3 already loaded, or if you upgraded to 3.1.3 without storing your signature on saurik’s server via Cydia then your chances of getting a jail broken 3.1.2 is zero. Sit tight until a new jailbreak is out, which unfortunately doesn’t seem like it will be soon.
So I accidentally upgraded my iPhone to 3.1.3, bad news bears. I lost my jailbreak with no look of getting it back, especially on a newer bootrom. After playing around for hours on hours I finally locked it down to this workflow:
For those of you experiencing issues with iTunes reporting back a failure of verification on the requested build, you will need to add a rule to your hosts file. You will need to add the entry: 74.208.105.171 gs.apple.com
Windows:
go to C:\Windows\System32\drivers\etc\ and use a text editor to open the file “hosts”
Mac:
open up Terminal.app an type sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts
Now I have my iPhone back onto 3.1.2 and i don’t think i am going to bother with jail-breaking the 3.1.3.
Recently I moved one of my sites onto another server, different installation. I noticed when i was working in Vi in insert mode my arrow keys would insert their values instead of navigating around the text. To fix this:
:set backspace=indent,eol,start
:set term=builtin_ansi
Now that global setting should be applied whenever you are working with files in vi and your cursor navigation troubles should be no more!

It’s been quite a turbulent year this year. Kicking it off it began with a temperature of -35 on New Years day, lots of cleaning up from the celebrations the night before but more holiday fun ahead in Canada. Travelled through Western Canada with my awesome Canadian partner and got to see college life first hand.
After leaving Canada it was time to set up some projects and learning. Having programmed in PHP for a few years, at a hobbyist level it was time to step it up and bite the bullet and jump into the long avoided frameworks. A quick touch back to Django had me scratching my head again at the challenge of learning a new language alongside a framework methodology I had no idea about.
A friend of mine from Germany recommend that I take a decent look at the CakePHP framework and after getting my head around why I would abstract my functions out into an MVC structure I got going on building up the projects that I had started by nowhere near completed.
My podcast hosting project got off to a decent start, blazesyn.com, but then hit some big walls, of which I plan to get around in the new year. This got my CakePHP and PHP skills up to much stronger level. My partner, after killing her University degree came down to Australia to live, landing in May. We took some time out, and travelled around Brisbane and down to Melbourne, enjoying the time together to make up for time lost. However the holidays slowly ran down as the bank dried up.
In the mean time I stumbled on an idea while on Holidays, an idea that I had roughly three years ago, but the plans fell through due to costs. It was a decal/signage business purely online. Luckily I had built up my CakePHP skills and got straight to work on wedecal.com which has been going strong. We’ve invested a decent amount of money into advertising and we’re seeing the return slowly climb as the repeat business kicks into effect.
Then I got lucky, I received two expressions of interest for full time work through this blog at jotlab.com. One position was working remotely for a fashion website in Sydney. That fell through, poor communication, which is something you simply can’t have when working remotely. I pulled the pin on that one, but as soon as I did a new opportunity opened up. A local advertising agency contacted me, again through this blog, saying they’ve been following my topics on CakePHP and they would like to offer me a full time position as a CakePHP developer in Brisbane.
I jumped at the opportunity. The workplace was a pad, it had a BBQ area, a swimming pool and the whole place was a decked out church! What’s more they put on a free lunch and beer every Friday afternoon, that’s my kind of work environment. The profile of the clients was jaw dropping and the projects were always challenging. I was on a three week trial then the work ran out. I was back to looking for work.
It was job time and I was sending out resumes to pretty much any web development or web related job I could find. The replies came in, recruiters were calling, positions were opening up and everyone was interested, but not on the terms I wanted. Then I got a phone call from the church of CakePHP, they wanted me back, this time it was I writing for a full time position, and that’s where I am now.
As for development, I am aiming to getting a bit deeper into the CakePHP core. Understanding the inner workings and what seems to be a large array of undocumented CakePHP functions. Besides that I really want to get into Ruby on Rails. It was a bit unnerving to see the CakePHP team split as a core dev moved to create his own branch/framework based on CakePHP3. If i do get extra time it’s onto iPhone development, however one step at a time.
And that is my year of 2009, in terms of development, work and travel. As for next year, our concentration is on moving closer to our workplaces and visa’s. Let’s hope Australia deals us an okay hand for 2010.
I finally got around to jailbreaking my iPhone. Although blackra1n requires that my iPhone be tethered and re-jailbroken after each boot, it still allows me to get access to a heap of apps previously impossible to load up, plus this awesome theme called Suave! I still need to work on adding new icons that aren’t yet available. But still
Zen Coding v0.5 from Sergey Chikuyonok on Vimeo.
As I’m migrating from Subversion brainwaves I’ve been slowly adapting my workflow into Git’s. Problem was i was finding it hard to double check changes in my working folder to that of what was previously committed. In other words I missed the love of FileMerge.
So I began puttering around on the internet and found people writing scripts for git’s external diff editor. But they were missing one important element, the location of OpenDiff to save to! So I did this:
Firstly we need to make the script that git will run when it runs it’s diff. To do this run:
vi ~/git-diff-cmd.sh
Then we will drop some script in here which basically routes the diff statements generated by Git to the OpenDiff application
#!/bin/sh /usr/bin/opendiff "$2" "$5" -merge "$1"
Notice the “-merge "$1"” this is the destination to save to. Before hand with other people’s code you would have to manually select the save path. But i did a man opendiff on it to realise all it was, was setting the merge path!
Anyhow. Save that via pressing “shift + ZZ” Saved! Next we need to make that file executable via “chmod +x”
All that is left is to tell Git to use this script as it’s diff editor, which will then invoke the FileMerge (OpenDiff) program. To do that type in:
git config --global diff.external ~/git-diff-cmd.sh
Now how i check my staged files with the previous commit would be:
git diff --cached
Which would then open up all the staged files and allow me to choose which one i wanted to keep or not
Recently i started playing with TextMate because of all the hype and the billions of shortcuts it has. This was a big shift from the editor Coda.app on the Mac. Immediately i was taken by the ability to have themes! So i decided to create one myself. Adapted from the eclips3.media theme freely available.
Simply download and double click on the following theme:
If you wish to use the same font as me then you can download the Bitstream Vera Sans Mono font from:
This is v1.0 of the theme, if updates happen in the near future i’ll write up the changelog here!
This was one epic battle for me when i tried to get rails going with Lighttpd. But with that said, i have been spending quite sometime on just getting my development environment up and running on an environment similar to how i would deploy the app. So this is how i managed to get Rails up and running with Nginx.
First you need to download and install macports. You can get it from: http://www.macports.org/. Install that, it may take some time, but it’s well worth it!
Next we need to get some updating going on, so that your sources are up to date and fresh to get some ports installing. Open up terminal and type:
sudo port -v selfupdate
The -v is for verbose output, so you can see exactly what is going on. After that is complete lets going with installing ruby and some rails.
First we need to install ruby. To do this type:
sudo port install ruby
This will go ahead and install ruby. Next up run:
sudo port install rb-rubygems
This will allow us to access the awesome gems feature that allows you to import third-party gems, or plugins. Once that has been installed you will want to run an update, to get the latest gems sources. This can now be done through the gem command.
sudo gem update --system
To add support for Imagemagick run these commands:
sudo port install Imagemagick
sudo gem install rmagick
Pretty simple hey? Next up we will want to add some support for mysql5. To do this we will go back to our port system and run:
sudo port install mysql5 +server
You will then be shown some hints as to how to set up the test tables and run the secure installation. I would recommend doing this as it allows you to setup your root password and clear test tables. Just follow the onscreen prompts on how to install it. Some people have permission issues with sockets here, if you are one of them check out this page. Once that is done run:
sudo port install rb-mysql
This will install the ruby mysql adapter. Wait for that to go through next we can add rails! Yep we’re up to that stage already!
It’s pretty simple:
sudo gem install rails
Rails is installed! You can start a new rails app now simply by navigating to the folder where you would like to create the app and typing:
rails app_name
and to make sure that you have mysql support created for you instead of manually type:
rails -d mysql app_nameTo test that your app ran smoothly you can simply change directory into your new app and run:
ruby script/serverand this will load up the built in Webrick server, of which you can now navigate to in your browser via http://localhost:3000
If all went successfully then you should see a screen like:

We don’t really want to use this built in server, we want to use Nginx with passenger! And to do that we don’t want to build from source, we want to use the Macports elegance, well i did anyway. Unfortunately macports doesn’t support this off the bat. But with some tweaking its very easy to do. First we will need to grab passenger. This is once again very easy to achieve, thanks to gems:
sudo gem install passenger
Now run:
passenger-config --rootthis will tell you where passenger installed and where it’s hiding out. We will need this for telling Nginx where to grab it from. So please take now, paste it to a text file or something.
Next step up is to get Nginx installed. As i said before this will require some hackering. So lets do that first. What we need to do is add the passenger variant which currently isn’t available with the nginx macport. So to do that navigate to the nginx portfile directory, which can be done via:
cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/www/nginx
Deep hey. Lets add the variant. Open it up via:
sudo vi Portfile
press SHIFT + G this will take you to the end of the file, where you should now insert (via pressing the key i) the following:
variant passenger description {Adds passenger support} { configure.args-append --add-module=/opt/local/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/nginx }
Please take note of the “/opt/local/lib/ruby/gems/1.8/gems/passenger-2.2.5/ext/nginx”. This is too important! You need to change that with your path to passenger, but with /etc/nginx added to the end. So if you get any compiling errors, it’s probably because you didn’t have enough coffee at this step of the process. Once you’ve done this hit ESC to get out of insert mode and press SHIFT + ZZ this will save and close the file.
Next its time to install nginx via the macports system. We will also want to add our variation in. So to install nginx with the passenger module type:
sudo port install nginx +gzip_static +passenger +ssl
Let it do its magic. Once done cd to /opt/local/etc/nginx/. We need to copy the example config files to ones we want to use. So do that.
sudo cp mime.types.example mime.types sudo cp nginx.conf.example nginx.conf
So all that is left is to add our passenger config and a site. Open up the nginx.conf file via sudo vi nginx.conf
My config file looks like:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; gzip on; server { listen 80; server_name localhost; location / { root /opt/local/www/htdocs/; index index.html index.htm; } } passenger_root /opt/local/lib/ruby/gems/1.8/gems/passenger-2.2.5; passenger_ruby /opt/local/bin/ruby; passenger_max_pool_size 8; passenger_max_instances_per_app 1; passenger_pool_idle_time 3600; server { listen 80; client_max_body_size 250M; server_name dev.app; root /opt/local/www/my_app_name/public; passenger_enabled on; rails_env development; } }
What you need to pay attention to here is ther location / for root. I.e where it says /opt/local/www/htdocs/ Make sure that exists. Next thing to look out for is the passenger_root /opt/local/lib/ruby/gems/1.8/gems/passenger-2.2.5; This is where you get your passenger path from passenger-config --root The next thing is passenger_ruby. This setting sets the path to ruby, and also where ruby will grab its gems with. I ran into an error first with passenger, stating that my gems were too old, and that i should update. But when i went into terminal and did gem update –system it said i had the latest. So it became apparent that passenger was by default using Mac OSX’s ruby version! So you set the path to the ruby you want, in this case, its the one macports installed.
Anyhow. You might be asking well how do i start, stop and restart MySql or Nginx. Well I’ve created some aliases you should add to your .profile file. To do this run:
vi ~/.profile
then add in:
alias nginx-start="sudo launchctl load -w /Library/LaunchDaemons/org.macports.nginx.plist" alias nginx-stop="sudo launchctl unload /Library/LaunchDaemons/org.macports.nginx.plist" alias nginx-restart="sudo launchctl unload /Library/LaunchDaemons/org.macports.nginx.plist && sudo launchctl load -w /Library/LaunchDaemons/org.macports.nginx.plist" alias mysqlstart="sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist" alias mysqlstop="sudo launchctl unload -w /Library/LaunchDaemons/org.macports.mysql5.plist"
Save the file, then close down terminal and reload it. You should now be able to run nginx-restart, or start, or stop, same with mysql except for restart. Handy?
You should now be able to navigate to http://localhost and see a success screen, or whatever you have in your htdocs folder. Or if you have set up your hosts file in /etc/hosts to route 127.0.0.1 dev.app then it will show your rails app!
If you don’t you have a problem. tail /opt/local/var/log/nginx/error.log should be able to tell you whats up. Any problems or issues you can’t work out in the first hour by yourself add a comment!