Wednesday, 3 July 2013

Linux Printer Drivers - Fuji Xerox DocuPrint P255 dw

The Fuji Xerox DocuPrint line of printers are not officially supported on Linux. But it is possible to get them working under Ubuntu Linux using the PPD file from the Windows Drivers.

Here's how I got my Fuji Xerox DocuPrint P255 dw working under Ubuntu 12.10:

  1. First, download the Windows PostScript Printer Drivers from the Fuji website:
  2. Extract the zip file to a local directory.
  3. Find the folder which matches your architecture - x64 for 64-bit machines, or x32 for 32-bit machines.
  4. Inside this folder you'll find a .cab file. Open this with your favourite archiver (I used Ark), and extract the contents.
  5. One of the extracted files is called "fxtpn1a.ppd". This is the PPD file you'll need to install the driver on Linux.
    NOTE: You may need to run dos2unix over this file, to convert from Windows to Unix line endings. I also had to correct one line which was supposed to begin with an asterisk, but had a single space preceding it at the start of the line.
  6. Under Ubuntu settings, open Printers, and click "Add".
  7. Find the network printer, and connect using AppSocket/HP JetDirect.
  8. When asked for a driver, choose "Local Driver", and "Provide PPD file".
  9. Browse to the PPD file extracted earlier, and click through the rest of the wizard to finish adding the printer.
  10. Print a test page to verify the drivers are working properly.

Sunday, 25 December 2011

Secure VPN Services

I've been looking recently at options for a secure VPN connection to the US or Europe. There are many websites which treat traffic from Australia differently to other countries, and it helps to be able to test sites from different locations. In particular, when using CloudFlare I'd like to be able to check if my website is up & running for users in America, not just the local Oceania area.

One of the best services I found was Super VPN Service. They offer VPNs for anonymous surfing with an IP address located in the United States or Germany. They include a torrent VPN service, and even a free account with the following features:
  • Connection using PPTP&L2TP protocol.
  • Servers are located in United States and Germany
  • Unlimited amount of traffic
  • High speed internet connection
  • 128 bit encryption
  • Works for PC on Windows /Linux/Mac OS
  • Works for mobile phones with Android/Windows/Mobile/iPhone/Blackberry/Symbian platform
That's a pretty full featured service, and the free option sounds like it would do me fine. What VPN service do you use, and how much does it cost per month?

Tuesday, 7 June 2011

Google Music Terms of Service

