<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-947464157067459524</id><updated>2011-12-22T23:09:45.479-08:00</updated><category term='Comical?'/><category term='Software/Web Development'/><category term='System Administration'/><category term='Events'/><category term='Windows'/><category term='Linux'/><title type='text'>Be Freely</title><subtitle type='html'>Real world implementation open-source software and technology.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-1888630736000474604</id><published>2011-06-30T00:40:00.000-07:00</published><updated>2011-06-30T00:59:39.404-07:00</updated><title type='text'>MacBook revisited</title><content type='html'>A few more hours of trying to make the Mac do my bidding, I've decided to set up a Debian virtual machine to act as a "test server", partly due to the limited availability of open-source software pre-built for OS X. (Yes, I know about Homebrew. It broke the first time I tried it... moving on.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using VirtualBox, the Debian installer (brilliantly) detected that I was installing it in a virtual machine, and thus also installed the package &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;virtualbox-ose-guest-utils&lt;/span&gt;, among others. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately the OSE version of VirtualBox does not include the ability to share filesystems between host and guests, so I elected to replace it. For a number of reasons, a minimal Debian installation doesn't play very nice with the standard (non-OSE) guest additions installer, so I had to find another way...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The short and sweet, for Debian Squeeze...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Add this repository to your &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/apt/sources.list&lt;/span&gt;, if you don't already have it:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Then `apt-get update` and `apt-get install virtualbox-guest-utils`, and reboot the VM.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my case, the shared filesystem was mounted automatically on boot, in &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/media/&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Additionally, the VM was given 3 network interfaces:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Host-only&lt;/li&gt;&lt;li&gt;Bridge to wired ethernet&lt;/li&gt;&lt;li&gt;Bridge to wireless network&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;This has the effect of getting the VM internet access whenever possible, while still making it accessible as though it's a &lt;i&gt;separate&lt;/i&gt; host, even when I'm not actually on a real network - useful for testing web applications. The bridged interfaces also make it available to other machines on my network (in my office), which may not always be preferable, but for now I can see it as a convenience.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OK, now to get something done...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-1888630736000474604?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/1888630736000474604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=1888630736000474604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1888630736000474604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1888630736000474604'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2011/06/macbook-revisited.html' title='MacBook revisited'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3865765278814912766</id><published>2011-06-29T20:50:00.001-07:00</published><updated>2011-06-29T20:52:18.160-07:00</updated><title type='text'>MacBook</title><content type='html'>&lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;My boss recently replaced his old, dying Windows laptop. I'd observed his usage patterns a bit previously, and noted that he keeps a lot of stuff open for very long periods; he'd hibernate multiple times daily, not rebooting for several months on end. He'd regularly have his Windows task-bar 3-rows deep, completely full of running applications, which he avoided closing at all costs.&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;On my recommendation, he bought a MacBook. I figured it would get him the stability of a *nix (backed by Darwin, after all), and the UI would provide him a generally more efficient way to manage his work.&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;That worked so well for him that he decided the company would standardize on MacBooks. As a regular Linux user, I wasn't quite sure what to expect for my own workflow, but I was optimistic. &lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;So far I've reinstalled the OS 3 times, in 2 days, due to various mistakes I've made in setting up the system to my liking. Learning a new system, for engineers (i.e. tinkerers) like me anyway, is bound to include a few mis-steps and whatever work required to recover from them. Fortunately the core OS X installation is reasonably comprehensive, far more complete than Windows could even hope to be.&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;After today's most recent re-installation, I decided it'd be nice to have these things documented for newcomers to the OS X environment. So here's what I've learned...&lt;/p&gt; &lt;ul style="list-style-type: disc"&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;If/when you reinstall, OS X &lt;b&gt;must&lt;/b&gt; be installed on a case-INsensitive filesystem, since some applications will use different cases for the same paths (e.g. /Users/ vs /USERS/).&lt;/li&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Once you enable FileVault encryption, you &lt;b&gt;should not&lt;/b&gt; change your user's "short name", since it prevents you from logging in again. Change your short name first, if necessary.&lt;/li&gt; &lt;/ul&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Customizations to make the transition from Ubuntu (etc) less shocking:&lt;/p&gt; &lt;ul style="list-style-type: disc"&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;In Finder, enable "Show Path Bar" under the View menu&lt;/li&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;In Terminal, create a customized color profile with a transparent background, and set it as default.&lt;/li&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Install MacVim, The Unarchiver, Cyberduck, and Git&lt;/li&gt; &lt;/ul&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Other points of interest...&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul style="list-style-type: disc"&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Enabling Spaces (virtual desktops) is done in the System Preferences, and then switching between then with keyboard is a matter of Control + Left (right, up, down, 1, 2, etc)&lt;/li&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Copy and paste works in the terminal due to the Edit functions being accessed via the Command key, rather than Control&lt;/li&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;There are no programs to let you &lt;i&gt;view&lt;/i&gt; the contents of an archive - every utility I've found, including the built-in ones, require that you extract it entirely first, as far as I can tell... (except `tar` on command-line)&lt;/li&gt; &lt;li style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;Filesystem support on the Mac is limited - it's pretty strictly Mac-format (HFS+) volumes and FAT32 or exFAT. Open-source filesystems like ext3/4 are not supported, from what I see, which is quite disappointing... and requires that I set up a Linux virtual machine in VirtualBox, in order to work on the external HDDs I usually use.&lt;/li&gt; &lt;/ul&gt; &lt;p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Georgia"&gt;So far the learning curve has been notable, but not disastrous, and I think I like the Mac experience, in spite of its shortcomings. We'll see how this pans out...&lt;/p&gt; &lt;p style="margin: 0.0px 0.0px 16.0px 0.0px; font: 16.0px Georgia; min-height: 19.0px"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3865765278814912766?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3865765278814912766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3865765278814912766' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3865765278814912766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3865765278814912766'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2011/06/macbook.html' title='MacBook'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6505532188595626753</id><published>2011-05-21T20:07:00.000-07:00</published><updated>2011-05-21T20:24:34.869-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>Google Chrome Password Export</title><content type='html'>Occasionally Google Chrome crashes. (Surprise!)&lt;br /&gt;&lt;br /&gt;A few times now, it's blown up my profile data, which includes bookmarks and passwords that I &lt;span style="font-weight: bold;"&gt;do not&lt;/span&gt; want to have to look up, reset, etc.&lt;br /&gt;&lt;br /&gt;Passwords are not what I want to burn mental energy on. It's best when my browser can manage them properly, and hopefully the same for bookmarks, etc. Fortunately Google Chrome's sync feature is reasonably reliable, but (being paranoid) I can't afford to have it "accidentally" delete all my saved passwords.&lt;br /&gt;&lt;br /&gt;So I found a way to export them, just in case. Thankfully Chrome uses SQLite databases (extensively), so the data is fairly easy to access.&lt;br /&gt;&lt;br /&gt;On Ubuntu Linux, very simple step-by-step:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;sudo apt-get install sqlite3&lt;/li&gt;&lt;li&gt;sqlite3 -csv ~/google-chrome/Default/Login\ Data 'select * from logins' &amp;gt; chrome-passwd.csv&lt;/li&gt;&lt;/ol&gt;Et voila! Your passwords are now in a format that you can read in any sensible spreadsheet program, should the need arise.&lt;br /&gt;&lt;br /&gt;The passwords were &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; stored encrypted, as far as I could see... I believe Chrome's encryption model for personal data is applied strictly to transport between Chrome and Google's servers. (Please let me know if I'm missing something.)&lt;br /&gt;&lt;br /&gt;You should keep that file safe, given that it contains plaintext passwords. Ubuntu's standard encryption (ecryptfs) is probably fine, but there are lots of options.&lt;br /&gt;&lt;br /&gt;If you're using Windows, you'll have to install SQLite (version 3) and figure out the rest of this process on your own... and if you need encrypted storage, I recommend TrueCrypt. (I'd also recommend ditching Windows, but that's another story...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6505532188595626753?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6505532188595626753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6505532188595626753' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6505532188595626753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6505532188595626753'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2011/05/google-chrome-password-export.html' title='Google Chrome Password Export'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-5113649890114370773</id><published>2011-05-04T19:02:00.000-07:00</published><updated>2011-05-04T19:26:48.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Paranoid filesystem access</title><content type='html'>In some of my work projects, it's necessary to grant filesystem access to our clients and contractors, so they can upload and manipulate data on our servers.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm paranoid. The systems I manage are a tight ship - if you want on the ship,  you will conform to our security requirements. Resistance is futile.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OpenSSH offers a handful of &lt;i&gt;very useful&lt;/i&gt; features in this regard. The following configuration provides some nice features:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Users in the &lt;span class="Apple-style-span" &gt;sftp&lt;/span&gt; group are chroot-ed into their home directories&lt;/li&gt;&lt;li&gt;Users in the &lt;span class="Apple-style-span" &gt;rsync&lt;/span&gt; group can run rsync only within their home directories.&lt;/li&gt;&lt;li&gt;Multiple users in a client's organization can share a home directory&lt;/li&gt;&lt;li&gt;I can switch a user from &lt;span class="Apple-style-span" &gt;sftp&lt;/span&gt;-mode to &lt;span class="Apple-style-span" &gt;rsync&lt;/span&gt;-mode by changing their groups.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Relevant parts of SSH config: &lt;a href="http://pastebin.com/SUQFLVmH"&gt;http://pastebin.com/SUQFLVmH&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Rsync shell wrapper: &lt;a href="http://pastebin.com/HGSfn18H"&gt;http://pastebin.com/HGSfn18H&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;User setup in this environment is slightly trickier, so I've scripted it... highlights:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;mkdir -p /path/to/$GROUP/.ssh&lt;/li&gt;&lt;li&gt;touch /path/to/$GROUP/.ssh/authorized_keys.$USER&lt;/li&gt;&lt;li&gt;groupadd -f $GROUP&lt;/li&gt;&lt;li&gt;chgrp $GROUP /path/to/$GROUP/&lt;/li&gt;&lt;li&gt;useradd -g users -G &lt;span class="Apple-style-span" &gt;sftp&lt;/span&gt; -d /path/to/$GROUP/ -s /bin/bash -c $realname $USER&lt;/li&gt;&lt;li&gt;chown $USER:root /path/to/$GROUP/.ssh/authorized_keys.$USER&lt;/li&gt;&lt;li&gt;chmod 0444 /path/to/$GROUP/.ssh/authorized_keys.$USER&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Some blanks to fill in there for your SSH public keys, etc. Use group '&lt;span class="Apple-style-span" &gt;rsync&lt;/span&gt;' to switch to rsync-mode, rather than '&lt;span class="Apple-style-span" &gt;sftp&lt;/span&gt;'.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So now external users can push data to us, edit files we're hosting for them, etc... and I can still sleep at night, paranoia and sanity still intact.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-5113649890114370773?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/5113649890114370773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=5113649890114370773' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5113649890114370773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5113649890114370773'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2011/05/paranoid-filesystem-access.html' title='Paranoid filesystem access'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-7095971757456968544</id><published>2011-03-29T10:08:00.001-07:00</published><updated>2011-03-29T10:17:30.437-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Synergy</title><content type='html'>I do a fair bit of web development, in various senses. I spend a lot of time testing the same code in various common browsers, and thus have to use multiple operating systems. (This is one of the more annoying parts of such work.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have a netbook that dual-boots Ubuntu and Windows; my main workstation is exclusively Ubuntu. Switching back and forth between the two takes more time and ends up being more frustrating than I like... but last night I found a solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Open-source software saving my sanity once again.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter &amp;lt;&lt;a href="http://synergy-foss.org"&gt;synergy-foss.org&lt;/a&gt;&amp;gt;, a lightweight tool for sharing keyboard and mouse between multiple systems, simulating a multi-monitor setup across multiple physical computers. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The client/server model of it struck me as counter-intuitive at first, but one adapt's... the "server" is the main machine with the keyboard and mouse; "clients" are other machines that behave as extensions on the primary desktop. When a client connects, the server's mouse/keyboard can move between displays as though it's a single (multi-monitor) desktop.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ubuntu's community documentation provides &lt;a href="https://help.ubuntu.com/community/SynergyHowto"&gt;a nice introduction&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Very nice. I may even donate to Synergy's developers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-7095971757456968544?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/7095971757456968544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=7095971757456968544' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/7095971757456968544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/7095971757456968544'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2011/03/synergy.html' title='Synergy'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6120745423591341931</id><published>2011-02-15T12:35:00.000-08:00</published><updated>2011-02-15T15:14:08.296-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Debian Desktop - take 2</title><content type='html'>So I was given this old 1.4ghz Celeron eMachine a few years ago. At the time it has Windows XP, and wasn't worth booting - just inconceivably slow. At some point since then, I installed Debian Lenny on it, and used it for a side project here and there. That worked well.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In prelude, just as "white is the black" or whatever, "Squeeze is the new stable" (har har har).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Recently Debian Squeeze was rolled out, and my Lenny installation was aging anyway. So I burned the recent XFCE install CD, booted it, and began installation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few notes along the way...&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Something about the graphical installer environment doesn't like this hardware. Screen goes all flashy, initiates seizures. In the ISOLINUX boot menu, go to 'Help', and then at the 'boot:' prompt, enter "install vga=791" ... not always the ideal setting, but lets you get to the less-pretty installer anyway.&lt;/li&gt;&lt;li&gt;Squeeze supports EXT 4. Yay!&lt;/li&gt;&lt;li&gt;Disable the Desktop Environment item in the 'tasksel' stage - leave only 'Standard...' option selected. This gives you a viable shell environment to build up a minimal desktop from, if you don't need all the features of a full Debian-style desktop.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Next up, installing packages... login as root locally, after you reboot.&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;apt-get --no-install-recommends openssh-server&lt;/li&gt;&lt;li&gt;apt-get install sudo vim-nox autofs&lt;/li&gt;&lt;li&gt;apt-get install xfce4 xfce4-terminal gdm&lt;/li&gt;&lt;li&gt;apt-get install xfce4-places-plugin xfce4-goodies thunar-archive-plugin thunar-media-tags-plugin thunar-volman thunar-thumbnailers&lt;/li&gt;&lt;li&gt;apt-get install chromium-browser chromium-browser-inspector&lt;/li&gt;&lt;li&gt;apt-get install xrdp vnc4server&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my case I'm using this box as a music manager, so it's useful to have remote desktop options... so I've enabled XDMCP for GDM. On my Ubuntu box, I'm using Xnest to connect to it...&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Xnest :10 -query &lt;debianbox&gt; -sss -geometry 1280x1000&lt;/debianbox&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Alternatively, I've also set up XRDP, so I can access the same desktop from a Windows-based client.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm not 100% decided on which music management software I find most useful, so I'll save that for a later post.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall, I'm quite pleased with Squeeze. The steps outlined here required &lt;i&gt;very minimal&lt;/i&gt; manual configuration, so getting a viable desktop with access to local network resources was quite convenient. Good work Debian!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Updates...&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Added  Thunar plugins and other XFCE conveniences&lt;/li&gt;&lt;li&gt;Added XRDP alternative for Windows-compatible Remote Desktop&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6120745423591341931?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6120745423591341931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6120745423591341931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6120745423591341931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6120745423591341931'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2011/02/debian-desktop-take-2.html' title='Debian Desktop - take 2'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6523840839586155468</id><published>2010-08-12T09:47:00.000-07:00</published><updated>2010-08-13T08:33:14.230-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>Installing WordPress in a Subdirectory</title><content type='html'>If others have posted about this already, I couldn't find it last night.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We're converting a domain for a client from hosting some demo content to hosting a WordPress site. In the process, we need to keep the previous URLs valid, but let WP provide the document-root. I also like to keep things organized, so WP will live in its own directory (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/WP&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, extract WordPress to the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/WP&lt;/span&gt; directory, and update its configuration per &lt;a href="http://codex.wordpress.org/Installing_WordPress"&gt;the manual&lt;/a&gt;. Your life will be easier if you &lt;b&gt;STOP&lt;/b&gt; before step 6 (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;install.php&lt;/span&gt;), and setup these rewrite rules first...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For this situation we have two &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;.htaccess&lt;/span&gt; files.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One at the document root... &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# /var/www/default/.htaccess&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;ifmodule&gt;&lt;/ifmodule&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteEngine On&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteBase /&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# by default, /wp-admin redirects to the full&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# path to /wp-admin/ - in this case /WP/wp-admin/&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# which is BAD, and breaks login.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# this rewrite preempts that by adding the&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# trailing slash, so that wp-admin goes directly&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# to login without the path&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteRule ^(.*)wp-admin$ $1wp-admin/ [R=302,L]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;div&gt;# Shortcut for directory index&lt;/div&gt;&lt;div&gt;RewriteRule ^$ /WP/ [PT,L]&lt;/div&gt;&lt;div&gt;RewriteRule ^/$ /WP/ [PT,L]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# Pass all non-file queries to WordPress&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteCond %{REQUEST_FILENAME} !-f&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteRule ^(.*)$ /WP/$1 [PT]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And one for WordPress...&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# /var/www/default/WP/.htaccess&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# managed by WP, essentially its default&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# BEGIN WordPress&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;ifmodule&gt;&lt;/ifmodule&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteEngine On&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteBase /&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteRule ^index\.php$ - [L]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteCond %{REQUEST_FILENAME} !-f&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteCond %{REQUEST_FILENAME} !-d&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;RewriteRule . /index.php [L]&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# END WordPress&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;OK, you can now proceed with step 6 on &lt;a href="http://codex.wordpress.org/Installing_WordPress"&gt;the manual&lt;/a&gt; - install, without using &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/WP&lt;/span&gt; in the URL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;(2010-08-13: update for directory index shortcuts)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6523840839586155468?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6523840839586155468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6523840839586155468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6523840839586155468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6523840839586155468'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/08/installing-wordpress-in-subdirectory.html' title='Installing WordPress in a Subdirectory'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-9107789367530217908</id><published>2010-07-26T15:47:00.000-07:00</published><updated>2010-07-26T16:05:41.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>Debian Desktop</title><content type='html'>Thus begins a series on &lt;span style="font-style: italic;"&gt;how&lt;/span&gt; to do &lt;span style="font-style: italic;"&gt;what&lt;/span&gt; I do to set up a Debian desktop.&lt;br /&gt;&lt;br /&gt;In this case, I'm setting up my IBM ThinkPad R51 (1830). This is a 5-6yr old laptop that's been running Ubuntu for a long time. Ubuntu served me well, but I'm exploring some alternatives of late since I've got a workstation that better suits my professional needs.&lt;br /&gt;&lt;br /&gt;This will address the procedures at a fairly high level, assuming you know plenty about managing a Debian system. Other people have documented the myriad relevant subjects, so I'll skip most of it here. Read instructions where links are provided.&lt;br /&gt;&lt;br /&gt;So, for today...&lt;br /&gt;&lt;br /&gt;Start with the &lt;a href="http://debian.osuosl.org/debian-cdimage/5.0.5/i386/iso-cd/debian-505-i386-xfce+lxde-CD-1.iso"&gt;Debian 5.0.5 XFCE installer&lt;/a&gt;. Backup your data first, then boot from this CD and proceed with installation. Partition it like so:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;256mb for /boot, ext3&lt;/li&gt;&lt;li&gt;1.5gb for swap&lt;/li&gt;&lt;li&gt;12gb for /, ext3&lt;/li&gt;&lt;li&gt;remainder (~25g) for /home, ext3&lt;/li&gt;&lt;/ul&gt;Proceed with installation as instructed.&lt;br /&gt;&lt;br /&gt;When the system reboots, log in, configure the desktop to your liking.&lt;br /&gt;&lt;br /&gt;For networking, this ThinkPad uses the ipw2200 firmware. &lt;a href="http://wiki.debian.org/ipw2200"&gt;Install it&lt;/a&gt; and relevant configuration tools.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Add non-free to your standard debian sources.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://backports.org/dokuwiki/doku.php?id=instructions"&gt;Add backports repository&lt;/a&gt;. You probably don't need to worry about pinning.&lt;br /&gt;&lt;/li&gt;&lt;li style="font-style: italic;"&gt;echo 'options ipw2200 led=1' | sudo tee -a /etc/modprobe.d/ipw2200.conf&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;apt-get update; apt-get install firmware-ipw2x00 wicd&lt;/span&gt;&lt;/li&gt;&lt;li&gt;reboot or &lt;span style="font-style: italic;"&gt;modprobe ipw2200&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;A few more desktop niceties:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;apt-get install human-icon-theme xfce4-{places-plugin,utils} thunar-{archive,media-tags}-plugin thunar-{thumbnailers,volman}&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Tools for synchronizing my work on multiple systems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;apt-get install rsync unison git-core&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Tools for web development:&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;apt-get install iceweasel-{firebug,webdeveloper} flashplugin-nonfree&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And... that's it for now. That much gets me to a point where I can surf and post blog updates like this ;) More will be forthcoming as I figure out what else I want to do on this system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-9107789367530217908?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/9107789367530217908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=9107789367530217908' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/9107789367530217908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/9107789367530217908'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/07/debian-desktop.html' title='Debian Desktop'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-8760013053260586015</id><published>2010-07-26T14:51:00.000-07:00</published><updated>2010-07-26T15:10:44.594-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>ISP Linux Mirrors</title><content type='html'>Ubuntu has been my stand-by for a few years, since my laptop was my primary workstation as well. Recently, due to some hardware upgrades, I've begun using a proper workstation with dual-monitors (and a resolution higher than 1024x768, finally!!!). &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I tried a couple of distro hops, trying Source Mage and Gentoo (as I do on my servers) but today realized that the amount of work needed to make a source-based distribution as featureful as Ubuntu on my laptop would take an insane amount of work. It'd be possible, just not feasible with my currently very limited spare time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the process I stumbled across a familiar name in the list of Debian mirrors: &lt;i&gt;frontiernet&lt;/i&gt;. I've also recently switched to Verizon FIOS, which sold me to Frontier communications - my new ISP.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After a few minutes research, I discovered that &lt;a href="http://mirror.frontiernet.net"&gt;my ISP hosts CentOS, Debian, Ubuntu, and OpenBSD&lt;/a&gt;. Brilliant! And a little testing confirms that it's a bit faster than my previous preference: &lt;a href="http://osuosl.org"&gt;OSU OSL&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good stuff. In my opinion, ISPs should do more of this - as the customer's use of FOSS would reduce malware traffic (including Windows Update) on their networks and improve overall security.  Seems like an ethical move to me.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-8760013053260586015?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mirror.frontiernet.net/' title='ISP Linux Mirrors'/><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/8760013053260586015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=8760013053260586015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8760013053260586015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8760013053260586015'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/07/isp-linux-mirrors.html' title='ISP Linux Mirrors'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3846330033227464242</id><published>2010-06-17T22:01:00.001-07:00</published><updated>2010-06-17T22:21:01.641-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Data Extraction (packed EXE)</title><content type='html'>I don't often blog about Windows stuff. I try to avoid Windows. This is an exception.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some time ago I received a slideshow in an EXE. It was meant for previewing images before printing. Since then I've occasionally wanted digital copies of the images in it, but never had the time/patience to dig into it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tonight I found the gusto and made it happen. Here's how...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Try opening the file in 7-zip or Resource Hacker. If both complain, it's probably packed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Determine the packing method used on the EXE. A common packing method is UPX, which has a free tool to pack/unpack the data.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mine was packed using aspack. I discovered this by peering through the binary data of it. (Not for the weak of heart.) A quick way to check this: on a Linux machine, 'grep aspack yourfile.exe'.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unpack your file. UPX makes it easy, as stated. For me, I found a tool called 'aspackdie' (version 1.3d) which seemed to like the file. It reported that the file was packed using ASPack 2.12, and reported that it appended "extra data" at address 046DD740h - to a destination file, unpacked.ExE. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I then opened it in WinHex, moved to that address (measured from the end of the file!), and specified that ending section of the file as a "block". I instructed WinHex to look for audio and photo files in various formats, within that range, and to look at every byte in the file. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;About 10 minutes later, I had 1200+ photos waiting for me to inspect... which I promptly archived, along with the original presentation, to a CD.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3846330033227464242?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3846330033227464242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3846330033227464242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3846330033227464242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3846330033227464242'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/06/data-extraction-packed-exe.html' title='Data Extraction (packed EXE)'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6962996488689186264</id><published>2010-06-09T15:03:00.000-07:00</published><updated>2010-06-09T15:21:33.270-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Xbox360 USB Storage</title><content type='html'>Anyone who bought an Xbox 360 with the original "20gb" release of harddrives knows that they're restrictively low on capacity. This is made worse by the Xbox's system caching procedures (etc), so ultimately you're left with about 14gb of user space on the drive. If you play more than a dozen games, each of which have updates downloaded from Xbox Live, your drive fills up very quickly.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd been getting nervous about it, thinking I'd have to go drop some exorbitant amount of money on an over-priced, Microsoft-branded harddrive, when they decided to enable storage of Xbox data on USB drives. Since I've got a couple spares lying around, I opted to try it out. Here's what I've learned...&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The Xbox 360 supports only one partition per USB drive, and it should be FAT32.&lt;/li&gt;&lt;li&gt;Extra partitions can still exist on the drive, for use on other computers, but only the first is used/recognized by the Xbox.&lt;/li&gt;&lt;li&gt;If you provide an un-partitioned drive, the Xbox 360 will create a filesystem filling the entire drive - which breaks on some systems. &lt;i&gt;I recommend pre-partitioning it&lt;/i&gt;. &lt;/li&gt;&lt;li&gt;When the Xbox 360 "configures" the drive, it creates a directory and occupies/reserves 16gb (or however much you select) for itself - in chunks, since FAT32 doesn't support more than 2gb per file very well.&lt;/li&gt;&lt;li&gt;The remainder of the space on that partition is available for you to store music, videos, etc - but you'll have to do that from your PC.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;While I think Microsoft is (per usual) playing the tyrant with it's 16gb limit, this feature is at least a marginal improvement. It's significant enough for me that I appreciate it. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The technical (filesystem) requirements are specific, but not terribly unreasonable, since the practical benefit of using such a harddrive with an Xbox 360 pretty much ties the drive to the Xbox. Most users shouldn't be too hassled with it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Improvements I wish Microsoft would make:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Remove the hokey 16gb limit - it's not a technical limitation, it's a marketing decision.&lt;/li&gt;&lt;li&gt;Allow games to be installed on the drive &lt;b&gt;completely&lt;/b&gt;, not requiring the disc to be present. I don't mind tying the installation to my hardware and the disc (jointly), but I &lt;i&gt;want&lt;/i&gt; the &lt;i&gt;convenience&lt;/i&gt; of playing without inserting the disc at all!&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;That's it for now. I'll be playing with my new expanded Xbox 360 storage if anyone needs me...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6962996488689186264?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.xbox.com/en-US/hardware/accessories/storage/' title='Xbox360 USB Storage'/><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6962996488689186264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6962996488689186264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6962996488689186264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6962996488689186264'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/06/xbox360-usb-storage.html' title='Xbox360 USB Storage'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6091605664232575914</id><published>2010-04-09T16:00:00.000-07:00</published><updated>2010-04-24T23:28:18.701-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>NAS Setup</title><content type='html'>Long story short, I'm transitioning a small company &lt;i&gt;away&lt;/i&gt; from a full-featured server. (The old server is showing its age, and the domain authentication introduced too many complications for this client.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Instead, we're using two NAS devices for two different sites, which will synchronize nightly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Each one is composed of:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;1x &lt;a href="http://www.amazon.com/Synology-DiskStation-Diskless-Network-Attached/dp/tech-data/B002VUCCV2/ref=de_a_smtd"&gt;Synology DS410j&lt;/a&gt; NAS unit&lt;/li&gt;&lt;li&gt;4x &lt;a href="http://www.amazon.com/Seagate-Barracuda-7200RPM-Internal-ST31000528AS-Bare/dp/B00272NHOK/ref=sr_1_1?ie=UTF8&amp;amp;s=electronics&amp;amp;qid=1270876102&amp;amp;sr=1-1"&gt;Seagate Barracuda 1TB&lt;/a&gt; drives (firmware CC38)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I ordered them from Amazon. I used to be a NewEgg fan, but these days Amazon tends to have slightly lower prices, and NewEgg has goofed up enough orders to frustrate me.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So a quick summary of the set-up process...&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Install the drives in the Synology unit&lt;/li&gt;&lt;li&gt;Download the latest software from &lt;a href="http://www.synology.com/support/download.php"&gt;Synology&lt;/a&gt; (for your OS)&lt;/li&gt;&lt;li&gt;Install the Synology Assistant, which should find your device on the network&lt;/li&gt;&lt;li&gt;Upload the DSM "firmware" to the device, configure as needed&lt;/li&gt;&lt;li&gt;Log into the device via your browser (port 5000 on mine)&lt;/li&gt;&lt;li&gt;Configure it further, and set up (initialize) the drives&lt;/li&gt;&lt;li&gt;Start pushing data to it&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The "firmware" upload took about ten minutes, and the drive initialization is taking... something on 7 hours so far. While waiting for the drives initialization, I decided to investigate the device a bit. &lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As far as I can tell, the "firmware" is actually a 110mb tarball of the embedded Linux installation that drives this device, which gets extracted to the installed drives.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Port scan results (after some configuration) with notable items emphasized:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;PORT     STATE SERVICE     VERSION&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;22/tcp   open  ssh         OpenSSH 5.2 (protocol 2.0)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;80/tcp   open  http        &lt;b&gt;Apache&lt;/b&gt; httpd 2.2.13 ((Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k PHP/5.2.12)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;111/tcp  open  rpcbind&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;139/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;445/tcp  open  netbios-ssn Samba smbd 3.X (workgroup: WORKGROUP)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;2049/tcp open  rpcbind&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;5000/tcp open  http        Apache httpd 2.2.13 ((Unix) mod_ssl/2.2.13 OpenSSL/0.9.8k)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;5432/tcp open  postgresql  &lt;b&gt;PostgreSQL DB&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;MAC Address: 00:11:32:02:B8:XX (Synology Incorporated)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Via SSH, some other (technical) observations:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;uname: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Linux Synology 2.6.24 #1141 Sat Mar 13 00:51:39 CST 2010 armv5tejl unknown&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;RAID and volume management: Linux &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;mdadm&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;lvm&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;Web servers: Apache and Lighttpd&lt;/li&gt;&lt;li&gt;Databases: PostgreSQL and MySQL&lt;/li&gt;&lt;li&gt;Media services: mt-daap, vlc&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Root password seems to be the same as the &lt;i&gt;admin&lt;/i&gt; user's, so you can SSH in as root as soon as the service is enabled.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It looks like the system allocates about 3gb on each drive for its "firmware" and user settings, mirrored across each drive (2x RAID 1 arrays). The device blocks on volume creation (initialization) while mdadm is syncing them, and lots of configuration options require the volume to exist. This results in a total setup time of about 8 hours.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The primary volume that it automatically allocates consumes the &lt;i&gt;entire&lt;/i&gt; remaining drive space, which is likely OK for most users. In my situation it automatically set up a RAID 5 array with (the remaining space on) all 4 drives. I like that. Advanced Linux geeks can adjust the volume allocation, since the system provides &lt;i&gt;resize2fs&lt;/i&gt; and the usual suite of LVM tools - though at this point I don't see myself needing that, since the device uses &lt;a href="http://en.wikipedia.org/wiki/Ext3"&gt;ext3&lt;/a&gt; - very high limits on the size and number of files in the filesystem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The setup process took something like 10 hours after all. I don't know exactly, because I decided to go to bed around 80% completion. Best to do the next one overnight.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Data transfer to this device is a little bit disappointing. I have it on a 100MB ethernet line, which usually gives me 10-12mb/s of real transfer on other machines. On this device, using rsync (regardless of compression) I get around 7mb/s; piped through SSH, only 3-4. As far as I can tell this is due to the rather light processing capacity of the ARM processor it uses.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Still, I'm satisfied with this device and the functionality it provides - especially rsync and NFS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;An eventual update - after a few days of working with the system...&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm still pleased with these devices. They do their jobs pretty darn well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Network backup in our environment has proven to be a little bit tricky though. On one end of the backup flow, we have an existing infrastructure requiring standard rsync and ssh ports.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The set up is a little bit convoluted though, so I'm &lt;a href="https://sites.google.com/a/befreely.dyndns.org/twenty3nineteen/tips-tricks/linux-administration/synology"&gt;documenting it elsewhere&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'd also recommend the use of the &lt;a href="http://forum.synology.com/wiki/index.php/Installing_bootstrap_for_the_armmarvell_models"&gt;optional software packages&lt;/a&gt; maintained by NSLU2-Linux. For the Synology devices I've used, &lt;a href="http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/syno-mvkw-bootstrap_1.2-7_arm.xsh"&gt;this script&lt;/a&gt; is the right one. Most useful to me is the 'fdupes' tool, which finds duplicate files and lets you delete them - nice for saving space.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One thing I miss is 'unison' - a 2-way synchronization tool... like rsync, only smarter about changes occuring in multiple sources. The optional packages don't include it, sadly, so I'm pursuing another route: from one primary workstation, rsync &lt;b&gt;&lt;i&gt;to&lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; the Synology device - and have all the other workstations/laptops sync with the workstation via Unison.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Another day...&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;So here's where the rubber hits the road. I brought the on-site device to the business location for the initial deployment. On arrival, I discovered the wireless network wasn't operating properly, and on further investigation, that the router was basically toast. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The next morning, I went to pick up a replacement, only to discover then that it didn't support any sensible DNS services (or DHCP reservation for that matter) - I don't recommend the Linksys BEFRS81.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'm on a tight schedule though, so I move ahead and let that one play in the back of my mind. After setting up some other hardware, I realized I could set up DNSMasq using the optional software kit. I'm familiar with DNSMasq in my home network, and it serves me well there - so I deployed it here, and disabled the DHCP features of the router. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Good stuff. Right now I'm very thankful for open-source software and platforms that remain open to customization.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6091605664232575914?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6091605664232575914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6091605664232575914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6091605664232575914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6091605664232575914'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/04/nas-setup.html' title='NAS Setup'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-8876286086614135392</id><published>2010-04-01T13:41:00.001-07:00</published><updated>2010-04-01T14:12:00.742-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Network Archival</title><content type='html'>Today's wonderful Linux utilities: &lt;a href="http://squashfs.sourceforge.net/"&gt;SquashFS&lt;/a&gt;, &lt;a href="http://nfs.sourceforge.net/"&gt;NFS&lt;/a&gt;, and &lt;a href="http://tldp.org/HOWTO/Automount.html"&gt;automount&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you use Linux, you probably know about tarballs: archived collections of files, usually compressed using &lt;a href="http://www.gzip.org/"&gt;Gzip&lt;/a&gt; or &lt;a href="http://www.bzip.org/"&gt;Bzip2&lt;/a&gt;. SquashFS takes those to the next level.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The highlights for SquashFS:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Threaded, so it can take advantage of modern multi-processor hardware.&lt;/li&gt;&lt;li&gt;Duplicate file detection, optimizing net compression.&lt;/li&gt;&lt;li&gt;Replicates all filesystem metadata (by default)&lt;/li&gt;&lt;li&gt;Mountable archives, so they can integrate &lt;b&gt;directly&lt;/b&gt; into your filesystem&lt;/li&gt;&lt;li&gt;NFS-exportable. (Oh, and NFS rocks too!)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;In combination with NFS and automount, SquashFS just makes my day.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I archive all kinds of stuff, and SquashFS generates near-optimal results, ensuring that the result consumes the minimum space on disc. (The result is read-only, mind you, but that's great for backups.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With NFS and automount, I can list specific directories in my automount pool, over the network (NFS), and the archives are automatically visible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;span&gt;&lt;span&gt;Some configuration samples...&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;# /etc/auto.squashfs.loop&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;* -fstype=squashfs,ro,loop  :/srv/autofs/&amp;amp;.squashfs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;# /etc/auto.master&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;/media/loop/sq /etc/auto.squashfs.loop --timeout=30 --ghost&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;# /etc/exports&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;/media *.local(rw,async,crossmnt,no_subtree_check)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;The result: from other workstations:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;blockquote&gt;$ mount storage:/media /mnt/storage&lt;br /&gt;$ ls /mnt/storage/loop/sq/archive&lt;br /&gt;&lt;i&gt;[ directory listing within the archive.squashfs ]&lt;/i&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;When I want to add a new directory, I just drop it in /srv/autofs on my storage machine - et voila, everyone in my network can peer into it, while disc consumption remains minimum.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Linux making my day as usual... &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-8876286086614135392?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/8876286086614135392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=8876286086614135392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8876286086614135392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8876286086614135392'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/04/network-archival.html' title='Network Archival'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-1678422718968905475</id><published>2010-02-07T23:35:00.001-08:00</published><updated>2010-02-07T23:53:15.561-08:00</updated><title type='text'>Ode to SSH</title><content type='html'>Dearest &lt;a href="http://openssh.org/"&gt;SSH&lt;/a&gt;,&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"Have I told you lately, that I [SSH] you?"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You encrypt my shell sessions.&lt;br /&gt;You forward my TCP ports.&lt;br /&gt;You proxy my HTTP sessions.&lt;br /&gt;You compress my various tunneled applications. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now is one of those moments when I reflect on how much benefit I get from a particular open-source project. Sometimes it's awk, Linux in general, etc... this time it's SSH.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of the things I use SSH for:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Secure terminal access to my servers (obviously)&lt;/li&gt;&lt;li&gt;Accessing my music archives from afar (DAAP over SSH)&lt;/li&gt;&lt;li&gt;Remote Desktop, only much safer (RDP over SSH)&lt;/li&gt;&lt;li&gt;Safely administering remote databases (MySQL over SSH)&lt;/li&gt;&lt;li&gt;Safer browsing from other networks - hotels, coffee shops, etc (SOCKS proxy via SSH)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;My working environment, with the benefit of SSH:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Using GNU Screen, I can resume my work anywhere.&lt;/li&gt;&lt;li&gt;With vim, I can have a sensible programming environment on very low bandwidth&lt;/li&gt;&lt;li&gt;Git lets me push code around between several machines efficiently&lt;/li&gt;&lt;li&gt;Rsync (or unison) lets me synchronize and maintain file systems very conveniently&lt;/li&gt;&lt;li&gt;I issue updates and test code (mostly web apps) from anywhere, as though I were on site&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Very rarely do I have to think about security - my SSH configuration lets me focus on business, rather than logistics. (Mind you, I had to think about it in order to set it up the first time, but once it's done, it's wonderful.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Dearest &lt;a href="http://openssh.org/"&gt;SSH&lt;/a&gt;, Thank you.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-1678422718968905475?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/1678422718968905475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=1678422718968905475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1678422718968905475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1678422718968905475'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2010/02/ode-to-ssh.html' title='Ode to SSH'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-726036260990231297</id><published>2009-12-22T08:25:00.000-08:00</published><updated>2009-12-22T08:50:18.655-08:00</updated><title type='text'>Gentoo won't boot!</title><content type='html'>I recently moved from Spokane to Portland. In all the chaos of finishing some things for my work, disassembling my home-office, and putting it all in a moving truck, etc, I neglected one critical element...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had installed an update to &lt;a href="http://gentoo-portage.com/sys-fs/udev"&gt;sys-fs/udev &lt;/a&gt; which required kernel 2.6.27 or later, while the most-recent kernel I've got installed/compiled/etc is 2.6.25 (plus a couple others which were fubar). I had neglected to keep a recent kernel in working condition.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gentoo users/admins will see the problem immediately (and probably shouldn't read the rest of this post, since it's not terribly magical).&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Old kernel: udev won't run, so it won't see devices, especially my RAID array.&lt;/li&gt;&lt;li&gt;Newer kernels don't work at the moment&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So I'm pretty much stuck. (If anyone can imagine a Windows machine in this situation and suggest a way to fix such a problem on Windows, I'd love to hear it...)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fortunately I already had the sources for 2.6.31 on my server's filesystem, so I dug out a copy of System Rescue CD (somewhat aged), booted the server, mounted the RAID devices in their appropriate locations, and chroot-ed into my server's filesystem.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then I:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Took a snapshot of /boot and /lib/modules&lt;/li&gt;&lt;li&gt;Copied the System Rescue CD's kernel config (/proc/config.gz) into my new kernel directory (/usr/src/linux/)&lt;/li&gt;&lt;li&gt;Used 'make oldconfig' and 'make menuconfig' to bring it up-to-date and fine-tune it a bit.&lt;/li&gt;&lt;li&gt;Use genkernel to build the new kernel and initramfs (including RAID/LVM tools) and install them&lt;/li&gt;&lt;li&gt;Adjust my GRUB configuration, reboot, voila!&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Mind you, at this point the kernel config wasn't optimal or terribly awesome, just functional. I'm currently in the process of tuning it further.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So... that's how Linux saved my sanity today.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-726036260990231297?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/726036260990231297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=726036260990231297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/726036260990231297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/726036260990231297'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/12/gentoo-wont-boot.html' title='Gentoo won&apos;t boot!'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6936091101064518174</id><published>2009-12-04T14:26:00.000-08:00</published><updated>2009-12-04T14:27:01.387-08:00</updated><title type='text'>Time Management Matrix</title><content type='html'>&lt;div&gt;So, in the last year I picked up use of &lt;a href="http://www.orgcoach.net/timematrix.html"&gt;Covey's Time Management Matrix&lt;/a&gt; (thanks to the recommendation of my previous boss).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;It works great on a whiteboard, but I've always wanted a web app to do it.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So I set up a Google Spreadsheet to help me out. Here's how...&lt;br&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create a new spreadsheet.&lt;/li&gt;&lt;li&gt;Rename the first sheet 'Entries'&lt;/li&gt;&lt;li&gt;Create a new sheet called 'Matrix'&lt;/li&gt;&lt;li&gt;On the 'Entries' sheet, label three columns:&lt;ul&gt;&lt;li&gt;Name&lt;/li&gt;&lt;li&gt;Importance&lt;/li&gt;&lt;li&gt;Urgency&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Create some example entries (see screenshots below)&lt;/li&gt;&lt;li&gt;Go back to the 'Matrix' sheet&lt;/li&gt;&lt;li&gt;Fill the cells in like so:&lt;blockquote class="Apple-style-span" style="font-family:'courier new';"&gt;&lt;br /&gt;A2: =SORT(FILTER(Entries!$A$2:$C$100, Entries!$B$2:$B$100 &amp;gt;= 5, Entries!$C$2:$C$100 &amp;gt;= 5); 2; 0; 3; 0  )&lt;br /&gt;D2: =SORT(FILTER(Entries!$A$2:$C$100, Entries!$B$2:$B$100 &amp;gt;= 5, Entries!$C$2:$C$100 &amp;lt; 5); 2; 0; 3; 0)&lt;br /&gt;A14: =SORT(FILTER(Entries!$A$2:$C$100, Entries!$B$2:$B$100 &amp;lt; 5, Entries!$C$2:$C$100 &amp;gt;= 5); 2; 0; 3; 0)&lt;br /&gt;D14: =SORT(FILTER(Entries!$A$2:$C$100, Entries!$B$2:$B$100 &amp;lt; 5, Entries!$C$2:$C$100 &amp;lt; 5); 2; 0; 3; 0)&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Cells A1:C1, D1:F1, A13:C13, and D13:F13 are left for labeling each section - and can be merged sensibly.&lt;/li&gt;&lt;li&gt;I recommend marking borders along the right-hand side of column C, and the top of row 13 - for clarity.&lt;/li&gt;&lt;li&gt;Also, columns B, C, E, and F can be shrunk to improve usability, since they contain integers 1-10.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;And... that should be it! Create task entries, assign importance and urgency, and it should automatically appear in the appropriate quadrant on the Matrix sheet.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Screenshots:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SxmKkffn-QI/AAAAAAAAAnQ/P_FRl3zcNac/s1600-h/Task+Matrix.png"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 142px;" src="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SxmKkffn-QI/AAAAAAAAAnQ/P_FRl3zcNac/s200/Task+Matrix.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5411508786796427522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SxmKkPec3TI/AAAAAAAAAnI/0Ctz2A1FUAA/s1600-h/Task+Entries.png"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 143px;" src="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SxmKkPec3TI/AAAAAAAAAnI/0Ctz2A1FUAA/s200/Task+Entries.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5411508782496537906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6936091101064518174?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6936091101064518174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6936091101064518174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6936091101064518174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6936091101064518174'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/12/time-management-matrix.html' title='Time Management Matrix'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Jdr_JFnXWYs/SxmKkffn-QI/AAAAAAAAAnQ/P_FRl3zcNac/s72-c/Task+Matrix.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3094386129452182481</id><published>2009-11-19T10:55:00.000-08:00</published><updated>2009-11-19T11:58:38.775-08:00</updated><title type='text'>Compact Nautilus in Ubuntu</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jdr_JFnXWYs/SwWc15WqaQI/AAAAAAAAAl4/0Dw-9ZQS71U/s1600/nautilus-prefs-behavior.png"&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SwWbunYyVVI/AAAAAAAAAlw/6rV5cacgrRk/s1600/normal.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 128px;" src="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SwWbunYyVVI/AAAAAAAAAlw/6rV5cacgrRk/s200/normal.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5405898152877380946" /&gt;&lt;/a&gt;So, I occasionally note the compact Nautilus view that &lt;a href="http://www.phoronix.net/image.php?id=895&amp;amp;image=fedora_20071024_14_lrg"&gt;Fedora&lt;/a&gt; and similar distros use by default, because it's neat and tidy.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I prefer Ubuntu on my desktops though, which uses the more expanded view, something like this... &lt;/div&gt;&lt;br /&gt;&lt;div&gt;Unfortunately, the &lt;a href="http://projects.gnome.org/nautilus/developers.html"&gt;Nautilus developers&lt;/a&gt; don't make it terribly intuitive to switch between them.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SwWdk9TzBoI/AAAAAAAAAmA/mMhBRvXwnUs/s1600/nautilus-prefs-behavior.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 144px; height: 200px;" src="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SwWdk9TzBoI/AAAAAAAAAmA/mMhBRvXwnUs/s200/nautilus-prefs-behavior.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5405900185986598530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The good news, there are fairly few adjustments to make to get to the compact view (at least in Ubuntu 9.10, for which this is written).&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;First, open Nautilus, go to the Edit menu, select Preferences.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Under the Behavior tab, deactivate "Always open in browser windows". This change does the bulk of the work.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SwWdrJbESrI/AAAAAAAAAmI/iFNcJNYrg-U/s1600/nautilus-prefs-views.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SwWdrJbESrI/AAAAAAAAAmI/iFNcJNYrg-U/s200/nautilus-prefs-views.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5405900292317530802" style="float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 144px; height: 200px; " /&gt;&lt;/a&gt;Then under the Views tab, change the default view to "Compact View", and activate "Text beside icons".&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As far as I can tell, the order of these changes doesn't really matter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's pretty much it!&lt;/div&gt;&lt;br /&gt;The result:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SwWiUV3SKDI/AAAAAAAAAmQ/psCJlxkCdX8/s1600/compact.png"&gt;&lt;img style="float:center; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 129px;" src="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SwWiUV3SKDI/AAAAAAAAAmQ/psCJlxkCdX8/s200/compact.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5405905398078253106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3094386129452182481?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3094386129452182481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3094386129452182481' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3094386129452182481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3094386129452182481'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/11/compact-nautilus-in-ubuntu.html' title='Compact Nautilus in Ubuntu'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Jdr_JFnXWYs/SwWbunYyVVI/AAAAAAAAAlw/6rV5cacgrRk/s72-c/normal.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-1159907246297222471</id><published>2009-10-02T10:13:00.000-07:00</published><updated>2009-10-02T10:42:38.108-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>Off the Shelf</title><content type='html'>Among systems analysts it's commonly understood that if an off-the-shelf product meets the business need, it's faster to develop around that. Start-ups and small operations, in desperate need of revenue in this economy, hazard the failure of their operations if they don't consider development (or deployment) time when deciding technical strategy.&lt;br /&gt;&lt;br /&gt;Being very technically minded, a student of both Computer Science and Management Information Systems (a business degree), I see and experience both sides of this problem. The systems analyst and systems administrator in me wants it fast, easy, reliable, and well-supported. The programmer and entrepreneur in me want the pride of having developed something on my own, intellectual property.&lt;br /&gt;&lt;br /&gt;Open-source products have become particularly interesting to many firms in the last year, as they've had to seek cost savings in IT. (As any of my readers - if I have any - would know, I like that. FOSS is good.) This brings to mind two very important aspects:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;They're seeking "off-the-shelf" products that work, not writing their own&lt;/li&gt;&lt;li&gt;They're trying to save money&lt;/li&gt;&lt;/ol&gt;Writing their own tools usually doesn't save money, since they have to pay the wages of whoever is developing them, and it usually takes longer. (The only exception here is when the off-the-shelf product is a bad fit and requires excessive integration effort.)&lt;br /&gt;&lt;br /&gt;That's a problem for the little guy (start-up), because he (a) doesn't have time, and (b) doesn't have money. He&lt;span style="font-style: italic;"&gt; &lt;span style="font-weight: bold;"&gt;needs&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; &lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;to take advantage of available systems where it's fast and cheap/free.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"A 50%-good solution that people actually have solves more problems and survives longer than a 99% solution that nobody has because it’s in your lab where you’re endlessly polishing the damn thing." [&lt;a href="http://www.joelonsoftware.com/items/2009/09/23.html"&gt;Joel on Software&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(This relates to a situation I'm currently in, where I've repeatedly recommended this off-the-shelf attitude, but it's fallen on deaf ears. I'm quite frustrated by it, but hesitant to say anything directly since it's &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; slowly turning around.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-1159907246297222471?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/1159907246297222471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=1159907246297222471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1159907246297222471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1159907246297222471'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/10/off-shelf.html' title='Off the Shelf'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-5157273048523772610</id><published>2009-06-25T11:08:00.000-07:00</published><updated>2009-06-25T11:26:26.381-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>Google Apps FTW</title><content type='html'>So I'm too busy to set up my own mail server on my home network. Not that it's particularly arduous, just that I have way too much to do anyway.&lt;br /&gt;&lt;br /&gt;A good friend introduced me to Google Apps some time ago. At that time I was too busy to look into it, but recently I got tired of not seeing the output of my cronjobs at home. Thanks to Google, I now get a much better view of my home network's routine operations, with very little work, and no significant maintenance burden.&lt;br /&gt;&lt;br /&gt;(You'll notice a theme there - I'm busy. That's why I rarely post here, I guess.)&lt;br /&gt;&lt;br /&gt;So I've long maintained a &lt;a href="http://dyndns.org/"&gt;dyndns.org&lt;/a&gt; account so that I can refer to my home server(s) by name. I looked into the configuration requirements of Google Apps the other day, and discovered that it's really quite simple:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Register with Google Apps&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add Google's mail exchangers as the MX record on my dyndns account(s)&lt;/li&gt;&lt;li&gt;Post a very small file at the root of my public-facing web server so Google knows its me.&lt;/li&gt;&lt;/ol&gt;et voila! My system logs, cronjobs, and other administrative info are reported via email in a much friendlier fashion.&lt;br /&gt;&lt;br /&gt;Mind you, I've had my servers configured for quite some time to &lt;a href="http://en.gentoo-wiki.zugaina.org/index.php/HOWTO_Gmail_and_sSMTP"&gt;route mail through Google's SMTP system&lt;/a&gt;, since I was originally just passing it to my regular email account. I was missing a lot that way, but not anymore! I've now got accounts (and nicknames) for every system account I use (postmaster, cron, etc), and all collecting in one sensible location.&lt;br /&gt;&lt;br /&gt;I look forward to using Google App's per-domain Docs, as well as Google Sites for this domain, to take notes on what I do for my home network.&lt;br /&gt;&lt;br /&gt;This feels like a major improvement, and pretty light on the work-load.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-5157273048523772610?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://google.com/a/' title='Google Apps FTW'/><link rel='enclosure' type='' href='http://google.com/a/' length='0'/><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/5157273048523772610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=5157273048523772610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5157273048523772610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5157273048523772610'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/06/google-apps.html' title='Google Apps FTW'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-2994972000727021577</id><published>2009-05-19T12:26:00.000-07:00</published><updated>2009-05-21T08:45:32.534-07:00</updated><title type='text'>ATI hardware support</title><content type='html'>So recently we got some new hardware at the office. Some Dell workstations with dual dual-head video cards. Each workstation was to have 4 monitors.&lt;br /&gt;&lt;br /&gt;The video cards had ATI RV630 [FireGL V3600] processors/etc.&lt;br /&gt;&lt;br /&gt;The workstations were to run Ubuntu 9.04.&lt;br /&gt;&lt;br /&gt;Using the proprietary driver, we had no trouble setting them up for single-monitor usage. We even managed to get 4 separate desktops running on each display, but there was &lt;span style="font-weight: bold;"&gt;absolutely no way&lt;/span&gt; to run them in a single-desktop arrangement across all displays. The open-source driver wouldn't generate a real image.&lt;br /&gt;&lt;br /&gt;So that really sucked. I spent a couple days fiddling with them, trying all possible combinations I could think of or could find online. Nothing worked.&lt;br /&gt;&lt;br /&gt;We then pulled the quad-head Nvidia Quadro 440 from my boss's workstation, plugged it in, and in less than 20 minutes had exactly the configuration I was hoping for.&lt;br /&gt;&lt;br /&gt;That was the deciding point right there. &lt;span style="font-weight: bold;"&gt;I will never buy ATI for my Linux systems again.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What cannot be accomplished on ATI in days of investigation and trial/error, can be done simply in 20 minutes on Nvidia.&lt;br /&gt;&lt;br /&gt;Upon further investigation, it turns out the ATI drivers for Windows aren't that much better. They just barely work, from what I hear (and have experienced, though some time ago). I can't help but wonder what prevents ATI from producing quality drivers - lack of funding? lack of talent? I can only speculate.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I guess ATI/AMD doesn't want my money (or that of anyone I advise). Oh well.&lt;br /&gt;&lt;br /&gt;Thanks Nvidia for making my life easier!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-2994972000727021577?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/2994972000727021577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=2994972000727021577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/2994972000727021577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/2994972000727021577'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/05/ati-hardware-support.html' title='ATI hardware support'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-4852778765237717582</id><published>2009-02-27T08:56:00.000-08:00</published><updated>2009-02-27T10:01:58.113-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>Source Control</title><content type='html'>I recently posted my kit of shell scripts to a publicly visible repository, &lt;a href="http://github.com/samba/bashenhance/tree/master"&gt;github.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;These scripts are mostly conveniences, wrapping more complex operations into simple commands, saving session data, automatically cleaning out old junk data, etc. They're not all fully implemented - some are just stubs for future projects - but as it is my life is made easier by them.&lt;br /&gt;&lt;br /&gt;So far I'm quite pleased with GitHub. Its free, friendly, secure, and they have a good backup system with Amazon S3 - excellent for open-source projects. They also offer paid accounts for private repositories, which is great for contributing to friends' closed-source business projects.&lt;br /&gt;&lt;br /&gt;I've recommended to a friend for his business, and it's turning out really well so far.&lt;br /&gt;&lt;br /&gt;That friend isn't so much the technical type - he's certainly adept and has done his share of coding, but he's not an uber-geek like $(yours truly). He's more interested in running the business, as far as I can tell. In discussing his company's engineering needs, the value of a good source control system became apparent to me.&lt;br /&gt;&lt;br /&gt;From a developer's point of view, it gives me a means of undoing mistakes or reviewing changes that introduce bugs, and provides a communication medium to identify and discuss parts of the code - this saves time! From a management point of view, the source control provides a means of securing and preserving intellectual property, gives some idea of a developer's productivity, and (on the basis of time saved) lowers development costs.&lt;br /&gt;&lt;br /&gt;As always, a good backup system (such as GitHub has) also provides disaster recovery options. At the prices GitHub charges for their plans, I can't really justify &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; using such a service - it costs substantially less than doing it myself, and the benefits are outstanding!&lt;br /&gt;&lt;br /&gt;I really wish they would have discussed this in my business and IS classes, and would have made more emphasis in my CS classes. Could likely have saved me some gray hairs through college too...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-4852778765237717582?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com' title='Source Control'/><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/4852778765237717582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=4852778765237717582' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/4852778765237717582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/4852778765237717582'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/02/source-control.html' title='Source Control'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-4954010647047265541</id><published>2009-01-14T21:13:00.000-08:00</published><updated>2009-01-14T21:33:04.904-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Rants'/><title type='text'>It Just Works</title><content type='html'>I'm a software engineer. I make stuff work, it's my job. I get paid for it too, which is nice.&lt;br /&gt;&lt;br /&gt;When I get home, I don't want to muck about with my laptop or most of the other systems on my network. I want them to "just work". I don't want to fix them every few months. They need to be reliable, simple, and low-maintenance.&lt;br /&gt;&lt;br /&gt;That's why I use Ubuntu (among other linuxes). Simple, easy to use, low-maintenance.&lt;br /&gt;&lt;br /&gt;My Windows machines rarely remain stable or responsive for more than 9 months, I find. My most recent installation is no exception - I installed it around August, and it's now showing its age. About half the time, it hangs somewhere in the boot process and never gets to a Windows login screen.&lt;br /&gt;&lt;br /&gt;All of my hardware is a couple years old, cuz I've got more important things to pay for. I've got a Debian box that runs a 1ghz Celeron with 256mb of RAM. My Windows box has 1.7gb of RAM and a 2.4ghz hyperthreading Pentium IV. When Windows successfully boots, my Debian box consistently reaches its login screen a couple minutes sooner than my Windows box does.&lt;br /&gt;&lt;br /&gt;After logging in, my Windows box takes (at best) 3.5 minutes to let me actually start any applications. When I try to start an application, it often doesn't ever render a window - its process appears to be running in Task Manager, but it's not listed in the Applications tab, and it's nonexistent in any other form. After two or three tries starting it, it eventually comes up... but only because I'm a persistent little prick.&lt;br /&gt;&lt;br /&gt;Linux hasn't ever done that to me without an error message of some kind. No mysteries with Linux. It's reliable, it does what I want and need it to do, and usually without complaining. When it does complain, it's an easy fix - install this update, move this file - et voila.&lt;br /&gt;&lt;br /&gt;That's why I use it, and that's why my work is to build Linux-based systems to serve the simpler desktop needs of the common user - email, web, media, productivity - all free, easy, and reliable.&lt;br /&gt;&lt;br /&gt;Amen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-4954010647047265541?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/4954010647047265541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=4954010647047265541' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/4954010647047265541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/4954010647047265541'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2009/01/it-just-works.html' title='It Just Works'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-2254547990700566773</id><published>2008-10-22T15:39:00.000-07:00</published><updated>2008-10-22T16:27:38.129-07:00</updated><title type='text'>ShellQL</title><content type='html'>This is a concept I've been working on, for a few hours per day, for about two days. Not a lot yet.&lt;br /&gt;&lt;br /&gt;In writing a lot of BASH scripting over the last couple months, I've discovered that some of my code could be better expressed in SQL than pipes of sed, awk, cut, etc. Not that these tools aren't great... they're just not always the most effective solution.&lt;br /&gt;&lt;br /&gt;With the classic UNIX tools, string parsing is awfully sensitive, and it can be awkward to throw data around between these tools and shell loops and such.&lt;br /&gt;&lt;br /&gt;So I'm playing with a new idea. Shell Query Language.&lt;br /&gt;&lt;br /&gt;It will simply be an SQL-like interface to common system tasks. At this time, my intent is to implement SELECT-like behaviors first, simply reading stuff from the system, not making changes. Preliminarily I'll also implement an 'exec' feature which simply passes commands to user's $SHELL.&lt;br /&gt;&lt;br /&gt;It'll read files, directories, and the output of programs, and that will be the supported datasets for querying. Directories will be recursive by default, and their queries can be limited using 'depth', 'mindepth', and 'maxdepth' features.&lt;br /&gt;&lt;br /&gt;Am I re-implementing 'ls', 'find', and so many other tools? Yeah it seems I am. Unfortunately I haven't work out a convenient way to translate SQL-like expressions into the the respective calls to these and other common utilities. Ideally I'd rely on them, but I'm not sure yet how.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Originally, 'bashql' was a syntax for polling data from 'ls' and other programs that produced tabular output, as well as file sources, and pushing them through 'awk', 'sed', 'join', 'cut' and so forth, extracting only the desired information. This was to emulate SQL:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;select name from /home/user where size=2k #&lt;span style="font-style: italic;"&gt;implicit depth=0, only select files/directories in the specified dir&lt;/span&gt;&lt;/li&gt;&lt;li&gt;select fullpath from /home where depth=5; #&lt;span style="font-style: italic;"&gt; all files and directories under /home where maxdepth=5 and mindepth=5 (exactly 5 steps down from /home)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As of this morning, I've realized the most effective route here is to implement a shell wrapper at a lower level. BASH simply isn't effective for parsing and manipulating commands at the degree I have in mind - while BASH itself is quite effective for its own purposes, writing a parser &lt;span style="font-weight: bold;"&gt;in&lt;/span&gt; BASH is proving quite difficult.&lt;br /&gt;&lt;br /&gt;This next attempt will be to build a high-level 'SQL-like' parser in Flex and Bison.&lt;br /&gt;&lt;br /&gt;A "table" in this context can be one of the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The output of a program, e.g. 'ps'&lt;/li&gt;&lt;li&gt;A filesystem&lt;/li&gt;&lt;li&gt;File content (of one or multiple files)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The data must be interpretable as some sort of table structure. Text-based tabular data is commonly deliniated via tabs, spaces, and commas. Some data types have complex records, which are expressed over multiple lines and deliniated via other means.&lt;br /&gt;&lt;br /&gt;An example of complex data would be a set of Debian packages, *.deb: each one represents a record, its fields expressed in the control file (accessible via dpkg-deb).&lt;br /&gt;&lt;br /&gt;Shellql will support abstract tabular interpretation functions. Built-in interpreters will support the base filesystem through system calls, and interpretation of text-file content (tab-, space-, and comma-separated).&lt;br /&gt;&lt;br /&gt;To see all available interpreters, SHOW INTERPRETERS would produce something like:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;typename&gt;TblType(dtype arg&lt;type&gt; &lt;arg&gt;[,...])&lt;/arg&gt;&lt;/type&gt;&lt;/typename&gt;&lt;/th&gt;&lt;th&gt;&lt;description&gt;&lt;/description&gt;Description&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Directory(path rootdir)&lt;/td&gt;&lt;td&gt;Recursively examine all file and directory nodes beneath the specified rootdir&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;File(path file, char** IFS)&lt;/td&gt;&lt;td&gt;Read the specified file, use strings/characters from IFS to split the fields&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Command(string command, char** IFS, path shell = $SHELL)&lt;/td&gt;&lt;td&gt;Executes the provided command in a shell, defaulting to $SHELL from the user's environment&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;br /&gt;* IFS represents a set of strings to use to separate fields&lt;br /&gt;&lt;br /&gt;To see all available tables, SHOW TABLES would produce something like:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Alias&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Arguments&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;/home/user&lt;/td&gt;&lt;td style="font-style: italic;"&gt;Directory&lt;/td&gt;&lt;td&gt;path="/home/user"&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;Processes&lt;/td&gt;&lt;td style="font-style: italic;"&gt;Command&lt;/td&gt;&lt;td&gt;command="ps";IFS=" ";shell="/usr/bin/bash"&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-2254547990700566773?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/2254547990700566773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=2254547990700566773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/2254547990700566773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/2254547990700566773'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/10/shellql.html' title='ShellQL'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3225371773719007433</id><published>2008-09-22T22:39:00.000-07:00</published><updated>2008-09-22T22:43:05.130-07:00</updated><title type='text'>Install Windows XP to USB</title><content type='html'>I'm replicating another person's work in this post, as the original draft seemed to be offline at time of posting. (It later became available again.)&lt;br /&gt;&lt;br /&gt;Linked above, &lt;&lt;a href="http://www.ngine.de/article/id/8"&gt;http://www.ngine.de/article/id/8&lt;/a&gt;&gt; is the original source of the work by Emanuel &lt;span class="newsnormal"&gt;&lt;span&gt;&lt;span&gt;Schleussinger.&lt;br /&gt;&lt;br /&gt;I've revised it somewhat, hoping to improve its clarity and usability. My draft: &lt;&lt;a href="http://docs.google.com/Doc?id=ddv4s552_152c78p44dz"&gt;http://docs.google.com/Doc?id=ddv4s552_152c78p44dz&lt;/a&gt;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3225371773719007433?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ngine.de/index.jsp?pageid=4176' title='Install Windows XP to USB'/><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3225371773719007433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3225371773719007433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3225371773719007433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3225371773719007433'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/09/install-windows-xp-to-usb_22.html' title='Install Windows XP to USB'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-5234973112267394049</id><published>2008-07-15T16:19:00.000-07:00</published><updated>2008-07-15T18:04:11.105-07:00</updated><title type='text'>Moved</title><content type='html'>So a few weeks ago I quit my job and moved to Spokane.&lt;br /&gt;&lt;br /&gt;The place we got is great. 2000 square feet, 2 bedrooms, one bath, and lots of living space. A covered garage, and a nice yard with lots of trees. The streets are lined with trees too, an element of which I'm especially fond. Oh, and it's not a dump like our last place - this one is basically fully carpeted, and it's in good condition, and the paint isn't hanging off the walls!&lt;br /&gt;&lt;br /&gt;Got a new job too, which I'm totally appreciating. My last one had some serious drawbacks. This new one is definitely a learning curve though - the subject matter isn't foreign, but the office dynamics and approach to developing solutions is significantly different.&lt;br /&gt;&lt;br /&gt;The subject matter is what's most interesting though - developing management tools for Linux - right up my alley.  ... I'll update this later, gotta get back to work though ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-5234973112267394049?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/5234973112267394049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=5234973112267394049' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5234973112267394049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5234973112267394049'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/07/moved.html' title='Moved'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-6083417873614757575</id><published>2008-07-10T09:22:00.000-07:00</published><updated>2008-07-10T09:36:14.381-07:00</updated><title type='text'>iPod tools</title><content type='html'>So I finally caught up with the times: thanks to the generosity of my in-laws, I now have an iPod.&lt;br /&gt;&lt;br /&gt;Only I don't like that iTunes restricts my capacity to share music with my wife. I can't copy music from my iPod to my computer and then to her iPod. Oh, and iTunes doesn't play nice with converting my collection of videos for some reason.&lt;br /&gt;&lt;br /&gt;So, here are two tools to help with that:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.getsharepod.com/"&gt;SharePod&lt;/a&gt; - lets me manage my music as I please, regardless of iTunes restrictions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://handbrake.fr/"&gt;Handbrake&lt;/a&gt; - lets me convert DVDs and other video formats to iPod-compatible format.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Handbrake is open-source and runs nicely on Linux, Windows, and Mac OS X.&lt;br /&gt;&lt;br /&gt;SharePod is a propietary Windows-based product. I would use `gtkpod` in Linux for this functionality, but its support for 5th generation iPods is limited. SharePod is marginally better, though I've observe a few quirks I'm not entirely fond of.&lt;br /&gt;&lt;br /&gt;I'll keep this updated as I find new tools that better address the problem(s).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-6083417873614757575?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/6083417873614757575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=6083417873614757575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6083417873614757575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/6083417873614757575'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/07/ipod-tools.html' title='iPod tools'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3889225939548160043</id><published>2008-06-13T10:36:00.000-07:00</published><updated>2008-12-12T19:36:19.222-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Switching to Debian</title><content type='html'>Eh, so Ubuntu is great on my laptop.&lt;br /&gt;&lt;br /&gt;Not so great on a lower-end workstation I have at home. It's a 1ghz Celeron with 384mb of RAM. Xubuntu ran pretty well on it, but I got tired of upgrading it every 6 months. So I switched it to Debian Lenny. Seems it was a pretty good move so far.&lt;br /&gt;&lt;br /&gt;I still run XFCE on it. XFCE is great on this system. It's light enough that the system runs reasonably smooth, and yet featureful enough that my wife can navigate it fine. She uses the "guest" account on it though, which automatically logs in after 30 seconds, because it's easy.&lt;br /&gt;&lt;br /&gt;I, of course, customize the interface extensively. These are screenshots of my preferred desktop.&lt;br /&gt;&lt;br /&gt;First, the desktop itself. The top panel: XFCE menu, task list (web browser minimized),  desktop switcher, the drive mounter, the volume control, the system tray, the clock, and window list (for all desktops).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmEzHpbZpI/AAAAAAAAARw/jUF1kkiezas/s1600-h/Empty+Desktop.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmEzHpbZpI/AAAAAAAAARw/jUF1kkiezas/s320/Empty+Desktop.png" alt="" id="BLOGGER_PHOTO_ID_5213344057419064978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The icon dock with a launcher menu, the notepad, icon box, and system meters (network, CPU, RAM, swap).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmFFyhs70I/AAAAAAAAASA/_oOgBl5Tdik/s1600-h/Dock+%2B+Launcher+Menu.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmFFyhs70I/AAAAAAAAASA/_oOgBl5Tdik/s320/Dock+%2B+Launcher+Menu.png" alt="" id="BLOGGER_PHOTO_ID_5213344378167029570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the file manager, Thunar. Nothing too special here. Thunar + associated plugins is a very functional file manager.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SFmFV9_vFDI/AAAAAAAAASI/xaufNwrsGBU/s1600-h/Home+Folder+in+Thunar.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SFmFV9_vFDI/AAAAAAAAASI/xaufNwrsGBU/s320/Home+Folder+in+Thunar.png" alt="" id="BLOGGER_PHOTO_ID_5213344656123696178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The GIMP, which I was using to make these screenshots. (Hadn't discovered the screenshot applet yet.) I also switch to using the small icons theme in GIMP, and group it into a single panel, which I haven't done in this screenshot yet.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SFmE-zwHtMI/AAAAAAAAAR4/qFRztttyNNk/s1600-h/The+Gimp.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SFmE-zwHtMI/AAAAAAAAAR4/qFRztttyNNk/s320/The+Gimp.png" alt="" id="BLOGGER_PHOTO_ID_5213344258236855490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The XFCE menu expanded, notepad with transparency.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SFmGIRfjERI/AAAAAAAAASQ/ET6TdKC2eS4/s1600-h/Desktop+%2B+Browser+%2B+Notes+%28Menu%29.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SFmGIRfjERI/AAAAAAAAASQ/ET6TdKC2eS4/s320/Desktop+%2B+Browser+%2B+Notes+%28Menu%29.png" alt="" id="BLOGGER_PHOTO_ID_5213345520350859538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Three terminals demonstrating transparency and the iconbox in the lower panel.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmPucFSsnI/AAAAAAAAAS4/kldavrF8UvQ/s1600-h/Browser+%2B+3+Terms+%2B+Dock.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmPucFSsnI/AAAAAAAAAS4/kldavrF8UvQ/s320/Browser+%2B+3+Terms+%2B+Dock.png" alt="" id="BLOGGER_PHOTO_ID_5213356071633203826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Consolidated panels. I moved the system monitors and system tray up. Although you can't see it in this shot, there's an auto-hiding panel in the lower-right that contains the icon box listing all windows from all desktops.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SFmGfIWk5ZI/AAAAAAAAASo/VGpPURZ-mrA/s1600-h/Consolidated+Panels.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://4.bp.blogspot.com/_Jdr_JFnXWYs/SFmGfIWk5ZI/AAAAAAAAASo/VGpPURZ-mrA/s320/Consolidated+Panels.png" alt="" id="BLOGGER_PHOTO_ID_5213345913034302866" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3889225939548160043?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3889225939548160043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3889225939548160043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3889225939548160043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3889225939548160043'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/06/switching-to-debian.html' title='Switching to Debian'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Jdr_JFnXWYs/SFmEzHpbZpI/AAAAAAAAARw/jUF1kkiezas/s72-c/Empty+Desktop.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-7895038485077363537</id><published>2008-05-15T10:07:00.000-07:00</published><updated>2008-12-12T19:36:19.843-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Setting up Gedit for Coding</title><content type='html'>So I've become quite accustomed to using 'vim' for my coding. It's &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; flexible with its syntax highlighting features. So far I haven't found any means of autocompletion or code/class/symbol listing - these would be nice features, but I also don't have a real recommendation for how to implement it in 'vim'. [&lt;span style="font-weight: bold;"&gt;Update: &lt;/span&gt;apparently there's a feature, "omnifunc" which does this: &lt;a href="http://amix.dk/blog/viewEntry/19021"&gt;http://amix.dk/blog/viewEntry/19021&lt;/a&gt; - I was wrong.]&lt;br /&gt;&lt;br /&gt;I've therefore started experimenting with Gedit again. I've used it a lot in the past, before I picked up 'vim'. It turns out there are a number of plugins and configuration settings that make it quite useful as a programming environment.&lt;br /&gt;&lt;br /&gt;Basic configuration is not so complicated: enable most everything in the gedit preferences.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jdr_JFnXWYs/SCx5yFQOh_I/AAAAAAAAAQY/U89xCUYJ7Qc/s1600-h/Screenshot-gedit+Preferences-1.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_Jdr_JFnXWYs/SCx5yFQOh_I/AAAAAAAAAQY/U89xCUYJ7Qc/s320/Screenshot-gedit+Preferences-1.png" alt="" id="BLOGGER_PHOTO_ID_5200665571016738802" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SCx5pVQOh-I/AAAAAAAAAQQ/aWtsnTSw0Qc/s1600-h/Screenshot-gedit+Preferences-2.png"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_Jdr_JFnXWYs/SCx5pVQOh-I/AAAAAAAAAQQ/aWtsnTSw0Qc/s320/Screenshot-gedit+Preferences-2.png" alt="" id="BLOGGER_PHOTO_ID_5200665420692883426" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jdr_JFnXWYs/SCx5pFQOh9I/AAAAAAAAAQI/H1RuPZgrLlU/s1600-h/Screenshot-gedit+Preferences.png"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_Jdr_JFnXWYs/SCx5pFQOh9I/AAAAAAAAAQI/H1RuPZgrLlU/s320/Screenshot-gedit+Preferences.png" alt="" id="BLOGGER_PHOTO_ID_5200665416397916114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I sometimes print my code too, for debugging or auditing purposes, so here's my setup...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SCx6XlQOiAI/AAAAAAAAAQg/QW_2WJlMRPQ/s1600-h/Screenshot-Print-1.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SCx6XlQOiAI/AAAAAAAAAQg/QW_2WJlMRPQ/s320/Screenshot-Print-1.png" alt="" id="BLOGGER_PHOTO_ID_5200666215261833218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also enable most of the default plugins (default in Ubuntu anyway):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Change Case&lt;/li&gt;&lt;li&gt;Document Statistics&lt;/li&gt;&lt;li&gt;File Browser Pane&lt;/li&gt;&lt;li&gt;Indent Lines&lt;/li&gt;&lt;li&gt;Insert Date/Time&lt;/li&gt;&lt;li&gt;Modelines&lt;/li&gt;&lt;li&gt;Spell Checker (though this isn't always useful in coding)&lt;/li&gt;&lt;li&gt;Tag List&lt;/li&gt;&lt;li&gt;Text Encryption&lt;/li&gt;&lt;/ul&gt;I then download and install the following 3rd party plugins&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.stambouliote.de/projects/gedit_plugins.html"&gt;Class Browser&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eng.tau.ac.il/%7Eatavory/gedit-plugins/html-tidy/"&gt;HTML Tidy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.micahcarrick.com/11-14-2007/gedit-symbol-browser-plugin.html"&gt;Symbol Browser&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Note that these also have some package dependencies so install them:&lt;br /&gt;&lt;blockquote&gt;sudo apt-get install tidy exuberant-ctags&lt;br /&gt;&lt;/blockquote&gt;More plugins can be found at the &lt;a href="http://live.gnome.org/Gedit/Plugins"&gt;Gedit Plugin page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then just enable the Side Pane under the View menu (or press F9) to use the various navigation tools. I've found the File Browser particularly useful, as it gives me a friendly interface to manage the project hierarchy.&lt;br /&gt;&lt;br /&gt;For fun, a screenshot of this in use:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SCyAOlQOiBI/AAAAAAAAAQo/a4m0HPqRgb8/s1600-h/Screenshot-Message.cpp+%28%7E-Downloads-encrypt%29+-+gedit.png"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_Jdr_JFnXWYs/SCyAOlQOiBI/AAAAAAAAAQo/a4m0HPqRgb8/s320/Screenshot-Message.cpp+%28%7E-Downloads-encrypt%29+-+gedit.png" alt="" id="BLOGGER_PHOTO_ID_5200672657712777234" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-7895038485077363537?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/7895038485077363537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=7895038485077363537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/7895038485077363537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/7895038485077363537'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/05/setting-up-gedit-for-coding.html' title='Setting up Gedit for Coding'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Jdr_JFnXWYs/SCx5yFQOh_I/AAAAAAAAAQY/U89xCUYJ7Qc/s72-c/Screenshot-gedit+Preferences-1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-7944239280887818040</id><published>2008-04-28T17:42:00.000-07:00</published><updated>2008-04-28T22:38:27.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>OOP: Object Oriented Paradigm</title><content type='html'>OK, so in my adventures of building content management systems, particularly in the templating aspects, I've realized a few things...&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We (most humans) think in terms of objects (things) and behaviors, pages and reports; not in terms of XML, regular expressions, formatted strings, blocks, nodes, or queries.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When I'm going to use a system I build, I want it to allow quick creation and modification of a website. It needs to be intuitive and natural.&lt;/li&gt;&lt;/ol&gt;Right now I'm in the middle of trimming down the functions of my template handler (again). I'm using PHP's DOM support to handle the documents, which provides me XPath support. I've discovered I like XPath a lot. I've also built a CSS to XPath translator, though in my own work I'm staying with XPath - the translator might be handy for other things, so I'm keeping it. XPath is slick though.&lt;br /&gt;&lt;br /&gt;I'd like to explore a different paradigm of all this now. ... Much of this is written as a narrative, so bear with me, as it's still a mere vision.&lt;br /&gt;&lt;br /&gt;I'm going to experiment with a paradigm of object-orientation in my templating system. The following expresses (in english) how I'd like to be able to create a website, simply and sensibly...&lt;br /&gt;&lt;blockquote&gt;This is my website. It's based in this folder (e.g. /var/www/mysite). It's base title is "Sam's Website".&lt;br /&gt;&lt;br /&gt;Each page on my site has a:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Title&lt;/li&gt;&lt;li&gt;Tagline&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Description (and other meta)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Heading&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Optional Subheading&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Main navigation&lt;/li&gt;&lt;li&gt;Main Content zone&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Paragraphs&lt;/li&gt;&lt;li&gt;Links&lt;/li&gt;&lt;li&gt;Images&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Stylesheet&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;My website can also have the following kinds of (abstract) things on it (referring to modules):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Tables (extended for usability)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Forms (extended for usability)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Data views (based on tables and database queries)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Contact information (based on abstract tables)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Contact forms (based on abstract forms)&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;I tell it what &lt;span style="font-weight: bold;"&gt;things&lt;/span&gt; (in human terms) I want on my website, and how to handle them, and how they interact. Each thing is handled by a module. This makes it easier and faster to create a site because it lets me express myself in my natural thought. Then I tell it what kind of navigation I want: tags or a traditional hierarchy.&lt;br /&gt;&lt;br /&gt;After I specify what I want on my site, it builds a template for me. It presents me with an editable view of the template, where I can adjust its look and feel. I also have a panel where I can edit attached stylesheets, and link element classes (CSS) to behaviors (JavaScript). When I'm done, I save the template and it takes me back to an administrative panel.&lt;br /&gt;&lt;br /&gt;On the administrative panel, I have a tabbed interface.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the 'General' tab, it presents notable entries from the website's internal log, including any errors that might have occurred since I last checked in, as well as customizable summary information. This summary may tell me how many users are registered, or how frequently content is customized - I can change this summary to fit the nature of my site. This page also provides a 'Publish' link to users in the 'Publishers' group. (See "Publishing..." down below)&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=947464157067459524&amp;amp;postID=7944239280887818040#publishing"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;On the 'Navigation' tab, I am given an overview of my site's structure. Selecting a page provides a menu, including 'rename', 'edit' and 'delete' options.&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;If I use a traditional hierarchy, it shows me the hierarchy. Drag-and-drop moves pages and directories/sections around in the hierarchy.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If I use a tagged navigation system, it shows me all my tags, and lists all tagged pages under their respective (multiple) tags. Drag-and-drop assigns another tag to a page.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;On the 'Page Creator' tab, I get a WYSIWYG editor with a blank page. I can choose to open an existing page, or I can create a new one from the blank. I select a template to use in the page. It loads a menu of objects that I can use in a panel on the right. I drag and drop objects as desired, and then customize them. Each object can be assigned a class, as well as additional behavior specifications. I can drag-and-drop objects already on my page into new locations on the page.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On the 'Security' tab, I get a list of groups, and users belonging to each group (as well as groups within groups). I can create new users, edit existing users, and arbitrarily restructure the user-security features of the site. I also get a view of my site with security information attached, so I can control who sees what, who can edit what, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On the 'Objects' tab, I see a list of objects available to me, as well as some of their implementations (if they have any). It searches a folder for object files (class.*.php), so I can add new ones just by uploading them to my site.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="publishing"&gt;Publishing...&lt;/a&gt;&lt;br /&gt;This system also differentiates between published and unpublished content. Pages are initially created in the 'unpublished' zone. All revisions occur in the 'unpublished' zone. This zone can be navigated just like its 'published' counterpart, to ease revision and verification of content. Each page is also marked with a revision date, so pages are only updated if they are revised (or if their templates change). Unpublished drafts can be locked until they are published. Authorized users can choose to publish the current draft of the site, which "renders" the entirely dynamic 'unpublished' pages into static content (except where specifically dictated as dynamic, such as live database queries). The rendered content is placed in the 'published' zone.&lt;br /&gt;&lt;br /&gt;Anonymous visitors to the site see only the 'published' content. Each page in the 'published' zone provides a log-in link. When a user logs in, if they are authorized to customize content they are redirected from the published page to its equivalent in the 'unpublished' zone. For each object they have permission to edit, they are given a link to edit it. Clicking on this page loads an inline editing tool. When they save it, the 'unpublished' page is automatically updated.&lt;br /&gt;&lt;end&gt;&lt;br /&gt;The 'published' zone is rendered as largely static content because it's faster on the server end. Lower overhead processing is key for high-volume sites, so I want to cater to that.&lt;br /&gt;&lt;br /&gt;I want to create a really intuitive, natural way of creating and maintaining a website. Anyone who reads this and likes the idea, and wants to contribute, let me know -- would appreciate the help ;)&lt;/end&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-7944239280887818040?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/7944239280887818040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=7944239280887818040' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/7944239280887818040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/7944239280887818040'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2008/04/oop-object-oriented-paradigm.html' title='OOP: Object Oriented Paradigm'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-1696172192714559582</id><published>2007-12-08T21:20:00.000-08:00</published><updated>2007-12-08T21:38:09.805-08:00</updated><title type='text'>What Microsoft Tax?</title><content type='html'>After some discussion of purchasing vs building computers, with friends and family, I decided to do some research on the costs of computers bundled with Microsoft software, vs those with Ubuntu Linux bundled, from two well-established vendors. This post details the research in something like proper form, though it's been so long since I've had to write in this manner that I may have neglected some element of this writing style.&lt;br /&gt;&lt;h2&gt;Abstract&lt;/h2&gt;This research examines the contrast of pricing between two vendors' similar hardware configurations, and the effect of a customer's software preferences on that pricing.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Methods&lt;/h2&gt;The vendors compared in this case were &lt;a href="http://www.system76.com/"&gt;System76&lt;/a&gt; and &lt;a href="http://www.dell.com/"&gt;Dell&lt;/a&gt;. The systems compared were System76's Gazelle series Laptop, and the Dell 1420 laptop, with it's Ubuntu variant, the 1420N.&lt;br /&gt;&lt;br /&gt;This comparison examines the following configurations:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Dell Inspiron 1420N with Ubuntu (basic)&lt;/li&gt;&lt;li&gt;System76 Gazelle (basic)&lt;/li&gt;&lt;li&gt;Dell Inspiron 1420 with Windows Vista (upgraded)&lt;/li&gt;&lt;li&gt;System76 Gazelle (upgraded)&lt;/li&gt;&lt;/ol&gt;Configurations listed as "basic" are slightly upgraded from the least expensive offerings, in the interest of examining realistic, long-term computing solutions for real-world users. Configurations listed as "upgraded" reflect hardware capacity upgrades required to support Windows Vista; the System76 option is similarly upgraded to maintain the validity of this comparison.&lt;br /&gt;&lt;br /&gt;Microsoft Windows operating system also requires additional software to make it usable to real-world customers, including anti-virus protection and an office suite. Ubuntu Linux comes with most of these requirements already addressed, either by their being practically irrelevant (as in the case of anti-virus software), or by bundling the software with the base installation (as in the case of an office suite). Remaining needs of each customer are not included in this study, though can be addressed at no monetary cost using Ubuntu's software installation mechanisms, or at notable monetary cost by purchasing more software for a Windows system.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Findings&lt;/h2&gt;[The detailed findings in tabular format have been removed from this post because Blogger didn't play nice with the table. I've republished this via Google Documents, and the original table can be reviewed &lt;a href="http://docs.google.com/Doc?id=ddv4s552_113fj6sspj4"&gt;here&lt;/a&gt;. Continuing with the original document...]&lt;br /&gt;&lt;br /&gt;The following points of variation identify the contrast between the "basic" configurations.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dell runs at 83.3% of the processing speed of System76&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Dell runs at 112.5% of the display resolution of System76&lt;/li&gt;&lt;li&gt;Dell does not support DVD writing, while System76 does&lt;/li&gt;&lt;li&gt;Dell prices at 98.6% of System76's price&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The following points of variation identify the contrast between the "upgraded" configurations.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dell runs at 83.3% of the processing speed of System76&lt;/li&gt;&lt;li&gt;Dell provides 50% of the Video Memory of System76&lt;/li&gt;&lt;li&gt;Dell runs at 112.5% of the display resolution of System76&lt;/li&gt;&lt;li&gt;Dell  (with Windows software) prices at 115.76% of System76's price&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Conclusion&lt;br /&gt;&lt;/h2&gt;The cost of a comparable systems running the same software from these two vendors is similar, however System76 clearly leads the market on the quality/capacity of hardware delivered per customer dollar. Adding Microsoft software, as in the upgraded systems' case, seems to increase the price by roughly 16%. The utility of this 16% depends on the use case of the system, and must be contrasted with the ongoing maintenance and support costs of each alternative.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-1696172192714559582?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://docs.google.com/Doc?id=ddv4s552_113fj6sspj4' title='What Microsoft Tax?'/><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/1696172192714559582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=1696172192714559582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1696172192714559582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1696172192714559582'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2007/12/microsoft-tax.html' title='What Microsoft Tax?'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-5809450899499489779</id><published>2007-09-27T19:08:00.000-07:00</published><updated>2007-11-26T16:43:22.440-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>Of Templates And Parsing</title><content type='html'>Long story short, I've rewritten my template parser again. That's the... 6th time? Something like that. The last 2 or 3 drafts have all used file-based data sources, rather than databases. At this point, that's a VERY good thing [in the context of this project]. Maintaining the DB wasn't so great a use of my time at the early stages.&lt;br /&gt;&lt;br /&gt;My last draft rocked. It did everything I needed. It also was intended to support additional modules. That didn't work out so well. It also had a rather boorish built-in debugging mechanism. That also had some issues. It was bulky and slow, but still, it rocked.&lt;br /&gt;&lt;br /&gt;I learned from that. Don't build a swiss army knife if you're neither swiss nor in the army.&lt;br /&gt;&lt;br /&gt;So I rewrote it from scratch. As of now, that has proven to be an absolutely wonderful idea. The code is now 1/4 of the size of the original, and it's faster and a lot cleaner.&lt;br /&gt;&lt;br /&gt;A couple months ago I also wrote an isolated debugger. That worked out pretty well, but it was having serious problems with my template handler. They didn't play nice. ... Fixing that is my next project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-5809450899499489779?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/5809450899499489779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=5809450899499489779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5809450899499489779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5809450899499489779'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2007/09/of-templates-and-parsing.html' title='Of Templates And Parsing'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-5247085108093580900</id><published>2007-09-27T13:16:00.000-07:00</published><updated>2007-09-27T19:03:38.935-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>Open Source Backup Script?</title><content type='html'>Since this time last year, I've on-and-off been working on a script to a provide convenient, flexible, and robust snapshot backup mechanism for the servers I maintain.&lt;br /&gt;&lt;br /&gt;Because I run Gentoo Linux on the servers, I initially modeled my script after existing "stage4" backup scripts. Because I maintain a rather diverse set of servers, I needed to be able to automate snapshot creation in a manner that was unique to each server, but administered quite consistently. I also needed to be able to store the resulting snapshots in an easily recoverable manner.&lt;br /&gt;&lt;br /&gt;The resulting script is, in my opinion, very flexible by using saved configuration profiles, and very easy to use, with some degree of user-friendliness (e.g. colored/formatted text on the CLI, unless passed the "silent" argument).&lt;br /&gt;&lt;br /&gt;The following syntax expresses its general functionality:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;sudo stage4 archive systemprofile&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Creates a 'squashfs' compressed archive file named according to the syntax specified in /etc/stage4/systemprofile/profile.conf (profile configuration)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;sudo stage4 livecd systemprofile&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Creates an 'iso9660' CD image file, based on the image specified in the profile configuration, which includes the "stage4 archive", and provides a (fairly) convenient way to restore/replicate a system from a backup snapshot&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;sudo stage4 mount /path/to/archive.squashfs /mnt/mountpoint&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Mount the archive file to a specified mount point, after optional MD5 verification&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;sudo stage4 restore /mnt/mounted/archive /mnt/destination/filesystem&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Copies the contents of the archive from its mountpoint to the target filesystem after verifying a few things...&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;sudo stage4 verify /path/to/archive.squashfs&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Verify the "stage4 archive" using MD5 checksum comparison&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;So... I'm contemplating releasing it as a GPL-licensed script. It's written in BASH, so I'm tempted to think it's just silly to release it as such. I don't think it's that trivial though: the script is 25K in size, I find it very useful, and although there are lighter alternatives, it's proven to be very valuable functionality for my systems and organizations. I'd love to share it with everyone.&lt;br /&gt;&lt;br /&gt;I just need a good way to do that. I can't seem to attach files to blog posts, and I don't have any consistent and readily available online file storage. I'd also like some advice from people who have prior experience with this sort of decision. ... Would love to hear from you if you read this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-5247085108093580900?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/5247085108093580900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=5247085108093580900' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5247085108093580900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5247085108093580900'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2007/09/open-source-backup-script.html' title='Open Source Backup Script?'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-1811969066614012390</id><published>2007-09-04T13:45:00.000-07:00</published><updated>2007-09-05T21:01:03.562-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Comical?'/><title type='text'>Developing Comedy</title><content type='html'>These are various quotes and comics I've found online, from `fortune`, or have heard in my (developing) career as a developer. (... department of redundancy department.) I'll continue updating it as I find more.&lt;br /&gt;&lt;br /&gt;Some sources are cited, but not all. I'm not taking credit for them.&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;"Infinite Loops... yeah, those usually take somewhat longer than average."&lt;br /&gt;"You generally don't want to return pointers to things that might not be there."&lt;br /&gt;&lt;br /&gt;The following of XKCD&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://xkcd.com/138/"&gt;http://xkcd.com/138/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;http://xkcd.com/227/&lt;/li&gt;&lt;li&gt;http://xkcd.com/303/&lt;/li&gt;&lt;li&gt;http://xkcd.com/273/&lt;/li&gt;&lt;li&gt;http://xkcd.com/149/&lt;/li&gt;&lt;li&gt;http://xkcd.com/287/&lt;/li&gt;&lt;li&gt;http://xkcd.com/278/&lt;/li&gt;&lt;li&gt;http://xkcd.com/256/&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- http://xkcd.com/258/ --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-1811969066614012390?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/1811969066614012390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=1811969066614012390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1811969066614012390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1811969066614012390'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2007/09/developing-comedy.html' title='Developing Comedy'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-8687844476545559199</id><published>2007-01-18T17:54:00.000-08:00</published><updated>2007-07-20T17:23:16.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>Application Development Observations</title><content type='html'>I've been working on this template system as part of an on-going project at work, and invested some of my own time into it because I want to keep parts of it as my own IP later on. As one might note in previous posts (I don't know if I've published all of them), I've gone through several different paradigm shifts in how this application should be developed and what its underlying framework(s) should be.&lt;br /&gt;&lt;br /&gt;This time, I had to employ a little patience, but I managed to step back and work on documentation from the get-go, describing ideas first, with a partial focus on user experience, rather than trying to move ahead on code immediately. Turns out that was a &lt;span style="font-style: italic;"&gt;great&lt;/span&gt; idea...&lt;br /&gt;&lt;br /&gt;First off, I needed to identify a few goals for the project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Maintain maximal compliance with standards (i.e. XHTML, CSS)&lt;/li&gt;&lt;li&gt;Content should be simple to implement (convert from other systems etc)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Content should be manageable using 3rd party applications like Dreamweaver&lt;/li&gt;&lt;li&gt;System should be built to support up- and down-scaling of the application requirements&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Facilitate core functionality with absolutely NO module requirements, NO proprietary software (other than template-handling kernel)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;System should support development of proprietary modules&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Module structure requirements should be minimal&lt;/li&gt;&lt;li&gt;Modules should be able to interact with the kernel and with each other&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Kernel will be &lt;span style="font-style: italic;"&gt;highly&lt;/span&gt; optimized, very efficient and fast&lt;/li&gt;&lt;/ul&gt;So yeah, I drafted a few examples of common scenarios where this kind of thing could be useful to a developer, and walked through how I figure the developer would prefer to deal with this kind of thing. (I suppose I can do this with relative ease, since I am a developer myself.)&lt;br /&gt;&lt;br /&gt;The really great thing: planning has paid off. After a few hours of planning user experience, I started brain-storming on how to implement them most efficiently. Result: this is going to be one of the simplest meta-applications I've ever written, since its concepts are already laid out (textually, pseudocode) in great detail. The administration tools will simply act as a module to the template kernel, and link into its processing at a certain stage to implement the changes it needs. No need for doubling my efforts by creating an entirely separate interface.&lt;br /&gt;&lt;br /&gt;I've experienced the same effect in regards to the module loading functionality -- planning and careful consideration has made this REALLY REALLY easy, as compared to previous attempts. ...&lt;br /&gt;&lt;br /&gt;Rock on ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-8687844476545559199?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/8687844476545559199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=8687844476545559199' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8687844476545559199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8687844476545559199'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2007/01/application-development-observations.html' title='Application Development Observations'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3181963235356754300</id><published>2006-11-01T16:50:00.000-08:00</published><updated>2006-11-01T23:46:42.576-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Open Source Halloween</title><content type='html'>Right, so generally I don't take Halloween, Thanksgiving, and most other holidays seriously. Not even birthdays. Dunno why, they just never seemed all that useful to me. Go figure...&lt;br /&gt;&lt;br /&gt;My wife is totally the opposite. She has lots of nostalgia for family gatherings and fun times around the afore mentioned days. In compliance with her desires, I (without too much resistance) give in to the whole ceremonial pumpkin carving business. Because of my disdain for the historic significance of Halloween, being a day of the dead and all, I figured I'd lighten things up a bit...&lt;br /&gt;&lt;br /&gt;So I threw in a little of the Open Source spice to keep it interesting to those who, like me, take no interest in Halloween as a significant observance.&lt;br /&gt;&lt;br /&gt;First off, there's Tux...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/7108/115657245735773/1600/00002.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://photos1.blogger.com/blogger2/7108/115657245735773/320/00002.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the Ubuntu logo ;)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/7108/115657245735773/1600/00013.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; cursor: pointer;" src="http://photos1.blogger.com/blogger2/7108/115657245735773/320/00013.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next year I'll probably take on the Gentoo logo, but given its geometry, it becomes somewhat difficult to effectively carve into a pumpkin without supporting structure (kinda like Tux's head extension above).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3181963235356754300?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3181963235356754300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3181963235356754300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3181963235356754300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3181963235356754300'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2006/11/open-source-halloween.html' title='Open Source Halloween'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-5002096694824875752</id><published>2006-10-28T23:47:00.000-07:00</published><updated>2007-08-11T10:00:42.226-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Software Switch</title><content type='html'>It's become apparent that Linux is truly evolving to accommodate the needs of regular users, as well as tech-heads.&lt;br /&gt;&lt;br /&gt;A mildly tech-savvy friend of mine recently toasted his system using Windows to repartition a disk, and wanted help reinstalling. I mentioned a few alternatives for recovering it, and noted that Linux is useful in fixing Windows' various problems. He thought about that for a moment and asked me about trying Linux as an every-day OS, since he had never touched it before. I sent him a link to the Ubuntu site, recommended that he download the i386 version, and he took off with it, no trouble.&lt;br /&gt;&lt;br /&gt;My mom is a quality control analyst for a food processing firm, and my father owns and operates a small business. I set up a workstation at their home using Ubuntu Linux, configured their email client, and left for a few weeks. They're totally satisfied, and generally more comfortable in Linux, actually, than they were with their Windows alternative.&lt;br /&gt;&lt;br /&gt;My 8-year-old brother installed Ubuntu single-handedly, asking me only two questions: which timezone should he select, and which keyboard mapping.&lt;br /&gt;&lt;br /&gt;The more I use it, personally, the less I want Windows. Linux gives me more control, is more reliable, and doesn't bog down the way Windows does over a 6-month period. It's simply a smarter system.&lt;br /&gt;&lt;br /&gt;With the release of Ubuntu 6.10 last week, I'm really quite impressed at how convenient, polished, and generally friendly everything is. This is a serious desktop OS, no question about it. It even runs quite tolerably on this eMachine I got for free - 1.4ghz Celeron, 256mb of SDRAM, piece of junk. [I'm using it now to post this message.]&lt;br /&gt;&lt;br /&gt;As for a server operating system, this issue has been settled for a long time. My Gentoo server emails me daily updates of all its activities and network traffic, security and system health diagnostics, virus scans, backup and synchronization reports, weekly software update reports, individual reports of each package as they're installed. That thing is solid as a rock and just works. It took some time to configure, mind you, but after a couple hours of editing text files, this thing beats the pants of any Microsoft server I've ever seen.&lt;br /&gt;&lt;br /&gt;I'm convinced. At this juncture, Microsoft has a lot of work to do before I'll be spending more $$$ on their software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-5002096694824875752?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/5002096694824875752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=5002096694824875752' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5002096694824875752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/5002096694824875752'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2006/10/software-switch.html' title='Software Switch'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-3431337023029460449</id><published>2006-08-01T23:01:00.000-07:00</published><updated>2006-11-01T23:41:17.847-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>CMS Development Continued</title><content type='html'>Aye, the last couple months have been focused largely on the development of my Content Management System. It's become progressively clearer that the demands of regulating parties require us to use a more dynamic template-handling system than previously expected.  This time it's going to revolve primarily around XML parsing, so that both the page and the template can be handled as separate XML documents, and then combined. Using this method allows the pages to be edited separately by numerous web development tools, most notably Dreamweaver and other WYSIWYG editors, without requiring any special or proprietary syntax -- it's all standards-compliant! (YAY!)&lt;br /&gt;&lt;br /&gt;[UPDATE] This project has completed a functional prototype as of September 12th, 2006. Development will continue in pursuit of optimization of the code, modularity of its component functions, and planning for future implementation options.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-3431337023029460449?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/3431337023029460449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=3431337023029460449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3431337023029460449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/3431337023029460449'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2006/08/cms-development-continued.html' title='CMS Development Continued'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-8499255581522389933</id><published>2006-06-13T23:26:00.000-07:00</published><updated>2006-11-01T23:27:20.775-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Ubuntu</title><content type='html'>Well, I finally got around to wiping Windows off my hard disk and put &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 6.06&lt;/a&gt; Linux on it. It's wonderful! Now I can do all my web development work on my laptop &lt;em&gt;without&lt;/em&gt; needing an internet connection at all times! And I still get the back-up functionality of a synchronization system similar to what &lt;a href="http://winscp.net/eng/index.php"&gt;WinSCP&lt;/a&gt; afforded me, but now it's via &lt;a href="http://www.cis.upenn.edu/%7Ebcpierce/unison/"&gt;Unison&lt;/a&gt; on a 15-minute Cron job. Whew! I'm &lt;strong&gt;finally&lt;/strong&gt; Microsoft-free, and I love it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-8499255581522389933?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/8499255581522389933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=8499255581522389933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8499255581522389933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/8499255581522389933'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2006/06/ubuntu.html' title='Ubuntu'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-947464157067459524.post-1544298042267577030</id><published>2006-06-13T20:59:00.000-07:00</published><updated>2007-09-28T16:42:35.709-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software/Web Development'/><title type='text'>CMS Development</title><content type='html'>Of late, I've been developing a simplified Content Management System. My first attempt at it stored all the content in a &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; database. This has some advantages, but I found that I wanted more functionality than what my data relationships and structures allowed. I tried to restructure things a bit, and determined that I would have to clear the drawing boards completely in order to accomplish what I desired. As a result, I abandoned MySQL in favor of a proprietary means of storing and retrieving the necessary data relationships. &lt;p&gt;&lt;br /&gt;At this point, I'm rewriting the entire CMS engine to pull data from files, directly on the file system, without the need for any external database engine. When complex data structures are needed (such as those which I attempted to build using &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt;), they are handled using a fairly simple adaptation of the &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; serialization function. This adaptation provides a means of encrypting the data, and storing it securely (such that it cannot be arbitrarily downloaded by users). &lt;strike&gt;As of June 10 2005, a demonstration can be seen &lt;a href="http://schmu-el.blogspot.com/#http://ehstech.ehs.wsu.edu/newCore/dbtest.php"&gt;here&lt;/a&gt;&lt;/strike&gt;. &lt;/p&gt;&lt;p&gt;[UPDATE] Due to unforeseen complications in the initial draft of the CMS project, multiple alternative template engines have been developed. The current (and simplest, and thus fastest) version does not require database access, and uses filesystem storage to provide easy access to HTML content. Also, this method implements a parsing engine which does not use customized (read: proprietary) X/HTML tags to identify content and regions and such; instead, it uses a Regular Expression to identify standardized tags in a manner which allows WYSIWYG editors (such as FCKEditor) to handle the code more effectively.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;In this project, I'm also attempting to create an adaptable development framework, combining a variety of useful works by other developers. These include a tool which assigns JavaScript behaviors to DOM objects, some Asynchronous Javascript and XML (AJAX) scripts which I've been adapting, &lt;strike&gt;and a WYSIWYG editor similar to the well-reputed &lt;a href="http://www.fckeditor.net/"&gt;FCKEditor&lt;/a&gt; (careful spelling)&lt;/strike&gt;. I'm currently looking into a browser-based syntax-highlighting code editor, similar to &lt;a href="http://helene.muze.nl/"&gt;Helene&lt;/a&gt; or &lt;a href="http://aboutedit.com/"&gt;About:Edit&lt;/a&gt;. &lt;strike&gt;I'm almost prepared to write my own, since that which already exists in the market has so many bugs, or isn't open-source.&lt;/strike&gt; I'd like to find one that was open-source and fairly robust, so I don't have to re-invent the wheel.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/947464157067459524-1544298042267577030?l=befreely.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://befreely.blogspot.com/feeds/1544298042267577030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=947464157067459524&amp;postID=1544298042267577030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1544298042267577030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/947464157067459524/posts/default/1544298042267577030'/><link rel='alternate' type='text/html' href='http://befreely.blogspot.com/2006/06/recent-developments.html' title='CMS Development'/><author><name>sb</name><uri>http://www.blogger.com/profile/17424293474077305357</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
