Recently, I bought a GoPro Hero HD2 camera which I have used to gather some 1080 footage... unfortunately the extremely long in the tooth early 2008 MacBook Pro I'm typing this on struggles to edit it. I really need to upgrade it - only only one USB works, and intermittently at that - and the audio has its good and bad days - however I can work around those issues with the odd NVRAM reset to fix the USB ( hold down the power button for 5 seconds when the machine is off and the battery removed) and some bluetooth headphones solves the audio issues - so no need to upgrade just yet.
I tried Windows Live Movie Maker on a fairly grunty Dell optiplex 960 with 8 Gig RAM- but that POS software kept crashing every time I rendered my video, and anyway it only supports Microsofts proprietary WMV format.
Since I know how to use iMovie and I didn't want to learn anything else, I thought I would see if I could install OSX lion 10.7.3. I had already managed to run it in a VM, but the video driver for the VM didn't support Quartz Extreme, which is required to run iMovie.
Anyway, after several days I managed to get it all working for the following configuration with my Nvidia GeForce 8600GT card, so if anyone else wants to give it a try here a few tips that might save you the several days of pain I went through.
* Make sure your bios is in AHCI mode
* I used the iATKOS L2 installer DVD - which hangs during boot on an Optiplex 960. So I removed my HDD, put it in an Optiplex 755 which managed to boot and install the OS. I then swapped the disk back into my Optiplex 960 which successfully booted. I then ran software update, and downloaded the 10.7.3 Combo update standalone to bring the machine up to 10.7.3. There are other ways to install OSX, which involve using a USB key to boot the machine and a retail copy of the OSX lion DVD
* I now had OSX with no network, sound and only basic graphics
* using MultiBeast I was able to install the kernel extensions (kexts) to get the network card working. I used the AppleIntelE1000e network driver, which is packaged with Multibeast.
* I couldn't find any drivers to support the onboard sound hardware ADI 198x Integrated HD Audio.
Luckily I had an old soundblaster live card lying around and was able to install the awesome kx project audio drivers by Eugene Garilov. Unfortunately the audio inputs don't work, but I was pretty stoked that my 12 year old soundcard has a new lease on life in my hackintosh!
Getting the video working was the biggest pain.
Some suggestions I found by trawling the forums such as adding the GraphicsEnabler=Yes setting in the org.chameleon.boot.plist file that is used by the boot loader did NOT work. Neither did hardcoding some magic EFI string distilled from the video cards ROM.
What finally worked was installing NVEnabler64.kext. All the forum posts seem to assume you know how to install kexts... kext utility is what you need to do this. Just drag the kext file onto kext utility and it does all the magic, copying the files and repairing permissions. I found it only worked if it was in System/Libaries/Extensions... not Extras/Extensions as mentioned in a few forum posts.
And voila... you now have a working Hackintosh.
If you are thinking of trying this then http://www.osx86.net and http://tonymacx86.blogspot.com.au/ or http://www.tonymacx86.com/ are great resources. Good luck!
Interesting computer programming things, hardware hacks, electronics, ai, music and other stuff I find interesting
Labels
3G
(1)
8600GT
(1)
AI
(4)
amazon
(1)
API
(1)
apple
(3)
apple mail
(1)
atlassian
(1)
audio
(1)
bambo
(1)
Bamboo
(1)
bloat
(1)
boost
(1)
bugbear
(1)
C++
(5)
calling conventions
(1)
cdecl
(1)
chromecast
(1)
CI
(1)
compiler
(1)
continuous integration
(1)
coursera
(1)
custom domain
(1)
debugging
(1)
deltanine
(1)
diagnosis
(1)
diy
(5)
DLL
(1)
dns
(1)
don't be evil
(1)
ec2
(1)
education
(1)
electronics
(1)
express checkout
(1)
fail
(6)
fink
(1)
firewire
(1)
free hosting
(1)
GAE
(1)
google
(1)
Google App Engine
(4)
H170
(1)
hackerx
(1)
hackintosh
(1)
Haskell
(3)
homebrew
(2)
i1394
(1)
icloud
(2)
iOS 9
(1)
ipad2
(2)
jobhunting
(2)
lag
(1)
letsencrypt
(2)
libjpeg
(1)
linux
(1)
mac
(2)
mbcs
(1)
mechanic
(1)
memory
(1)
MFC
(3)
Microsoft
(1)
migration
(1)
ML
(1)
mobile
(1)
movi
(1)
MSBuild
(1)
music
(1)
naked domain
(1)
NLP
(2)
o2 sensor
(1)
obd
(1)
Optiplex960
(1)
osx
(1)
outlook express
(1)
payments
(1)
paypal
(1)
photos
(2)
PIL
(1)
Project Euler
(1)
projectmix
(1)
python
(2)
raspberrypi
(3)
recruitment
(1)
renwal
(1)
skylake
(1)
soundcloud
(1)
ssl
(2)
stdcall
(1)
stripe
(1)
subaru
(2)
supermemo
(1)
supermemo anki java
(1)
sync
(2)
Telstra
(1)
tests
(1)
thunderbird
(1)
udacity
(1)
unicode
(1)
Uniform Cost Search
(1)
university
(1)
upgrade
(2)
vodafail
(1)
vodafone
(1)
VS2010
(1)
vs2013
(1)
VS6.0
(1)
weather
(1)
win
(1)
Win32
(1)
Z170
(1)
Wednesday, 25 April 2012
Monday, 23 April 2012
Awesome free online university level classes.
I just finished the inaugural offering of CS373 - Programming a robotic car at udacity.com. It was a really interesting course taught by the world leader in self driving cars and winner of the 2005 DARPA grand challenge, Prof Sebastian Thrun. I really enjoyed his teaching style last year when I did the Stanford Introduction to Artificial Intelligence course that was made available online. The other teacher of that class, Peter Norvig, also has a new class he's teaching at udacity - CS212 - The design of computer programs, which I'm enjoying as well.
Udacity have really done a good job adapting their content to the web - the lectures are made up of short, easily digestible videos for each topic with plenty of interactive quizzes and programming assignments along the way, which make it much more engaging than your traditional university lecture. Best of all, they are free and taught by experts in their fields.
There are also a lot of new courses from bricks and mortar universities coming online at Coursera too.
I just enrolled in Stanford's highly regarded Machine Learning course which starts this week.
Udacity have really done a good job adapting their content to the web - the lectures are made up of short, easily digestible videos for each topic with plenty of interactive quizzes and programming assignments along the way, which make it much more engaging than your traditional university lecture. Best of all, they are free and taught by experts in their fields.
There are also a lot of new courses from bricks and mortar universities coming online at Coursera too.
I just enrolled in Stanford's highly regarded Machine Learning course which starts this week.
Tuesday, 20 March 2012
Tuesday, 14 February 2012
Subaru Engine Immobilizer Shennanigans
My key for my Subaru Outback no longer remotely locks or opens the vehicle. This has been a minor inconvenience for a while- I have to open the drivers door manually and then operate the central locking to open the rear hatch or other doors. Anyway, today whilst strolling through Newtown I had the brilliant idea to get the battery replaced at one of those little key cutting places that for some reason was located at the back of a tobacconist. Strangely, this is not the only multi-function tobacconist in Newtown, there is another place across he road that features a barber out the back of pipes, bongs and incense blends of dubious legality. Anyway, I digress...
This particular key cutting business seemed to exist to provide employment for the tobacconist proprietors elderly father, who deftly went about opening my car key with a jewellers screwdriver and inscrutably inspected the innards. After much hunting through his poorly organised shelving, he indicated for me to come over and showed me the battery with the number 1620 inscribed on it that apparently he did not have in stock. This is what I assumed, because at this point I realised he had the faintest grasp of the English language. As he fumbled to reassemble my key, I heard the sound of something tiny hitting the floor which I assumed to be a screw, but when he continued assembling the key it seemed the screw was accounted for.
I thanked him and wandered off, half heartedly checking every store that I walked past that looked it might sell batteries for the elusive 1620 with no luck until I finally made it back to my car.
I turned the ignition and the car started then immediately stalled, which was extremely unusual, even more so considering the car had just been serviced. I tried again with the same result, and then my hear sank when I saw the little key light on the dashboard blinking plaintively. It was then I realised that the sound of a tiny thing dropping to the floor as my key was reassembled was actually the sound of my tiny immobiliser chip dropping to the floor and no doubt bouncing off into an awkward and inconvenient place somewhere out the back of the tobacconist/key-cutter business.
Fortunately I was able to grab a spare key, and armed with the working ignition key and my other non-ignition key that was now only useful for opening the drivers door, I made my way back to the tobacconist on a mission to explain to the man who spoke no English that he had lost an extremely important and expensive thing and could I have a look on his floor? This was accomplished with help from the tobacconist proprietor, and when the old man opened my spare working key we could see a small, black rectangular prism shaped immobiliser chip was indeed missing. After a cursory look on the floor, he gave up and then with a small pair of scissors began fashioning me a replacement immobiliser chip out of a piece of black rubber to fill the sad void in the body of my car key remote. I explained it was a computer chip, which remarkably he seemed to understand, and ceased his miraculous feat of semiconductor engineering with the rubber and the scissors, and we had another proper look.
Finally, only after moving the extremely heavy rickety workbench where he had emasculated my key, the tiny chip was located and the key reassembled. Thankfully, it started my car the first time... but it still doesn't work the remote central locking!
Anyone know where i can find the elusive 1620 battery?
This particular key cutting business seemed to exist to provide employment for the tobacconist proprietors elderly father, who deftly went about opening my car key with a jewellers screwdriver and inscrutably inspected the innards. After much hunting through his poorly organised shelving, he indicated for me to come over and showed me the battery with the number 1620 inscribed on it that apparently he did not have in stock. This is what I assumed, because at this point I realised he had the faintest grasp of the English language. As he fumbled to reassemble my key, I heard the sound of something tiny hitting the floor which I assumed to be a screw, but when he continued assembling the key it seemed the screw was accounted for.
I thanked him and wandered off, half heartedly checking every store that I walked past that looked it might sell batteries for the elusive 1620 with no luck until I finally made it back to my car.
I turned the ignition and the car started then immediately stalled, which was extremely unusual, even more so considering the car had just been serviced. I tried again with the same result, and then my hear sank when I saw the little key light on the dashboard blinking plaintively. It was then I realised that the sound of a tiny thing dropping to the floor as my key was reassembled was actually the sound of my tiny immobiliser chip dropping to the floor and no doubt bouncing off into an awkward and inconvenient place somewhere out the back of the tobacconist/key-cutter business.
Fortunately I was able to grab a spare key, and armed with the working ignition key and my other non-ignition key that was now only useful for opening the drivers door, I made my way back to the tobacconist on a mission to explain to the man who spoke no English that he had lost an extremely important and expensive thing and could I have a look on his floor? This was accomplished with help from the tobacconist proprietor, and when the old man opened my spare working key we could see a small, black rectangular prism shaped immobiliser chip was indeed missing. After a cursory look on the floor, he gave up and then with a small pair of scissors began fashioning me a replacement immobiliser chip out of a piece of black rubber to fill the sad void in the body of my car key remote. I explained it was a computer chip, which remarkably he seemed to understand, and ceased his miraculous feat of semiconductor engineering with the rubber and the scissors, and we had another proper look.
Finally, only after moving the extremely heavy rickety workbench where he had emasculated my key, the tiny chip was located and the key reassembled. Thankfully, it started my car the first time... but it still doesn't work the remote central locking!
Anyone know where i can find the elusive 1620 battery?
Saturday, 28 January 2012
Decoding Shredded Messages in Haskell using AI techniques
Part 2 of my Introduction to Artifical Intelligence programming assignment was to decode a message,
which had been shredded and reassembled as a random jumble of strips like so:
You could brute force this and generate all 19! combinations, but this is not the AI way.
The approach I took was to greedily combine strips from left to right until all strips have been used. That is, choose an initial starting strip then try all remaining strips, then choose the one that results in the highest score for the combined strips based on trigram frequency. Rinse and repeat until all strips used.
We then do this again, choosing a new starting strip from each of the candidates, and the result with the best score is our winner.
Sounds simple, doesn't it? However, to arrive at the correct result required some tweaking of the scoring.
In my first attempt, the first 15 or so strips would be correct but the last 4 would be jumbled... I think this was because the last line is mostly blank, which upset the scoring, which was based on the sum of the log probability score for each row (see my previous post for more info on trigram probability scoring).
Using only the first 6 out of 8 rows for scoring improved this significantly, however the correct answer was actually only the third highest scoring result. The other two were almost correct but started with a column of spaces. Tweaking the scoring code to punish rows with a leading space (assuming the text is left justified) brought the correct answer to the top of the list. Hooray!
This was quite a challenge, especially as it was only my third ever Haskell program.
If you're interested in seeing how I tackled this problem in a functional language like Haskell the source code is hosted on ideone. Any feedback appreciate!
Finally, here is the output:
which had been shredded and reassembled as a random jumble of strips like so:
de| | f|Cl|nf|ed|au| i|ti| |ma|ha|or|nn|ou| S|on|nd|on ry| |is|th|is| b|eo|as| | |f |wh| o|ic| t|, | |he|h ab| |la|pr|od|ge|ob| m|an| |s |is|el|ti|ng|il|d |ua|c he| |ea|of|ho| m| t|et|ha| | t|od|ds|e |ki| c|t |ng|br wo|m,|to|yo|hi|ve|u | t|ob| |pr|d |s |us| s|ul|le|ol|e t|ca| t|wi| M|d |th|"A|ma|l |he| p|at|ap|it|he|ti|le|er ry|d |un|Th|" |io|eo|n,|is| |bl|f |pu|Co|ic| o|he|at|mm hi| | |in| | | t| | | | |ye| |ar| |s | | |.
You could brute force this and generate all 19! combinations, but this is not the AI way.
The approach I took was to greedily combine strips from left to right until all strips have been used. That is, choose an initial starting strip then try all remaining strips, then choose the one that results in the highest score for the combined strips based on trigram frequency. Rinse and repeat until all strips used.
We then do this again, choosing a new starting strip from each of the candidates, and the result with the best score is our winner.
Sounds simple, doesn't it? However, to arrive at the correct result required some tweaking of the scoring.
In my first attempt, the first 15 or so strips would be correct but the last 4 would be jumbled... I think this was because the last line is mostly blank, which upset the scoring, which was based on the sum of the log probability score for each row (see my previous post for more info on trigram probability scoring).
Using only the first 6 out of 8 rows for scoring improved this significantly, however the correct answer was actually only the third highest scoring result. The other two were almost correct but started with a column of spaces. Tweaking the scoring code to punish rows with a leading space (assuming the text is left justified) brought the correct answer to the top of the list. Hooray!
This was quite a challenge, especially as it was only my third ever Haskell program.
If you're interested in seeing how I tackled this problem in a functional language like Haskell the source code is hosted on ideone. Any feedback appreciate!
Finally, here is the output:
Shredded Message Solver (ai-class) shredded message: de| | f|Cl|nf|ed|au| i|ti| |ma|ha|or|nn|ou| S|on|nd|on ry| |is|th|is| b|eo|as| | |f |wh| o|ic| t|, | |he|h ab| |la|pr|od|ge|ob| m|an| |s |is|el|ti|ng|il|d |ua|c he| |ea|of|ho| m| t|et|ha| | t|od|ds|e |ki| c|t |ng|br wo|m,|to|yo|hi|ve|u | t|ob| |pr|d |s |us| s|ul|le|ol|e t|ca| t|wi| M|d |th|"A|ma|l |he| p|at|ap|it|he|ti|le|er ry|d |un|Th|" |io|eo|n,|is| |bl|f |pu|Co|ic| o|he|at|mm hi| | |in| | | t| | | | |ye| |ar| |s | | |. Top 3 results... score: -1619.5501131298224 Claude Shannon founded information theory, which is the basis of probabilistic language models and of the code breaking methods that you would use to solve this problem, with the paper titled "A Mathematical Theory of Communication," published in this year. score: -1631.76535223795 nnon founded informationClaude Sha ich is the basis of theory, wh tic language models and probabilis e breaking methods that of the cod use to solve this probleyou would m, aper titled "A Mathematiwith the pl ca Communication," publisheTheory of d ar. in this ye score: -1632.7894584577352 nded informationClaude Shannon fou he basis of theory, which is t uage models and probabilistic lang ng methods that of the code breaki olve this probleyou would use to s m, led "A Mathematiwith the paper titl ca ation," publisheTheory of Communic d in this year.
Tuesday, 10 January 2012
Solving Caesar Ciphers Using Haskell
I recently completed the free online Stanford Universivity Introduction to Artificial Intelligence class, taught by Peter Norvig and Sebastion Thrun. I can't highly recommend this course enough if you are interested in AI - and did i mention it's free?
Anyway, one of the optional programming assignments was to decode the following message:
"Esp qtcde nzyqpcpynp zy esp ezatn zq Lcetqtntlw Tyepwwtrpynp hld spwo le Olcexzfes Nzwwprp ty estd jplc."
The message is encoded using a Caesar Cipher - a very simple shift cipher, where each letter is substituted for another a fixed number of positions down the alphabet. Those of you old enough to remember Usenet may have encountered rot13, which is an example of a Caesar cipher.
The key to solving this problem is probabilistic analysis of the text. My first, rather naive approach based on intuition rather a strict application of probability theory was simply to analyse the text with the assumption that the most frequent letter in English is 'e'. Using AI jargon, we could say I used a probabilistic unigram letter model.
Anyway, I thought it was a great opportunity to practice my freshly minted Haskell skills, and to my surprise this naive approach actually worked!
Blogger does a lousy job of inlining code so I have hosted the code here on ideone.com, an awesome site that not only displays code with syntax highlighting, it can even take input, run the code and display the output. Thanks to Maxim on aiqus for improving my Haskell code.
Flush with my success, I tried a more sophisticated approach. This time I would use a trigram letter model, which are basically sequences of three adjacent letters- for example, one of the most common letter trigrams in English is 'THE". The approach was to generate all 26 possible decoding of the string, and score each one based on the trigram probabilities, choosing the one with the highest score as the most likely candidate. A few tricks that I learned in AI class were employed here - I used Laplace Smoothing to ensure that unlikely trigrams that I didn't have scores for would not invalidate my probability score due to multiplying by zero. I also used the log of the probabilities so I could simply sum them and didn't have to deal with ridiculously small numbers.
The source code, along with the trigram input data and output can be found here on here on oneide.com.
I have copied the output below
Caesar Cypher Solver (ai-class)
I would appreciate any comments on my Haskell code, I'm a bit of a novice... and any other feedback would be greatly appreciated.
Anyway, one of the optional programming assignments was to decode the following message:
"Esp qtcde nzyqpcpynp zy esp ezatn zq Lcetqtntlw Tyepwwtrpynp hld spwo le Olcexzfes Nzwwprp ty estd jplc."
The message is encoded using a Caesar Cipher - a very simple shift cipher, where each letter is substituted for another a fixed number of positions down the alphabet. Those of you old enough to remember Usenet may have encountered rot13, which is an example of a Caesar cipher.
The key to solving this problem is probabilistic analysis of the text. My first, rather naive approach based on intuition rather a strict application of probability theory was simply to analyse the text with the assumption that the most frequent letter in English is 'e'. Using AI jargon, we could say I used a probabilistic unigram letter model.
Anyway, I thought it was a great opportunity to practice my freshly minted Haskell skills, and to my surprise this naive approach actually worked!
Blogger does a lousy job of inlining code so I have hosted the code here on ideone.com, an awesome site that not only displays code with syntax highlighting, it can even take input, run the code and display the output. Thanks to Maxim on aiqus for improving my Haskell code.
Flush with my success, I tried a more sophisticated approach. This time I would use a trigram letter model, which are basically sequences of three adjacent letters- for example, one of the most common letter trigrams in English is 'THE". The approach was to generate all 26 possible decoding of the string, and score each one based on the trigram probabilities, choosing the one with the highest score as the most likely candidate. A few tricks that I learned in AI class were employed here - I used Laplace Smoothing to ensure that unlikely trigrams that I didn't have scores for would not invalidate my probability score due to multiplying by zero. I also used the log of the probabilities so I could simply sum them and didn't have to deal with ridiculously small numbers.
The source code, along with the trigram input data and output can be found here on here on oneide.com.
I have copied the output below
Caesar Cypher Solver (ai-class)
encoded message:
Esp qtcde nzyqpcpynp zy esp ezatn zq Lcetqtntlw Tyepwwtrpynp hld spwo le Olcexzfes Nzwwprp ty estd jplc.
The top 3 candidates based on trigram letter probabilities for english language
The first conference on the topic of Artificial Intelligence was held at Dartmouth College in this year.
score: -742.9796021883617
Nby zclmn wihzylyhwy ih nby nijcw iz Ulnczcwcuf Chnyffcayhwy qum byfx un Xulngionb Wiffyay ch nbcm syul.
score: -913.8004146160043
Esp qtcde nzyqpcpynp zy esp ezatn zq Lcetqtntlw Tyepwwtrpynp hld spwo le Olcexzfes Nzwwprp ty estd jplc.
score: -921.9751546970537
Friday, 11 November 2011
iPad 2 glass digitizer replacement...
My iPad2 had an unfortunate encounter with the pavement recently resulting in a broken glass digitizer.
Replacements are readily obtainable off ebay for around $50 so I thought I would have a crack at fixing it, which is not as easy as you would hope. That's because Apple have made their best efforts in the name of built-in obsolesence and glued the screen on. This means that in a few years when your perfectly functional iPad's battery starts to fade, you'll probably have to throw it away and buy a new one because removing the screen to access the battery is a major ordeal.
I was lucky in that I did not have to worry about keeping the screen intact, since I had a brand new replacement.
I used the iFixit teardown guide, as well as some hands on support from my friend Spoonie, who had already done his own teardown -without him I'm sure it would have taken much longer.
Anyway, I discovered a few things on the way...
iFixit recommends you use a heat gun to loosen the adhesive, which helps a great deal. However, make sure it is not too hot, as the screen sits on a thermoplastic bezel, which melts and deforms if it gets too hot. I discovered this the hard way, and as a result the new screen doesn't sit flush like it should. I managed to crack my brand new screen trying to reseat it with a little too much force.
So, I have bought another screen, a replacement bezel and some proper adhesive to glue the new screen on.
Hopefully the job will be much easier the next time around!
Replacements are readily obtainable off ebay for around $50 so I thought I would have a crack at fixing it, which is not as easy as you would hope. That's because Apple have made their best efforts in the name of built-in obsolesence and glued the screen on. This means that in a few years when your perfectly functional iPad's battery starts to fade, you'll probably have to throw it away and buy a new one because removing the screen to access the battery is a major ordeal.
I was lucky in that I did not have to worry about keeping the screen intact, since I had a brand new replacement.
I used the iFixit teardown guide, as well as some hands on support from my friend Spoonie, who had already done his own teardown -without him I'm sure it would have taken much longer.
Anyway, I discovered a few things on the way...
iFixit recommends you use a heat gun to loosen the adhesive, which helps a great deal. However, make sure it is not too hot, as the screen sits on a thermoplastic bezel, which melts and deforms if it gets too hot. I discovered this the hard way, and as a result the new screen doesn't sit flush like it should. I managed to crack my brand new screen trying to reseat it with a little too much force.
So, I have bought another screen, a replacement bezel and some proper adhesive to glue the new screen on.
Hopefully the job will be much easier the next time around!
Subscribe to:
Posts (Atom)