I just got an invite to Google Music Beta =D Of course, I read through the entire terms and conditions before signing up (doesn't everyone?) They were quite interesting, so I've posted them here for your interest. Note at the bottom there is a section for "Gracenote", a music data provider which has partnered with Google for this enterprise. I wouldn't be surprised if Google acquires Gracenote (or a similar company) some time down the track. It's not often that Google licenses the core data set for one of their services from a third party.

Listed below is the Google Music Beta Terms of Service, current as of 7th June 2011.

Additional Terms of Service for Music Beta by Google

Last modified: May 10, 2011
Thank you for your interest in Music Beta by Google! By using Music Beta by Google ("Music Beta" or the "Service"), you accept and agree to be bound by the Google Terms of Service, the Google Privacy Policy, and theMusic Beta by Google Privacy Policy, each of which is incorporated into this agreement by this reference, as well as these Additional Terms of Service for Music Beta by Google (collectively, the "Terms"). It is important for you to read each of these documents, as they form a legal agreement regarding your use of the Service between you and Google Inc. ("Google") whose principal place of business is 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States. This document explains how your agreement with Google is made up and sets out some of the terms of that agreement. Capitalized terms not otherwise defined in these Additional Terms have the meaning given to them in the Google Terms of Service.

The Music Beta Service and Your Music

Music Beta is a Service as defined in Section 1.1 of the Google Terms of Service and is provided to you for your personal, non-commercial use solely in connection with lawfully acquired music files from your personal collection that you choose to make available to yourself through the Service, including all data comprising, describing, or associated with each music file that you choose to upload, such as audio data, metadata, and album art for each selected file (whether referring to individual uploaded files or to your entire uploaded library, "Your Music"). Music Beta consists of (a) Google-provided server space that you can use for storage of Your Music, and (b) software applications and related web sites and services that allow you to upload, manage, access, and play back Your Music through a web browser or through any supported, Service-enabled device. To the extent that you use the Music Application for Android devices in conjunction with Music Beta, those uses are governed by the Terms, including these Additional Terms.

Trial Service Availability and Limitations

Music Beta is a trial or "beta" Service from Google that requires you to register with your new or existing Google account. It is available free for a limited time to residents of the United States (including its territories and protectorates) who have received an invitation from Google and accept the invitation by signing into their Google account to register for use of the Service. As a beta Service, certain limits on storage or usage may apply; these limits may be set or changed by Google at any time, at Google's discretion, and you agree that you will not attempt to obstruct or prevent the application of those Service limits at any time, or to manipulate your usage of the Service to avoid or circumvent them. You can find more information about applicable Service limits through the Music Beta Help Center.

Third Party Fees

Music Beta is available without charge from Google; however, you may incur access or data fees from third parties (such as your internet provider or mobile carrier) in connection with your use of the Service. You are responsible for all such third-party charges for your use of Music Beta on or through third party services and devices.

Privacy and Your Personal Information

Section 7 of the Google Terms of Service governing Music Beta by Google is replaced in its entirety by the following:
7.1 For information about Google's data protection practices, please read the Music Beta by Google Privacy Policy at This policy explains how Google treats your personal information, and protects your privacy, when you use the Service.
7.2 You agree to the use of your data in accordance with Google's privacy policies.

Your Permissions and Instructions to Google

Section 11 of the Google Terms of Service governing Music Beta by Google is replaced in its entirety by the following:
11.1 You retain any rights you already hold in Your Music. You acknowledge and agree that you are solely responsible for your own conduct and Content (including Your Music) while using the Service and for any consequences thereof. You agree to use the Service only for purposes that are legal, proper, and in accordance with these Terms, and that by using the Service you are requesting that Google make all of the necessary functions and features of the Service available to you in order to facilitate your use of Your Music according to the Terms. Without limiting the generality of this overall permission and instruction, you specifically agree that you are instructing Google to perform the functions described in Sections 11.2, 11.3, and 11.4 below.
11.2 By uploading or submitting Your Music to or through the Service, you are directing Google to store a unique copy of Your Music on your behalf and to make it accessible to you through the use of your login credentials.
11.3 By accessing, managing, playing back, displaying, or using all or any part of Your Music on or through the Service, you are directing Google to initiate and perform the corresponding functions on your behalf, together with any related steps necessary to achieve them, through the Service.
11.4 You understand that Google, in performing the required technical steps to provide you with the Service as described in the Terms, may (a) transmit Your Music over various public networks and in various media; and (b) make such changes to Your Music as are necessary to conform and adapt it to the technical requirements of connecting networks, devices, services, or media. You agree that in each such instance, your use of the Service includes a direction to Google to take these actions on your behalf.
11.5 You confirm and warrant to Google that you have all the rights, power and authority to grant any permissions and give any instructions to Google that may be required to perform the actions necessary to provide you with the Service. You agree that you will not upload, submit, access, manage, play back, display or use any Content (including any portion of Your Music), or direct Google to do anything with Your Music on your behalf, unless you have all of the necessary rights to do so without infringing the rights of any third party or violating any laws or agreements that apply to you, the Content, or Your Music.

Copyright Notices

It is Google's policy to respond to notices of alleged copyright infringement that comply with applicable intellectual property law (including, in the United States, the Digital Millennium Copyright Act) and to terminate the accounts of repeat infringers. Details of Google's policy can be found at

Third Party Software

To the extent that Music Beta includes components governed by third party or open source licenses with provisions inconsistent with the Terms, those components are instead governed solely by the applicable third party or open source licenses. Information regarding those licenses (except for software provided by Gracenote, Inc., for which the terms are included at the end of this agreement) can be obtained at the following location:

Acceptance of Terms

You accept the Terms either by clicking to accept the Additional Terms presented to you when you first access the Service or by using Music Beta by Google. Your continued use of the Service constitutes your consent to the Terms (as may be modified from time to time, in whole or in part, with or without notice). It is your responsibility to review the Additional Terms regularly for updates. If you do not agree to the Terms, you may not use the Service.
You can review, print or save a copy of these Additional Terms of Service for Music Beta by Google (and navigate to other links referenced in the Additional Terms) by visiting the Additional Terms web page at:

Gracenote Software

This application or device may contain software from Gracenote, Inc. of Emeryville, California ("Gracenote"). The software from Gracenote (the "Gracenote Software") enables this application to perform disc and/or file identification and obtain music-related information ("Gracenote Data") from online servers or embedded databases (collectively, "Gracenote Servers") and to perform other functions. You may use Gracenote Data only by means of the intended end-user functions of this application or device.
This application may contain content belonging to Gracenote's providers. If so, all of the restrictions set forth herein with respect to Gracenote Data shall also apply to such content and such content providers shall be entitled to all of the benefits and protections set forth herein that are available to Gracenote. You agree that you will use Gracenote Data, the Gracenote Software, and Gracenote Servers for your own personal non-commercial use only. You agree not to assign, copy, transfer or transmit the Gracenote Software or any Gracenote Data to any third party. YOU AGREE NOT TO USE OR EXPLOIT GRACENOTE DATA, THE GRACENOTE SOFTWARE, OR GRACENOTE SERVERS, EXCEPT AS EXPRESSLY PERMITTED HEREIN.
You agree that your non-exclusive license to use the Gracenote Data, the Gracenote Software, and Gracenote Servers will terminate if you violate these restrictions. If your license terminates, you agree to cease any and all use of the Gracenote Data, the Gracenote Software, and Gracenote Servers. Gracenote reserves all rights in Gracenote Data, the Gracenote Software, and the Gracenote Servers, including all ownership rights. Under no circumstances will Gracenote become liable for any payment to you for any information that you provide. You agree that Gracenote, Inc. may enforce its rights under this Agreement against you directly in its own name.
The Gracenote service may use a unique identifier to track queries for statistical purposes. The purpose of a randomly assigned numeric identifier is to allow the Gracenote service to count queries without knowing anything about who you are. For more information, see the web page for the Gracenote Privacy Policy for the Gracenote service.
The Gracenote Software and each item of Gracenote Data are licensed to you "AS IS." Gracenote makes no representations or warranties, express or implied, regarding the accuracy of any Gracenote Data from in the Gracenote Servers. Gracenote reserves the right to delete data from the Gracenote Servers or to change data categories for any cause that Gracenote deems sufficient. No warranty is made that the Gracenote Software or Gracenote Servers are error-free or that functioning of Gracenote Software or Gracenote Servers will be uninterrupted. Gracenote is not obligated to provide you with new enhanced or additional data types or categories that Gracenote may provide in the future and is free to discontinue its services at any time. GRACENOTE DISCLAIMS ALL WARRANTIES EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. GRACENOTE DOES NOT WARRANT THE RESULTS THAT WILL BE OBTAINED BY YOUR USE OF THE GRACENOTE SOFTWARE OR ANY GRACENOTE SERVER. IN NO CASE WILL GRACENOTE BE LIABLE FOR ANY CONSEQUENTIAL OR INCIDENTAL DAMAGES OR FOR ANY LOST PROFITS OR LOST REVENUES.
© 2011. Gracenote, Inc. All Rights Reserved

Friday, 27 May 2011

$100 Free Google Adwords Credit - from Hong Kong to Australia

Mail from Hong Kong
Today I received a letter from Google. The postmark and return address were both labeled "Hong Kong". Naturally I was more than a little curious as to what Google might be sending me from Hong Kong. As it turns out, the letter wasn't anything to do with Hong Kong at all.

The envelope contained a $100 gift card from Google Adwords, and a letter signed by Lucinda Barlow, Head of Marketing for Google Australia. Not Hong Kong. Either Google Australia uses Hong Kong for some of their mailouts, or they're sending out a global campaign and attaching local signatures depending on the destination. Either way, it's pretty crazy that mail sent to Australia comes from Hong Kong.

The full letter transcript is below:
Come back to AdWords and get $100 in free advertising

Hello from Google!

We understand how important it is for a business to stand out online - and that's one of the main reasons small businesses use Google AdWords everyday. Over the past year, we've made a lot of changes to make AdWords easier to use, and to help ensure your online ad campaigns deliver the results you expect. We hope you'll try AdWords again and are giving you $100 to get started.

There are a lot of things you can do to make your campaign more successful - refine your keywords, change your bid, or maybe try a new headline. We'd like to recommend the AdWords Online Classroom ( It's a free resource that offers a series of video tutorials covering quick tips designed to help you get the most out of AdWords.

The first step is redeeming your $100 and reactivating your campaign. Then, it's just a matter of time, and a little bit of effort, before you start attracting new customers to your business.


Lucinda Barlow
Head of Marketing, Google Australia

Thursday, 14 April 2011

Reset buttons - useful or not?

I've seen quite a few blogs posts lately complaining about the HTML Reset button. You know, the one that often sits beside the "Submit" button. I think everyone must have accidentally hit Reset at least once. So what's the use of it? Personally I have never seen a web form where a Reset button is necessary. And I have accidentally hit Reset many times - especially when it's placed in the position you normally find the Submit button.

This afternoon I wrote up a quick Google Chrome extension to hide all Reset buttons. Are you sick of accidentally clicking the wrong button? Try out the extension and let me know what you think.

Thursday, 7 April 2011

Google AdMob Earnings Checker (Chrome Extension)

Earlier this week I wrote up my first Chrome extension - the AdMob Earnings Checker. It's really easy to build extensions for Chrome - basically just stick a bunch of HTML and Javascript in a zipped folder, upload it and you're done. It took me less than an hour to build this guy (taking reference from a similar extension for AdSense).

The hardest part was actually decoding the AdMob page with the JQuery parser - take a look at the source of your AdMob sites page and you'll see what I mean. Not valid HTML by any means. I had to manually strip some tags in order to get JQuery to accept it as pseudo-html. Once I got over that difficulty though, it was pretty straight forward.

So if you develop Android apps, or operate any kind of mobile website using Google's advertising services, you might like to check out the extension. Any feedback would be appreciated!

Sunday, 20 March 2011

PHP Error: Permission denied in Unknown at line 0 [FIX]

I was setting up a quick PHP test in my home directory today, but when I tried to load my file (http://localhost/~david/test.php) I encountered a strange error:

Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Fatal error: Unknown: Failed opening required '/home/david/public_html/test.php' (include_path='.:/usr/share/php5/PEAR:/usr/share/php5') in Unknown on line 0

My code was pretty simple - no "include" or "require" statements anywhere, and perfectly valid syntax. This puzzled me for some time - it appeared as if PHP was trying to "require" my test file in itself. As it turns out, that wasn't too far from the truth.

This error was simply caused by Apache (and therefore PHP) not having read permissions to my PHP file. So it could tell that the file was there (otherwise I would get a 404 error), but when PHP tried to open the file for reading it failed, due to my file permissions (in this case, 007). To fix the problem, I simply had to run:

chmod 777 /home/david/test.php

After this my PHP code ran perfectly. It's worth knowing that this kind of error can occur - it might save a lot of Googling like I had to do!

Note: Normally I wouldn't change the permissions on a PHP file to 777 (everyone has full access, including write). However, in this case it was just a simple test page running on localhost, so I wasn't too worried about security.

Wednesday, 9 March 2011

[FIX] qt-facetrainer does not generate model for user (pam-face-authentication on openSuSE)

I was setting up the pam-face-authentication module using opencv on openSuSE today (following this guide). The installation process went well, using the one-click-install package. However, after running qt-facetrainer and adding the correct entries to /etc/pam.d/sudo I encountered the following error:

david@laptop:~> sudo -s
> Camera 0
mmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
Unable to stop the stream.: Bad file descriptor
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
 Face Verification Pluggable Authentication Module Started
Biometrics Model not Generated for the User.
Giving Up Face Authentication. Try Again=(.
root's password:
root's password:
sudo: pam_authenticate: Authentication token manipulation error
The fix turned out to be simple. Instead of running qt-facetrainer as myself, I had to run it as root (kdesu qt-facetrainer). This generated a face model for the root user, which allows me to authenticate myself as root using sudo. I still encounter the munmap errors, but I am now able to authenticate myself for su and sudo using face recognition!

Thursday, 9 September 2010

Testing Google Instant

Google Instant was released today, for a certain subset of users only. Google announced in their blog post that Google Instant is a new means of "googling". Instant search means that you only have to type a few letters of your search query, and Google search will instantly show you search results (before you press the enter key). As you enter more letters, the search results will instantly update, without having to reload the page. This search system was developed using JavaScript in the front end, along with Google's highly developed and fast search system behind it all. Query times of 0.3 seconds are very significant when your search results are updating as every character is typed!

Please note: This post is a test for Google Instant. I went to, typed in "testing" and one of the top suggestion results was "testing google instant". I'll test and see if this blog post appears in the results quickly.

Tuesday, 31 August 2010

Book Review - The Shadow Of The Bear (Regina Doman)

The Shadow of the Bear

by Regina Doman
The Shadow of the Bear


When Bear, a mysterious young man, lands on Blanche and Rose Brier's doorstep in New York City, the two sisters have conflicting opinions on whether or not he is dangerous. Even as Blanche learns to trust him, her fears that Bear's friendship threatens their family prove terrifyingly true. A modern retelling of the classic Brothers Grimm fairytale.

Read more on Amazon...

Personal Review

This book is a classic - one that I've read many times and will read again. The adaptation of the fairy tale "Snow White and Rose Red" is set in modern New York City, and fits in very well with this environment. But don't think this is just a children's fairy tale - anyone who has read Chesterton or is versed in classical literature will appreciate the quotes that come up throughout the story in casual conversation. The characters are engaging and varied - some are drug dealers, some classical poets, while others appear to be both! And surprisingly all the dialog sounds natural, despite dealing in some depth with many aspects of faith and life.

Some of the topics covered in a unique and realistic manner include modesty, judging people, revenge and peer pressure. You might think that having such a strong Christian moral the storyline would be weak - quite the opposite! The action and events in this story themselves make for a great read, the moral values simply add to this book's appeal.
Anyone from early teens on would definitely enjoy reading this book, although older teens would have a greater appreciation of the relationship aspects. This book is suitable for younger readers than Waking Rose or The Midnight Dancers (which deal with relationships at a higher level).

Violence (6/10) Rating: 6/10

There are some moderately violent scenes in this book. However, the level of violence seems appropriate to the story, and adds a level of realism without being overly graphic.

Some of the violent aspects include:
  • A gang of boys attack a boy and girl, and the girl is thrown to the ground
  • One character is nearly asphyxiated
  • A girl is forced into a car, and held against her will
  • People are held at gunpoint several times
  • One character is shot and wounded (not life-threatening)
  • A character threatens suicide
Anyone from early teens onward should be able to handle the level violence in this book. More conservative parents might wish to read the book first though, to be sure.

Immorality (6/10) Rating: 6/10

One of the major themes of this book is drug dealing. While innocent characters are sometimes suspected of illicit dealings, it's always very clear that using or handling drugs is wrong.

Some high school students are smoking cigarettes without permission or adult supervision. These are students with a bad reputation, and it's obvious that what they're doing is wrong.

In once scence, a boy is alone with a girl and tries to force a kiss (nothing further ensues though). This particular issue is handled very well, and later on in the book the girl gives a marvelous treatise on morality and character.

Language (1/10) Rating: 1/10

The language is exceptionally clean throughout this book, a remarkable achievement considering some of the characters involved.

SN Themes (3/10) Rating: 3/10

The characters' moral struggles feature prominently in this book, but no real supernatural themes. A Catholic church is regarded as "sacred" but this feature isn't dwelt on. There is a brief scene where the number "666" is used by the "bad guy".

Overall, the story is very light on supernatural elements, despite it's strong moral content. It's written as a fairy tale, and can be read as such.

Catholic Perspective

Catholics will love this book. The author has portrayed strong Catholic values in a way that makes sense. Anyone who comes from a Catholic background will find a lot to relate to.

But The Shadow Of The Bear also has strong appeal for Christians of any kind. The characters are current-day teenagers with many of the real-world challenges faced in this role. The specifically Catholic aspects aren't overbearing - they're just part of the characters' lives. Overall, this is a refreshing and energising book for any young Christian. It shows that belief in God is not irrelevant or boring,  and can even lead to adventure!

Read more on Amazon...

Monday, 30 August 2010

Symfony 'String could not be parsed as XML'

I was receiving this error on my symfony project (using the sfWhoIsOnline plugin):

[28-Aug-2010 21:50:54] PHP Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/xxxxxxx/plugins/sfWhoIsOnlinePlugin/lib/sfWhoIsOnlineUserFacade.class.php:38
Stack trace:
#0 /home/xxxxxxx/plugins/sfWhoIsOnlinePlugin/lib/sfWhoIsOnlineUserFacade.class.php(38): SimpleXMLElement->__construct('')
#1 /home/xxxxxxx/plugins/sfWhoIsOnlinePlugin/lib/filter/sfWhoIsOnlineFilter.class.php(14): sfWhoIsOnlineUserFacade::registerUser(Object(myUser))
#2 /home/xxxxxxx/cache/frontend/prod/config/config_core_compile.yml.php(1026): sfWhoIsOnlineFilter->execute(Object(sfFilterChain))
#3 /home/xxxxxxx/plugins/sfDoctrineGuardPlugin/lib/sfGuardRememberMeFilter.class.php(56): sfFilterChain->execute()
#4 /home/xxxxxxx/cache/frontend/prod/config/config_core_compile.yml.php(1026): sfGuardRememberMeFilter->execute(Object(sfFilterChain))
#5 /home/xxxxxxx/cache/frontend/prod/config/config_core_compile.yml.php(990): sfFilterChain->execute()
#6 /home/xxxxxxx/cache/frontend/prod/config/config_core_compile.yml.php(1026): sfRenderingFilt in /home/xxxxxxx/plugins/sfWhoIsOnlinePlugin/lib/sfWhoIsOnlineUserFacade.class.php on line 38
[29-Aug-2010 00:06:48] String could not be parsed as XML
[29-Aug-2010 02:14:47] String could not be parsed as XML

Turns out, SimpleXMLElement can't handle empty strings or badly encoded documents well. As a patch of sorts, I replaced the code at line 38 in the sfWhoIsOnlineUserFacade class with the following lines (original lines in bold):

/* Begin Hack to fix error 'String could not be parsed as XML' */
try {
  $xml = new SimpleXMLElement($xmlString);    // <-- Original line 38   
$instance->fromXml($xml);                // <-- Original line 39
} catch (Exception $e) {
  sfContext::getInstance()->getLogger()->crit('sfWhoIsOnline failed to create SimpleXMLElement');
  sfContext::getInstance()->getLogger()->crit('xmlString: '.$xmlString);
/* End Hack */


Sunday, 22 August 2010

Undelete a Linux file

Undelete! | Atomic Object, Software Design & Development:
How to undelete a file removed with the 'rm' command on Linux
"grep -a -B 25 -A 100 'some string in the file' /dev/sda1 > results.txt

Thursday, 19 August 2010

Install phploc on openSuSE 11.3 [HOWTO]

Once you've got PEAR installed, run these commands (as root):

pear channel-discover
pear channel-discover
pear install phpunit/phploc

At first I was getting errors:

phpunit/File_Iterator requires PEAR Installer (version >= 1.9.1), installed version is 1.9.0
phpunit/phploc requires package "phpunit/File_Iterator" (version >= 1.2.0)
No valid packages found
install failed

But running:

pear upgrade-all

fixed all the errors.

Monday, 9 August 2010

Use ssh-copy-id on a non-default port

ssh-copy-id has known problems with handling non-standard ports (e.g. connecting to a different port than 22). To overcome this issue, use a command like:

$ ssh-copy-id "user@host -p 6842"