<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

<channel>
<title>Hackszine: Data</title>
<link>http://www.hackszine.com/blog/archive/data/</link>
<description>O&apos;Reilly&apos;s Hacks Series reclaims the term &apos;hacking&apos; for the good guys--innovators who explore and experiment, unearth shortcuts, create useful tools, and come up with fun things to try on their own</description>
<language>en-us</language>
<copyright>Copyright 2008, O'Reilly Media, Inc.</copyright>
<lastBuildDate>Tue, 15 Jul 2008 20:47:42 -0800</lastBuildDate>
<pubDate>Sat, 19 Jul 2008 19:45:51 -0800</pubDate>
<generator>http://www.movabletype.org/?v=4.1</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<itunes:author>O'Reilly Media, Inc.</itunes:author>
<itunes:subtitle>Clever solutions to interesting problems.</itunes:subtitle>
<itunes:summary>Hackszine Podcast</itunes:summary>
<itunes:owner>
<itunes:email>webmaster@makezine.com</itunes:email>
</itunes:owner>
<category>Technology</category>
<itunes:category text="Technology">
</itunes:category>
<itunes:category text="Technology">
  <itunes:category text="Gadgets" />
</itunes:category>
<itunes:category text="Games &amp; Hobbies" >
</itunes:category>
<itunes:category text="Science">
</itunes:category>
<itunes:image href="http://makezine.com/images/hackszine/rss_icon.jpg" />
<itunes:explicit>no</itunes:explicit>


