Navigate Site

Arrow Site Options

Arrow Cookies
Arrow Site Panel
Arrow Page Panel
Arrow Site Color

Select Color View mode

Arrow InetTime




Arrow Browser

Host: ec2-54-144-44-17.compute-1.amazonaws.com
Port: 51646
Protocol: HTTP/1.1
Method: GET
User Agent: CCBot/2.0 (http://commoncrawl.org/faq/)
Referer: [Link]

Server: peeto.net
Server Port: 80
Server Software: Apache


Arrow Page Options


My Blog

From Blogger


Find and remove duplicate files in Linux
Monday 22nd of May 2017 11:12:00 PM

After maintaining data for years and guessing I have terrabytes of duplicated data. I couldn't find a great solution so I made my own using fdupes.

Firstly, use eyeballs to ensure there will not be any problems:

fdupes -rnm .

If all seems well then remove the duplicates:

fdupes -rndN .

I'm sure this can be approved on. The fundamental concept here is to determine if there is going to be any problems before automatically deleting a bunch of files.

Install Google Assistant
Monday 27th of March 2017 01:13:00 AM

I'm currently running a Moto G3 with Marshmallow and Google Now. My Google Now feed has been bombarded with articles about how I'm going to get Google Assistant for over five months now and as an Australian I thought it would have happened already. Despite what you may read, it isn't going to happen automatically and this article describes how to make it happen.

Firstly you should try Google Assistant via Google Allo to determine if you want it in the first place. Personally I ask AI systems "who shot first" to determine their quality. Google Assistant's comments about Chewbacca impressed me enough to make the switch.

A word of warning you won't find on the web: this process will destroy your launcher configuration and means you'll have to set up all your icons and widgets again. If you've ever moved from Lollipop to Marshmallow this is something you have become accustomed to anyway.

Are you ready to do this? Let's go!

Step 1: Make your phone American (it's only temporary). Go to settings then "Language & input".

Now change your language to English (United States).

Step 2: Kill Google. In settings go to Apps.

Now wait forever and find the "Google App".
Then go to Storage, Manage Space
And now click "Clear All Data".
Now go back to Apps and repeat the process for "Google Play services".

Step 3: Configure Google Assistant and rebuild the universe. Go back to your home screen and you should notice it has been destroyed. Swipe right to where Google Now was and it will ask to configure Google Assistant. Do this and rebuild your launcher icons and what not.

Step 4: Get the hell out of Dodge. Remember to go back to settings, "Language & input" and change your language back to English (Australia) or whatever. You'll have to keep your language as English (United States) or Google Assistant will stop working.

Krush, Kill 'n' Destroy rfkill
Monday 24th of October 2016 06:16:00 AM


rfkill is the worst piece of software ever conceived, in a nutshell it is designed to completely destroy radio (eg. WiFi / BlueTooth / etc) right when you need it most. Why anyone would think that you would need to do this is beyond me (I'm not buying the "it uses less battery" argument, using a shot gun would be more elegant). Whoever though this needed to be installed by default in all Ubuntu distro's needs a mental health plan.

After dealing with years and years of agonizing pain because of this I found an elegant solution, remove it:

sudo apt-get purge --auto-remove rfkill

No more USB cables, booting Windows, and command line ninja mastery, this works! Even if you accidentally hit that mysterious checkbox in NetworkMananger the radios do not die.

I'd also like to thank the genius who though it would be a good idea to add "connect" buttons to network connections in the latest version NetworkMananger, you are a true visionary!

Upgrade adoptable USB storage in Android Marshmallow
Tuesday 18th of October 2016 03:20:00 PM


I'm writing this guide for myself because I can't find much on the Internet about this. I haven't even tried this, I'm making it up as I go but trust me this is going to work or there will be blood.

  1. Install App2SD on the phone
  2. Backup app list using App2SD
  3. Disable USB debugging (if necessary)
  4. Set the USB mode to MTP (if necessary)
  5. Plug the phone directly into a PC (no USB hub)
  6. Browse to the SD contents:
    • If you are using Windows or a Mac, just do it
    • In KDE look in Dolphin's "places"
    • If you use GNOME put on your big boy pants
    • If you use Unity, check yourself into rehab
    • Or see 2
  7. Copy the SD contents to the PC12
  8. Switch off the phone
  9. Replace the old SD card with the new one
  10. Boot the phone
  11. Tell Android to delete the old SD card and pray
  12. Format and migrate to the new SD card
  13. Reboot the phone
  14. Copy the backed up data to the new SD card (I needed a File Manager and AirDroid for this)2
  15. Re-install App2SD
  16. Use Superman strength to replace the App2SD backup with the actual backup3
  17. Use app restore in App2SD to manually confirm to install each and every missing app
  18. Reboot the phone
  19. Put everything back to normal. 99% of apps will have fully restored data, use Superman strength for the 1%
  20. Try not to kill anyone

Easy huh?


I'm thinking my OTG cable could have really helped with this.

Saturday 15th of October 2016 03:36:00 AM

I use tmux because it is rather awesome and I have spent quite a bit of time developing a script to automate starting it. It uses screen compatible key bindings to help with muscle memory. It should just work on debian and be easy to adapt for redhat and others.

I'm not happy with the mouse mode component because it wrecks my OS clipboard functionality so I've still got some work to do (help?). With this much effort it would be a shame to not share it so here it is.

# first window is called console, top 60% is bash
tmux new-session -d -n console -s default
# remap prefix to Control + a
tmux set -g prefix C-a
tmux unbind C-b
tmux bind C-a send-prefix
# windows start at '1'
set -g base-index 1
# allow resize
tmux setw -g aggressive-resize on
# allow mouse mode
tmux set -g mode-mouse on
tmux set -g mouse-resize-pane on
tmux set -g mouse-select-pane on
tmux set -g mouse-select-window on
# lower left 50% x 40% is logs
tmux split-window -p 40 'bash -c "tail -Fn20 /var/log/syslog"'
# lower right 50% x 40% is htop
tmux split-window -h htop
# window for work (bash)
tmux new-window -c ~/Documents/Projects/ -n work
# window for root
tmux new-window -n root 'sudo su -'
# window for htop
tmux new-window -n htop 'htop'
# window for syslog
tmux new-window -n syslog 'bash -c "tail -Fn20 /var/log/syslog"'
# focus on desired window
tmux selectw -t 0
tmux selectp -t 0
# wish I could remember what this does
tmux a -t default

Google Now API
Tuesday 04th of October 2016 08:57:00 AM
I've been wondering about how to do custom integrations with Google Now for quite a while and have finally found the documentation:


Thank you Private Public Transport Victoria for finally coming around. I'd like to shout out to the AFL and point out that an AFL match is an "event", much like an NRL or cricket match really.

Tuesday 04th of October 2016 12:04:00 AM
Does anyone know the nerd from the Google Translate ad? I can't find the ad and keep thinking about it. The letters in his zipper and hair just need to go through a SOUNDEX and a dictionary before being thrown out. More false negatives will need to be dealt with but a whole lot less false positives. The false negatives can be improved by optimizing detection of known non-dictionary items like numbers.

Wednesday 03rd of August 2016 09:58:00 AM
I have fixed this but it is really comforting to know that Canonical can get aptitude working in Windows 10 but not in Ubuntu

E: Could not get lock /var/cache/apt/archives/lock - open (11: Resource temporarily unavailable)

blueproximity KDE
Saturday 16th of July 2016 06:53:00 PM

Not sure why:

rfkill unblock bluetooth


  • Lock command: qdbus org.kde.screensaver /ScreenSaver Lock
  • Unlock command: qdbus | grep kscreenlocker_greet | xargs -I {} qdbus {} /MainApplication quit
  • Proximity command: qdbus org.freedesktop.ScreenSaver /ScreenSaver SimulateUserActivity

From here!

Returned, for a moment
Saturday 11th of June 2016 05:40:00 AM
20.04 months
87.09 weeks
609.67 days
14,632.15 hours
877,929 minutes
52,675,740 seconds

Finally I state how HTML 5 sucks
Monday 30th of May 2016 01:28:00 PM
For it's entire life I haven't been fond of HTML 5 standard, I'm now willing to describe why:

1. To quote Sigourney Weaver, you piss on XML without even calling it rain. Your eleventh hour introduction of an XML compatible standard and the introduction of the entire RDF standard confirms this. Your official standard recommends that people continue to piss on XML.
2. Your doctype confirms that you piss on all other standards of HTML, both past and future. It is perfectly obvious that because of this, at some point in the future, HTML 5 will be declared as "bad".
3. You failed. Your intention of standardizing web video formats and all the other things you intended to do didn't actually happen.
4. You failed. What you were supposed to improve the web, it didn't happen. Simply obvious things like multi-hyperlinks simply weren't proposed.
5. You renamed a bunch of shit for the sake of it, good job.
6. The simple job of shoving something in the bottom right corner of a computer screen, possible using "tables"in HTML 3.2, isn't possible in HTML 5 and requires an ever evolving standard, CSS, that has has never officially solved this previously solved basic problem. In the pre-internet days, I would physically punch a computer if this was ever an issue.
7. The advocation for things like CSS and Javascript shows that no-one ever intended for the HTML5 standard to be complete and fully functional / useful.
8. Thank you for ignoring things like like DOM3, innovation can be very hard. Let's wait another 50 years to standardize things that people do every day, like "drag on drop".
9. Nice to see you trying to push new technology. I have to download something called "icemonkey" to see my 10+ year old attempts at RDF actually work.
10. Actually forget innovation. Previously working subsets of standards like RDF's FOAF are hard to maintain, let's just give up.

Saturday 07th of May 2016 02:25:00 AM
To be fair to myself it's hard to justify documenting Ada, however:

IFNULL(ROUND(GLength(LineStringFromWKB(LineString(l.location, lp.location)))*110400), 0) AS diff_distance

Thank you Chris. The most common form of 110400 is an entire Briggs and Stratton engine range. I don't think so.

PulseAudio why so hard
Monday 02nd of May 2016 09:00:00 PM
The type of application I want to use is one where sound comes out of speakers. I have another where I'd like sound to come in through the microphone but I don't want to ask for too much.

:~ > pacmd
No PulseAudio daemon running, or not running as session daemon.
:~ > ps aux | grep pulse
pulse 30519 0.0 0.1 479048 8824 ? S

Ok Internet
Sunday 27th of September 2015 01:26:00 AM
I suck at BASH scripting but make myself do it anyway. Even though I'm not supposed to go near toy ponies, today I wrote this for Ubuntu:


while true; do
        P=`ponysay -l | sed -r "s:\x1B\[[0-9;]*[mK]::g" | sort -R | head -n1 | tr -s ' ' | tr ' ' '\n' | head -n3 | sort -R | head -n1 | tr -d ' '`;
        printf "$N) $P says:\r\n";
        fortune -s | ponyfy | ponysay -F $P | pv -qL750;

I took the following from milesluigi @ reddit:

sed -e 's/america/amareica/g' -e 's/America/Amareica/g' -e 's/anybody/anypony/g' -e 's/Anybody/Anypony/g' -e 's/anyone/anypony/g' -e 's/Anyone/Anypony/g' -e 's/boy/colt/g' -e 's/Boy/Colt/g' -e 's/butthurt/saddle-sore/g' -e 's/Butthurt/Saddlesore/g' -e 's/children/foals/g' -e 's/Children/Foals/g' -e 's/child/foal/g' -e 's/Child/Foal/g' -e 's/cowboy/cowpony/g' -e 's/Cowboy/Cowpony/g' -e 's/cowgirl/cowpony/g' -e 's/Cowgirl/Cowpony/g' -e 's/gentlemen/gentlecolts/g' -e 's/Gentlemen/Gentlecolts/g' -e 's/everybody/everypony/g' -e 's/Everybody/Everypony/g' -e 's/everyone/everypony/g' -e 's/Everyone/Everypony/g' -e 's/feet/hooves/g' -e 's/Feet/Hooves/g' -e 's/folks/foalks/g' -e 's/Folks/Foalks/g' -e 's/fool/foal/g' -e 's/Fool/Foal/g' -e 's/foot/hoof/g' -e 's/Foot/Hoof/g' -e 's/girls/fillies/g' -e 's/Girls/Fillies/g' -e 's/girl/filly/g' -e 's/Girl/Filly/g' -e 's/halloween/nightmare night/g' -e 's/Halloween/Nightmare Night/g' -e 's/hands/hooves/g' -e 's/Hands/Hooves/g' -e 's/handed/hooved/g' -e 's/Handed/Hooved/g' -e 's/hand/hoof/g' -e 's/Hand/Hoof/g' -e 's/\bhey\b/hay/g' -e 's/\bHey\b/Hay/g' -e 's/humans/ponies/g' -e 's/Humans/Ponies/g' -e 's/human/pony/g' -e 's/Human/Pony/g' -e 's/ladies/fillies/g' -e 's/Ladies/Fillies/g' -e 's/main/mane/g' -e 's/Main/Mane/g' -e 's/woman/mare/g' -e 's/Woman/Mare/g' -e 's/women/mares/g' -e 's/Women/Mares/g' -e 's/\bman\b/stallion\ /g' -e 's/\bMan\b/Stallion/g' -e 's/\bmen\b/stallions/g' -e 's/\bMen\b/Stallions/g' -e 's/no\ one\ else/no\ pony\ else/g' -e 's/No\ one\ else/No\ pony\ else/g' -e 's/nobody/nopony/g' -e 's/Nobody/Nopony/g' -e 's/people/ponies/g' -e 's/People/Ponies/g' -e 's/person/pony/g' -e 's/Person/Pony/g' -e 's/philadelphia/fillydelphia/g' -e 's/Philadelphia/Fillydelphia/g' -e 's/somebody/somepony/g' -e 's/Somebody/Somepony/g' -e 's/tattoo/cutie\ mark/g' -e 's/Tattoo/Cutie\ mark/g' -e 's/the\ heck/the\ hay/g' -e 's/The\ heck/The hay/g' -e 's/the\ hell/the\ hay/g' -e 's/The\ Hell/The\ Hay/g' -e 's/troll/parasprite/g' -e 's/Troll/Parasprite/g'

To install:
sudo add-apt-repository ppa:vincent-c/ponysay
sudo apt-get update
sudo apt-get install ponysay fortune pv

The "P=" line basically asks ponysay to get a list of pony's it knows about, picks one at random, pivots that and does it again because there are three ponies per line to get the name of a random pony. Next it ponyfy's a fortune quote and uses pv to make it render slowly.

Tuesday 04th of August 2015 08:19:00 AM
But yet to return, however a start

8.7 months
37.81 weeks
264.68 days
6,352.41 hours
381,145 minutes
22,868,700 seconds

Sunday 05th of July 2015 06:57:00 AM
Rather than splash rainbows everywhere I instead made this: http://equality.peeto.net

minidlna on Ubuntu 14.04
Tuesday 16th of June 2015 03:28:00 AM

minidlna on Trusty Tahr phew!

add-apt-repository ppa:djart/minidlna

Big guns for fun
Tuesday 09th of June 2015 11:20:00 PM
I've had some free time lately and I decided to adapt a scrolling shoot em up style game to have what everyone really wants, insanely powerful weapons. I found a good Java game to adapt and modified it until I was happy with the result. Update: I'm getting into github.

Star Wars: The Force Awakens Official Teaser #2
Thursday 16th of April 2015 10:55:00 PM

Saturday 04th of April 2015 09:56:00 PM

Not the code I was looking for reddit but I thought this was ell good too. I'm never looking for code on reddit again.

Friday 26th of December 2014 06:20:00 PM

This will stop

Up up up up up up
Thursday 10th of October 2013 08:48:00 AM
Yes, I like Ani DiFranco but this post is about me. Thanks largely to Martin I now have a very cool job and have the last of my personal issues are behind me. I'd like to thank all my friends, family, and enemies that helped me through my last eighteen months or so of misery because now I am on the up. You know exactly what we are going to do tomorrow Pinky.

BASH question
Thursday 05th of September 2013 07:46:00 AM
I have a slightly old Ubuntu based distro with a slightly new wifi card that has never had a working wifi driver so I've been having to bake my own. Of course every time a new kernel comes out I have to recompile it with my own wifi driver.

When, say, I'm on a moving train and I update my system, which in turn updates the kernel which then kills my wifi, which then requires me to download the latest headers to re-compile the wifi driver into the kernel, it feels a lot like my own personal hell. I've learned to deal with it by adopting the mantra "dealing with Linux drivers is like going to war armed with a teaspoon".

To save me a lot of pain, I have a BASH script that compiles the driver into the kernel and starts it etc. I also have a custom alias that updates my system, it runs apt-get update, apt-get dselect-upgrade etc, and the second last and important thing it does is download the current kernel headers. I do it with this:

apt-get install linux-headers-`uname -r`

Running this command in a console does the job fine. But within my alias, it seems to grep a whole lot of crap back into it somehow, and I get what feels like a thousand different messages like:

Note, selecting 'libcpan-uploader-perl' for regex 'tree...'

I'd love to know why this happens, I'd probably be able to stop it if I knew why. I'm sure it has something to do with running a sub-command from within an alias. If you know BASH well and can explain this to me I'd greatly appreciate it. I expect most Linux users will ask why the f**k I use BASH and Windows users will ask what the f**k is BASH.

Here are the relevant parts of my ~/.bashrc :

alias nomnomnom='echo Updating repository...
sudo apt-get -yu update
echo Upgrading....
sudo apt-get -yfu dselect-upgrade
echo Updating kernel headers...
sudo apt-get install linux-headers-`uname -r`
echo Cleaning up...
sudo apt-get -yu autoclean
sudo apt-get -yu autoremove
echo Done.

alias fixwifi='echo Shutting down WiFi...
sudo ifconfig wlan0 down
echo Making...
cd /usr/local/src/rtl8723
echo Installing...
sudo make install
echo Restarting WiFi...
sudo modprobe rtl8723e
sudo modprobe -r rtl8723e
sudo modprobe rtl8723e ips=0
sudo ifconfig wlan0 up
echo Done.
sudo ifconfig wlan0

I've come to the conclusion that backticks in an alias are just plain buggy in BASH so I've moved the alias to /blah/bin/nomnomnom and it just works now.

Minecraft fixed
Friday 09th of August 2013 01:35:00 AM
Linux Notebook / Netbook users, I a have solution that will stop you from accidentally smashing your bed to pieces after waking up in the morning or pouring molten lava everywhere when you are interior decorating! Here is my /usr/local/games/minecraft:


# Chris' Minecraft launcher
# see:
# xinput list
# xinput list-props

# Disable synaptics touchpad tap
xinput set-int-prop 12 279 8 0 0 0 0 0 0 0

# Disable synaptics touchpad scrolling
xinput set-int-prop 12 270 8 0 0 0
xinput set-int-prop 12 271 8 0 0

# Start Minecraft
java -Xmx1024M -Xms512M -jar /usr/local/games/Minecraft.jar

# Enable synaptics touchpad tap
xinput set-int-prop 12 279 8 2 3 0 0 1 3 0

# Enable synaptics touchpad scrolling
xinput set-int-prop 12 270 8 1 0 0
xinput set-int-prop 12 271 8 1 0

Maybe I do want a tablet
Tuesday 04th of June 2013 02:57:00 AM
I'd be very interested if some one out there with too much time and money could take the time to post some photos of KDE running on the new Microsoft Surface Pro. I haven't seen the point in owning such a device due to the lack of useful features but getting a full blown Linux on it would be a different story.