• Batch Rotate Images in Ubuntu

    For whatever reason I wasn't able to quickly find something to batch rotate some images in Ubuntu, so, here is the command I ran in the folder that contained the images I wished to rotate after creating a folder named 'resized.' Not to worry about the program trying to rotate the folder, it will just error. This also requires ImageMagick to be installed

    for i in `ls`; do convert $i -rotate 90 rotated/$i; done;
  • Facebook Wall Cleanse V1

    This is an early iteration of code which allows you cleanse your Facebook wall. This is necessary because of the new Facebook Timeline which allows your past history to be searched more efficiently. This information was always there it is just now easier to get at. I had attempted to write a nice script using the Facebook API which would delete posts automatically but that proved to be impossible since the API does not allow applications to delete posts from other applications, and since no application I would create would be the same as the Facebook web application deletion through this method was not going to be possible. As result, I have resorted to iMacros a web browser extension for Firefox (and other browsers) that records mouse movements. Due to the fact that deleting content can be a fairly dynamic task some further scripting was required than what could be achieved simply through recording mouse clicks. This was done by implementing some javascript.

    The code below is no doubt un-finished, I am largely writing it for myself but I would like others to be able to benefit if they are attempting to do similar stuff. The code below should remove all comments made in 2011 and 2010. These are the only dates because I believe comments are a relatively new feature, and at the time of writing it is not yet 2012.

    I have been working on similar scripts for a few days now, my motivator in posting now is to show my method of handling the dynamic nature of the dates on the activity log. When running macros with no extra scripting it would be the case that the macro would run out of comments to delete due to the fact that later dates were not being loaded automatically. The javascript that I have written handles that issue.

    The 999999999 and the YOURFACEBOOKHANDLE will need to be replaced with information which is unique to you and you need to have the Facebook Timeline to use this.

    var i, s, errorCount, dateTry;
    errorCount = 0;
    dateTry = 0;
    var dateTryArray=new Array();
    dateTryArray[0]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=12&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Dec\n";
    dateTryArray[1]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=11&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Nov\n";
    dateTryArray[2]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=10&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Oct\n";
    dateTryArray[3]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=9&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Sept\n";
    dateTryArray[4]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=8&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Aug\n";
    dateTryArray[5]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=7&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Jul\n";
    dateTryArray[6]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=6&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Jun\n";
    dateTryArray[7]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=5&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:May\n";
    dateTryArray[8]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=4&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Apr\n";
    dateTryArray[9]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=3&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Mar\n";
    dateTryArray[10]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=2&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Feb\n";
    dateTryArray[11]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2011&log_filter=cluster_116&month=1&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Jan\n";
    dateTryArray[12]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=12&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Dec\n";
    dateTryArray[13]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=11&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Nov\n";
    dateTryArray[14]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=10&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Oct\n";
    dateTryArray[15]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=9&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Sept\n";
    dateTryArray[16]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=8&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Aug\n";
    dateTryArray[17]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=7&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Jul\n";
    dateTryArray[18]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=6&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Jun\n";
    dateTryArray[19]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=5&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:May\n";
    dateTryArray[20]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=4&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Apr\n";
    dateTryArray[21]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=3&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Mar\n";
    dateTryArray[22]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=2&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Feb\n";
    dateTryArray[23]="TAG POS=1 TYPE=A ATTR=AJAXIFY:/ajax/timeline/all_activity/show_year.php?profile_id=999999999&year=2010&log_filter=cluster_116&month=1&&HREF:#&&REL:async&&CLASS:fbTimelineLogMonthLink&&TXT:Jan\n";
    while (dateTry <= 23)
    {
        if (errorCount > 2)
        {
            dateTry += 1;
            errorCount = 0;
        }
        macro = "CODE:";
        macro += "URL GOTO=http://www.facebook.com/YOUR_FACEBOOK_HANDLE?sk=allactivity\n";
        macro += "TAG POS=1 TYPE=SPAN ATTR=CLASS:uiButtonText&&TXT:All\n";
        macro += "WAIT SECONDS=1\n";
        macro += "TAG POS=1 TYPE=SPAN ATTR=CLASS:itemLabel<SP>fsm&&TXT:Comments\n";
        macro += "WAIT SECONDS=3\n";
        macro += dateTryArray[dateTry] + "\n";
        macro += "WAIT SECONDS=1\n";
        macro += "TAG POS=1 TYPE=I ATTR=CLASS:mrs<SP>defaultIcon<SP>customimg<SP>img<SP>sp_8cd3nf<SP>sx_253349&&TXT:\n";
        macro += "SET !TIMEOUT_PAGE 1\n";
        macro += "SET !ERRORIGNORE YES\n";
        macro += "WAIT SECONDS=1\n";
        macro += "TAG POS=1 TYPE=SPAN ATTR=CLASS:itemLabel<SP>fsm&&TXT:Delete<SP>comment...\n";
        macro += "SET !ERRORIGNORE NO\n";
        macro += "SET !TIMEOUT_PAGE 10\n";
        macro += "WAIT SECONDS=1\n";
        macro += "TAG POS=1 TYPE=INPUT:BUTTON ATTR=NAME:ok&&VALUE:Delete\n";
        i = iimPlay(macro);
        /* Check for error */
        if (i < 0) {
            errorCount += 1;
        };
    }

    And again, this code is in its very early stages. Depending on time constraints it may get developed further, I do not know. At first I was just curious about how to do this, but then I decided to do it for myself after becoming upset over the fact that Facebook would not allow me to easily do this through their API. This is really the first time I have felt betrayed by Faceook's privacy policy.

  • Export Ryerson Course Schedule to Google

    I consider this to be alpha quality at the moment because testing is limited non-existent except for the one case displayed in this video. But, I'm busy and don't have time to perfect it. If used as intended this could be a useful script, it was for me. The script is located here http://torypages.com/scripts/ryersonToIcs/index.py. This was however also tested with Thunderbird/Lightning and at a glance seemed to work.

  • Scroll Wheel Emulation

    On my laptop I emulate a scroll wheel with the centre click and the trackpoint. To set this up I install the the gpointing-device-settings package, select "use wheel emulation" and in my case the button number was 2.

  • Python import file

    Avoid installing modules and just import them

    import os, sys
     cmd_folder = os.path.dirname(os.path.abspath(__file__))
     if cmd_folder not in sys.path:
         sys.path.insert(0, cmd_folder)
    import moduleName

    Source: http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder

  • Music Player Daemon + MPDroid

    I was fiddling with MPD and MPDroid today and had some issues. My MPD could stream from my laptop to my phone/MPDroid fine using the lame encoder (which started being pre-packaged in Ubuntu 11.04) but I was not able to do so from my home server. The difference? ubuntu-restricted-extras. I loaded ubuntu-restricted-extras onto my server and fixed the issue. Unfortunately I have killed an ant with a nuke because I got a whole bunch of non-needed packages in the process, but, oh well. School is starting soon, and it got the job done. I have yet to be able to stream to Chromium however.

  • VBoxHeadless will not boot

    I'm running on some old hardware so perhaps that is the issue (P4) but I have had issues booting virtualbox machines. The machine would load grub, but after that I would just receive a blinking cursor. To fix this I had to modify some of the virtual CPU options

    VBoxManage modifyvm "vmName" --acpi on --ioapic on --pae on
  • Simcoe Underpass Still Not Operationable

    Over a year ago I took these photos of the bikelane on Simcoe. These photos actually led to an article in the Toronto Star (however I did not receive credit). It was also picked up on Duncan's City Ride over at Biking Toronto. Today I happened to be in the area and figured to make sure I have a safe passage under the rail lines I'd take the Simcoe bike lane! Buuuut....

    On the West side North of the underpass I found:

    South West side:

    South East side:

    Then since I had my camera out I found this between Lakeshore and Queens Quay:

    Buuuut, that wasn't enough, I encountered two more before I got to the safety of the Martin Goodman Trail:

    I don't have much to say, I noticed the water coming out from both sides of the underpass, I guess there may have been something legitimately wrong, but I seem to have bad luck with this underpass or it is neglected. I used to take a lot of pictures of cars in bikelanes, I gave up because it was extending my commute time by too much.

  • Bell Mobility Android App Blocking

    Where does Bell Mobility get off thinking that it should be dictating what email applications I should be running (K-9 Mail). This is extremely disappointing.

    Bell Blocking K-9 email Application on Android

  • Not Allowed to Zoom with DRM Books

    I'm currently attempting to read a DRM protected eBook for school. I found the font to be too small, but, sucks to be me because the publisher has not enabled the zoom function on the book, and they wonder why people pirate. With a regular PDF you would be able to do things as simple as zooming in on the page. Not to mention the fact that I have to load up an entire virtual machine just to read the book since the DRM is not compatible with Linux but only OSX and Windows.

  • vesamenu.c32: not a COM32R image

    Some problems I had while creating an Ubuntu 10.04.2 Server usb drive from Ubuntu 11.04 Desktop

    Unknown keyword in configuration file: gfxboot
    vesamenu.c32: not a COM32R image
    boot:

    The fix can be found here https://bugs.launchpad.net/ubuntu/+source/syslinux/+bug/617779/comments/7

  • "My Tracks"/complex .gpx to Google Maps

    I probably have an upcoming project where I have to take gps tracking data generated from a program named "My Tracks" that is available in the Android app store and plot it on a Google map. From my preliminary testing Google maps doesn't like having complex gps data imported into it. In fact, I wasn't able to get it to work. I was able to get the data to import in to Google Earth but this was not idea since Google Earth only has the satellite view while I want a nice clean city map. So, in my preliminary exploration in search of a solution I have been looking at the Google api that allows me to do overlays on the maps. Particularly the part that allows me to draw lines. http://code.google.com/apis/maps/documentation/javascript/overlays.html#Polylines So this is pretty neat. But I will need to convert my gps entries that looks like

    <trkpt lat="42.678785" lon="-25.46783"><ele>101</ele><fix>3d</fix><time>2010-01-03T10:48:41Z</time><hdop>4</hdop></trkpt>

    into something that looks like

     new google.maps.LatLng(42.678785, -25.46783)

    Simple enough with a bit of sed

    cat coordinates.gpx | sed -e 's/<trkpt lat="/new google.maps.LatLng(/' | sed -e 's/" lon="/,/' | sed -e 's/"><ele>.*/),/' > insertIntoJs.txt

    Be sure to strip out the extra lines from the beginning and end of the gpx file before running the command. Also, there will be an extra comma at the end of the result that will need to be removed.

  • SSH Key Troubleshooting

    I was having issues setting up an SSH key pair, something I have done a few times before and isn't too complicated. I kept on receiving

    Permission denied (publickey)

    It turns out the folder on the remote server I was placing the public key in was wrong. The issue was that the users home folder was unusual. The username was cookieMonster yet the user's home folder was located at /home/cookie_monster instead of what I had expected, /home/cookieMonster I realized this as I was browsing the /etc/passwd file.

  • Mimico Creek

    Here are some photos I snapped with my 3 year old camera phone. I don't typically upload photos to this blog, especially ones taken with a camera phone, but then I saw this http://torontoist.com/2011/03/scenerainydays.php and thought I'd share mine.

  • Rhythmbox Wouldn't Start and Libre.fm

    Yesterday Rhythmbox stopped working for me, soon after starting up it would lock up. I searched on the net, no one else seemed to be having the issue. I removed it, purged it, I re-installed it, I removed some of the data files associated with it and no dice. But, this morning I decided to just go ahead and run (without checking what was in there)

    $ rm .local/share/rhythmbox/ -r 

    Now, this probably killed an ant with a hammer and I probably deleted things that I didn't need to, but I don't care, I didn't have the patience to figure it out properly, but hey, it worked. I'll probably have to reinstall some plugins, but at least I have a working music player again Update: It seems like the cause may have been libre.fm. It seems as if the libre.fm website is down or has disappeared. I had a plugin that would perform audioscrobbing with libre.fm it is possible that the plug-in was trying to connect to libre.fm and failing. Update: Libre.fm is functional again, I don't know what that means for the plugin.

Page: 4 of 6