Website Logo. Upload to /source/logo.png ; disable in /source/_includes/logo.html

Mocking Eye

'Tis all in vain?

A Thought on Taxation

| Comments

Taxes levied always lead to a deadweight loss. That is, unless you are taxing an inelastic good or activity. Otherwise, there can be no revenue. So far so good. However, one should consider why some goods and activities are inelastic. This category tends to includes necessities; things that are relatively important to your survival and quality of life. So, disregarding other arguments on taxes, the more effective a tax is the more coercive action is applied against an individual's survival needs. This doesn't strike me as an ethically justifiable action. Of course, one might take the position that the revenue gained will be redistributed in such a way as to maximize good. Nevertheless, there remains the ethical issue of providing services funded by revenue derived from attacking an individual's unrelated survival needs—a government can't tax healthcare if it provides it. Services provided by governments are unarguably needed. But there must be more morally defensible ways of funding them.

Twitterchive - Post the Day's Twits to Livejournal or Elsewhere

| Comments

There are services such as LoudTwitter that will submit digests of your twitters to LiveJournal, TypePad, or other blogging service/software. Wordpress has plugins that will do that. However, my experience with LoudTwitter has been that it is fairly unreliable. Thus, I coded up a fairly rudimentary python script that will grab that day's twitters and post them to LiveJournal, or elsewhere. You can find it here: Twitterchive v1.0. Edit the twitterchive.py file to include your Twitter username and password. Requirements:
  • Python
  • A POSIX-compliant system (such as Linux or Cygwin)
  • python-twitter
  • Charm, a LJ client in Python.
  • Copy the charm and ljcharm.py files to the same dir as Twitterchive. Copy the sample.charmrc file to ~/.charmrc. Alternatively, just run python setup.py install, and edit twitterchive.py to change the call to ./charm in main() into just charm. Edit ~/.charmrc to include your livejournal username and password. I recommend you follow the procedures described therein and only use the md5 digest of your password in this file.

Introducing Gargoyle POI Server

| Comments

