My first foray into Android app creation has come to fruition. NZBdroid is live in the Android Marketplace, both for $2.00 $0.99 and also COMPLETELY free. It's up to the user whether they want to buy it or not, which seems to me to be a pretty cool way to do things.
What NZBdroid does is allow the user to click on .nzb files in the Android browser (or in any app, really) and have that .nzb file sent off to your 'net-connected instance of SABnzbd+, where it will be downloaded and ready for you to access it when you get home.
Anyway here's a little demo of the NZBdroid in action, clicking a link on tvnzb.com (but keep in mind, the Android emulator runs really slowly on my computer):
Part of my webhosting woes of late is that, like Wordpress, my blog software (Serendipity) is horribly dependent upon massive amounts of database interaction. A few hits and suddenly your server starts leaking smoke and your webhosting provider shuts you down. This is obviously not optimal, and a big part of the reason I made the switch to Dreamhost's Virtual Private Server platform in the first place. Dreamhost's VPS came with its own host of problems, but needless to say, database server overloading was still somewhat of a problem there. (Actually, I maintain that it is MORE of a problem, but that's something you'll have to take up with your helpful Dreamhost Support staff -- you know, if they ever get back to you.)
Because this is such a problem on Wordpress there are quite a number of different plugins to alleviate this, all of which have pros and cons, meaning that it takes some research to determine how best to go about caching your content. Being a lesser-used platform than Wordpress, Serendipity doesn't have quite the number of solutions to help cache the content and relieve the database server from some of its tireless work, so I set about trying to come up with a solution.
While reading up on some of these plugin-based solutions on Wordpress's platform, trying to see if there was some technique I could move over to Serendipity, I stumbled across an ingenious idea:
Squid is designed to sit between your browser and the rest of the internet, efficiently caching content so that your browser doesn't have to re-download it all the time, effectively "speeding up" your internet connection. This is especially helpful in a network situation where you have a number of people using the same internet connection. When Bob loads up the day's LOLcats, squid will cache them locally so that Steve's computer doesn't have to download them yet again. Pretty common setup, and very effective at what it does.
Anyway, someone far cleverer than I realized that one could use squid the other way 'round: by running it on your web host, intercepting every incoming request seeking content from your site. Squid will happily pass requests through to the web server, where content will be fetched from your database. But if squid knows it has a recent copy in memory, it will send that back to the browser instead, never letting it touch your webserver -- and thus any databases -- saving yourself some pretty significant amount of RAM and CPU.
I'm here to report that it works like a charm. Granted, there are quirks -- like comments not immediately displaying -- but that's a trade-off I'm more than willing to make.
If you'd like more information, here are the instructions I followed to get this setup running on my new host: Reverse Proxying with Squid.
Having finally had it up to here with Dreamhost, we've undertaken the process of finding a new host that will meet my needs. Those needs being:
prompt support replies
not costing an arm and a leg
not being a total pain in the ass to deal with
Having been with Dreamhost for a number of years, and now having tried out a series of other hosting providers, I can honestly say that save for my first bullet point, Dreamhost far exceeds every other hosting provider I've seen. They really "get it" over there.
If'n your hosting needs are limited to flat HTML without any reliance on databases (and you don't mind the occasional incommunicado outage) I very much recommend them.
If, however, your needs are a bit more technical, I heartily recommend GIVING UP ON YOUR NEEDS, because I went through four different incompetent hosting providers looking for one that can handle my crazy hodgepodge of web-fu.
Flat HTML was awesome in 1994, and it STILL IS. Your blood pressure will thank you.
I don't have much to say lately, but I need to say this:
Google's Android mobile phone platform is freakin' AMAZING. T-Mobile's "G1" handset -- which is the first of the commercially available Android phones -- is very nearly as awesome a device as is the underlying platform.
Imagine the offspring resultant from a drunken one-night-stand between a Sidekick/Hiptop and an iPhone. That pretty much describes the G1; it is fully touch-enabled and has a wealth of downloadable applications ala iPhone, but boasts the flip-out keyboard and actual navigation buttons which are the hallmark of a Sidekick for those times you don't feel like looking like a total tool rubbing your fingers all over your phone.
Best yet, you don't need to deal with any of the iTunes bullcrap that every iPhone owner has to admit to disliking dealing with. If you want to put mp3s (or oggs, w00t!) on it, you simply plug a NORMAL USB CABLE into it and it shows up as a removable drive. Copy your music over and you're good to go. Same with photos and videos. Software updates come automatically over the air, so no dealing with the endless cycle of backing up and restoring when iTunes makes a mess of things. (Or, if you're a nerd like me, you can manually download the firmware update and apply it yourself.)
Unlike with iPhone, users can install applications that modify very nearly any aspect of the device, and are not at the whims of Apple as to whether the app will be "allowed" or not. For instance: I have an app installed that can turn on and off features when certain criteria are met. When the GPS finds that I've arrived at home, it automatically enables wifi. When I leave it turns it off again to preserve battery. If my battery drops below a certain point I've got it set to turn off GPS as well to further save battery. Try doing that with iPhone :).
Want to set an mp3, m4a or ogg file as a ringtone? No problem, support for that is built in.
All-in-all, Android has far exceeded my expectations, and is quite the anti-iPhone platform that I'd envisioned. I highly recommend it.
On Tuesday, July the 22nd, the fantastic British sitcom, SPACED, (from the minds of the people who brought you Shaun of the Dead and Hot Fuzz) gets its long-awaited US DVD release.
If you haven't already imported a copy from the UK, I highly, HIGHLY recommend you pick up a copy of the US release. Highly.
I've not met a geek who doesn't like this show, so get in on the ground floor while you still have the chance to be the one telling people about it.
Update: This tutorial is largely superseded by the much nicer and easier 'Kindle For PC' method: see it here.
UPDATE 2: included Preston Lee's online PID generator.
D got a big fat tax refund, so she recently bought one of those new-fangled Amazon Kindle thingies for purchasing and reading books in an electronic form. (She loves it.)
I like to read books in an electronic form on my iPhone, but find that it's pretty hard to come by them legally; there are many different sellers and formats, some of which have certain books but not others. Sometimes they have the book, but not in a format I can do anything with. It's generally easier just to illegally download them from torrent sites.
Amazon has tons and tons of books available for Kindle, and have chosen the standard MobiPocket format as the one their reader uses, meaning it is theoretically trivial to purchase them and convert them to something else. Except that they won't sell them to you unless you have already purchased a $400ish Kindle on which to read them. Meaning you don't need to convert them...
In any case, now that our household has a Kindle, it frees me up to purchase books from Amazon in Kindle format without actually having a Kindle myself. I then just remove the DRM that Amazon puts in the files (to keep people from converting them, natch), and then convert them to HTML or txt to read in Books.app on iPhone. Want to know how to do the same thing?
Howto:
Step 1) Find someone with a Kindle.
Step 2) On their Kindle, go to the Settings menu, and type '411' on the keypad. This will bring up a little information dialog with a bunch of things in it, of which you only need the Serial. It is a 16-character string of letters and numbers. Write it down.
Step 3) Ask the Kindle's owner to buy a book for you. Give them some money so you don't look like a mooch. Once you've given them the money, ask them to log in to their Amazon account and navigate to their 'Kindle Downloads' page from your computer. When they complain, mention that you've already given them money. The Kindle Downloads page will list all the books they've purchased, and yours should be right at the top. Click 'Download to computer' and you'll get a file named 'Title-of-Book.azw'
Step 4) Download MobiDeDRM.zip, which is a small suite of Python scripts that some kind soul wrote and then distributed through links that expire all the time and can be kind of a pain to track down. I've hosted them from my site so that they won't expire. This .zip file contains mobidedrm.py, mobidedrm2.py, kindlepid.py and mobihuff.py.
(These scripts require that you install Python on your system, which is something outside the scope of this howto. I'm on linux, but there's a Python for Windows called "ActiveState Python." Google will help.)
After unzipping the archive, open up a terminal window and pass the Kindle's serial # (which you previously wrote down) to kindlepid.py. Something like this:
python kindlepid.py XXXXXXXXXXXXXXXX
Where all those Xs are replaced with the Kindle serial number. It will return something that looks like this:
Mobipocked PID for Kindle serial# XXXXXXXXXXXXXXXX is Z1QFCDQ*74
Make note of that last 10-character gibberish.
The easiest way to get your PID (or secret code used to unlock the Kindle book) is to use Preston Lee's online Kindle PID generator. Simply follow the instructions there.
Now that you've got your PID, we'll need to remove the DRM from any books purchased for that Kindle.
where my 10-character gibberish string is replaced with the one you made note of in the last step. This will take about a minute, and when it finishes you'll see:
Decrypting. Please wait... done
Now you will have a decrypted MobiPocket-formatted ebook that you can read in any MobiPocket reader.
If, however, you want to convert it to HTML to read on any device you wish, you'll want to install MobiPerl. (This, of course, will require you to install Perl. MobiPerl's website will walk you through that.)
6) With MobiPerl installed, do this:
mobi2html Title-of-Book.mobi
This will create a directory named 'unpacked' that will contain Title-of-Book.html
Things that can go wrong:
Amazon seems to compress longer books in a slightly different manner than shorter books. If your resulting .mobi file and/or .html file are oddly gibberishy (for example, if the first line starts in the middle of a sentence, and clearly not the beginning of the book), let's go back to step 5.
Step 5b) These 'huffdic-compressed' books require a slightly different script to remove the DRM. Do this:
This script will output the .html file in the directory from which you are running it.
All in all, this is as much of a pain as it looks, but the selection and availability of books on Amazon makes it worthwhile to me. They have far more books than The Pirate Bay does, and I feel better paying for them
Good luck.
Update: several readers have alerted me that there's a much newer version of mobiDeDRM available. You can download it here.
I've been recently toying with OpenID stuff, and found that it is far more useful than it seems at first glance. What's not apparent is that if you have a website, you can configure things to use its URL as your OpenID even if you're using AOL/LiveJournal/MyOpenID.net/etc for your OpenID authentication. This allows you to re-configure it at a later date using any service you'd like, without having to change your OpenID sign-in info. It doesn't get much more "open" than that.
It's kind of complicated, and it requires a fair bit of reasearch to find the info you need to make it work, so people who are aware of this functionality probably don't care enough to do the work. It's with that in mind that I've done the research and created a little configurator-thingy to make it as easy as possible for anyone hosting a website to set this up.
Introducing MOREopenID.org. One selection and two input boxes gets you one file to upload to your server and a short block of tags to paste into your website's head section, putting you in complete control of your OpenID identity forever. If you decide to change OpenID providers at some point, simply come back and do the steps again.
Things are still pretty rough at this stage, so I'd appreciate it if you wouldn't social-network it to death (yet) or anything, but I'd be much obliged if you'd try it out and give me feedback on what I should do to make it better -- and especially so if you have any problems. If any part of it at all is confusing, I would like to hear about it.
UPDATE: I somehow managed to break the below-mentioned Greasemonkey script before uploading it to userscripts.org. If you tried it out and nothing happened, the fault is mine. It is all fixed now.
Well, this problem has not yet been addressed by the Google team... but it has been addressed by me.
I greased up the monkey and with one fell swoop made Google Reader's interface one gripe cleaner. My new Greasemonkey script copies the title/URL from the top of every item and includes it at the bottom as well.
If, on the other hand, you're mystified by this whole Greasemonkey thing, I'll give a brief explanation. Greasemonkey is a Firefox add-on that lets users create scripts that will affect the content of web pages before they're displayed in the browser. There are thousands of pre-made scripts to be found at userscripts.org, affecting all sorts of popular sites, and you can always badger your favorite nerds into making custom ones. Some of my favorite pre-made scripts are:
1) AutoPagerize, which causes page 2 (then 3 etc) to automatically be inserted at the end of page one for many popular site. Tired of 'next'ing your way through your Google search results or Twitter timeline? This handy script just requires you to scroll and the next bunch magically appear.
2) YousableTubeFix, this does a bunch of handy things to YouTube pages, the most handy of which is defaulting the the "HD" videos, and increasing the size of the player dramatically. YouTube has never been so pleasant.
That ought to be enough to get you started, but with Greasemonkey, pretty much anything you've ever dreamed you could do with a website is possible.
I haven't been sleeping too well as of late, meaning I've not really had any dreams. This morning I was trying to come up with the sorts of dreams that I wish I could have, ending up with this:
Having just been introduced to the dubious legality of muxtape.com, I decided to see if I could make it a bit more useful. I've been meaning to play around with greasemonkey again since it'd been a couple years since I had, so this seemed like the perfect opportunity.
I found a script at userscripts.org that generates 'download' links for each of the songs on any muxtape page, then added to it the ability to generate an m3u (playlist file) which you can click to stream all the songs in your audio player of choice. No more having to leave a browser page open just to listen to muxtapes. No more having Flash take down your browser. Awesome.
If you'd like to add this functionality to your muxtape experience, simply install Greasemonkey (or whatever IE/Opera plugin does the same thing) and head over and install muxtape downloader / m3u enabler from UserScripts.org.
If you've not seen muxtape before, head on over and listen to my first attempt at online mixtapery: nyquildotorg.muxtape.com
(Is there any interest in enabling 'podcast' functionality to your muxtapes, allowing people to subscribe to them in iTunes/whatever and have them auto-download?)
After several months of being told by people that I trust that it's a really funny show, and also several months of me explaining just why the jokes aren't funny (my rebuttals sounded hilarious even to me), I decided that perhaps as a geek myself, I may just be too close to the subject matter to see it objectively. After all, I DO carry a man-purse, I DO have conversations about fiction as if they were real, I DO have difficulty with OCD things like always sitting in the same spot, and I do exhibit most of the social awkwardness that the characters on the show do. I began to wonder if it would be possible to:
a) objectively view the show with all those things in mind
and
b) find it funny?
It was with this in mind that D and I sat down to once-and-for-all determine whether the show does, in fact, suck ass as much as it seemed to upon viewing the pilot. We've now watched every episode, and I'm here to report to you that... I was wrong. I actually like that show quite a bit. (I stand by my review of the pilot, though, it's still terrible.)
I'm not sure you realize how much it pains me to not only think this way, but to also publish the thoughts on the internet, but it's completely true. Viewed outside the context of a show that I thought should be trying to APPEAL to geeks, it does an excellent job of making FUN OF geeks in a way that geeks like me can totally appreciate. It's funny because it's TRUE. You just have to get past being insulted by it. One of my biggest complaints was that it doesn't accurately reflect geek culture, but now I see that it actually does. Sure, some things are exaggerated, but it's very funny, appealing to the primarily non-geek viewers are much as it can to the geek ones.
I hereby have to revoke my completely negative criticism of this show and apologize to the people involved with it. <i>The Big Bang Theory</i> does have quite a bit of exceptionally funny stuff in it, and would be what I would call a "perfect show" if they'd just get rid of that damned laugh track. Despite the laugh track, I have to say I like it quite a lot, putting it just a bit under <i>The IT Crowd</i> on my "shows that I actually like" graph.
I know we're not the bestest of friends, but you may have noticed that we spend a rather large amount of time together. I've been thinking: I'd like for you to do something for me to make that time just a little bit more pleasant.
You know how I use <a href="http://reader.google.com">your Reader</a> to read all the blogs and stuff to which I subscribe? (Of course you do. You know EVERYTHING about me.) Anyway, I frequently find that, after reading an article in
Frustrated with the epic suckiness of Gallery2 photo album.
Looked into Zenphoto, and it seemed like a great solution. Sadly, Eye-Fi does not support directly uploading pics to it, which is something I can no longer live without. It doesn't take long at all to get used to your pictures magically showing up online; manually transferring them from my camera to computer to internet makes me feel like Elijah Wood in <i>Back to the Future II</i>. ("You have to use your HANDS? It's like a BABY's toy!")
Being a total nerd, I quickly thought up a solution to this problem. After photos upload to Gallery2 they live in a specific directory on the server. Albums are even sub-directories within said directory. Zenphoto can monitor a directory for new photos, pulling albums from subdirectories. SO, my solution was to use Gallery2's directory as Zenphoto's 'incoming' directory. Now when I turn on my camera within range of my Wi-Fi, it uploads them to my Gallery2 installation, and then the photos magically show up in my Zenphoto installation as well. Sadly Zenphoto is much more limited in the things it can do and thus is not the magical-happyland solution I was expecting, leaving me with two concurrent sub-par photo albums. But at least they're in sync, so if one of them becomes less sucky at some point it will be easy enough to pick it over the other.
For those who want to see the difference, <a href="http://pics.nyquil.org">pics.nyquil.org</a> is the Gallery2 version, while <a href="http://photos.nyquil.org">photos.nyquil.org</a> is Zenphoto.
We've been home from Australia for over a week now. Haven't felt much like writing or much of anything else, for that matter. In an email to Marcus, I likened the feeling to that of Buffy the Vampire Slayer after she got killed and then magicked back to life again, finding that she liked it a whole lot better in Heaven, and that she's rather perturbed at being back with all those burdens and responsibilities again. Australia is my Heaven, apparently.
Been pretty jetlagged after flying home. Getting over netlag as well; it's good to be connected once again. Seriously, the netlag was harder on me than the jetlag was. I think I have a problem.
It's been hard to sleep in this new timezone; midnight comes and goes without the slightest tiredness, and I've been consistently sleeping very late as a consequence. Going to Australia wasn't much of a problem in the jetlag department, but coming home was significantly worse. I guess late-night sleeplessness leaves me more time to spend with Jessica Fletcher. (It's not cheating if she's fictional, old, and just solving mysteries with me, right?)
I've been tinkering around with website stuff here and there. For several days after my return, whenever iPhone would check its "gps" position, it would occasionally return a latitude and longitude of 0. This had the effect of centering the map up at the top of nyquil.org near to the Louvre in France. I may have just traveled from the other side of the world, but I assure you, France was not on the trip. In any case, if ever you need to know the coordinates required to blow up the Louvre with ICBMs, just put zero in for each; that'll be close enough for horseshoes and ICBMs. I've not got my map-moving script ignoring any position updates of lat/lon 0/0. This may come back to haunt me if I ever decide to visit the Louvre, but I'm not planning any such trip any time soon.
Since returning home after spending scads of dollars -- both American and Australian -- over the last few weeks, we've been tightening our belts with some budgeting. This involves much less eating out, and significantly more cooking at home. This is something we've needed to do anyway, it's just so gosh-darned hard to get motivated. Being broke is great motivation. I've been trying all sorts of interesting things with relative success, so I may have to resurrect Cooking With Kooks.
Man, if there was ever any doubt as to how much of a geek I am, it's pretty much settled now. Dave and Ben are attempting to teach D how to surf, whilst I'm sitting here on the beach blogging. All the bikini-clad sheilas are undoubtedly checking out the fully clothed pasty geek hunched over his tiny green toy laptop typing away furiously. I can tell that they want me.
I'm not much of a swimmer and thusly am not much of an enthusiast of water sports, but I have to admit that it looks like fun. I never really liked swimming much in the first place, but after nearly drowning around the same time my man-boobs began to come in, I abandoned it altogether. I told them that I probably wouldn't be going out, but my resolve is weakening. They did bring a lycra surf top thingy, though... that might both suppress the man-boobs and protect my pasty white torso from the sun's harmful rays...
Oh, look's like they're headed back in, so mayhap I'll give it a go.
Oh man. Surfing is fun. And tiring. I'm positively knackered after only about an hour or so of learning. I managed to get to my feet a few times -- which balances out the few times I completely nose-dived into the wave, coming up sputtering and red-eyed. I only mowed over two children in the process, but don't worry: the little tykes were waaay too good at surfing and deserved it for showing us all up. Cheeky little blighters.
Ben and Dave left me a board, so I may give it another go tomorrow morning before brekkie. Surfing before brekkie. I think I'm fitting in here rather well.
We have to leave in just over two days, which -- despite this being the longest holiday upon which I've ever been and that I'm usually ready to head home right away -- makes me a very sad panda. It's been less than two weeks and I've already adopted much of the lingo, the dress, the laid-back attitude and even the disdain for American culture. (Did you know that Americans don't like beet-root on their hamburgers? That's complete lunacy!) I even enjoyed the heck out of the ham in my eggs Florentine yesterday. Now I just have to figure out a way to move here permanently some day, because it's clear that I was born in the wrong part of the world.
This post is beginning to reach the epic length all mine have been as of late and I lack the time to make it shorter, so I'll go ahead and bid you farewell once again.