<item>
<title>When to denormalize</title>
<itunes:summary>There&apos;s been a bit of a database religious war on Dare Obasanjo and Jeff Atwood&apos;s blogs, all on the subject of database normalization: when to normalize, when not to, and the performance and data integrity issues that underly the decision....</itunes:summary>
<description>
<![CDATA[<p>There's been a bit of a database religious war on Dare Obasanjo and Jeff Atwood's blogs, all on the subject of database normalization: when to normalize, when not to, and the performance and data integrity issues that underly the decision. </p>

<p>Here's the root of the argument. What we've all been taught regarding database design is irrelevant if the design can't deliver the necessary performance results. </p>

<p>The 3rd normal form helps to ensure that the relationships in your DB reflect reality, that you don't have duplicate data, that the zero to many relationships in your system can accommodate any potential scenario, and that space isn't wasted and reserved for data that isn't explicitly being used. The downside is that a single object within the system may span many tables and, as your dataset grows large, the joins and/or multiple selects required to extract entities from the system begins to impact the system's performance. </p>

<p>By denormalizing, you can compromise and pull some of those relationships back into the parent table. You might decide, for instance, that a user can have only 3 phone numbers, 1 work address, and 1 home address. In doing so, you've met the requirements of the common scenario and removed the need to join to separate address or contact number tables. This isn't an uncommon compromise. Just look at the contacts table in your average cell phone to see it in action.</p>

<p>Jeff writes:<br />
<blockquote>Both solutions have their pros and cons. So let me put the question to you: which is better -- a normalized database, or a denormalized database?</p>

<p>Trick question! The answer is that it doesn't matter! Until you have millions and millions of rows of data, that is. Everything is fast for small n.</blockquote></p>

<p>So for large n, what's the solution? In my personal experience, you can usually have it both ways. </p>

<p>Design your database to 3NF from the beginning to ensure data integrity and to allow room for growth, additional relationships, and the sanity of future querying and indexing. Only when you find there are performance problems do you need to think about optimizing. Usually this can be accomplished through smarter querying. When it cannot, you derive a denormalized data set from the normalized source. This can be as simple as an extra field in the parent table that derives sort information on inserts, or it can be a full-blown object cache table that's updated from the official source at some regular interval or when an important even occurs. </p>

<p>Read the discussions and share your comments. To me, the big takeaway is that there's no one solution that will fit every real world problem. Ultimately, your final design has to reflect the unique needs of the problem that is being solved.</p>

<p><a href="http://www.25hoursaday.com/weblog/CommentView.aspx?guid=cc0e740c-a828-4b9d-b244-4ee96e2fad4b">When Not to Normalize your SQL Database</a><br />
<a href="http://www.codinghorror.com/blog/archives/001152.html">Maybe Normalizing Isn't Normal</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/07/when_to_denormalize.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/07/when_to_denormalize.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/07/when_to_denormalize.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/07/when_to_denormalize.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Tue, 15 Jul 2008 20:47:42 -0800</pubDate>

</item>

<item>
<title>Crawling AJAX</title>
<itunes:summary>Traditionally, a web spider system is tasked with connecting to a server, pulling down the HTML document, scanning the document for anchor links to other HTTP URLs and repeating the same process on all of the discovered URLs. Each URL...</itunes:summary>
<description>
<![CDATA[<p>Traditionally, a web spider system is tasked with connecting to a server, pulling down the HTML document, scanning the document for anchor links to other HTTP URLs and repeating the same process on all of the discovered URLs. Each URL represents a different state of the traditional web site. In an AJAX application, much of the page content isn't contained in the HTML document, but is dynamically inserted by Javascript during page load. Furthermore, anchor links can trigger javascript events instead of pointing to other documents. The state of the application is defined by the series of Javascript events that were triggered after page load. The result is that the traditional spider is only able to see a small fraction of the site's content and is unable to index any of the application's state information. </p>

<p>So how do we go about fixing the problem?</p>

<p><strong>Crawl AJAX Like A Human Would</strong><br />
To crawl AJAX, the spider needs to understand more about a page than just its HTML. It needs to be able to understand the structure of the document as well as the Javascript that manipulates it. To be able to investigate the deeper state of an application, the crawling process also needs to be able to recognize and execute events within the document to simulate the paths that might be taken by a real user.</p>

<p>Shreeraj Shah's paper, Crawling Ajax-driven Web 2.0 Applications, does a nice job of describing the "event-driven" approach to web crawling. It's about creating a smarter class of web crawling software which is able to retrieve, execute, and parse dynamic, Javascript-driven DOM content, much like a human would operate a full-featured web browser.</p>

<blockquote>The "protocol-driven" approach does not work when the crawler comes across an Ajax embedded page. This is because all target resources are part of JavaScript code and are embedded in the DOM context. It is important to both understand and trigger this DOM-based activity. In the process, this has lead to another approach called "event-driven" crawling. It has following three key components 
 
<ol><li>Javascript analysis and interpretation with linking to Ajax </li><li>DOM event handling and dispatching </li><li>Dynamic DOM content extraction</li</ol>
</blockquote>

<p><strong>The Necessary Tools</strong><br />
The easiest way to implement an AJAX-enabled, event-driven crawler is to use a modern browser as the underlying platform. There are a couple of tools available, namely Watir and Crowbar, that will allow you to control Firefox or IE from code, allowing you to extract page data <em>after</em> it has processed any Javascript. </p>

<p>Watir is a library that enables browser automation using Ruby. It was originally built for IE, but it's been ported to both Firefox and Safari as well. The Watir API allows you to launch a browser process and then directly extract and click on anchor links from your Ruby application. This application alone makes me want to get more familiar with Ruby.</p>

<p>Crowbar is another interesting tool which uses a headless version of Firefox to render and parse web content. What's cool is that it provides a web server interface to the browser, so you can issue simple GET or POST requests from any language and then scrape the results as needed. This lets you interact with the browser from even simple command line scripts, using curl or wget.</p>

<p>Which tool you use depends on the needs of your crawler. Crowbar has the benefit of being language agnostic and simple to integrate into a traditional crawler design to extract page information that would only be present after a page has completed loading. Watir, on the other hand, gives you deeper, interactive access to the browser, allowing you to trigger subsequent Javascript events. The downside is that the logic behind a crawler that can dig deep into application state is quite a bit more complicated, and with Watir you are tied to Ruby which may or may not be your cup of tea.</p>

<p><br />
<a href="http://simile.mit.edu/wiki/Crowbar">Crowbar - server-side headless Firefox</a><br />
<a href="http://wtr.rubyforge.org/">Watir - browser remote control in Ruby</a><br />
<a href="http://www.infosecwriters.com/text_resources/pdf/Crawling_AJAX_SShah.pdf">Crawling Ajax-driven Web 2.0 Applications (PDF)</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/07/crawling_ajax.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/07/crawling_ajax.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/07/crawling_ajax.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/07/crawling_ajax.html?CMP=OTC-7G2N43923558</guid>
<category>Ajax</category>
<pubDate>Sat, 05 Jul 2008 12:57:11 -0800</pubDate>
<enclosure url="http://www.infosecwriters.com/text_resources/pdf/Crawling_AJAX_SShah.pdf" length="134246" type="application/pdf" />
</item>

<item>
<title>Videos from past Shmoocons</title>
<itunes:summary>You may have dug the videos of past DEFCON conferences that we posted back in May, but there&apos;s a whole other infosec conference, Shmoocon, which is held in D.C. every February. ShmooCon is an annual East coast hacker convention hell-bent...</itunes:summary>
<description>
<![CDATA[<p>You may have dug the videos of past DEFCON conferences that we posted back in May, but there's a whole other infosec conference, Shmoocon, which is held in D.C. every February.</p>

<blockquote>ShmooCon is an annual East coast hacker convention hell-bent on offering three days of an interesting atmosphere for demonstrating technology exploitation, inventive software & hardware solutions, and open discussions of critical infosec issues.</blockquote>

<p>It's a while until the next conference comes up, but there have been some great presentations at past conferences, most of which are available online. Peteris Krumins recently assembled links to all of the videos and presentation files that are available at the Shmoocon site (including the 2008 conference), posting them to his blog as a single big index.</p>

<p>A quick search on YouTube also turned up a series of videos by Scott Moulton from Shmoocon 2007 and 2008 on the topic of data recovery for both traditional hard disks and flash drives. It's pretty fascinating stuff, whether you're interested in this from a forensics or security perspective, or if you've ever just wondered what exactly goes into recovering important data from a crashed disk when you send it out to a data recovery shop.</p>

<p><a href="http://www.catonmat.net/blog/shmoocon-hacking-videos/">Hacking Videos from Shmoocon</a><br />
<a href="http://www.youtube.com/profile_videos?user=SuperFlyFlippingA">Scott Moulton's videos on data recovery for SSD flash drives and hard disks</a><br />
<a href="http://www.shmoocon.org/">Shmoocon Infosec Conference</a></p>

<p>See also: <a href="http://www.hackszine.com/blog/archive/2008/05/videos_from_past_defcons.html">Videos from past DEFCONs</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/06/videos_from_past_shmoocons.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/06/videos_from_past_shmoocons.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/06/videos_from_past_shmoocons.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/06/videos_from_past_shmoocons.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Tue, 24 Jun 2008 21:14:07 -0800</pubDate>

</item>

<item>
<title>drop.io - simple anonymous file sharing</title>
<itunes:summary>Sometimes I need to send files to people that are too large to attach to an email. Inevitably, the solution is to upload it to an ftp or web server that I have access to and then send the recipient...</itunes:summary>
<description>
<![CDATA[<p>Sometimes I need to send files to people that are too large to attach to an email. Inevitably, the solution is to upload it to an ftp or web server that I have access to and then send the recipient a download url. It's a pretty inefficient process, and unless you like your ftp server becoming an overwhelming mess of random downloads, you have to remember to go back and remove things at a later date.</p>

<p>drop.io is a web service that solves this sort of problem perfectly. You create a drop URL with a unique name, upload a file to it, and set an expiration time when it will be deleted, all in a single step. The drop folder can have both an access and an admin password, and you can choose what level of access (read, read/write, read/write/delete) the non-admin has. After you've created a drop folder, you can continue to add files and notes to it via the web interface or by email. Each drop also has a phone extension that will allow you to call in and record messages that are added to the drop. It's brilliantly simple.</p>

<p>What I like best is that aside from tracking IP for legal or terms of service violations, it's completely anonymous. You don't make an account to use the service. There is no profile. The drop folders aren't search indexable unless you choose to make them without passwords and publish the URL somewhere crawlable. You can renew the expiration period of the drop, but when it expires, it goes away along with its contents.</p>

<p>I like.</p>

<p><a href="http://drop.io/">drop.io - Simple Private Exchange</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/05/dropio_simple_anonymous_file_s.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/05/dropio_simple_anonymous_file_s.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/05/dropio_simple_anonymous_file_s.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/05/dropio_simple_anonymous_file_s.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Tue, 13 May 2008 20:25:15 -0800</pubDate>

</item>

<item>
<title>Processing.js - visualization library for Javascript</title>
<itunes:summary> John Resig, of jQuery fame, released a port of the Processing visualization language for Javascript. Seriously, John is on fire: The first portion of the project was writing a parser to dynamically convert code written in the Processing language,...</itunes:summary>
<description>
<![CDATA[<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="jsprocessing_20080509.jpg" src="http://www.hackszine.com/jsprocessing_20080509.jpg" width="500" height="149" class="mt-image-none" style="" /></span></p>

<p>John Resig, of jQuery fame, released a port of the Processing visualization language for Javascript.  Seriously, John is on fire:</p>

<blockquote>The first portion of the project was writing a parser to dynamically convert code written in the Processing language, to JavaScript. This involves a lot of gnarly regular expressions chewing up the code, spitting it out in a format that the browser understands.

<p>It works "fairly well" (in that it's able to handle anything that the processing.org web site throws at it) but I'm sure its total scope is limited (until a proper parser is involved). I felt bad about tackling this using regular expressions until I found out that the original Processing code base did it in the same manner (they now use a real parser, naturally).</blockquote></p>

<p>The full 2D API is implemented, with the exclusion of some features here and there between browsers (Firefox 3 is pretty full featured). You can interact with the Processing API directly from standard Javascript. This lets you make use of these drawing features by simply instantiating a Processing object, and then calling its various drawing methods.</p>

<p>Another capability is to write code natively in the Processing language. This allows you to make use of extended language features such as method overloading and classic inheritance, though it looks like type information is pretty much ignored.</p>

<p>John has many of the demos from processing.org working. Most of them are going to peg your CPU, but this is some seriously cool stuff to see working in a first release. </p>

<p>Javascript just got a lot more interesting.</p>

<p><a href="http://dev.jquery.com/~john/processing.js/">Processing.js</a><br />
<a href="http://processing.org/">Processing: open source data visualization language</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/05/processingjs_visualization_lib.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/05/processingjs_visualization_lib.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/05/processingjs_visualization_lib.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/05/processingjs_visualization_lib.html?CMP=OTC-7G2N43923558</guid>
<category>Ajax</category>
<pubDate>Fri, 09 May 2008 21:36:09 -0800</pubDate>

</item>

<item>
<title>CryoPID: hibernation for Linux processes</title>
<itunes:summary>We&apos;re all familiar with the hibernate/deep-sleep features that are typical on your standard laptop. In this mode, the entire contents of RAM are written to the disk and the machine is completely shut down. When it&apos;s next booted, the system...</itunes:summary>
<description>
<![CDATA[<p>We're all familiar with the hibernate/deep-sleep features that are typical on your standard laptop. In this mode, the entire contents of RAM are written to the disk and the machine is completely shut down. When it's next booted, the system is restored to the exact state it was at before sleep, with all of your programs running just like they were when you left them.</p>

<p>What if you could do this at the process level? You could kill whatever umpteen-gazillion applications you have running, reboot your computer, and then start your apps back up whenever you like and they would be exactly the way they were when you left them. </p>

<p>There's a Linux application called CryoPID which attempts to do just that.</p>

<p>CryoPID requires no special kernel modifications and operates in user mode, so you don't need to be root. All you do is run the <b>freeze</b> program on a process you own:</p>

<p><code>freeze /tmp/savestatefile 1234</code></p>

<p>This will archive the state of process 1234 into a self-executing, compressed file named /tmp/savestatefile. To start it back up, just run the save file:</p>

<p><code>/tmp/savestatefile</code></p>

<p>When this is executed, your application will be restored, relinked to any previously-loaded DLLs, and attached to the file descriptors it had open.</p>

<p>You'll run into some problems with network socket connections you had open, and support for X applications is still only experimental, so the useful scenario is a bit limited, but it's a promising concept and could come in quite handy in the command-line world.</p>

<p><a href="http://cryopid.berlios.de/">CryoPID - A Process Freezer for Linux</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/03/cryopid_hibernation_for_linux.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/03/cryopid_hibernation_for_linux.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/03/cryopid_hibernation_for_linux.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/03/cryopid_hibernation_for_linux.html?CMP=OTC-7G2N43923558</guid>
<category>Linux</category>
<pubDate>Mon, 17 Mar 2008 21:32:03 -0800</pubDate>

</item>

<item>
<title>Ram dump over Firewire</title>
<itunes:summary> Unlike USB2, the Firewire spec allows devices to have full DMA access. By impersonating the appropriate device, a PC can essentially obtain full read/write access to another machine&apos;s RAM, just by connecting the two machines with a Firewire cable....</itunes:summary>
<description>
<![CDATA[<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="firewirememdump_20080304.jpg" src="http://www.hackszine.com/firewirememdump_20080304.jpg" width="500" height="334" class="mt-image-none" style="" /></span></p>

<p>Unlike USB2, the Firewire spec allows devices to have full DMA access. By impersonating the appropriate device, a PC can essentially obtain full read/write access to another machine's RAM, just by connecting the two machines with a Firewire cable. Adding to the recent discussion about the insecurities of physical access and Princeton's cold-boot RAM dump demonstration, Adam Boileau released a Linux Firewire utility that will give you immediate Administrator to an XP machine:</p>

<blockquote>It's two years later, and I think anyone who was going to get the message about Firewire has already got it, and anyone who was going to be upset about it has got over it. Besides, according to Microsoft's definition, it never was a Security Vulnerability anyway - screensavers and login prompts are - as Bruce says - about the Feeling of Security. Anyway, today's release day for Winlockpwn, the tool I demoed at Ruxcon for bypassing windows auth, or popping an admin shell at the login window.

<p>...</p>

<ul><li>Yes, you can read and write main memory over firewire on windows.</li><li>Yes, this means you can completely own any box who's firewire port you can plug into in seconds.</li><li>Yes, it requires physical access. People with physical access win in lots of ways. Sure, this is fast and easy, but it's just one of many.</li><li>Yes, it's a FEATURE, not a bug. It's the Fire in Firewire. Yes, I know this, Microsoft know this. The OHCI-1394 spec knows this. People with firewire ports generally dont.</li></ul></blockquote>

<p>Adam's tools include a few Python apps that can copy and impersonate Firewire device signatures, dump RAM on a remote machine, bypass Windows authentication, and extract BIOS passwords. It's not exactly comforting, but I've got a new appreciation for Firewire now. This is the sort of access that used to only be possible by creating hardware that physically connects to the PCI bus. Now all you need is a cable and a laptop.</p>

<p>Firewire, DMA & Windows - direct memory access over Firewire - [<a href="http://www.theage.com.au/news/security/hack-into-a-windows-pc--no-password-needed/2008/03/04/1204402423638.html">via</a>] <a href="http://storm.net.nz/projects/16">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/03/ram_dump_over_firewire.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/03/ram_dump_over_firewire.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/03/ram_dump_over_firewire.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/03/ram_dump_over_firewire.html?CMP=OTC-7G2N43923558</guid>
<category>Network Security</category>
<pubDate>Tue, 04 Mar 2008 19:08:30 -0800</pubDate>

</item>

<item>
<title>Recover data from RAM after a crash</title>
<itunes:summary>After Princeton&apos;s cold-boot encryption key recovery hack, I got to thinking about what other useful things might be lying around in memory. It&apos;s old news that passwords of logged-in users are hanging out in there, but what about something more...</itunes:summary>
<description>
<![CDATA[<p>After Princeton's cold-boot encryption key recovery hack, I got to thinking about what other useful things might be lying around in memory. It's old news that passwords of logged-in users are hanging out in there, but what about something more useful to the everyday user? What about that file you were editing before accidentally closing its window without saving?</p>

<p>In Linux and on PPC Macs, the root user can access the machine's ram through the /dev/mem device. I'm not sure why this is unavailable on newer Intel Macs&mdash;it's a bummer.</p>

<p>In theory, if you're processing some words, spreading sheets, or posting a blog entry and your program crashes, it's likely that the data you were editing will still be in RAM, unharmed, waiting to be allocated to another process.  If you immediately dump the entire contents of RAM to disk before starting another large process, chances are good you can find your data again. It's tricky though&mdash;writing that RAM to disk requires you start up at least one process, such as dd.  It's possible that this new process, or a another process that's currently running, could allocate memory and obliterate your file. You don't really have other options, though, so you might try something like this:</p>

<blockquote><code>
dd if=/dev/mem of=/tmp/ramdump<br />strings /tmp/ramdump | grep "some text in your file"</code></blockquote>

<p>I found a post by David Keech where he describes exactly this process. He was able to use it to successfully recover the text from a killed vi session:</p>

<blockquote>I tested this by starting vi and typing in "thisisanabsolutelyuniqueteststring", killing the vi process without saving the file and running the command above immediately with a small modification. Instead of piping the output to a file, I piped it to grep thisisanabsolutelyuniquetest. The grep command found itself, as it always does, but it also found the original string, identified by the rest of the unique string that I didn't include in the grep command.
You have to be careful when search through running memory. I now remember having this problem with the Mac all those years ago. Whenever I searched for parts of my brother's letter, I would just end up finding the part of memory that contained the search string.</blockquote>

<p>He also mentions scanning the swap partition, which is also a likely place for your data to be found.  It's the same process, but you replace /dev/mem with /dev/hda2 or whatever your swap partition is.</p>

<p>Here's the fun part. Based on what we now know about DRAM holding data even a few seconds of being unpowered, you might even be able to use the method to recover program data after a full system crash and reboot.  The swap data will for sure be there, but if you reboot into single user mode without starting up X or any large applications, the possibility exists that unallocated areas of /dev/mem will still contain data from before the reboot.</p>

<p>How to recover your data after a crash - <a href="http://www.ladadadada.net/blog/2007/09/17/how_to_recover_your_data_after_a_crash">Link</a><br />
Extracting encryption keys after a cold boot - <a href="http://www.hackszine.com/blog/archive/2008/02/extracting_encryption_keys_aft.html">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/03/recover_data_from_ram_after_a.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/03/recover_data_from_ram_after_a.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/03/recover_data_from_ram_after_a.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/03/recover_data_from_ram_after_a.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Sat, 01 Mar 2008 10:16:38 -0800</pubDate>

</item>

<item>
<title>TrueCrypt for OS X</title>
<itunes:summary> TrueCrypt 5.0 was released yesterday and OS X has been added to the list of supported operating systems, making it the only open source volume encryption utility that works in Linux, Mac and Windows. It&apos;s a really slick utility...</itunes:summary>
<description>
<![CDATA[<p><img alt="truecrypt_20080206.jpg" src="http://www.hackszine.com/truecrypt_20080206.jpg" width="500" height="433" /></p>

<p>TrueCrypt 5.0 was released yesterday and OS X has been added to the list of supported operating systems, making it the only open source volume encryption utility that works in Linux, Mac and Windows. It's a really slick utility for creating an AES-256 or Serpent encrypted volume that you can drop sensitive files inside.</p>

<p>You can use TrueCrypt to create an encrypted volume image inside a file, or you can encrypt a whole disk image or partition. The OS X version uses MacFUSE to provide user-mode mounting of the encrypted disk. The main application window, pictured above, gives you a simple interface for creating and mounting encrypted images. </p>

<p>Once an image is mounted, you can use it like a normal hard disk.  Unmount the disk and you're left with a file full of random gibberish. FAT is the only filesystem that's available through the interface, but once the disk is mounted, you can reformat it with Disk Utility to use XFS.</p>

<p>There are a couple of things worth noting. In the Windows and Linux versions a special bootloader is available that lets you encrypt your entire system drive. It doesn't look like that option is available in the OS X version. Also, when I tested the latest OS X binary this evening, the "hidden volume" plausible deniability feature wasn't working. Hopefully that will be added in a future release. Until then, TrueCrypt is better suited for storing tax documents and things you wouldn't want visible to a laptop thief, rather than the details of where you've hidden the bodies.</p>

<p>TrueCrypt - [<a href="http://www.tuaw.com/2008/02/06/truecrypt-released-for-os-x/">via</a>] <a href="http://www.truecrypt.org/">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2008/02/truecrypt_for_os_x.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2008/02/truecrypt_for_os_x.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2008/02/truecrypt_for_os_x.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2008/02/truecrypt_for_os_x.html?CMP=OTC-7G2N43923558</guid>
<category>Cryptography</category>
<pubDate>Wed, 06 Feb 2008 20:34:05 -0800</pubDate>

</item>

<item>
<title>Hacking the Western Digital MyBook World Edition</title>
<itunes:summary> Western Digital sells a number of external drives under the MyBook World Edition brand. These are network-based external storage drives that you can connect to remotely from multiple machines. Inside are a couple of drives set up in a...</itunes:summary>
<description>
<![CDATA[<p><img alt="mybook_20071207.jpg" src="http://www.hackszine.com/mybook_20071207.jpg" width="500" height="350" /></p>

<p>Western Digital sells a number of external drives under the MyBook World Edition brand.  These are network-based external storage drives that you can connect to remotely from multiple machines.  Inside are a couple of drives set up in a mirrored RAID configuration, as well as an embedded computer running Linux.</p>

<p>MakeFan: tipped us off to Martin Hinner's website, which has a lot of details about the software running on the MyBooks, including info for hacking the devices capabilities to do more than what's available out of the box.</p>

<blockquote>This page provides information on how to hack your MyBook World Edition, so as you can improve performance and add new features. MyBook is powered by ARM9 microprocessor, it has 32MB of SDRAM and boots from internal hard drive. The system partition has 2.8GB (only 260 MB is occupied). This means that you have a lot of resources for various improvements.</blockquote>

<p>You can enable SSH on the device without cracking the case.  Martin hosts a script that subverts the firmware update software to create your ssl keys and boot the sshd process.  Once that is enabled, you have full access to the OS to do what you like, including running an NFS server, web server, or even replacing the standard web interface.</p>

<p>Also worth checking out is the Hacking WD MyBook Wiki.  They have links to information on rescuing data from dead drives and building other software for the device.  Keep in mind that building MySQL from source will take about 18 hours, but there's got to be something fun you can do with a LAMP stack running on a terabyte hard drive.</p>

<p>Hacking Western Digital MyBook World Edition - <a href="http://martin.hinner.info/mybook/">Link</a><br />
MyBook World Edition Wiki - <a href="http://mybookworld.wikidot.com/">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/12/hacking_the_western_digital_my.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/12/hacking_the_western_digital_my.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/12/hacking_the_western_digital_my.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/12/hacking_the_western_digital_my.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Fri, 07 Dec 2007 20:44:34 -0800</pubDate>

</item>

<item>
<title>Using QoS to prioritize your bandwidth</title>
<itunes:summary> You can use the Quality of Service (QoS) feature on many routers to optimize your internet connection for devices and services that are most important to you. Adam at Lifehacker put together a quick walkthrough for tuning the QoS...</itunes:summary>
<description>
<![CDATA[<p><img alt="qos_20071127.jpg" src="http://hackszine.com/qos_20071127.jpg" width="500" height="192" /></p>

<p>You can use the Quality of Service (QoS) feature on many routers to optimize your internet connection for devices and services that are most important to you.  Adam at Lifehacker put together a quick walkthrough for tuning the QoS settings on our favorite router firmware, the open-source DD-WRT.</p>

<blockquote>Your internet connection is an indispensable part of your life, but between BitTorrent, Xbox Live, web browsing, and VoIP, sometimes there's not enough bandwidth to go around. But rather than running around the house shutting down all of your computers next time you're experiencing a little lag on Xbox Live or Skype is breaking up on you, you can set up Quality of Service (QoS) rules on your router to distribute bandwidth to your different gadgets and applications based on your priorities. Today I'll show you how.</blockquote>

<p>The nice thing about setting up QoS on your router is that you can prioritize packets by application, IP and MAC address, or a specific router port, all to your own preferences.  Everyone has different needs, so you may want to maximize the available bandwidth for VoIP or network gaming, guarantee a chunk of bandwidth for ssh connections or your web server, or throttle down P2P applications so that they don't affect other network services.  There's nothing set in stone, so you can really make your router work for you to improve the way your internet connection is utilized.</p>

<p>Ensure a Fast Internet Connection When You Need It - <a href="http://lifehacker.com/software/feature/ensure-a-fast-internet-connection-when-you-need-it-326543.php">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/11/using_qos_to_prioritize_your_b.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/11/using_qos_to_prioritize_your_b.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/11/using_qos_to_prioritize_your_b.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/11/using_qos_to_prioritize_your_b.html?CMP=OTC-7G2N43923558</guid>
<category>VoIP</category>
<pubDate>Tue, 27 Nov 2007 21:20:09 -0800</pubDate>

</item>

<item>
<title>Where&apos;s the open source distributed search?</title>
<itunes:summary>Back before Google, a lot of hackers were writing search engines in their free time. The general consensus, at least from my own recollection, was that search was a problem that needed to be solved, and that all the current...</itunes:summary>
<description>
<![CDATA[<p>Back before Google, a lot of hackers were writing search engines in their free time.  The general consensus, at least from my own recollection, was that search was a problem that needed to be solved, and that all the current solutions more or less sucked.  Today, search encompasses a huge territory and there are still a lot of problems to be solved, but, for the most part, web search is extremely usable and reliable.  It's not perfect, there's room for improvement, but it get's the job done.  I don't know too many people these days who spend their time hacking search.  Why re-create such a low-level service when there are so many innovative and higher-level web applications to be built?</p>

<p>The thing is, search is the operating system of the web.  The fact that we have no open-source/open-data search infrastructure is as bad as if there were no Linux or OpenBSD.  If Google, Yahoo and MS weren't providing such a great product, my guess is that the hacker community would be attacking this problem like Captain Kirk on a lizard monster.</p>

<p><b>Where We Are:</b></p>

<p>Currently, there are a number of open source projects related to general web search.  Most notably, the Java based Lucene project is a solid foundation for indexing and information retrieval, and it's what the Nutch search engine is built on.</p>

<p>There are a few distributed crawlers like Grub and Majestic 12.  Unfortunately, these both pass data to a central, private storage system.  The hard work of crawling and indexing is open for everyone to participate in, but the resultant data is not.</p>

<p><b>Where We Need To Be:</b></p>

<p>In my mind, search hackers need to create an open source solution for the following:</p>

<ul><li>A distributed mechanism for crawling and indexing the web on a mass scale.</li><li>Distributed, decentralized, redundant data storage for the cache and index.</li><li>An end-user, public facing interface for querying the distributed index.</li><li>A mechanism for retrieving or crawling a local, private slice of the index and cache, for research or personal use.</li><li>A way to publish alternate indexing models to the distributed grid.</li></ul>

<p>All of these tools need to be designed with the assumption that anyone can and will have access to the system's data, and as the system grows, there will be people, corporations, and governments hell-bent on corrupting the search infrastructure to their advantage.</p>

<p>It's not an easy problem to solve, but you've got to admit it's an interesting problem.  Anyone keen on being the Torvalds of search?</p>

<p><b>Where To Begin:</b></p>

<p>The Lucene Project - <a href="http://lucene.apache.org/">Link</a><br />
Nutch Open Source Search Engine - <a href="http://lucene.apache.org/nutch/">Link</a><br />
Open Source Search Wiki - <a href="http://www.opensourcesearch.org/wiki/index.php/Open_Source_Search">Link</a></p>

<p>Have I missed anything?  Please share your thoughts on open source search in the comments.</p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/10/wheres_the_open_source_distrib.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/10/wheres_the_open_source_distrib.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/10/wheres_the_open_source_distrib.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/10/wheres_the_open_source_distrib.html?CMP=OTC-7G2N43923558</guid>
<category>Web</category>
<pubDate>Thu, 11 Oct 2007 20:03:35 -0800</pubDate>

</item>

<item>
<title>Burning visible images onto a CD-R</title>
<itunes:summary> Here&apos;s an hack that takes on the challenge of burning a visible image into a CD-R. Data on a CD, or any optical media, is stored as a sequence of pits of varying lengths. To be precise, a 1...</itunes:summary>
<description>
<![CDATA[<p><img alt="cdimage_20070812.jpg" src="http://hackszine.com/cdimage_20070812.jpg" width="500" height="235" /></p>

<p>Here's an hack that takes on the challenge of burning a visible image into a CD-R.</p>

<blockquote>Data on a CD, or any optical media, is stored as a sequence of pits of varying lengths. To be precise, a 1 is represented by the change from pit to no-pit or the change from no-pit to pit, and a 0 is represented by no change in height (pit to pit or no-pit to no-pit). The pits and no-pits reflect different amounts of light; thus it is possible to draw images on CDs by appropriately arranging these 1s and 0s. </blockquote>

<p>As you can see in the photo above, the results are difficult to make out, mostly due to calibration settings that the author needed to tweak.  All of his source is available, though some of it requires Matlab.  Anyone care to test this out and link us to a photo in the comments?</p>

<p>What I'd really like to see is something that will take an image and convert it into a wav file that can be placed as the first track on the disk to show an image...</p>

<p>Burning visible images onto CD-Rs with data (beta) - <a href="http://www.instructables.com/id/EKXB9DF5V7EP286HE7/">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/08/burning_visible_images_onto_a.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/08/burning_visible_images_onto_a.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/08/burning_visible_images_onto_a.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/08/burning_visible_images_onto_a.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Sun, 12 Aug 2007 19:09:43 -0800</pubDate>

</item>

<item>
<title>Gears API: create web apps that work offline</title>
<itunes:summary> Google released a new Javascript API today called Gears that makes it possible to write modeless web applications that will function offline. A browser plugin is available for IE and Firefox (OS X, Linux, and Windows), with Safari support...</itunes:summary>
<description>
<![CDATA[<p><img alt="gears_20070530.jpg" src="http://hackszine.com/gears_20070530.jpg" width="500" height="205" /><br />
Google released a new Javascript API today called Gears that makes it possible to write modeless web applications that will function offline.  A browser plugin is available for IE and Firefox (OS X, Linux, and Windows), with Safari support planned for the near future.  The plugin will need to be installed by users of Gears-enabled applications.</p>

<p>From what I can see--and keep in mind that I haven't used the API yet--there are 3 basic services that the API provides:<br />
<ul><li>local file resource storage and caching so that you can view files after disconnecting</li><li>a client-side SQL database that can be used by Javascript to store and fetch data</li><li>a worker pool module for running asynchronous background processes</li></ul></p>

<p>The obvious use for this is to make stateful applications that continue to operate when you're offline, but maybe there are some privacy opportunities here too.  Today, applications come in primarily two varieties: apps with user data and software stored locally, and web-based applications that execute and store data on the server.  What I'm curious to see is if developers will begin making a third, hybrid category of application, where software release and maintenance is web-based and global data is available for local consumption, but the storage and processing of user-specific data takes place on the client side, safe from unwanted profiling.</p>

<p>Google Gears API Developer's Guide - <a href="http://code.google.com/apis/gears/index.html">Link</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/05/gears_api_create_web_apps_that.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/05/gears_api_create_web_apps_that.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/05/gears_api_create_web_apps_that.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/05/gears_api_create_web_apps_that.html?CMP=OTC-7G2N43923558</guid>
<category>Ajax</category>
<pubDate>Wed, 30 May 2007 19:36:14 -0800</pubDate>

</item>

<item>
<title>reCAPTCHA: distributed book digitization while fighting spam</title>
<itunes:summary> Thanks to spammers, we now are forced waste a substantial portion of time every day, typing in obfuscated wiggly letters to prove we are human. reCATPCHA is a slick idea for using the CAPTCHA system for doing something productive...</itunes:summary>
<description>
<![CDATA[<p><img alt="recaptcha_20070524.jpg" src="http://hackszine.com/recaptcha_20070524.jpg" width="500" height="238" /><br />
Thanks to spammers, we now are forced waste a substantial portion of time every day, typing in obfuscated wiggly letters to prove we are human. reCATPCHA is a slick idea for using the CAPTCHA system for doing something productive (...besides distinguising between homo sapien and homo computatralis).</p>

<p>With reCAPTCHA, the user is given two words, one known by the system and one from a book that previously failed character recognition.  When the user enters both words, the sytem verifies the known word, proving human-ness, and submits the second word to a central database, which helps digitze books from the Internet Archive. With 60 million CAPTCHAs being solved every day, this could be a huge assist for portions of text that can't be handled by optical character regognition techniques. [<a href="http://bmaurer.blogspot.com/2007/05/recaptcha-new-way-to-fight-spam.html">via</a>] <a href="http://recaptcha.net/learnmore.html">Link</a></p>

<p><b>Related:</b><br />
<a href="http://www.hackszine.com/blog/archive/2007/02/negative_captcha.html">Negative CAPTCHA</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/05/recaptcha_distributed_book_dig.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/05/recaptcha_distributed_book_dig.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/05/recaptcha_distributed_book_dig.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/05/recaptcha_distributed_book_dig.html?CMP=OTC-7G2N43923558</guid>
<category>Web</category>
<pubDate>Thu, 24 May 2007 22:10:44 -0800</pubDate>

</item>

<item>
<title>Openchange: open source Exchange MAPI library</title>
<itunes:summary> The Openchange project&apos;s libmapi looks really promising. It&apos;s an open source MAPI implementation that allows you to talk to an Exchange server from your own code. The OpenChange MAPI library aims to provide interoperability with an Open Source implementation...</itunes:summary>
<description>
<![CDATA[<p><img alt="openchange_20070507.jpg" src="http://hackszine.com/openchange_20070507.jpg" width="500" height="359" /><br />
The Openchange project's libmapi looks really promising.  It's an open source MAPI implementation that allows you to talk to an Exchange server from your own code.</p>

<blockquote>The OpenChange MAPI library aims to provide interoperability with an Open Source implementation of Microsoft Exchange protocols under UNIX/Linux. The current implementation offers a client-side library which can be used in existing messaging clients and offer native compatibility with Exchange Servers up to 2003.</blockquote>

<p>As of last weekend it now supports the creation and extraction of not only messages, but also contacts, calender events, and tasks.  This should be really useful for developers who want to interoperate with Exchange from other platforms and external mail systems.</p>

<p>Openchange: open source Exchange server alternative - <a href="http://www.openchange.org/">Link.</a><br />
Feature demonstration screencast - <a href="http://www.openchange.org/index.php?option=com_content&task=view&id=66&Itemid=73#openchangeclient">Link.</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/05/openchange_open_source_exchang.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/05/openchange_open_source_exchang.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/05/openchange_open_source_exchang.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/05/openchange_open_source_exchang.html?CMP=OTC-7G2N43923558</guid>
<category>Linux</category>
<pubDate>Mon, 07 May 2007 18:54:59 -0800</pubDate>

</item>

<item>
<title>RAID 0 in a Macbook Pro</title>
<itunes:summary> Putting a RAID 0 (striped) disk array in your laptop is a double edged sword. One the one hand, it&apos;s twice as likely to have a disk failure. One the other hand, it can make disk-bound activity, such as...</itunes:summary>
<description>
<![CDATA[<p><img alt="raid0mac_20070430.jpg" src="http://hackszine.com/raid0mac_20070430.jpg" width="500" height="351" /><br />
Putting a RAID 0 (striped) disk array in your laptop is a double edged sword.  One the one hand, it's twice as likely to have a disk failure.  One the other hand, it can make disk-bound activity, such as uncompressed video reading and writing, much faster.  Frankly, with processor, bus and memory speeds as fast as they are, disk IO is often times the weakest link... which makes that risky performance upgrade all the more tempting.</p>

<p>Eric Cheng recently posted his experiments on getting RAID 0 working with a Macbook Pro:</p>

<blockquote>Subjectively, the system feels more snappy, and I'm happy to have made the upgrade. I use up at least 20-30GB per week in the field, and it will be great to be able to work on my notebook without having an external drive chained to it.</blockquote>

<p>As for the disk failure issue, we all back up nightly anyway, don't we?</p>

<p>320GB striped array (RAID 0) in a Macbook Pro -[<a href="http://macenstein.com/default/archives/594">via</a>] <a href="http://echeng.com/journal/2007/04/26/320gb-striped-array-raid-0-macbook-pro/">Link.</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/04/raid_0_in_a_macbook_pro.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/04/raid_0_in_a_macbook_pro.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/04/raid_0_in_a_macbook_pro.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/04/raid_0_in_a_macbook_pro.html?CMP=OTC-7G2N43923558</guid>
<category>Mac</category>
<pubDate>Sun, 29 Apr 2007 22:54:35 -0800</pubDate>

</item>

<item>
<title>S3 makes website hosting reasonable again?</title>
<itunes:summary> I keep hearing from friends each month about how Amazon&apos;s S3 is making website hosting reasonable for regular folks - here&apos;s another example from one of MAKE&apos;s kit makers - Amazon&apos;s S3 (Simple Storage Service) isn&apos;t new, but its...</itunes:summary>
<description>
<![CDATA[<p><img src="http://hackszine.com/100014192753.jpg" height="69" width="170" border="0" align="right" hspace="4" vspace="4" alt="100014192753" /><br />
I keep hearing from friends each month about how Amazon's S3 is making website hosting reasonable for regular folks - here's another example from one of MAKE's kit makers -</p>

<blockquote><a href="http://www.amazon.com/gp/browse.html?node=16427261">Amazon's S3 (Simple Storage Service)</a> isn't new, but its certainly gaining traction. Its a wonderful product for people who have a lot of content on their site (images, video, downloads, pdfs) but not a lot of money. Data storage costs $0.15 per GB-Month (prorated), and $0.20 per GB. No minimums, rounded up to the nearest cent.

<p>...OK so, what's the point and what does this have to do with electronics, eh? Well one of the killer apps of open source and public domain electronics is documentation. That means media. And media storage, backup and transfer is extremely expensive for the everyday person. It becomes increasingly difficult to host a project when one digg-storm or slashdotting makes that 'free' webpage account go down.</blockquote></p>

<p>S3 makes website hosting reasonable again - <a href="http://www.ladyada.net/rant/2007/04/s3-makes-website-hosting-reasonable-again/">Link.</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/04/s3_makes_website_hosting_reaso.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/04/s3_makes_website_hosting_reaso.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/04/s3_makes_website_hosting_reaso.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/04/s3_makes_website_hosting_reaso.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Thu, 05 Apr 2007 23:20:44 -0800</pubDate>

</item>

<item>
<title>GSpace: Sweet Gmail File Transfer Plugin</title>
<itunes:summary> Hackszine reader Abhay Krishna wrote in about a cool Firefox plugin that allows you to drag and drop files into your Gmail account. This extension allows you to use your Gmail Space (2.8 GB and growing) for file storage....</itunes:summary>
<description>
<![CDATA[<p><img alt="gspace_20070322.jpg" src="http://hackszine.com/gspace_20070322.jpg" width="500" height="389" /><br />
Hackszine reader <a href="http://www.ebd.csic.es/">Abhay Krishna</a> wrote in about a cool Firefox plugin that allows you to drag and drop files into your Gmail account.<br />
<blockquote>This extension allows you to use your Gmail Space (2.8 GB and growing) for file storage.  It acts as an online drive, so you can upload files from your hard drive and access them from every Internet capable system. The interface will make your Gmail account look like a FTP host.</blockquote><br />
It's an everywhere-accessible 2.8GB hard disk!</p>

<p>One thing to note is that Gmail accounts sometimes get blocked for 24 hours if excessive amounts of data are being transferred.  Because of this, it's recommended that you don't transfer more than 1GB/day to any particular account.  There's no reason why you couldn't use a few accounts for different purposes, however.</p>

<p>Gmail Space - Firefox plugin by Rahul Jonna and Tnarik -<a href="https://addons.mozilla.org/firefox/1593">Link.</a></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/03/gspace_sweet_gmail_file_transf.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/03/gspace_sweet_gmail_file_transf.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/03/gspace_sweet_gmail_file_transf.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/03/gspace_sweet_gmail_file_transf.html?CMP=OTC-7G2N43923558</guid>
<category>Gmail</category>
<pubDate>Thu, 22 Mar 2007 21:02:04 -0800</pubDate>

</item>

<item>
<title>Mash Up the Hackszine Tag Cloud</title>
<itunes:summary> Love tag clouds? Check out this page, which displays the top 20 search terms that drive people to each O&apos;Reilly domain, including Hackszine. As noted on that page, here are a few things to keep in mind about these...</itunes:summary>
<description>
<![CDATA[<p><img alt="Hackszine Tag Cloud" src="http://hackszine.com/tag_cloud.jpg" width="500" height="218" /></p>

<p>Love tag clouds? Check out <a href="http://www.oreillynet.com/feeds/widgets/organic_search_tagcloud/">this page</a>, which displays the top 20 search terms that drive people to each O'Reilly domain, including <a href="http://www.oreillynet.com/feeds/widgets/organic_search_tagcloud/#DM561011CHDD">Hackszine</a>. As noted on that page, here are a few things to keep in mind about these visualizations:<ul><li>The terms are <em>organic</em>, which means that these are terms that someone typed into a search engine (e.g., Google) and then followed a resulting link. (In contrast to a search term that someone entered into our own search box.)<br />
<li>While the keyword frequency does give some idea of what people are looking for, keep in mind that the word had to already be on our site in order for it to appear, and it had to be ranked highly enough for someone to find it.<br />
<li>These are raw search terms, so similar but slightly different terms will appear twice. For example, "web 2.0" and "web 2" may both appear.</ul>Tired of tag clouds? We'd love to see how you'd process the data. <a href="http://www.oreillynet.com/feeds/widgets/organic_search_tagcloud/organic_search_tagcloud_DM561011CHDD.js">Here's the data for Hackszine</a>, formatted as JSON.</p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/03/mash_up_the_hackszine_tag_clou.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/03/mash_up_the_hackszine_tag_clou.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/03/mash_up_the_hackszine_tag_clou.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/03/mash_up_the_hackszine_tag_clou.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Wed, 07 Mar 2007 05:27:48 -0800</pubDate>

</item>

<item>
<title>Translate SQL Syntax Between Databases</title>
<itunes:summary>SQL::Translator is an interesting Perl module that, among other things, can convert database table definitions to and from several DB platforms. Essentially, this could allow you to write and maintain your table definition code for a single platform, say MySQL,...</itunes:summary>
<description>
<![CDATA[<p>SQL::Translator is an interesting Perl module that, among other things, can convert database table definitions to and from several DB platforms.  Essentially, this could allow you to write and maintain your table definition code for a single platform, say MySQL, and then use Translator to output table structure into Oracle, Sybase, or PostgreSQL dialects.</p>

<p>Manipulation of data, such as SELECT, INSERT, UPDATE and DELETE are not yet supported, so you're still on your own there if you're writing platform agnostic code.  That said, this is an incredibly useful tool.  Just consider this example that Chris Dolan posted on use Perl:</p>

<blockquote>MySQL understands this syntax:

<p>create table book (<br />
  id int,<br />
  author_id int,<br />
  FOREIGN KEY fk_author_id (author_id) REFERENCES author (id)<br />
) TYPE=InnoDB;</p>

<p>but not this nicer syntax (it silently ignores the "references" clause):</p>

<p>create table book (<br />
  id int,<br />
  author_id int references author (id),<br />
) TYPE=InnoDB;</p>

<p>Perl to the rescue! I can write my schema in the latter syntax and use SQL::Translator to rewrite into the supported syntax.<br />
</blockquote></p>

<p><b>References:</b><br />
<ul><li><a href="http://use.perl.org/~ChrisDolan/journal/31813">MySQL foreign key syntax translator</a> (4 line perl script!)</li><li><a href="http://search.cpan.org/dist/SQL-Translator/">SQL::Translator on CPAN</a></li></ul></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/02/translate_sql_syntax_between_d.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/02/translate_sql_syntax_between_d.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/02/translate_sql_syntax_between_d.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/02/translate_sql_syntax_between_d.html?CMP=OTC-7G2N43923558</guid>
<category>Perl</category>
<pubDate>Mon, 26 Feb 2007 00:14:09 -0800</pubDate>

</item>

<item>
<title>Sneakernet: The High Bandwidth Wireless</title>
<itunes:summary> &quot;Never underestimate the bandwith of a station wagon full of tapes hurtling down the highway&quot;-Andrew S. Tanenbaum. We&apos;ve got a really fast connection at work, but I still occasionally run into situations where it&apos;s faster, and often more economical,...</itunes:summary>
<description>
<![CDATA[<p><img alt="sneakernet_20070207.jpg" src="http://www.hackszine.com/blog/archive/sneakernet_20070207.jpg" width="500" height="295" /><br />
"Never underestimate the bandwith of a station wagon full of tapes hurtling down the highway"-Andrew S. Tanenbaum.</p>

<p>We've got a really fast connection at work, but I still occasionally run into situations where it's faster, and often more economical, to overnight data on an external hard disk instead of transfering it over the wire.  Even within the office, if I'm moving a large file from one machine to another, I've found that good 'ol sneakernet can save me a lot of time, especially when other people are using the network.</p>

<p>Jeff Atwood posted a great article on <a href="http://www.codinghorror.com/blog/archives/000783.html">the economics of bandwidth</a> the other day.  He puts some current cost figures towards <a href="http://en.wikipedia.org/wiki/James_N._Gray">Jim Gray's</a> <a href="http://www.acmqueue.com/modules.php?name=Content&pa=showpage&pid=43">2003 ACM interview</a>, in which Jim describes the efficiencies of packing and shipping a whole computer instead of copying a terabyte of data over the net:</p>

<blockquote>It's cheaper to send the machine. The phone bill, at the rate Microsoft pays, is about $1 per gigabyte sent and about $1 per gigabyte received&mdash;about $2,000 per terabyte. It's the same hassle for me whether I send it via the Internet or an overnight package with a computer. I have to copy the files to a server in any case. The extra step is putting the SneakerNet in a cardboard box and slapping a UPS label on it. I have gotten fairly good at that. Tape media is about $3,000 a terabyte. This media, in packaged SneakerNet form, is about $1,500 a terabyte.</blockquote>

<p>According to Jeff's calculations, the effective sneakernet transfer rate for a terabyte of data is about 9.1 MBps at $0.06/GB.  Only an OC-3 would be faster, which costs roughly $0.15/GB for both the sending and receiving end.  Want to send 2 terabytes of data?  Factoring in the extra time to copy to and from the disk, it works out to about 14.6 MBps at about the same cost per GB.  Sneakernet scales.</p>

<p><b>Related:</b><br />
<ul><li><a href="http://www.hackszine.com/blog/archive/2007/02/ununwire_your_home.html">Un-unwire your home</a></li></ul></p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/02/sneakernet_the_high_bandwidth.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/02/sneakernet_the_high_bandwidth.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/02/sneakernet_the_high_bandwidth.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/02/sneakernet_the_high_bandwidth.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Wed, 07 Feb 2007 00:50:43 -0800</pubDate>

</item>

<item>
<title>Automate Your Backups</title>
<itunes:summary> There&apos;s a classic horror story that keeps me from sleeping at night sometimes. I&apos;ve heard it told a few different ways. I&apos;ve even told the story myself more than once, but Phil&apos;s version that he posted yesterday morning was...</itunes:summary>
<description>
<![CDATA[<p><img alt="mooninitehd_20070204.jpg" src="http://www.hackszine.com/blog/archive/mooninitehd_20070204.jpg" width="500" height="250" /><br />
There's a classic horror story that keeps me from sleeping at night sometimes.  I've heard it told a few different ways.  I've even told the story myself more than once, but <a href="http://www.makezine.com/blog/archive/2007/02/500_gb_poof.html">Phil's version</a> that he posted yesterday morning was one of the most frightening:</p>

<blockquote>A couple weeks ago a flood hit my apartment/office area and soaked the desktop system, monitors, equipment *and* back up drive (along with a ton of other stuff) - luckily I have a daily back up on a Powerbook. But, of course the Powerbook decided to completely stop working while at our ETSY event before that could be backed up too. Zapping the PRAM revealed the hard drive failed, so the usual steps of Disk Util, TechTool and then finally drive removal and DiskWarrior were attempted - for the most part the drive seems completely dead - there might be a chance to recover some data under linux, or from a data recovery shop, but it's not looking good.</blockquote>

<p>According his latest update, the backup drives dried out okay and appear to be working fine, so I guess that means he's managed to survive the perfect storm, but it got me thinking - how many of us ever keep a regular, daily backup in the first place?  I've suffered several near-misses in the past, and I'm still guilty of not keeping good backups.</p>

<p><b>Never Again</b><br />
So, February isn't too late for a new year's resolution.  Don't go another day without your important files backed up.  Let's sit down for 15 minutes, right now, and set up an automated backup system for ourselves.  All you need is an external hard disk or a remote server with sufficient storage for a couple copies of your data.  Based on Phil's story, you might want to situate your backup system on an elevated surface and not beneath any water pipes.</p>

<p>We're not focusing on a perfect backup solution here, with off-site, fire proof, vault storage.  Don't let the nay-sayers stop you with the long list of things that can go wrong with a simple back-up solution, or explanations of how to do it the "right way".  In 15 minutes you are going to be significantly more protected from data loss, and this will give you the time you need to relax and find a good price on your fire proof vault.</p>]]>
[&lt;a href="http://www.hackszine.com/blog/archive/2007/02/automate_your_backups.html?CMP=OTC-7G2N43923558" /&gt;Read More&lt;/a&gt;]  
[&lt;a href="http://www.hackszine.com/blog/archive/2007/02/automate_your_backups.html?CMP=OTC-7G2N43923558#comments" /&gt;Comments&lt;/a&gt;]
</description>
<link>http://www.hackszine.com/blog/archive/2007/02/automate_your_backups.html?CMP=OTC-7G2N43923558</link>
<guid>http://www.hackszine.com/blog/archive/2007/02/automate_your_backups.html?CMP=OTC-7G2N43923558</guid>
<category>Data</category>
<pubDate>Mon, 05 Feb 2007 01:14:41 -0800</pubDate>

</item>


</channel>
</rss>