tag:blogger.com,1999:blog-32650786931263580592024-03-13T01:55:00.279-07:00miscfitsUnknownnoreply@blogger.comBlogger17125tag:blogger.com,1999:blog-3265078693126358059.post-41653170883711575912012-12-02T22:25:00.002-08:002012-12-03T12:08:08.512-08:00migrating the raidEvery few years it's time to migrate that old disk array to a new set of disks. My current array, or perhaps I should say "filesystem"-- started life as four 200GB drives in a raid5 configuration. Later I upgraded to two 1TB disks in a raid1 configuration. Today, I'm moving to a raid5 configuration of three 2TB disks. Finally, a respectable amount of storage!<br />
<br />
Software raid certainly has its merits. I've moved these disks around between several motherboards, never worrying much about drivers or compatibility. It just works. So here I go, documenting this upgrade experience.<br />
<br />
The current two drives are raid1, as I mentioned, so it is really pretty simple. There is /dev/sda1 /dev/sdb1 serving as the root fs. /dev/sda2 and /dev/sdb2 are my swap partitions-- no reason to use raid for that.<br />
<br />
Going back to raid5 I'm going to have to re-introduce a bit of complexity: an additional raid1 volume for /boot, because only the newest grub2 bootloader can deal with booting from raid5. Rather than go bleeding edge, I think I will sacrifice 1GB or so of my storage to serve this need. Lets get started.<br />
<br />
First thing is to figure out how you're going to get the drives into one computer. You could do this with two computers and use a network, but let's keep it simple, and hopefully high-performance. My motherboard has four sata ports. Lets see, two plus three is five! No problem though, we could unplug one of the raid1 drives and have just enough ports.<br />
<br />
Even better-- lets leave the raid1 array intact, and setup our raid5 array with only two drives. This will give us maximum read performance from the old raid1 and maximum write performance to the new raid5. After we're all done, we'll add the third drive back to the raid5 array and let it build its parity information. This is going to be so fast! (not really).<br />
<br />
So now we have our four drives plugged in. How should we boot this thing? You could probably boot up into single user mode, then remount / as read only and it should be safe to copy... but... lets just keep it super clean. Create a bootable usb thumb drive (I used a debian netinst installer image copied to a usb stick).<br />
<br />
Boot up the debian installer. Instead of installation, choose rescue mode. At some point it will ask you if you want to assemble a raid, choose that. It should get /dev/md0 ready to roll, but we don't want to mount it. It will ask you if you want to execute a shell-- execute one in the installers environment, not md0.<br />
<br />
Ok so now you have a root shell and if you cat /proc/mdstat you will see your md0 active. To your horror it might say:<br />
md0: active raid1 sdb1 sde1<br />
<br />
sdb, sde? What? It doesn't matter what the dev names are, all the raid meta data is stores on each partition so it just figures it out. sda in this case is the usb thumbdrive.<br />
<br />
So my new drives are sdc and sdd. I fdisk both of these drives and create a 1GB partition of type fd, a 1GB partiton of type 82, and the remainder of the drive as another of type fd. Fd is linux raid, and 82 is swap.<br />
<br />
Lets get our /boot raid1 array up and going:<br />
<br />
mdadm --create /dev/md1 -l1 -n2 /dev/sdc1 /dev/sdd1<br />
done. But we don't need to do anything with this yet. Now lets build our new raid 5 array.<br />
mdadm --create /dev/md2 -l5 -n3 /dev/sdc3 /dev/sdd3 missing<br />
missing? That is the trick to getting the array going with your missing drive! Now we can start the copy. Be extremely careful here. Well, you should have been being extremely careful this whole time.<br />
<br />
dd if=/dev/md0 of=/dev/md2 bs=10M<br />
<br />
"if" is your source, your good precious data. "of" is the destination, your empty raid5 array. This might have been a good time to check those backups. Or, this is a good argument for degrading the raid1 array earlier. Integrity should trump performance. I usually do a blocksize of at least 1M for performance, more than that really won't do anything though.<br />
<br />
So, copying 1TB like this might take quite a while. A long while. Go see a movie, get some dinner, then hit a coffee shop for a cup of coffee. Ok by now it should be done. No? Go to bed.<br />
<br />
Ok, 7 hours later it is done. Lets do a fs check:<br />
e2fsck -fy /dev/md2<br />
and let's resize it to fill up the actual raid we just put together:<br />
resize2fs /dev/md2<br />
Man, this takes forever. You might be wondering why preserve the filesystem at all and not just tar the whole contents over. This would work, but I have an enormous number of files due to my backuppc backup software (tons of hard links). Plus, I've had this filesystem for over a decade. We have a relationship.<br />
<br />
Ok, finally that is resized. Now we can create format the raid1 volume for /boot and finally try to get this thing bootable.<br />
mkfs.ext3 /dev/md1<br />
cd /mnt<br />
mkdir md1 md2<br />
mount /dev/md2 md2<br />
mv md2/boot md2/oldboot<br />
mkdir md2/boot<br />
mount /dev/md1 md2/boot <br />
<br />
This part is pretty foggy because I was beating my head against a wall for a while. All or some of these some commands are needed<br />
<br />
So now md1 is mounted under /boot on md2<br />
chroot md2<br />
cp -a oldboot/* boot<br />
grub-mkdevicemap<br />
vi /etc/initramfs-tools/modules<br />
add raid1 and raid5<br />
dpkg-reconfigure your kernel <br />
update-grub<br />
update initramfs -u -k all<br />
grub-install /dev/md1<br />
vi /etc/fstab<br />
/dev/md2 /<br />
/dev/md1 /boot<br />
<br />
Aaaaaand there you go! <br />
<br />
No, wait, you want to add the 3rd drive, right? Shut it down. Plug it in. Fdisk it the same as the other disks. Then add it to your raid and wait for the parity to build:<br />
<br />
mdadm /dev/md2 -a /dev/sdc3<br />
mdadm /dev/md1 -a /dev/sdc1<br />
<br />
cat /proc/mdstat <br />
<br />
Yahoo. Ok, I screwed up and sdc1 is a hot-spare for md1. I should have done the missing drive trick if I wanted 3 disks in my raid1. Not too worried about it though. Here are some quick benchmarks:<br />
Before:<br />
Raid1 2 drives (green WD low rpm): Block Write: 42704 KB/s. Block Read: 66728KB/s<br />
Midway: <br />
Raid5 degraded 2/3 (SG 7200RPM Barracuda): Block Write: 73796 KB/s. Block Read: 171882KB/s<br />
Post: <br />
Raid5 3/3 drives : Block Write: 86499 KB/s. Block Read: 229297 KB/s<br />
<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-33841869590268264812010-08-29T22:50:00.000-07:002010-08-30T09:45:53.338-07:00Compost Recipe #18: Pickles!<div class="UIComposer_InputArea_Base UIComposer_InputArea"><div class="UIComposer_InputShadow"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5uSrA7y3pvhyphenhyphenawJg5x8KBc_avYQwWsMQKwo5_ZSjhl9KeAEPICcCNPLY1IDub2Zf5u6SdA2FPRPMNgprPGeSBYibzYd-HMVtJU8t7a_oAfAAArtB2_TFT1wkn9in5XhZemOzLopaHQKPW/s1600/pickles.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5uSrA7y3pvhyphenhyphenawJg5x8KBc_avYQwWsMQKwo5_ZSjhl9KeAEPICcCNPLY1IDub2Zf5u6SdA2FPRPMNgprPGeSBYibzYd-HMVtJU8t7a_oAfAAArtB2_TFT1wkn9in5XhZemOzLopaHQKPW/s200/pickles.jpg" width="182" /></a></div><div class="Mentions_Input" contenteditable="true" id="c4c7b3e2112c15020f5f21_input" style="width: 510px;">10-12 ripe organic cucumbers from your garden<br />
1/2 gallon apple cider vinegar<br />
5 pounds sugar<br />
1 entire tin of mustard seeds<br />
1 perfectly good onion<br />
1 rather expensive green pepper<br />
1 tsp turmeric powder<br />
<br />
Slice cucumbers into 1/4" rounds and arrange in jars along with chopped onion and green peppers. Heat vinegar, sugar and remaining ingredients and pour the hot solution into the jars, fully covering the contents. Seal and refrigerate the jars for up to one week before transferring to your compost bin.</div></div></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3265078693126358059.post-19556664985675415702009-10-30T15:26:00.001-07:002010-05-05T09:19:09.713-07:00Append authorized_keys the lazy way*update. No-no, THIS is the lazy way: <span class="z19Dle" id="col-z13dzluw5nqvtbbim04cg344voqfsxwifjw"><span class="zo">man ssh-copy-id</span></span> <br />
<br />
ssh <a href="mailto:root@wc-macx">root@server</a> "cat >>~/.ssh/authorized_keys" <~/.ssh/id_rsa.pubUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-89388577216079122282009-09-13T20:41:00.001-07:002009-09-13T20:47:47.267-07:00normalize all your movie audio on-the-fly with ALSAI have a pretty large collection of ripped dvd movies. Invariably, they all have different volumes, which can be very annoying. I was just about to use mencoder to re-encode all the audio with normalized audio... and then I thought there must be a better way. Sure enough, there is: <a href="http://alsa.opensrc.org/index.php/FAQ#Is_there_an_alsa_plugin_I_can_use_to_compress_or_normalize_my_audio_output_volume.3F">http://alsa.opensrc.org/index.php/FAQ#Is_there_an_alsa_plugin_I_can_use_to_compress_or_normalize_my_audio_output_volume.3F</a><br />
<br />
So I copied the section below into /etc/asound.conf:<br />
<br />
<pre></pre><blockquote><pre>pcm.ladcomp {
type plug
slave.pcm "ladcomp_compressor";
}
pcm.ladcomp_compressor {
type ladspa
slave.pcm "ladcomp_limiter";
path "/usr/lib/ladspa";
plugins [
{
label dysonCompress
input {
#peak limit, release time, fast ratio, ratio
controls [0 1 0.5 0.99]
}
}
]
}
pcm.ladcomp_limiter {
type ladspa
slave.pcm "plughw:0,0";
path "/usr/lib/ladspa";
plugins [
{
label fastLookaheadLimiter
input {
#InputGain(Db) -20 -> +20 ; Limit (db) -20 -> 0 ; Release time (s) 0.01 -> 2
controls [ 20 0 0.8 ]
}
}
]
}</pre></blockquote><pre></pre>These plugins need to be installed though: apt-get install <a href="http://www.blogger.com/goog_1252898065290">swh-plugins</a> <br />
Now the tricky part, getting your programs to actually use this stuff. You have to tell your program to use the ladcomp alsa device. Mplayer and Xine are pretty easy, you can just type it in a box in the gui. However, Gnome's Movie Player (Totem) is a bit trickier. Google to the rescue: <a href="http://www.mail-archive.com/gnome-list@gnome.org/msg02589.html">http://www.mail-archive.com/gnome-list@gnome.org/msg02589.html</a> <br />
<br />
Basically open Configuration Editor and change<br />
system -> gstreamer -> 0.10 -> default) changing the key "musicaudiosink" from "alsasink" to "alsasink device=ladcomp"<br />
<br />
All my movies seem to be nearly the same volume now. I setup xine to use it as well, and played a DVD and it seemed to be just a bit louder than movie files, so I'll have to look more into exactly what this filter is doing, maybe it is not reducing loud volume, but just cranking up low volume?Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-3265078693126358059.post-57026241242083400902009-09-08T13:11:00.000-07:002009-09-08T13:31:28.253-07:00smp usb flash-on-root corruption issueI suspect (but can't really confirm) that having this 3-processor phenom chip and booting to USB flash, combined with suspend-to-ram seems to somehow result in an extremely corrupted filesystem. Booting with kernel option "nosmp" seems to completely resolve the problem... so, that is good and sucky at the same time. Aha! Hot-plug to the rescue! I just stuck this script in /etc/pm-tools/sleep.d/99cpu<br /><br />#!/bin/sh<br /><blockquote></blockquote>. "${PM_FUNCTIONS}"<br /><br />case "$1" in<br /> hibernate|suspend)<br />echo 0 > /sys/devices/system/cpu/cpu1/online<br />echo 0 > /sys/devices/system/cpu/cpu2/online<br /> ;;<br /> thaw|resume)<br />echo 1 > /sys/devices/system/cpu/cpu1/online<br />echo 1 > /sys/devices/system/cpu/cpu2/online<br /> ;;<br /> *)<br /> ;;<br />esac<br /><br /><br /><br />We'll have to see if it solves the problem, but it does indeed remove my 2 processors before suspend and then adds them back again after everything is back up. Kinda sad but I don't feel like upgrading my kernel or messing around this more than I have to :-)<br /><br />Debian Lenny<br />Kernel 2.6.26-2-686 #1 SMPUnknownnoreply@blogger.com2tag:blogger.com,1999:blog-3265078693126358059.post-29970191798047092542009-09-06T22:00:00.000-07:002009-09-07T09:22:00.916-07:00Linux Wireless FunLinkSys WPM54G PCI wireless card:<br /><br />apt-get install firmware-ralink<br />it should work now<br /><br />edit /etc/pm/config.d/defaults<br />and add/change:<br />SUSPEND_MODULES="rt61pci"<br /><br />now you should be able to suspend the computer and not hang on resumeUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-23660456570233623612009-08-29T08:06:00.000-07:002009-08-29T13:15:40.580-07:00Harbor Freight Wood Carving Tools<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzS-ldJFN__fnehGCpbS-boEWFZ8xHhDBnlvYIg0xHHShSRG_nSpchi7l829kb7LyYef-sxJ4Ft9vb5Aba3Hl1zJOPV-vhcKru41AxiHUrZkLVBZU065CaAQ8561b-pDDXnY8-uGeME8AZ/s1600-h/file0093.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 280px; height: 209px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzS-ldJFN__fnehGCpbS-boEWFZ8xHhDBnlvYIg0xHHShSRG_nSpchi7l829kb7LyYef-sxJ4Ft9vb5Aba3Hl1zJOPV-vhcKru41AxiHUrZkLVBZU065CaAQ8561b-pDDXnY8-uGeME8AZ/s400/file0093.jpg" alt="" id="BLOGGER_PHOTO_ID_5375403448434076738" border="0" /></a>I know Harbor Freight has cheap tools, but they are usually at least functional-- for a little while anyway. In the case of the 11 piece Wood Carving Set, however, my recommendation would be to steer clear. At $5.99, that comes out to less than 50 cents per tool. How can you possibly make a tool for "The Finest Wood Carving Applications" for only 50 cents?!?<br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW8BTTSzDYT7BHO9EtLFS3X8rx6TGaOEDgKztjNe4ilv2-Ia72Y3F8GIgXNGAhsnTvcy4M109om1D5FPuYp9xyHsvrwbN0T-ZiG_jAbnIqN3bC1SNc6oWj2Am3US_QRR54Vfon4WyS8uAV/s1600-h/file0094.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 326px; height: 245px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW8BTTSzDYT7BHO9EtLFS3X8rx6TGaOEDgKztjNe4ilv2-Ia72Y3F8GIgXNGAhsnTvcy4M109om1D5FPuYp9xyHsvrwbN0T-ZiG_jAbnIqN3bC1SNc6oWj2Am3US_QRR54Vfon4WyS8uAV/s400/file0094.jpg" alt="" id="BLOGGER_PHOTO_ID_5375404348665629794" border="0" /></a><br /><br /><br /><br /><br />Don't look so bad huh? Well, just wait until you try to carve something with them.<br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSu-a7H6GI6838nNo4c3-nESpXEoMJALwU4LJo_p4fSFAK07Cx-e3qEpCWAdyUBMITGRMxx0xSDyJSIwKZtPl7WPG1VMTDSyfagOsajjmYKIkyroa_C_disANcK7cQl_dgZeEkldt-gTYB/s1600-h/file0096-1.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 218px; height: 235px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSu-a7H6GI6838nNo4c3-nESpXEoMJALwU4LJo_p4fSFAK07Cx-e3qEpCWAdyUBMITGRMxx0xSDyJSIwKZtPl7WPG1VMTDSyfagOsajjmYKIkyroa_C_disANcK7cQl_dgZeEkldt-gTYB/s400/file0096-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5375475420328071186" border="0" /></a><br /><br /><br /><br /><br />Ummmm is this a U-gouge?<br /><br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD8mOmFvS46ZlwGtW8kHe5Yu-s_fvr-6hwNIq3rsysBMCFQuHxV3gRxRK2TlpgOZsfZz42IQOjQLeRDET9fMIBMll7S4L6cl-qi7RasuHlFA9wIKbXTqnEdn_zW195U_oOxdalsAMhPd6b/s1600-h/file0096-2.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 224px; height: 192px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD8mOmFvS46ZlwGtW8kHe5Yu-s_fvr-6hwNIq3rsysBMCFQuHxV3gRxRK2TlpgOZsfZz42IQOjQLeRDET9fMIBMll7S4L6cl-qi7RasuHlFA9wIKbXTqnEdn_zW195U_oOxdalsAMhPd6b/s400/file0096-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5375475848891067842" border="0" /></a><br /><br /><br /><br />How is this supposed to work?<br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3DKsT6jU8uTn0W048MGLReb-9EKd1EjKJ1qKyh9xMGPP0YgPGNjPEYz9YujUEo5jpMk3XPiSrep3PNjPo4LLqRvBr0hH7yccoRW9Yw9IRTZaqqKEnim5f6xUobo4GKOvOZydnrEi9N_8/s1600-h/file0096-3.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 237px; height: 244px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEha3DKsT6jU8uTn0W048MGLReb-9EKd1EjKJ1qKyh9xMGPP0YgPGNjPEYz9YujUEo5jpMk3XPiSrep3PNjPo4LLqRvBr0hH7yccoRW9Yw9IRTZaqqKEnim5f6xUobo4GKOvOZydnrEi9N_8/s400/file0096-3.jpg" alt="" id="BLOGGER_PHOTO_ID_5375476100997225714" border="0" /></a><br /><br /><br /><br /><br />These are going back. $6 bucks, yeah-- they aren't worth their weight in iron.<br /><br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhivsx5w8T179aphTIL_b6gAHIXJbAaz9UBFKymcKQcHWZRQMaL5Sm_FJSsgQzSMcNmPuFCdf_lVjIwaxfjofdfKRevvE-8n19d8vMlT0kHjqTxPJ1mSJCT-Rzg9WSCorMBuJtAMY9ZqJgW/s1600-h/vgougeside.JPG"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 216px; height: 222px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhivsx5w8T179aphTIL_b6gAHIXJbAaz9UBFKymcKQcHWZRQMaL5Sm_FJSsgQzSMcNmPuFCdf_lVjIwaxfjofdfKRevvE-8n19d8vMlT0kHjqTxPJ1mSJCT-Rzg9WSCorMBuJtAMY9ZqJgW/s400/vgougeside.JPG" alt="" id="BLOGGER_PHOTO_ID_5375481192487264626" border="0" /></a><br /><br /><br /><br />This is what a real<a href="http://www.woodblockart.ca/bootcamp/sharp-vgouge.html"> V-Gouge tool</a> should look like. Sigh...Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-28902042611608269512009-07-27T20:18:00.000-07:002009-07-27T20:36:11.950-07:00fix f-spot downgrade version crash databaseHave you ever downgraded F-Spot from Debian Unstable to Stable, only to find that the moment you create a "version" of a photo, your entire F-Spot gallery becomes hosed?<br /><br />The solution is to fix your database to not include the new fields that came with whatever that new version of F-spot was, and make it like it was back in F-Spot 0.4.4. F-Spot might even be nice and move your "broken" database to the root of your home folder. Never fear! Open up the file "photos.db" (which may be at ~/.gnome2/f-spot/) in your favorite SQL Lite editor (apt-get install sqlitebrowser). Now, modify the photos and the photos_versions table to remove the md5sum field. That's it!<br /><br />They must have added md5sum because it was a good idea, but didn't consider all of us that might downgrade to a version that didn't know about this field!<br /><br />Here are the errors you may see:<br /><br /><span style="font-family: courier new;"> Starting new FSpot server<br /><br />Unhandled Exception: Mono.Data.SqliteClient.SqliteExecutionException: SQL logic error or missing database<br /> at Mono.Data.SqliteClient.SqliteCommand.ExecuteStatement (IntPtr pStmt, System.Int32& cols, System.IntPtr& pazValue, System.IntPtr& pazColName) [0x00000]<br /> at Mono.Data.SqliteClient.SqliteCommand.ExecuteStatement (IntPtr pStmt) [0x00000]<br /> at Mono.Data.SqliteClient.SqliteCommand.ExecuteReader (CommandBehavior behavior, Boolean want_results, System.Int32& rows_affected) [0x00000]<br /> at Mono.Data.SqliteClient.SqliteCommand.ExecuteNonQuery () [0x00000]<br /> at Banshee.Database.QueuedSqliteCommand.Execute () [0x00000]<br /><br /><br /><br /><br /> Starting new FSpot server<br />Exception in Gtk# callback delegate<br /> Note: Applications can use GLib.ExceptionManager.UnhandledException to handle the exception.<br />System.NullReferenceException: Object reference not set to an instance of an object<br /> at FSpot.Utils.UriUtils.UriToStringEscaped (System.Uri uri) [0x00000]<br /> at FSpot.ThumbnailGenerator.ThumbnailPath (System.Uri uri) [0x00000]<br /> at FSpot.Widgets.IconView.DrawCell (Int32 thumbnail_num, Rectangle area) [0x00000]<br /> at FSpot.Widgets.IconView.DrawAllCells (Rectangle area) [0x00000]<br /> at FSpot.Widgets.IconView.OnExposeEvent (Gdk.EventExpose args) [0x00000]<br /> at Gtk.Widget.exposeevent_cb (IntPtr widget, IntPtr evnt) [0x00000]<br /> at GLib.ExceptionManager.RaiseUnhandledException(System.Exception e, Boolean is_terminal)<br /> at Gtk.Widget.exposeevent_cb(IntPtr widget, IntPtr evnt)<br /> at Gtk.Widget.exposeevent_cb(IntPtr , IntPtr )<br /> at Gtk.Adjustment.gtk_adjustment_value_changed(IntPtr )<br /> at Gtk.Adjustment.gtk_adjustment_value_changed(IntPtr )<br /> at Gtk.Adjustment.ChangeValue()<br /> at FSpot.Widgets.IconView.ScrollTo(Int32 cell_num, Boolean center)<br /> at FSpot.Widgets.IconView.ScrollTo(Int32 cell_num)<br /> at MainWindow.JumpTo(Int32 index)<br /> at MainWindow.LoadPreference(System.String key)<br /> at MainWindow.HandleIconViewReady(System.Object sender, System.EventArgs args)<br /> at Gtk.Widget.SizeAllocatedSignalCallback(IntPtr arg0, IntPtr arg1, IntPtr gch)<br /> at Gtk.Widget.SizeAllocatedSignalCallback(IntPtr , IntPtr , IntPtr )<br /> at Gtk.Application.gtk_main()<br /> at Gtk.Application.gtk_main()<br /> at Gtk.Application.Run()<br /> at Gnome.Program.Run()<br /> at FSpot.Driver.Main(System.String[] args)<br /><br /></span>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-75306748863591783302009-04-08T22:47:00.000-07:002011-10-13T07:32:23.921-07:00USAA Deposit at Home on Linux *It works now!!!**update 10/12/11* IT WORKS!! Thanks to Garrett, and Mr. Brown from USAA, you no longer need to use any special software to trick the website into letting you post your deposits. A message on the site reads: "Your system does not meet the minimum system requirements. You may choose to continue, but we recommend using a supported system". No problem, click next and you are on your way. Thanks for listening, USAA!!<br />
<a href="https://www.usaa.com/inet/bank_deposit/BkHomeDeposit?action=INIT#"><br />
</a><br />
*update* Thanks to <a href="http://blog.wesabe.com/2007/06/19/usaa-deposithome-now-available-for-mac/#comment-118482">Dave</a> for the idea,<br />
*update* Thanks Garrett, see his comment below. We may all be wise to send USAA a suggestion via the feedback link. Just remember to be nice. The last thing we need is for USAA to decide to implement better browser detection to specifically block linux. Or worse, implement Silverlight. In the meantime: <br />
<br />
Just set your user agent using a <a href="https://addons.mozilla.org/en-US/firefox/addon/59">firefox addon</a> to:<br />
<br />
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; sv-SE; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8<br />
<br />
If you have trouble adding that user agent, here is what I did after you install the add-on above:<br />
Tools-->User Agent Switcher-->Options-->Options<br />
Useragents-->Add<br />
Description: Firefox Macitosh Intel for USAA (or whatever you want)<br />
Useragent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; sv-SE; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8<br />
OK<br />
OK<br />
<br />
Make sure you switch to that user agent before even going to USAA.<br />
<br />
And make sure you have the java plugin and you are good to go! Thank you macintosh for having a marketshare to help us linux fools get stuff working. The macintosh java client allows you to simply select pre-scanned checks with your choice of software. Nice!<br />
<br />
Note: This assumes you can get your scanner to work in linux which is assuming quite a bit :-)Unknownnoreply@blogger.com27tag:blogger.com,1999:blog-3265078693126358059.post-7883254307630737122009-03-29T00:40:00.000-07:002009-03-29T00:49:29.672-07:00sleeping your computerSounds easy, right? You go into Power Management and set it to sleep after 30 mins. Done deal. Well what if you've enable fast user switching? Now all-of-a-sudden your computer goes to sleep because your wife is idle on VT8 while you are active on VT7. Dammit!<br /><br />Here is a work-around: don't use X to sleep the computer. Disable sleep for each profile, then:<br />apt-get install sleepd<br />edit /etc/default/sleepd<br />mine looks like:<br />PARAMS="-U 1800 -u 1800 -i 22 -i 23 -s \"s2ram -f\""<br /><br />The default is to hibernate which is silly for a diskless desktop, so I s2ram instead. The interrupts to watch can be discovered by:<br /><br /> watch -n1 cat /proc/interrupts<br /><br />Now wiggle the mouse and hit keys on the keyboard to discover which interrupts increment when you do that.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-12825643999061758212009-02-09T20:24:00.000-08:002009-02-09T22:21:56.213-08:00multiseat 3D. denied (for now)So I've been trying to figure out a way to let my daughter play the <a href="http://en.wikipedia.org/wiki/Tux_Racer">"duck game"</a> (or at least watch the penguin drift aimlessly down the hill) while I do whatever else I am doing that is so damn important. Naturally, the first thing a normal person thinks to do is hook up another monitor, keyboard, and mouse to their existing computer. Right? Everyone does this? No.<br /><br /><a href="http://www.automation.dn.ua/linux/3d-multiseat_en.html">This</a> is basically the dream. However, to get there from here you need TWO video cards. I have an PCI-Express Nvidia card. So I needed another PCI video card that can do 3D. In case you don't know, PCI is kind-of getting obsolete for video cards these days so it isn't easy to find one. My brother kindly gave me an ATI Radeon PCI something or other. Great! Plug it all in and I'm ready to roll.<br /><br />Wait. Nvidia ships with proprietary OpenGL libraries. ATI ships with proprietary OpenGL libraries. Damn! You can't mix the two! So I spend $50 on a Sparkle brand Nvidia card just like my PCI-Express version and now I have TWO identical cards except for the interface. And now here is where we come so, so close...<br /><br />I get it all working. Using the config example earlier I get two logon prompts on two monitors. I can log in on one and on the other. OpenGL games work on both! Most importantly, the Duck Game works! I tried Quake3 but it is pretty darn slow, but that might be related to a serious problem: one of my three cpu cores is completely pegged while the second instance of Xorg is running. I had the same problem with the ATI card (using the free non-GL drivers), so it seems to be an Xorg thing.<br /><br />Another problem is that I cannot switch consoles (seems you must disable this for dual Xorg instances to work). This means no "switch users" functionality (unless you count logging on to the other monitor). So now it is harder to share the computer with my wife, which is ironic since I doubled the seats! Finally, sleep mode doesn't work so well, coming out goes to a blank screen and seems to be crashed.<br /><br />So maybe I'll post a bug report to Xorg and these issues can be resolved.. but I sort-of doubt it since there is very little demand for this multiseat business...<br /><br />** Update**<br /><br />Xorg version 7.4 provides GLX pass-through-- so I should be able to xephyr and not fuss with xorg instances. This might solve everything....Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-3265078693126358059.post-42871390071435697922009-02-09T13:11:00.000-08:002009-02-09T14:43:15.488-08:00How to Lose Data the Microsoft Way1. Use File and Settings Transfer Wizard<br /><br />I should end here, but just for posterity...<br /><br />2. Uncheck all the options and only select the option to backup specific folder. Specify "C:\Documents and Settings". Chuckle to yourself as you wonder if anyone else was clever enough to use this to transfer multiple user accounts.<br />3. Watch the backup process succeed in creating a large .DAT file of unknown composition.<br />4. Assume you know what you are doing.<br />5. Format, Reinstall, and attempt to restore using the wizard.<br />6. Stare in bewilderment at all the missing user accounts and lack of data.<br />7. Cry a little<br />8. Create all the user accounts and try running the wizard on each account while logged in.<br />9. Allow a small gasp of hope when you notice all the avatars are restored on the Welcome Screen. It must have restored their data!<br />10. Cry again when you realize it didn't. At all.<br />11. Unpack the F.A.S.T archive using some obscure 3rd party program called fastconv.exe.<br />12. Cry some more after it fails on the translation database and you are left with thousands of arbitrarily named .DAT files. Try it again in WINE and get the same error.<br />13. Write a script to add extensions to the files based on magic library... and cry again when you realize the small number of files are only related to the user account that was logged on during the initial F.A.S.T migration.<br />14. Curse the heavens, curse Microsoft, then curse yourself for being such an idiot.<br />15. Blame the user for not making regular backups.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-12548615381042478752008-05-06T22:45:00.000-07:002008-05-06T22:53:37.846-07:00Time Machine over Network ShareHere's what I did after reading several articles about this:<br /><br />Open Terminal:<br /><br /><span style="font-family: courier new;">defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1</span><br /><br />Connect to your network drive and save your password<br />Open Time Machine Preferences:<br />Select your Volume<br />Click Backup Now or wait for it to start.<br />Look on your volume and you will see a file called:<br />machinename_3493951911.sparsebundle or something similar<br />copy the first part not including sparsebundle<br />Wait for time machine to fail :-(<br />Open Disk Utility and click New Image<br />Paste in the name you copied and choose Desktop as the location. Change the type to sparsebundle. Give it a reasonable size and click create.<br /><br />Unmount it and copy this file to your network drive. it should be about 80MB. Now go back to time machine preferences and reselect your network share. Click backup now and you are good to go!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-58997991735671321682008-02-27T22:35:00.002-08:002008-12-12T19:46:16.626-08:00Pie Charts LieDo these two charts appear to even remotely depict the same information? Supposedly they do. Is it just some sort of optical illusion?<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXkc0pwmfRVhoXoPkzZZ5MQER12s3Qm47j5qyYL3xhbhsbnEqVWSvu3alZpvUBzLxP8oHoDM3zRTqA2Suf4as1j6qYINKpIehoXY98_zUEzhbISbMV5lQAjjmVjCUVGA-v4silbxqRPdl6/s1600-h/dars1.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXkc0pwmfRVhoXoPkzZZ5MQER12s3Qm47j5qyYL3xhbhsbnEqVWSvu3alZpvUBzLxP8oHoDM3zRTqA2Suf4as1j6qYINKpIehoXY98_zUEzhbISbMV5lQAjjmVjCUVGA-v4silbxqRPdl6/s320/dars1.jpg" alt="" id="BLOGGER_PHOTO_ID_5171916621727645218" border="0" /></a><br /><br /><br />"Almost there, buddy!"<br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUdXga2k-5SET23MoW7mmja0be56qOgB28zvGAs3sakM3om78IQZJsw6APg4YC4jgLcp-iroM6hrbWKF3ZTrrHu8ji0dTFXPbu2mrKKN76LtTAYwwAlhOCKwwkiflC9-rT9YHiggiSxc51/s1600-h/dars2.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUdXga2k-5SET23MoW7mmja0be56qOgB28zvGAs3sakM3om78IQZJsw6APg4YC4jgLcp-iroM6hrbWKF3ZTrrHu8ji0dTFXPbu2mrKKN76LtTAYwwAlhOCKwwkiflC9-rT9YHiggiSxc51/s320/dars2.jpg" alt="" id="BLOGGER_PHOTO_ID_5171916733396794930" border="0" /></a><br /><br /><br />"You might as well switch majors."Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3265078693126358059.post-23090317255048540262008-01-17T18:51:00.000-08:002008-02-27T22:50:14.164-08:00Apple's Bootcamp bungles GPT specificationEver wonder how Bootcamp works? Well, Apple has basically messed up the GUID partitioning standard to make it work with Windows, even though they <span style="font-style: italic;">could</span> have just stuck with MBR and kept things simple. It is a horrible, horrible kludge. We finally figured out what <a href="http://www.honestpuck.com/wordpress/?m=200710">this guy</a> already found; partitioning and imaging a Macintosh is a real bastard, but possible. And no, <a href="http://www.bombich.com/">Bombich's</a> software (although pretty cool), just doesn't cut it when you already have a PC solution (Altiris Deployment) and a Mac solution (Xserve+NetInstall).<br /><br />The GUID <a href="http://en.wikipedia.org/wiki/GUID_Partition_Table">specification</a> calls for a "protective MBR" with exactly ONE partition (with an ID of 0xEE). No matter how many partitions you create in the GUID table, there should only be ONE partition in the MBR table. ONE!<br /><br />What Apple has done is make a hybrid GPT/MBR. In this case, "hybrid" is synonymous with "bastardized". Any partition you create (with apple tools) in the GUID table gets <span style="font-style: italic;">copied</span> to the MBR table. This is why when you install bootcamp, you CANNOT remove the partition and recreate it; the geometry would not match what is in the GUID table. Once the two tables are out of sync, it's a real bastard to fix. <a href="http://refit.sourceforge.net/">ReFIT</a> has a program called gptsync that will sync one way; GTP to MBR... but there is no reversal of that.<br /><br />The really funny part is Apple's <a href="http://developer.apple.com/technotes/tn2006/tn2166.html#SECPROTECTIVEMBR">Tech Note</a> from 2006 (probably just before BootCamp). They describe the Protective MBR as "a single partition entry (of type 0xEE) that covers the entire area of the disk used by GPT structures and partitions." A single parition? <span style="font-style: italic;">A Bootcamp Mac has three!</span><br /><br />Furthermore, Apple mentions "Specifically, if block 0 contains an MBR with more than one partition entry, or a single partition entry whose <code>OSType</code> is not 0xEE, it is not a compliant GPT disk, and manipulating the GPT may cause dangerous inconsistencies between it and the legacy MBR."<br /><br />and they follow that with a:<br /><br /><strong>WARNING:</strong> Failure to comply with this recommendation may result in the loss of user data.<br /><br />So there you have it... Apple's GPT support is completely laughable and confusing as hell. They completely violate their own recommendations not to mention the specs.<br /><br />Ironically, I can use Apple's DiskUtility to format a Leopard Mac with good old MBR and 2 partitions. I can restore a Windows XP image (via RapiDeploy) and a Mac image (via netinstall) to these partitions, and THEY ARE BOTH BOOTABLE just FINE. The caveat is, you can only boot from EFI (holding the option key). Once you're in Mac OS or Windows, NONE of your disks appear in the startup disk preference pane (you can't even select the disk you are <span style="font-style: italic;">booted to)</span>. It's kinda sad when <span style="font-style: italic;">EFI is smarter than your proper OS</span>...<br /><br />Don't get me wrong; EFI and GPT are totally awesome technologies-- I just hope we can stick to the standards. This means Microsoft: Get on the ball and support EFI and GPT for Windows XP and Vista. And to Apple: Why don't you stick with MBR for dual-boot Macs? You only support 2 usable partitions anyway!Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-3265078693126358059.post-60929038749306010882007-12-21T19:54:00.000-08:002008-12-12T19:46:17.202-08:00Another Marpac Sleepmate/Soundscreen 980A ReviewThere is already a really good review of this sound machine over <a href="http://www.soundmachinereview.com/sleepmate.html">here</a>, except they didn't really tear the thing apart.<br /><br /><span style="font-weight: bold;">Inside</span>: At the heart of the Marpac 980A is a high-efficiency <a href="http://www.jakelinc.com/products/product_descrF.asp?ty=1&cat=1&it=8">Jakel J238-038-3325</a> C Frame Motor. Ok, it's just a fan.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitDQlwwk2WrBMWdcVBV_xiCDQ3hyphenhyphen6FFxK2euSv8sm_kPb2CVtTXKDNnN38126O3cthg779vR-jwky9eVLNslokgoYZx3iQFFcxPma-mgkVG-TXBoUjgbE0bLQ09gbOD1zPhmMIyzYCccZk/s1600-h/DSCN3137.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitDQlwwk2WrBMWdcVBV_xiCDQ3hyphenhyphen6FFxK2euSv8sm_kPb2CVtTXKDNnN38126O3cthg779vR-jwky9eVLNslokgoYZx3iQFFcxPma-mgkVG-TXBoUjgbE0bLQ09gbOD1zPhmMIyzYCccZk/s320/DSCN3137.JPG" alt="" id="BLOGGER_PHOTO_ID_5147026152093621458" border="0" /></a>That's really all there is to it. If it ever breaks, you can find replacement motors online. These are the same motors used in bathroom exhaust fans. You can find motors like these for under $10 at surplus sites online. So, if you're really cheap you can spend a lot less than $50 and build your own. Of course, it will be ugly and probably cause a fire. . .<br /><br />The Marpac Sleepmate/Soundscreen 980A is rated "less than 40 watts". I was concerned that this sound machine might use more power than our iBook (which previously served as our sound machine via the nifty <a href="http://www.blackholemedia.com/noise/">Noise</a> utility), so I decided to test the Marpac with a <a href="http://www.p3international.com/products/special/P4400/P4400-CE.html">KillaWatt</a>.<br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNKCS9nAXOTefLc5xZi-0__1buVo05g5UbVHHTMpe12mJ3jBW6ux3lzQCByg7iRZ27al83l4pAeKgrywe10HuTJusmCffeNyPs6ajuOT7o-H911h0lu3ppArjUY75TBBxpRROVzVQn13uV/s1600-h/DSCN3130.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNKCS9nAXOTefLc5xZi-0__1buVo05g5UbVHHTMpe12mJ3jBW6ux3lzQCByg7iRZ27al83l4pAeKgrywe10HuTJusmCffeNyPs6ajuOT7o-H911h0lu3ppArjUY75TBBxpRROVzVQn13uV/s320/DSCN3130.JPG" alt="" id="BLOGGER_PHOTO_ID_5146649346022808770" border="0" /></a>I was surprised that at low speed the unit only draws 6 watts.<br /></div><br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaxsXWsmMExanJuSl9dqQo-bkubXjNJNoGjujHSf6CcIMyIYw9TbBD5fcrqXO4BedgB8DFESe8MbaveUz919arAYukOQwFwokjm_7k7ChdwP980XVLeS7qJKlMSJpiwVLWO8cPg5EdKCnU/s1600-h/DSCN3129.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 352px; height: 264px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaxsXWsmMExanJuSl9dqQo-bkubXjNJNoGjujHSf6CcIMyIYw9TbBD5fcrqXO4BedgB8DFESe8MbaveUz919arAYukOQwFwokjm_7k7ChdwP980XVLeS7qJKlMSJpiwVLWO8cPg5EdKCnU/s320/DSCN3129.JPG" alt="" id="BLOGGER_PHOTO_ID_5146648199266540722" border="0" /></a>On high, 13 watts. This is considerably less than the .33 amps (39 watts) that the motor is rated for. I'm not really sure why this is the case; perhaps because the motor is hardly under any load, having been fitted with such small fan blades? In any case, it'll cost less than $10/year to run 8hrs/day. Probably closer to $2.<br /></div><br /><div style="text-align: center;">Ok, finally, here's a video of the unit in action, at BOTH speeds!<br /></div><br /><div style="text-align: center;"><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxUpVO7WgDzkcamrgYYa6t36dPZvc0Ttwf4nGUXo-pRF54eQEREK46L88ersZ_pxgpAOrhyH4820tEWy92-JA' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br /><br /><div style="text-align: left;">Overall, we're very happy with the noise that the machine produces. Although it is a lot different than the Noise application, I think it is more soothing and has a much larger range of sound, probably due to the fact that the speakers in an iBook can't create any bass to speak of. I am also very sensitive to "sound loops" produced by some electronic noise machines, and of course this machine is completely immune to that. Overall it is a simple, low-tech solution to an old problem, and more elegant than a box fan.<br /></div></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3265078693126358059.post-30741517091984754332007-12-07T08:28:00.000-08:002008-12-12T19:46:17.877-08:00Create a Slick Black iMac In The GimpYeah, sure, you can follow this long and tedious PhotoShop tutorial over <a href="http://psdtuts.com/tutorials-effects/create-a-slick-black-imac-in-photoshop/">here</a> and make yourself a nice black iMac in about thirty minutes. Or you can spend about a minute and thirty seconds and do "virtually" the same thing in <a href="http://www.gimp.org/">The Gimp</a>, a Free OpenSource Image Editor.<br /><br /><h3>Step 1</h3>Grab an iMac image and save it somewhere.<br /><h3><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYDuxFh19kcmXGtuqksQY55We7KwarEzLa2ymmuPq0jhvxCcFb1JUfr1wgdxKJQpcavKb87QX0b6aVkZtow6ux0C44n-eAAY8p-VByFntJQ0rMaafurlydtwJ8qnkieWcl_Rw6Spp6UAtL/s1600-h/orig.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 308px; height: 308px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYDuxFh19kcmXGtuqksQY55We7KwarEzLa2ymmuPq0jhvxCcFb1JUfr1wgdxKJQpcavKb87QX0b6aVkZtow6ux0C44n-eAAY8p-VByFntJQ0rMaafurlydtwJ8qnkieWcl_Rw6Spp6UAtL/s320/orig.jpg" alt="" id="BLOGGER_PHOTO_ID_5141269759627896162" border="0" /></a></h3><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><h3><br /></h3><h3><br /></h3><br /><br /><h3>Step 2</h3> Load it into The Gimp, and inverse the colors: Filters-->Colors-->Value Invert. We're almost done already!<br /><h3><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5X2rPJ3w__ZV4SXlZWuZZGm6KburgKcLQsC_0Y_xwBONgbqUPjEVpf-A7CykWDSOKd5QsSulzxKj3tZ1mXPoIgT0PSP98Gdin7KD5eJwvwL4Icjr7FeqRUP69atXJjSySvrU0emwQ8Dcs/s1600-h/2.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 300px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5X2rPJ3w__ZV4SXlZWuZZGm6KburgKcLQsC_0Y_xwBONgbqUPjEVpf-A7CykWDSOKd5QsSulzxKj3tZ1mXPoIgT0PSP98Gdin7KD5eJwvwL4Icjr7FeqRUP69atXJjSySvrU0emwQ8Dcs/s320/2.jpg" alt="" id="BLOGGER_PHOTO_ID_5141270803304949106" border="0" /></a></h3><br /><br /><br /><br /><br /><br /><br /><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3><br /></h3><h3>Step 3</h3><br />Now all you do is UN-invert a few things, and you're done! Now seriously, why would you want to waste all that time in Photoshop, when you can do the same thing a hundred times faster in The Gimp!? <span style="font-style: italic;">That's the power of OpenSource! YeeeeeAwwwwwww!!<br /></span><h3><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtC-KnWD-gzL7rq1kb6hKIOLvbPpRwz3TgeVQGm0jWiIWEdtM2MdlZ1MQht2SoXNW9wNwAz0JNC46sVDCYwCBc6tXunBGKpASu1O8qG8MUist7zyyM_6mg-H5UD5gIeT6R-4o7zYJddDng/s1600-h/1.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 342px; height: 342px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtC-KnWD-gzL7rq1kb6hKIOLvbPpRwz3TgeVQGm0jWiIWEdtM2MdlZ1MQht2SoXNW9wNwAz0JNC46sVDCYwCBc6tXunBGKpASu1O8qG8MUist7zyyM_6mg-H5UD5gIeT6R-4o7zYJddDng/s320/1.jpg" alt="" id="BLOGGER_PHOTO_ID_5141271086772790658" border="0" /></a></h3>Unknownnoreply@blogger.com0