Thursday, January 19, 2012

Technology and Activism

More and more, technology plays a very large part in activism.  Many movements are integrally tied to technology such as the Free Software Movement.  Others are not quite so significantly tied to technology such as Anonymous.  However, the days when rallies and protests were organized with paper and face-to-face communication is largely drawing to an end.

Today, the Internet and cell phone networks are the way to organize.  Facebook, Twitter, texting, and the web in general are what brought protesters to Zuccotti Park in droves.  This trend can only continue to increase in frequency and intensity.  Perhaps technology and communication can bring about a positive and substantive change in the world.

Anonymous

Anonymous was born on the Internet in what is still considered a shady underworld without any rules or restrictions.  Perhaps such a force could not have come from a place where participants would feel less free to explore the possibilities.  Today, Anonymous is everywhere, supporting other movements such as the 2010 and 2011 revolutions in Tunisia, Libya, Egypt, and several other middle eastern countries and the Occupy movement in the U.S.

Anonymous has broken free of the Internet and now lives and thrives in the real world.  An early example of Anonymous' influence offline was "Operation Chanology," a campaign against the Church of Scientology.  In more recent times, Anonymous has gained a near synonymity with the Occupy movement which makes itself very visible in the real world.

Anonymous still does at least as much of its activism online as it does offline, however.  In support of the Syrian uprising still ongoing, Anonymous launched "Operation Syria", a campaign of online attacks aimed at the Syrian establishment which is responsible for the massacre of many innocent Syrian citizens.

The Occupy movement

The Occupy movement may now be the most visible and significant ongoing protests in the western world.  It began with Occupy Wall Street in September 2011 with the goal of curbing the corporate influence on government and the imbalance of wealth in the U.S.  The issues the movement started with had little to do with technology or the Internet.

Recently, the Occupy movement has turned to technical issues with the possibility of the imminent passage of the Stop Online Piracy Act, a bill in the U.S. House of Representatives containing many draconian provisions such as allowing the U.S. Government to shut down large swaths of the Internet on mere suspicion of allowing for the infringement of copyrights.  This is strong evidence that technology is more important today to the real world than it has ever been in the past and that what goes on on the Internet is worth protecting with activism.

As I've mentioned, Anonymous and the Occupy movement are very much intertwined.  Anonymous symbols such as the Guy Fawkes Mask and the official unofficial Anonymous flag appear in virtually every Occupy-related venue.  The two support each other in numerous ways.  Anonymous takes direct action in support of the Occupy movement while the Occupy movement lends credibility to Anonymous which still struggles for legitimacy in the eyes of the populace.

Arab Spring

In December of 2010, protests began in Tunisia which eventually led to the fall of the oppressive Tunisian regime and the establishment of democratic elections.  The revolutions spread beyond the country's borders to Egypt, Libya, Syria, and many other Arab nations.

Throughout the uprisings, Facebook, Twitter, and other web services served to help the people organize, cell phone cameras recorded much of the events and retaliation from the dictators' regimes, and the Internet allowed the rest of the world to see on a much more grassroots level what exactly was happening.

So helpful was the Internet to the rebellions that some dictators such as Muammar Gaddafi of Lybia opted to cut off that resource to the countries entirely.  Anonymous, however, came to the rescue of some by subscribing in large numbers to cheap dial-up services and faxing the connection and authentication information to schools and other establishments in Libya, thus allowing them Internet access via the phone lines.

It's certain that technology will play a much larger role in every aspect of life including activism in the future.  There are dangers in technology, however.  In some cases, technology may be used against the masses almost as effectively as it may be used by the masses.  There are movements to reduce corporate, government, and other special interest influence on networks.  But, it still pays to be careful who you trust.

Monday, January 16, 2012

What's Wrong With Proprietary Software?

In the 1960's, Richard Stallman witnessed the rise of proprietary software when he was denied the source code for the firmware of a printer he was in charge of administrating.  Now, because of his work over the course of nearly 50 years, we have the option of running an entirely Free Software system without lacking the tools we need.