Version 0.2 of the Gargoyle POI Server (GPS) is now ready. The latest source code tarball is here: Gargoyle POI Server v0.2. (Warning, almost no documentation and only basic comments) Requirements: python, web.py, CouchDB, couchdb-python But, what is it? A POI is a Point of Interest. That is, it is an atomic element of geospatial information. The Gargoyle POI Server is the backend server to the Gargoyle Personal Agent (previously introduced under the name Gargoyle alone). GPS is written in Python using web.py as the frontend, and CouchDB for data storage.  Web.py was chosen because it is small, fast, and output format agnostic. CouchDB provides schema-flexible storage and potential scalability. It will also support robust access from many Gargoyle Personal Agents (GPAs) as well multiple Gargoyle Extraction Agent Service (GEAS) instances. At the moment, the system can output the POIs either in KML or in rudimentary HTML. The interface chosen is a simple RESTful interface. At the moment, only GET is supported. POST will be implemented soon. Here is the syntax for using the server once running (to start a server at port 8080 just run python locator.py: To view the POIs for userid in the square created by 45.000000,47.000000 and 45.000999,47.000999 (format is latitude, longitude)
http://server:8080/l/userid/45.000/47.000
If you want it in KML use this:
http://server:8080/l/userid/45.000/47.000?kml
To add a POI to userid with an expiration date on May 1st:
http://server:8080/a/userid/45.000123/47.000456/1.3/POIname/POI Description/2008-05-01
The third number is the Altitude. Optional elements are in italics, and include the altitude, the description, and the expiration date (default is 3 days). The userid can really be anything. Ideally, it's just a long-ish hash that can't be easily gussed. This simplifies access, and offers a measure of privacy. For now, if you want your POIs secret, you can encrypt their contents in whatever way you wish. Access control is planned, and will be implemented in a future version. Coming really soon: GeoRSS output for easy Google Maps mashups. For planned development, look at the upcoming Roadmap post.

Gargoyle Roadmap

| Comments

Official Gargoyle Roadmap, calluh callay! Currently, Gargoyle consists of 3 parts: At the moment, only GPS is truly usable, and even that is to a very limited degree. A proof of concept for GPA was posted, and most of a v0.2 was written, but that codebase will be abandoned. GEAS is for now just a whole bunch of ideas without a single line of code. What follows is a breakdown of what each component of Gargoyle is, what features are implemented, and what features are planned.

ROFLCon Is Coming!

| Comments

I am one of the lucky 500 who will be attending the historic (meaning it will either be amazing or flop magnificently)  ROFLCon at MIT this weekend. I will be live-blogging it on twitter, as well as making posts here when I can off my Nokia N800. You will definitely find me at the following panels:
  •  Friday 3:30 pmTrack 2: Building E15: Bartos Theatre – BEFORE THE LOL with Jason Scott I have met Jason Scott many times and he is a wonderful and wholly entertaining speaker. He is best know for creating textfiles.com and the suprbly interesting BBS Documentary. You can find his blog at http://ascii.textfiles.com.
  • Saturday 1:30 pm – Track 1: Room 26-100 – INCUBATING THE MINDVIRUS: MEME INFRASTRUCTURES
  • Saturday 1:30 pm Track 3: Building E15: Bartos Theatre – ***MYSTERY EVENT***
Here's the rest of the final schedule. Drop me a line if you're going to be there and want to meet up!

"Next to of Course God America I

| Comments

"next to of course god america i love you land of the pilgrims' and so forth oh say you can see by the dawn's early my country 'tis of centuries come and go and are no more what of it we should worry in every language even deafanddumb thy sons acclaim your glorious name by gorry by jingo by gee by gosh by gum why talk of beauty what could be more beaut- iful than these heroic happy dead who rushed like lions to the roaring slaughter they did not stop to think they died instead then shall the voice of liberty be mute?"
He spoke. And drank rapidly a glass of water
e. e. cummings

Moving Gargoyle to CouchDB

| Comments

Gargoyle will now use CouchDB as its data storage backend. This will allow for rapid develpment, as well as easy adaptation to evolving scheme requirements. Releasing code for POI storage on couchDB within the next two weeks.

Progress on Gargoyle

| Comments

Remember Gargoyle? Well, it hasn't been abandoned yet. I've been rewriting the design and scrapping it over and over. I think I've finally reached a design that's stable, and that will plug nicely into all kinds of stuff. Today I wrote a lightweight web.py-based POI system. It gives a user a random hash which is used to identify a unique POI list. Access is done RESTfully. That is:
http://www.example.com/locate/te6hemi8t3cu/38.89768/-77.036455/
Which would display all POIs in the list te6hemi8t3cu that are in the box bounded by (38.897000, -77.036000) and (38.897999, -77.036999). That is, three spaces after the decimal is my chosen granularity (it's roughly walking distance). The POI list is produced either in a human readable bullet-point list (for easy display on mobile devices), or as a KML file (with some added metadata of course. Such as an expiration date for the entry). Adding a POI is just as easy, just using add instead of locate, and appending /poi_info to the URL. This means that you can easily write apps to use this simple API, as well as display it using Google Earth. What's the next step? I need to convert my already existing client for the Nokia N800 to be able to use this POI list, as well as maintain its own POI cache. It should only read to the user things within a 4 or 5 decimal space distance, and not bother querying unless the user is approaching the edges of the grid box she's in. Finally, once these infrastructure issues are taken care of, the real purpose of Gargoyle will be implemented. This takes the form of a the app that goes through your "reading list" and adds relevant items to the POI list. I will post the code for the N800 code and the POI server some time within the week. It still needs some cleanup. Gargoyle v0.2 here we come! Addendum: POIs can also be meta-POIs. That is, rather than being a placename, an entry into the db can be a uri to an external kml source (can be dynamic). An example would be a URL that points to a script that forwards the coords to the Geonames Wikipedia web service service (shows nearest wikipedia entries) and converts the resulting XMl or JSON into KML.

Making a Terrorist

| Comments

There are many myths about terrorists and their origins, motivators, goals and methods. There are many pundits who express their various opinions and conjectures. But there are relatively few works that present more studied information. Here are two books that I own, which provide a wealth of information. Each of these tomes completes the other: The first of these, with a rather odacious title, is based on a lecture series given by its author, a respected economist. It is a fairly slim paperback overflowing with data. There are tables filled with meaningful figures nearly every other page. This work is an attempt to understand the circumstances and demographics of terrorism. As one review of the book stated, it really does not answer the question posed by its title. Rather, it describes what terrorism isn't. Poor economic prospects, poor eduction, poor healthcare, all those are factors commonly presented as motivators for terrorism. Krueger's meticulous analysis shows that this is rarely the case. His investigation shows that no single religion has the lion's share of terrorists. Nevertheless, most terrorism is perpetrated by members of a religious group other than that targeted. Other factors that Krueger finds do characterize terrorists are limited political freedoms and civil liberties. Wright's Pulitzer-prize winning masterpiece follows quite a different side of terrorism. Rather than concentrating on data, it provides a non-fiction narrative following radical Islamism from its roots with Sayyid Qutb to the important-to-America Osama Bin Laden. Captivating in its detail, Wright creates an intimate profile of the men who shape much of terrorist-spawning radical Islam. The two books together construct a visceral image of one of the greatest dangers facing our world. They are illuminating, educational, and very very important.