Friday, September 2. 20119th AnniversaryLittle did I know, this domain that powers my site, blog, and my email addresses became 9 years old today. Time really flies and this is the perfect opportunity to recount the evolution of this domain name. I first registered iphoting.com when I was in secondary one, hoping to learn something about servers from my seniors in secondary school. Then, there were few domain name registrars available and I used Network Solutions, one of the most reputable but expensive around (there wasn’t much choice and I didn’t know better). It was expensive at almost US$20 a year. I didn’t have a credit-card then and had to borrow one from my parents. (E-commerce then was a relatively new and unproven to be safe concept and yearly renewals were a chore as I had to convince them all over that e-commerce is still safe.) Once I took custody of my domain name, I set up ZoneEdit to be my name server provider, as they were free and were highly recommended. Furthermore, they also supported Dynamic-DNS updating which was essential for my set up. In addition, they also offered to forward all my emails to my SingNet email address for free. I pointed the domain to a PIII 1GHz machine with 128 MB of RAM, running Windows ME, on my home’s SingNet 256 kbps broadband connection. Whenever I got disconnected or reconnected, a piece of software will detect the change in IP address and dutifully update ZoneEdit with my new IP address. After getting Apache 1.3 up and running, it marked the birth of my site. After that, I upgraded the hardware of that machine and migrated to Windows XP. This then allowed me to migrate to the 2.0 branch of Apache. Meanwhile, I also messed around with IIS and found that it is not a solution at all—insecure out-of-the-box. Eventually in 2003, I migrated the machine to Mandrake Linux 9.1 (now known as Mandriva) and that was the first taste I had in operating a production web server in a GNU/Linux environment. This migration from Windows to GNU/Linux instantly brought performance improvements. Apache on Linux, unlike its counterpart on Windows, does not use a pre spawned process model. Rather, the Linux version allows Apache to dynamically increase the number of processes based on load. This was also when I first started learning how to operate a mail server. The mail server that I chose to use was surprisingly difficult to install and set up—qmail. It used to be the most popular mail server, but fell out of favour over time due to the lack of new features and development. Nonetheless, it was and still is the most secure mail server available out there. However, a year after Google released Google Apps, I migrated my email services over to them as I had trouble handling SPAM. SpamAssassin was just not up to par despite my sincere efforts in tuning and training it. With Gmail, Google has successfully solved the problem of SPAM. I’ve never had the interest in visual design as I found Adobe Photoshop a very cumbersome and overcomplicated piece of software. I never had time nor the interest to figure out how to do anything, and where all the functions were hidden. The craze then was Flash, but I never messed with Flash enough that I could do more than just moving shapes around the stage. I spent most of the time in learning about systems administration. I was glad I made that choice. Command-line has never changed much since it was invented, only made more convenient. Sooner or later, one has to learn it, why not do it earlier when the mind still learns quickly? Later in 2006, the year that Apple started producing Intel-based MacBooks, I switched to a Mac. Although the first-generation Core Duo white MacBook that I’d bought had some teething first-generation problems, it was undeniable that Apple made something that I’d really liked. Not just something that I could use, but some that I had enjoyed using it. I was slowly being exposed to good and functional industrial design. Eventually in recent months, my interest in typography grew, and my appreciation for minimalist design became even stronger. This also led me to explore, to some degree, minimalist-responsive web design. As my site has been left in a state of disrepair for some time, I initially wanted to work on a revamp of my site during the summer holidays, in celebration its 9th anniversary, today. Unfortunately, somehow, I haven’t managed to deliver it. Given that it’s the 10th anniversary next year, I think I ought to finish the revamp by then. Meanwhile, now is the time to bring my skills in visual design up to a usable level. Tuesday, August 30. 2011Java 7 on Mac OS X LionBelieve it or not, the Java framework installed in Lion is still stuck in the past at version 6. JDK 7 has already been released by Oracle a few months back, but Apple has now transferred the responsibility of maintaining the Mac OS X port back to Oracle. The OpenJDK project is now in the process of porting and implementing OS X specific code from Apple into the Java mainline codebase. The current status of the port can be seen in the Mac OS X Port Project Status page. Current outstanding or incomplete features are specific to the Mac platform, like printing and locale support. If you don’t need such tight integration with the OS, you can actually start using JDK 7 for development. For my IS200 course on Java programming (IS Software Foundations), there is a specific JDK 7 requirement for some pre-built class files distributed in the course materials. The Java 6 compiler within Lion refuses to compile and link such classes, claiming major version number incompatibility. This leaves me with no choice but to get JDK 7 up and running, or boot into Windows via Parallels (YUCK!). Fortunately, there is a unofficial pre-release build of JDK 7 for Mac OS X which can be downloaded here. Specific instructions are available. In short, it is a 4 step process to get JDK 7 running with the command line.
There is a new unofficial build every few days with new bug fixes, so bookmark the google code download page and update frequently. With this port, it is almost 100% possible to finish the IS200 course with just Mac OS X. With the exception that the exams are conducted on Windows machines with the awful cmd.exe and NotePad++. Sunday, August 14. 2011Lion's Auto Save & VersionsFor you new Lion users out there, you may have experienced the new File Management framework in-place within Lion in some Lion-enabled applications, such as Pages and Numbers. With the introduction of system-wide Auto Save and Document Versioning, new terminology is introduced with respect to this new system. Rather than the decade-old and extremely familiar ‘Save’ and ‘Save As…’, we now get ‘Save’ or ‘Save a Version’, ‘Duplicate’, and ‘Revert’. This new terminology is definitely confusing to those of us who are well-versed in the world of computing. To get up to speed with the new technologies that Apple is deploying, TUAW has a write-up on Lion’s new Auto Save and Versions feature, and a pair of infographics on the ‘old’ and ‘new’ file management systems. Here, I’ll briefly explain how to achieve what you used to be able to do with the old system with new commands; command mapping in geek speak. ’Save…’ is unchanged between both systems—a new file is created with the name specified in the classic Save dialog box. ’Save As…’ is now replaced with two-steps—’Duplicate’ followed by ‘Save…’. While this change may seem counter-productive, there’s actually a hidden feature behind the change. Should you forget to duplicate a file before making changes to it, selecting the same command after making changes will cause Lion to present a dialog box asking if you would like to 1) ‘Duplicate and Revert’, 2) ‘Cancel’, or 3) just ‘Duplicate’. ’Duplicate and Revert’ creates a new file with the changes you’ve already made and reverts those changes since last save in the original file. ‘Duplicate’, on the other, just functions like ‘Save As…’ in the old system. This actually can save you a lot of trouble from accidentally making unintended changes and having to transfer them onto a duplicate manually. A new command introduced, ‘Save a Version’, creates a snapshot of the document at that point in time (without creating a new file), allowing you to revisit via the ‘Browse all Versions’ interface. It’s great for bookmarking certain changes that you may want to revert, especially when you’re about to make changes that involve data loss. I hope this reduces agony during the switch to the world of Auto Save and Versions. Hopefully, I’ll never ever have to version my files manually by filenames in the near future. Wednesday, August 3. 2011Getting AirPrint Working Manually on Linux (CUPS)I realised that I don’t have a post on configuring AirPrint on this blog, so here it is. If you are inexperience with the command line and have the printer configured on a Mac, you may be better off with Printopia. If your printer is connected to an AirPort Extreme or Time Capsule and you want to set up AirPrint via a CUPS server and Bonjour, please refer to my post on Tumblr. Otherwise, if you want to AirPrint-enable the printers connected to your Linux server (via CUPS), read on. Requirements:
First things first, please ensure that you are able to print a ‘Test Page’ directly from the CUPS administration page, i.e. http://localhost:631/. When you are at the Administrative Page, go to Printers -> Printer Name -> Maintenance -> Print Test Page. If there’s an issue with printing a Test Page, please troubleshoot the issue first before continuing with this post. Once out of the way, generate the Avahi service file using the python script by tjfontaine. Place the generated .service files into /etc/avahi/services/. Then, you’ll be able to see your printer(s) listed on the iOS printer selection dialog.
A peculiarity of iOS AirPrint is that devices have no printing configuration, except for a 2-sided printing On/Off switch. All printing is governed by the default configuration (as defined in CUPS) which is suitable for most users. But in my case, I decided to offer 4 different types of print services (as seen in the screenshot above), in the hope to save toner and to offer more printing choices. The other printing options are purely duplicates of the original printer with different default options applied. Let me know in the comments if you have any thoughts or suggestions. Wednesday, July 27. 2011Something is Royally Wrong in the State of SingaporeI don’t know about you, but every time I return from an overseas trip, I’ve got this very nagging and frustrating feeling that there’s really something very terribly wrong in this country called Singapore. Why in the world would people actually bother risking their lives protecting this place, this system of governance, is absolutely beyond my wildest imagination. I shall write about 2 problems that I’ve observed about thought about today—transportation and economy (in terms of manpower and production). Recently, a debate on our public transportation system was sparked by the news of requests for fare increases by the various public transportation companies. The Worker’s Party, Transport Minister Liu, Prime Minister Lee, and the National Solidarity Party (NSP) chimed in. As far as I can tell, the posture that the government has taken is to deny that there are any structural problems in the current system and to push all blame to rising costs caused by external factors, while strongly defending the status quo. If that’s the government’s position, it is clear that there will not be any changes as they have yet to acknowledge any underlying problems. While I’m not against the idea of raising fares per se, I am however against the idea of rising public transportation prices, coupled with falling service quality and standards. These factors should be mutually exclusive, not complementary. In my recent trip to Hong Kong (HK), I have noticed that HK similarly have private transportation operators, without the overcrowding and inefficiency we see here in Singapore. Their fares are not astronomically steeper and that the private operators aren’t making huge losses. So, why the difference? Having thought about it and experienced it, I believe the primary reason is the power of market forces, whereby the government takes a hands-off approach to managing public transport, somewhat similar to NSP’s proposal. Buses in HK are allowed to duplicate routes served by the MTR (HK’s Metro System), offering commuters a choice between taking a public buses and the trains. In the bus market, the transport department of the government plans and determines routes that bus operators can tender to operate. Rather than allowing a private bus company to monopolise the market, the Transport Department also operates a “public light bus” service (somewhat like a share taxi service) which offers a lower density ground transport option, possibly in direct competition or as a supplement to the standard bus routes operated by the private bus company. In essence, the government, through the Transport Department, is actually a player in the transportation market, without any form of nationalisation. This is actually a hybrid of both the WP’s and the NSP’s proposal in the management of the public transportation sector. Nobody has a monopoly, not even the government! As if there isn’t enough competition, about 18,000 taxis serve the whole of HK, most of which are privately owned. Taxi drivers that own their cabs do not have to pay rents to any taxi company and is free to run their own business according to the simple and standard fares set by the Transport Department. No nonsensical and complicated surcharges. Just a standard flag-down fare, two-tiered distance rate, toll-charges (if any) and baggages (carried in the boot, if any), 24 hours a day, 7 days a week, no variations. The free market manages the supply and demand automatically. The airport never has any cab shortages. The CBD always has cabs plying the streets. There is never a need price discriminate in order to manipulate the market demand. Why is Singapore the exception? Honestly, I have no qualms about not driving if the public transportation system can supersede it, when driving actually becomes a greater hassle. I believe many people would agree with me. The key to managing vehicle population cannot solely be based on the pricing mechanism (via COE and ERP), a more holistic approach is required by asking the right question—what does it take to get from one place to another. With the rights to own a car (COE) around the S$60,000 mark, it is clear that the COE system is causing more social problems (inflation, price-discrimination rather than needs-discrimination) than actually solving the vehicular-congestion problem. The reason why people need a car is because public transportation is horrendously underserving. The public transportation situation needs to be improved before the vehicular problem can be eased. As simple as that. Case in point: Berlin’s public transport is so developed and well-provisioned that there is hardly any traffic congestion even within the central business district during peak hours. The main problem with public transportation in Singapore is one of utility (and hence efficiency), not price or cost alone. If the government is poised to just address the symptoms with ineffective non-solutions, the mobility of Singaporeans (and by extension, the economy) is in serious trouble. Alex Au has a critique on the government’s approach to Singapore’s transportation. On subject of the economy, I have noticed that HK is similarly flooded with PRC mainlanders, compared to Singapore. They are everywhere that you can set your eyes to. The stunning difference, in the case of HK, is that the PRC mainlanders are tourists, not employees of any kind. All employment, ranging from construction to road sweeping, is held by locals who hold the HKID (permanent residency card). The only way to get a HKID is 1) to be born in HK, or 2) to have ordinarily resided in HK for a continuous period of no less than 7 years. What about Singapore? Don’t you find it strange that employment in the service industries (apart from the unglamorous jobs) are held by non-locals in Singapore? Under the pretext of keeping costs down, employers have been preferring non-locals in their hires as they are cheaper and do not come with National Service Reservist liability (more on that later). However, cheaper never equates to better. One of the greatest incentives to improving productivity and thus efficiency is the need to control cost, due to price (and quality) competition. By replacing employees with cheaper alternatives, operating costs can be reduced without the need to improve productivity, efficiency, or technology. In classical economics, the economic capacity of the country will not increase. How far can a country control its costs and grow its economy without actually improving its domestic economic capacity (by way of technology and productivity via education and the like) before the law of nature calls the bluff? With imported inflation (largely from the USA printing money), and domestic inflation (from flawed domestic policies, such as raising GST, CoE, and ERP), costs will still grow and the economy will eventually suffer due to a neglect in actual sustainable improvements. There’s only so much beating a dead horse can do. Singapore actually needs to bite the bullet and invest in raising a living and healthy horse. I believe this can explain why Singapore’s productivity is among the lowest in the world. A minimum wage may also help but that is another write-up for another day. What are the alternative solutions? Recently, Tan Jee Say, released a paper entitled, Creating Jobs and Enterprise in a New Singapore Economy – Ideas for Change, detailing a plan for Singapore’s economy. Consisting of three parts, namely 1) What’s wrong with the current Singapore growth model?; 2) A S$60 billion National Regeneration Plan; 3) Improving Singaporeans’ standard of living; The Online Citizen has a three-part summary of his 45-page long paper. Not surprisingly, the ruling party’s only rebuttals to the paper were red herrings. No substantial nor logically sound arguments against it were raised. I was hoping for a good, honest, and intellectual discourse, but all we got were mudslinging. There weren’t even any task-forces convened to look into his proposals and study their feasibilities, just an outright rejection of “we know the best”. Clearly, the ruling party is not interested in any alternative solutions (even if they could be meritious), all they want is their only solution. I actually have another proposal but I expect to be ignored. Firstly, Singapore should tighten the defence budget and instead, redirect the spending towards education. Our future lies in the younger generation, not propping-up defence machinery and promoting inefficiency at the expense of education! At the very least, Singapore’s defence budget (as a percentage of GDP) should not exceed that of other countries (technically still at war), like Taiwan and South Korea, and more importantly, should not be increasing annually. Secondly, National Service liability should be reduced to match countries that are technically still at war, such as Taiwan and South Korea. If the Taiwanese defence forces can manage with a 12-month (soon to be reduced to 4-month by 2014) long conscription, why is Singapore unable to do the same? Is our population a lot more stupid? Or is the defence force so inefficient that it needs 24 months to do what the Taiwanese can do in 4 months? With the male population relieved of 12–20 months of forced labour, the economy can actually employ these people productively. The argument that Singapore does not have enough people is moot, as the most productive part of the population is wasted unproductively through National Service. If productivity and efficiency is the issue, we can go by the Transport Minister’s logic and privatise our defence because ‘an entity that depends on Government funding and which operates on a cost-recovery basis, “would have little incentive to keep costs down”’ [1]. A good start would be to tighten the budget and limit the conscription duration. Thirdly, conscripted soldiers should be paid the market-rate (pay received by the professional “regulars”) for their contributions to the state. After all, civil servants and ministers are also paid salaries pegged to the market-rate so as to adequately compensate opportunity cost in joining public service. Unless of course, such market-rate salaries are for other reasons not publicly stated. Most certainly, the ruling party’s (and by extension, the government’s) stance is to keep the status quo and to reject any proposals, I don’t think we will see any policy changes anytime soon. This status quo is clearly troubling. Integrated Resorts to prop-up the GDP while our productivity is at an all time low, rejecting all suggestions to diversify stronger into the services industry, resisting calls to favour education over defence, denying that National Service is a drain on the nation’s economic productivity. Are these the policies that make Scandinavian countries so successful, or is Singapore in a race towards the bottom? My intuition tells me that Singapore is heading down a cliff. Even the “venerable” former Minister Mentor was said to worry that Singapore may not be able to last as long as other countries. For all you know, Singapore’s undoing could solely be attributed to the hands of his party, not the opposition as he so loves to claim. While the docile population isn’t interested in changing the status quo, the only logical step is to emigrate to a place where the government is sufficiently competent and isn’t in denial. Less fire-fighting, more pro-active. How can we expect any less from the world’s highest paid public office holders? It’ll be an insult to those who can do better for less. Wednesday, July 13. 2011Mac OS X Lion and JavaApparently, Mac OS X Lion no longer bundles the Java runtime by default and is now available as an optional, as needed, download. The Software Update prompt for Java installation will launch when it detects that Java runtime is requested to be executed. Accept and install and you’ll be able to use it system-wide as usual, or via the command line, i.e. java and javac. However, there’s one small tiny snag that Lion users ought to know: The Java web browser plugin is not enabled by default, on Safari or any other browser. If you only use Java for login to secure websites like SingPass, you may run into an error whereby the Java applet is not loaded nor initialised. To enable the applet in Safari (and hence other browsers), go to the Java Test Page and observe if the test applet loads. If the Java plugin is indeed disabled, it will show “Plugin Disabled” with a clickable arrow next to it. Click on the arrow and a prompt will appear, asking if you would like to enable the Java plugin. Click Enable and reload the page. The applet should now appear and load as usual. You can now proceed to Java-based login sites such as SingPass and see the error prompt disappear. Sunday, July 10. 2011Implementing and Enabling IPv6Update 1: I’ve added configuration for Ubuntu/Debian derived distributions. IPv6 is the solution to solving address-space scarcity with IPv4 addressed networks. The next generation solution has been in development since 2001 and has only been seen to be deployed to live-production environments in recent months, no less thanks to World IPv6 Day. The biggest trouble with migration to IPv6 is that of compatibility. IPv6 and IPv4 hosts are not mutually intelligible—only IPv6 hosts can communicate with IPv6 servers, IPv4 with IPv4. This is a classic case of interoperability failure and Dr D. J. Bernstein has written about the IPv6 deployment mess. Ideally, IPv6 and IPv4 should be compatible which allows seamless transition and graceful degradation for clients that do not yet support the new IPv6. However, to bridge the gap between IPv6 and IPv4, 3rd party, non-native solutions have to be employed, ranging from tunnelling to translation (4in6, 6to4, 6in4, Teredo, NAT64). Given this very intrusive and labour-intensive requirement in preparing for the eventual total migration to IPv6, I’ll attempt to document my experience in setting up IPv6 connectivity for my home network (to other external IPv6 servers/hosts), to make things easier if your network configuration is similar to mine. Applicable situation:-
In this post, I shall specifically address configuring a router that is a GNU/Linux machine with sysvinit scripts (and Ubuntu/Debian derived distributions) and radvd (router advertisement daemon—DHCP replacement). To get IPv6 connectivity when your ISP does not offer direct/native connectivity, one will require a tunnel broker service where all IPv6 packets will be encapsulated in tunnel with IPv4 as the link-layer (don’t fret too much if you didn’t catch how it works technically). I recommend Hurricane Electric’s free IPv6 tunnel broker service. Each account allows you to create up to 5 tunnels, more than enough to support a home network (you’ll only need 1). To begin, create an account on the tunnel broker site and login. Once done, select “Create Regular Tunnel” option. Fill-in the form, specifying your IPv4 address (issued by your ISP—Don’t worry, this address can be updated dynamically when it changes). Then, verify that a tunnel server that is geographically closest to you has been pre-selected. Finally, click on the “Create Tunnel” button. On the following page (tunnel details), you will be assigned a tunnel server IPv4 address, a tunnel server IPv6 gateway address, your tunnel client IPv6 address, and a routed IPv6 prefix for your personal use on your network (ISPs in future assign IPv6 address by prefixes, which gives each subscriber ). Take note of these 4 different addresses as you will need them to configure the tunnel later. For the rest of the document, I’m going to focus on Mandriva Linux (or Ubuntu) as the router. Feel free to follow or adapt accordingly if your machine uses SYSVINIT scripts (or ifupdown). Otherwise, look under the “Example Configurations” tab for copy-paste solutions to other OS (especially for Airport Extreme/Time Capsule users). Set-up the tunnel by creating the file with the following in /etc/sysconfig/network-scripts/ifcfg-sit1 (Ubuntu/Debian, see below):
Replacing the last three lines with appropriate substitutions. Ubuntu users, edit and add the following lines into /etc/network/interfaces:
Create a default IPv6 route through the tunnel with the following in /etc/sysconfig/network-scripts/route6-sit1 (not necessary on Ubuntu/Debian):
Substituting with your assigned addresses as necessary. Enable IPv6 globally by adding the following to /etc/sysconfig/network (not necessary on Ubuntu/Debian):
Bring up the tunnel with one of the following commands:
Now, try testing IPv6 connectivity with IPv6 enabled network diagnostic tools.
You should see valid responses from the commands above. If not, re-check your configuration and try again. Once you’ve got IPv6 outbound connectivity working, you’ll need to advertise this prefix to the rest of your clients within your network. The radvd will do exactly this for you, but it requires some configuration. Assuming the internal-facing interface is eth0 and the “Routed IPv6 Prefix” is 2001:470:1:1::/64, in /etc/radvd.conf:
Restart radvd to have the entries take effect. Now, your clients within your network will automagically be configured with an IPv6 address with your assigned routed prefix. Amazing isn’t it? Visit http://www.kame.net/ to see the dancing turtle. You may also want to check out the IPv6 connectivity test at http://test-ipv6.com/. If you intend to have your router accessible by a public IPv6 address, assign an IPv6 address from your prefix to your external interface. Assuming your external interface is eth1 (and that your routed IPv6 prefix is 2001:470:1:1::/64), add the following lines to /etc/sysconfig/network-scripts/ifcfg-eth1 (Ubuntu/Debian see below):
You can assign any number (after the ::) to your network interface, but I chose 1 in this example. On Ubuntu/Debian, edit and add to /etc/network/interfaces:
Reload the interface by doing the following (applies to both Ubuntu and SYSVINIT):
Your router will now be accessible externally via IPv6. If you have your own domain name, you may want to add the IPv6 address as an ‘AAAA’ record. This concludes my brief walkthrough/HOWTO on enabling IPv6 connectivity through an IPv4-only ISP. Feel free to email me or comment below for clarifications. Friday, July 8. 2011The Hit ListBelieve it or not, The Hit List’s iOS Companion App by The Potion Factory is finally released after 2.5 months of being rejected and resubmitted. To be honest upfront, I was a user of Cultured Code’s Things but I got annoyed, frustrated and dissatisfied with the roadmap and progress of Things, both on the Mac and iOS front. Things’ Cloud-based Sync has been in the works for nearly 2 years and a private invite-only beta has only just been launched, syncing between Macs only. Their development speed and customer responsiveness regarding its future development plans is just plain awful. Surprisingly, The Hit List (THL), once seen to be abandoned for being untouched for 2 whole years, suddenly came back to life and graduated to a version 1.0 release. In addition, Cloud-based Sync was functional and available out of the box, albeit not free (but affordable). Cultured Code and Things still do not have anything to show nor deliver. I jumped at migrating to THL immediately since I already had a license to it from my MacHeist bundle, and the architecture of Things limiting my workflow and organisation of tasks had already got me looking for alternatives. THL is immensely more flexible and resilient. I bought the THL iOS app the moment it was announced to be approved and redeemed my MacHeist complementary 3 months free Sync subscription. Setting up sync was a breeze on both the Mac and the iOS application. Fill in your username and password and an initial full-sync will be performed. Subsequent syncs are blazingly, unbelievably fast. Even faster than the WiFi sync solution that Things has. Overall, the THL iOS app is a good subset of the features available on the Mac, nothing missing of show-stopper severity, and I believe that most user feature request will be satisfied in subsequent updates. For more usability information, AppAdvice has written a rather reasonable review of THL iOS app. If you’re wondering between Things, THL, and OmniFocus, here’s an analogy that you might want to consider. Things is the simplest and least complex (possibly more restrictive) of the lot, while OmniFocus is the most complex and flexible (possible feature overloaded and expensive). THL falls between the two applications nicely, with a good price. So, if you find OmniFocus too complex and want something slightly simpler, THL may be the task management application that you’re looking for. Give them all a whirl to see what suits you best.
« previous page
(Page 2 of 99, totaling 792 entries)
» next page
|
MeGreetings to you, brain surgeon. Hi there. Welcome to the mind of an INT{J,P}, CDIS. I hope you can find your way around without getting lost. The pensieve is messy to the untrained eye. That's life isn't it. The fun part of life is to untangle the mess you've gotten yourself into. Follow my Twitter for time-sensitive or mundane updates, Tumblr for interesting links and quotes, Posterous and Flickr for photos, and this Blog for opinion and observations.
DownloadsQuicksearchPopular EntriesGoogle ReaderLicense |