Why did he go to the trouble?

Proprietary software arose as a tool which large corporations could use to control and manipulate their users.  They used this control to obtain more money and in the process violated some of our basic rights as citizens of the digital age.

This post is about a few examples of how these violations affect users today.

How Does It Work?

Proprietary software, first and foremost, prevents users from knowing how it goes about accomplishing what it claims to accomplish.  Proprietary tax software cannot be examined to be certain it truly conforms to the tax laws it purports to help users with.  Proprietary antivirus software can't be examined for correctness.

For those users who are more concerned that their software works the way it advertises than they are about having someone to point the finger at when it breaks, not being able to look under the hood is not acceptable.  It should concern everybody that their electrical grids and cable signals may not be run by provably reliable software.

This opaqueness also prevents those wishing to learn about software from learning through example.  Children should have the benefit of knowing how their world works, including how their computer works.  Don't you think?

Can I Improve It?

Traditionally, when you purchase something, you obtain the right to do with it as you will.  This includes modifying it to function more effectively or more in line with the owners needs.  Car owners frequently modify their vehicles for appearance, gas mileage, horsepower, or any number of other purposes.  There are entire communities dedicated to modifying their game consoles.

However, proprietary software does not offer this basic right.  A user who wishes that the proprietary music player he uses included a "loop" feature cannot feasibly add such a feature.  A gamer who can't progress past a particular point in his favorite proprietary game cannot add new cheats to the game.

This places the users at the mercy of the software publishers and forces them to settle for software which doesn't fit their needs as well as it could.

How Do I Know it's Not Misbehaving?

Software which prevents users from scrutinizing it can get away with all kinds of dastardly behavior in secret.  One of the earlier examples was the sheer amount of identifying personal information the media player RealPlayer collected from the user's computer and sent back to the company which published RealPlayer.

Today, Google Chrome, one of the most popular web browsers, collects similar information from its users for advertising and tracking purposes.  Some software comes with advertising and spying software from third parties.

With the right tools, some of this misbehavior may be detected.  It's not easy unless you know where to look, however.  More alarming still is the fact that most users don't seem to so much as care what their programs are doing when they're not looking.

This is a small sample of the problems with proprietary software.  However, it's fairly easy to come up with numerous ways in which proprietary software violates a user's liberties.

More information on the topic of proprietary software and its negative effects on our liberties may be found at the website of the Free Software Foundation.

Tuesday, January 3, 2012

Are We In Control Of Our Machines? Part 2

In part one, I talked about how to go about using only free software on your desktop or laptop computer, mostly leaving other consumer electronics out of the conversation.  Hence, part 2.

Most people in the developed world have a multitude of computers around them.  Most people don't even consider most of these computers to be computers, though some are more similar to laptop and desktop computers than others.

Just to name a few examples of the computers which surround us, most of us own a gaming system, cell phone, television, car, several set top boxes, kitchen appliances, networking and computer paraphernalia, and a multitude of other devices which contain embedded computers.  As a software engineer, it makes me uncomfortable that I don't really know what these devices do while I'm not looking.  And as a software engineer, it makes me think there must be a better way.

Why Is It The Way It Is?

Hackers are busy people, and their time is valuable to them.  They tend to work on what has the most payoff.  That doesn't usually describe flashing the firmware on their microwave ovens.  It does however describe flashing the firmware on their routers and game systems.  As a result, there are several GNU/Linux distributions made for routers such as DD-WRT and OpenWrt and for all of the major game consoles, there is a "homebrew" project soon after release.

In short, we hackers who are interested in exercising control over our devices choose our battles.

Which Devices are Lacking Free Software?

As I see it, the important devices which have yet to bet touched by a significant amount of user-controllable Free Software are the majority of mobile phones, televisions, some set-top boxes, computer peripherals such as scanners and printers, and automobiles.

Mobile phones have more control of our lives by the day.  They allow almost our entire lives to be tracked.  As many of you are already aware, it is possible for law enforcement to activate virtually all commercially available cell phones' microphones for covert surveillance.  Aside from the fact that this is a power law enforcement has not been able to exercise over citizens before, this back door is vulnerable to exploitation by malicious parties.  Why should we as owners of these devices allow this?

For televisions, the issue is more the fact that a television not in your control is one which you cannot use to its full capacity.  If your television has a sufficiently powerful embedded computer, and you wish to be able to play games from said embedded computer, there's no reason why you as the owner of the television should not be able to do this.

Set-top boxes have the capability of limiting your freedoms to do with your content as you wish.  Some already heed the "broadcast flag" which can prevent DVR's from recording content even from local broadcast television stations.

Among computer peripherals, printers are probably the most important devices to bring Free Software firmware to.  Virtually all commercially available printers print virtually invisible dots on every page which may be used to track down the printer on which it was printed.  The potential for abuse here is also great.

And, finally, automobiles' firmware touches on issues of safety, privacy, and efficiency, among others.  With vulnerable firmware, a vehicle may be unsafe.  Many vehicles these days have GPS built-in, making privacy a concern.  And, the firmware has a strong effect on the feul efficiency as well.

Many other such devices exist which users have a need to be able to control.  However, we must choose our battles and focus on the highest-priority devices first.

What Can Be Done?

For many, porting a GNU/Linux distribution to an embedded device such as a mobile phone or a set-top box is not an insurmountable task.  If you're interested in porting GNU/Linux to an embedded device, I can recommend the Gentoo Embedded Handbook.  If you have other resources for interested parties, please post them in the comments.

In some cases, Free Software has been brought to devices without porting an operating system to them.  For instance, the Nintendo Wii has the Homebrew Channel.  This not an operating system, but it does allow for writing software for the Wii (as well as installing at least a couple of different GNU/Linux distributions.)  For information on this type of approach, Andrew "Bunny" Huang's book "Hacking the Xbox" is an excellent resource.

Until next time, happy hacking.

Are We In Control Of Our Machines? Part 1

Thom Holwerda over at OSnews published a very enlightening article recently entitled "Richard Stallman Was Right All Along".  It expresses a viewpoint which I've had for quite some time.  I believe that if a person has purchased a computer, s/he should be in complete control of it and should have the ability to do with it as s/he sees fit.  Proprietary software is an impediment to that ideal.

That said, I don't have that kind of control over all of my hardware or software.  I use almost no proprietary software on my computers, but my non-x86-derivative machines such as my Nintendo Wii and my cell phone are mostly opaque to me.  I allow this because one cannot truly take part in society without such things as a cell phone or Adobe Flash.

But how close could one come to the ideal, what would one have to live without if one came as close as possible, what could be done to fill in gaps in functionality for those unwilling to use proprietary software, and how much work would be involved?

How Close Are We?

Very close, actually.  The bits which we can't do without proprietary software are minutia as opposed to foundational.  This certainly was not the case when the GNU project was young.  One may reasonably use their computers without much proprietary software.  People who use mostly proprietary software largely do so because they have developed a dependence on proprietary software and are unwilling -- not unable -- to move to mostly Free Software setups.

The exceptions I can think of are:
  • Reasonable 3D acceleration for some graphics card vendors
  • Adobe Flash
  • Firmware and BIOS
The first of these may be mitigated by purchasing graphics cards for which there are drivers which support 3D acceleration (such as Intel).  Even the second can be largely mitigated with (incomplete) Free Software Flash implementations such as Gnash.  For YouTube in particular, there are some video players such as Minitube.

What Would We Have to Live Without?

The first answer to this question which rings in my head (and that of many of my readers, I'm sure) is "gaming," of which I myself do a fair amount.  Many of the games I play are Free Software.  I've spent a good deal of time playing Crossfire MMORPG, Nexuiz (which is now proprietary, but there is a community fork of the latest Free Software version called Xonotic), OpenTTD, and even Frets on Fire.  However, many of the games I play are proprietary.  Right now, I'm nearing the end of The Legend of Zelda: Skyward Sword.

Many of the really popular games don't have a Free Software alternative.  There are strong efforts to correct this, but there is still quite a way to go.  One major deficiency I've noticed is that Free Software gaming seems to be lacking when it comes to the "plot-driven" genre.

How Can We Improve This?

As mentioned, much work is already being put toward efforts to resolve these issues.  The nouveau project aims to make a fully functional replacement for the official Nvidia drivers for the Nvidia graphics card chipset.  Please do consider putting some of your effort into such projects if you can.

Gaming is an interesting challenge, however.  You can't exactly make an open-source Legend of Zelda game.  And you certainly can't write the same Legend of Zelda game as has been released by Nintendo.  To do so without risking litigation from Nintendo would require developers to write the engine, artists to produce models and textures (but they couldn't be *too* similar or they would infringe on Nintendo's copyright), and lawyers to make sure the legal aspects were taken into account properly.

Obviously, one option would be for those interested in Free Software gaming to write the kind of games they most like without infringing in any way and make them as high quality as the proprietary alternatives.

There might be an interesting loophole which could be taken advantage of to produce Free Software versions of proprietary games, however.

The game Frets on Fire is a clone of the popular game series "Guitar Hero."  It supports importing the playable songs in Guitar Hero I and II directly from the official game disks.  This allows gamers in practice to have largely the same game experience without using proprietary software as they would playing Guitar Hero I or II on the Playstation 2.

Why couldn't this be done for many other games?

Suppose one were to write a clone of (for instance) the Legend of Zelda: Skyward Sword game engine without any art or plot elements from the original game and include a feature which would fetch said game elements from an official game disk inserted into the DVD-Rom drive.  The 3D Legend of Zelda game engines are in fact similar enough that one could most likely create one game engine which would support importing its content from any or all of the 3D Legend of Zelda games.

Unfortunately, even this is not exactly legal (at least in the U.S.).  Wii games, and games of many previous game systems as well employ DRM to prevent users from using the content on the disk.  The Digital Millenium Copyright Act (a U.S. federal law enacted in 1998) makes circumvention of DRM criminalized the act of circumventing DRM.  Hence, even if one circumvented DRM in this way but did not in any way infringe on Nintendo's copyright, this scheme would require U.S. users to commit a felony.  However, for those governed by laws which do not make circumvention of DRM illegal, this would be an excellent way to allow gamers to have the experience of playing such games without using proprietary software.

This still feels like the right direction to move, however.  Perhaps with enough support, an exemption in the DMCA could be made a reality for this kind of use.

Stay tuned for Part 2 where I plan to speak about how we can be in control of consumer electronics products which are not x86-derivative.

Thursday, December 29, 2011

Decentralization and Censorship

The older readers will probably remember Napster back in the early days when it was one of those "pirate services."  It was a place you could go to share music with other users and get music for free.

But it was shut down in 2001 by a court order during a legal battle with the infamous RIAA.  In spite of the legal uses of Napster, such as small bands purposefully sharing their music on Napster to gain notoriety, the court issued an injunction preventing Napster from continuing its service.

The thing which made this "shut down" possible was the fact that Napster was run in a top-down manner.  All of the workings involved in the process of sharing were housed, funded, and maintained centrally.

As we all know, users found other ways of sharing files.  The first such method of note was several p2p services such as Kazaa.  Then came the revolutionary BitTorrent protocol.  These have the advantage that the workings are not under centralized management.  The way these pieces of software work, everybody distributes, so to shut it down, everybody has to be dragged into court, and that's just not practical.

Today, there is another centralized system in danger of being curtailed which has a much greater impact on Internet users' freedoms.

The Internet began in the United States and the United States continues to exert draconian control over it.  Many of you probably know that the United States congress currently threatens to put through SOPA, a bill which would allow unprecedented curtailing of the DNS system for corporate interests.

But, there are efforts underway to make a decentralized systems for communication not so susceptible to censorship.  Here are a couple.

The B.A.T.M.A.N. Protocol

The B.A.T.M.A.N. (Better Approach To Mobile Ad-hoc Networking) protocol, aside from having an awesome acronym, is a p2p network protocol not (necessarily) dependent on lower-level network protocols suitable for large, self-organizing networks.  It may be used on most devices which support the Wifi protocol and could one day replace the internet.

The general use case for this protocol is to install custom firmware (such as DD-Wrt or OpenWrt) on wireless routers and make these wireless routers act as B.A.T.M.A.N. nodes which may automatically connect to each other, creating a large-scale, self-organizing, wireless network which end-user devices (such as computers) may connect to in order to communicate with each other.  The B.A.T.M.A.N. protocol may also be tunneled, allowing for communications over the Internet or over other network protocols for situations where it is not feasible to communicate via the normal low-power radio frequencies used by normal wireless cards.

One day, each city may have its own city-wide B.A.T.M.A.N. network.  These networks might be connected to other city B.A.T.M.A.N. networks via ham radio band communications, phone networks, cables, or any number of other methods.

Project Meshnet

Project meshnet is an active grassroots attempt to engineer a way to create a mesh network with the ability to replace the Internet.  Much of their planning is done on Reddit.  They're still in the early planning stages, but they appear to be very serious about the effort and have a lot of expertise among them.

They may eventually decide to use the B.A.T.M.A.N. protocol or not, depending on what decisions are made about the needs of the user.  B.A.T.M.A.N. is definitely a good contender, however.

If you'd like to help out the project, go to projectmeshnet.org and sign up to their forums. Being active on their subreddit is also recommended.

The less we have to depend on service providers, the less governments and corporations may interfere with our rights to free speech.

Happy hacking.

My Personal Computer Setup

Just in case this is interesting to somebody, I figured I'd post information on my computer's software environment.  As mentioned in a previous post, I'm big into applications which radically apply the Unix Philosophy.  Such apps are incredibly minimal and have a very tight focus.

My operating system of choice is Gentoo, a distribution of GNU/Linux.  I find it gives ridiculous control over one's own system.  It makes it easy to keep your system slim and streamlined by eliminating unneeded dependencies and options.

I don't use a "desktop environment" such as KDE, Gnome, or XFCE.  I opt for a simple window manager known as "dwm." The folks at Suckless.org produce and maintain some of the best software available and dwm is no exception. Like much of the Suckless.org software, dwm is configured in C and recompiled to apply the configuration (a process which Gentoo makes simple.)

I currently use the text editor Vim.  I don't use GVim, however.  I find it's just extra cruft.  Vim is even a bit heavy for me, and I'm looking for better alternatives.  The inclusion of features such as tabbing, syntax highlighting, and spell checking hooks makes it less in line with the Unix Philosophy than I'd like.  I've looked into nvi and elvis, but both lack the ability to add new features such as syntax highlighting. I did recently hear about sandy, however, and am interested in giving it a trial run sometime soon.

My email client is mutt.  Again, it's a bit hefty for my taste.  I intend to switch to something else sometime soon.  Perhaps nmh.

My browser is surf.  I recently switched from uzbl.  Both are excellent browsers.  Uzbl is probably a bit more configurable, but surf is definitely more minimal and arguably more unixy.  Surf doesn't have any ability to do tabbing.  For that, I use tabbed.

My terminal emulator is st.  It's maintained by the good folks over at (you guessed it) Suckless.org.  It's extremely simple, but more than sufficient for every day use.  The next release is slated to support xembed, making it possible to use it in tabbed and other such programs.

For my terminal multiplexer, instead of screen or tmux, I use dvtm.  It doesn't include detaching functionality as screen or tmux does.  For that, I use dtach.  Dvtm has a considerably cleaner scripting interface than the others, among other things.

My irc client is currently Irssi.  It's also a bit less in line with the Unix Philosophy than I'd like.  A better alternative that I'm looking into is combining ii, pcw, srw, and dvtm.  It's proved so far to be rather difficult, actually.  (The difficulty may end up being the subject of a later post.)  I may instead go with ii, pcw, srw, st, and tabbed sometime in the future.

Of the software that I use, those are certainly the most important.  Hopefully this will point somebody toward some useful software.

Good day, and happy hacking!

Wednesday, December 28, 2011

Technology to Empower the Users

Technology can assist governments and corporations in their ends, often to detrimental and oppressive ends.  Some countries monitor and censor communications using firewalls and deep packet inspection.  Some companies produce software laced with DRM and antifeatures for their own benefit.

But there is another side to technology.  More individuals are using technology to put power back into their own hands.

These efforts are overwhelmingly grassroots and community driven projects.  In fact, it's questionable whether a technology imposed in a top down manner can give power to the users in any meaningful way.

This blog post is meant to give a quick introduction to just a few of the specific projects and technologies out there for giving power to individuals previously retained by those with power.

The RepRap Project

The RepRap Project is an active and so far extremely successful effort to bring the ability to manufacture consumer goods to individuals everywhere.  "RepRap" is short for "Replicating Rapid Prototyper."  At this point, the project is less than seven years old and has already designed from scratch four official RepRap devices.  With the proper software (all of which is free and open source), users can design a 3D model on a computer and "print" the three dimensional object using the RepRap in various types of plastic in only a few hours.

The 3D models that one person designs may be easily shared via the Internet.  At this point, the most popular place for sharing these 3D model files seems to be Thingaverse.  Not all of the models on that site may be printed using a RepRap, but the majority are, and all are able to be rapid prototyped in some manner.

Perhaps the most interesting feature of the RepRap is that it is designed to be able to print many of its own parts.  3D model files of these parts are freely available on the RepRap project's wiki.  This has some amazing benefits.  The user has the ability to print backup parts for themselves, print the parts for a friend to ease the process of getting into desktop manufacturing, and modify the 3D model files and print the new parts so that s/he may improve and/or customize the device.

An assembled, functional RepRap may be purchased for under $1,400 at Botmill, among many other places.

GNU Radio

GNU Radio is a project to allow users to detect and analyze radio signals in their current area.  Almost any radio signal may be analyzed from ham radio bands to Wifi and television bands.  The project allows users even to decode digital television signals for audio/visual playback.

Whereas other means of detecting signals require a crystal to be tuned to each frequency individually in order to get a signal, GNU Radio allows for "listening on all channels at once."  This does require some specialized hardware which can be a bit expensive, but the payoffs are great.

Tor

Tor (The Onion Router) is a project for protecting users' anonymity online.  One of the greatest benefits the Internet has given us is the ability to speak and be heard without experiencing negative repercussions.  This anonymity allows Internet citizens to be truly honest about their opinions, which they may not be willing to express in "real life."

Tor is software which establishes peer-to-peer connections between computers, allowing them to use each other as proxies.  This allows users to engage in internet communication without a significant risk that somebody (such as and ISP, government, or other third party) will be able to trace the communication back to them.  This can be done both for clients and servers, allowing for freer expression than should be conducted without such protections.

Tor can be and has been used by political dissidents attempting to spread their messages as well as those attempting to publish and view unpopular information.

These projects should be the subject of several later posts.  They have the ability to change the world in positive ways by giving more power to accomplish useful things to individuals interested in making a difference.

The Unix Philosophy

I'm a software engineer by trade.  One thing I've learned is that college is not enough to make you a good software engineer (or programmer, for that matter).  You have to make a lot of mistakes yourself to get good at it.

One viewpoint which leads to a lot of such mistakes, and one which must be discarded in order to be a good programmer, is the idea that "more features is better."  The result of such a misnomer is bloated software which tries to do everything and doesn't do anything very well.  Not only that, but the resulting software has limited configurability and uses more resources than necessary.

The "Unix Philosophy" is a perspective on software development which is aimed at addressing this problem.  It consists of a list of rules of thumb that programmers and software engineers should apply to their work.  There is a bit of disagreement about some of the wording, but the spirit of the Unix Philosophy is well agreed upon.

From Wikipedia, Mike Gancarz's version of the unix philosophy:
  1. Small is beautiful.
  2. Make each program do one thing well.
  3. Build a prototype as soon as possible.
  4. Choose portability over efficiency.
  5. Store data in flat text files.
  6. Use software leverage to your advantage.
  7. Use shell scripts to increase leverage and portability.
  8. Avoid captive user interfaces.
  9. Make every program a filter.
Let's take these one at a time, shall we?

1. Small is Beautiful

A large program has many potential points of failure.  If there's a bug, it's easy to find because there's not as much program to look through as if it's a big program.  Also, if it's small enough, it's easy to keep the entire inner workings of it in your head at once.  It's easier to grasp.  And it takes less work for somebody unfamiliar with the program to become familiar (or even an expert) with the software.

But how small is small?  Let's take an example of a class of software applications generally considered to be required to be "large" -- web browsers.  Sloccount (a tool for counting how many lines of source code a program consists of) reports that Firefox 8.0 (a fairly recent release) consists of 3,291,364 lines of code.  Surf is a minimalistic browser which follows the Unix Philosophy.  Sloccount indicates that the recent 0.4.1 release of Surf consists of 753 lines of code.  That's an incredible difference.

2. Make Each Program do One Thing Well

In other words, each program should have exactly one feature.  No more.  No less.  A program which does two things is unnecessarily complex.  If you need two features, use two programs.  Simple.

3. Build a Prototype as Soon as Possible

Often, this is phrased as "release early and release often."  If you release a prototype, you can get feedback early, which allows you to fix problems early on.

4. Choose Portability Over Efficiency

Portability gives you more options.  It allows you (and others) to test on faster hardware and slower hardware which allows you to ferret out issues nicely.  Also, it will pay off later when the niche technology you decided not to use becomes abandonware.

5. Store Data in Flat Text Files

Flat text files give a lot of power to the users as opposed to binary formats.  Binary formats, even if the code for parsing them is open source, just take a lot more work to work with.  Flat text formats can be edited in text editors.  It can't get much easier than that.

This one in particular is the subject of some controversy.  Many object that databases are often times the right tool for the job of storing data, even if they do have some drawbacks such as making it more difficult to port the data to other means of storage.

6. Use Software Leverage to Your Advantage

Code has some interesting properties.  One is that a useful function or library may be written once and used in multiple places.  Many mistakes may be made in the process of writing software which makes it difficult to reuse useful bits of software, however.  "Using Software Leverage" means making your software easy to reuse so that you don't have to rewrite it later.

7. Use Shell Scripts to Increase Leverage Portability

Shell scripts are wonderful things.  They're written to run in the shell, which means they are written in the same language as the commands you type directly on the shell.  A single line in a shell script can actually do a surprisingly powerful operation.  Also, shell scripts can be made very portable very easily.

8. Avoid Captive User Interfaces

A "captive user interface" is one which requires (or virtually requires) a human to operate.  Just about any interface which requires a mouse is a captive interface.  These are not always a bad thing, but are almost always a bad thing.  They restrict the ways in which the program may be used.

9. Make Every Program a Filter

A "filter" is a program which takes input and produces output without any other effects.  A good example of a filter is the Unix command "sort" which takes a bunch of text (one word per line) sorts the lines lexographically, and prints out the sorted version.  It does nothing but sort the input and print out the sorted version.

This is just an overview of the Unix Philosophy.  There is much more to be said.  There are in fact books on the topic.

But don't worry.  You'll be hearing a lot more about the Unix Philosophy and applications which employ it.

Happy hacking.

Brand New Blog

So, I finally decided to start a blog.  It's been on my bucket list for a while.  Many topics interest me, and I finally have a forum to put them all out there for people to see.

Not only that, but people seem to be reading.  Well, not as I write this, they aren't, but if you're seeing this, it means you are.

At the moment, I intend for this blog to be mostly about specific technologies which have an impact on society and how it operates, though I don't intend to stay strictly on-topic all of the time.

Hopefully, this will be of interest to some people out there.  Thanks for reading, and I hope I've captivated you enough to continue doing so.  :)