Skip to content

Instantly share code, notes, and snippets.

@tekknolagi
Created January 20, 2014 18:54
Show Gist options
  • Save tekknolagi/8526671 to your computer and use it in GitHub Desktop.
Save tekknolagi/8526671 to your computer and use it in GitHub Desktop.
[
{"title":"The cost of applying to college: data",
"url":"/blog/the-cost-of-applying-to-college-data/",
"content": "<p><strong>NOTE:</strong> A previous version of the post had incorrect math; this was due to faulty JavaScript used to add the numbers up. The current and correct version is below. If the numbers do not seem different, please clear your browser cache and refresh.</p><br /><br /><p>I just finished applying to college. It feels great. I can get some work done now. Before that, however, I’ve been meaning to figure out exactly how much it cost to apply to college. Here’s the breakdown. All figures are in USD.</p><br /><br /><p><strong>Schools applied to</strong></p><br /><table><thead><tr><th>School</th><th>Application cost</th></tr></thead><tbody><tr><td style=\"text-align: left;\">Cal Poly</td><td style=\"text-align: left;\">$55</td></tr><br /><tr><td style=\"text-align: left;\">UC Berkeley</td><td style=\"text-align: left;\">$70</td></tr><br /><tr><td style=\"text-align: left;\">UC Santa Barbara</td><td style=\"text-align: left;\">$70</td></tr><br /><tr><td style=\"text-align: left;\">UC Irvine</td><td style=\"text-align: left;\">$70</td></tr><br /><tr><td style=\"text-align: left;\">Pomona College</td><td style=\"text-align: left;\">$70</td></tr><br /><tr><td style=\"text-align: left;\">Brown University</td><td style=\"text-align: left;\">$75</td></tr><br /><tr><td style=\"text-align: left;\">Carleton College</td><td style=\"text-align: left;\">$0</td></tr><br /><tr><td style=\"text-align: left;\">Grinnell College</td><td style=\"text-align: left;\">$0</td></tr><br /><tr><td style=\"text-align: left;\">Harvard College</td><td style=\"text-align: left;\">$75</td></tr><br /><tr><td style=\"text-align: left;\">RPI</td><td style=\"text-align: left;\">$70</td></tr><br /><tr><td style=\"text-align: left;\">Skidmore College</td><td style=\"text-align: left;\">$65</td></tr><br /><tr><td style=\"text-align: left;\">Tufts University</td><td style=\"text-align: left;\">$70</td></tr><br /><tr><td style=\"text-align: left;\">University of Illinois at Chicago</td><td style=\"text-align: left;\">$50</td></tr><br /><tr><td style=\"text-align: left;\">University of Pennsylvania</td><td style=\"text-align: left;\">$75</td></tr><br /><tr><td style=\"text-align: left;\">Washington University in St. Louis</td><td style=\"text-align: left;\">$75</td></tr><br /><tr><td style=\"text-align: left;\">Willamette University</td><td style=\"text-align: left;\">$50</td></tr><br /><tr><td style=\"text-align: left;\">WPI</td><td style=\"text-align: left;\">$65</td></tr><br /></tbody></table><br /><p>source: Common Application</p><br /><br /><p><strong>Test registered</strong></p><br /><table><thead><tr><th>Qty</th><th>Test</th><th>Registration cost</th></tr></thead><tbody><tr><td style=\"text-align: left;\">2</td><td style=\"text-align: left;\">ACT w/ writing</td><td style=\"text-align: left;\">$52.50</td></tr><br /><tr><td style=\"text-align: left;\">2</td><td style=\"text-align: left;\">SAT</td><td style=\"text-align: left;\">$51</td></tr><br /><tr><td style=\"text-align: left;\">5</td><td style=\"text-align: left;\">SAT II</td><td style=\"text-align: left;\">$24.50</td></tr><br /></tbody></table><br /><p>source: ACT and SAT websites</p><br /><br /><p>My case is extreme (due to extenuating circumstances for some test dates), so my number will be larger than most by about $75. Additionally, despite taking the ACT, I still needed to take the SAT to qualify as a National Merit Scholar finalist.</p><br /><br /><p><strong>Tests reported</strong></p><br /><table><thead><tr><th>Qty sent</th><th># Tests to send</th><th>Test</th><th>Report fee</th></tr></thead><tbody><tr><td style=\"text-align: left;\">16</td><td style=\"text-align: left;\">2</td><td style=\"text-align: left;\">ACT</td><td style=\"text-align: left;\">$12</td></tr><br /><tr><td style=\"text-align: left;\">1</td><td style=\"text-align: left;\">1</td><td style=\"text-align: left;\">SAT</td><td style=\"text-align: left;\">$11.25</td></tr><br /><tr><td style=\"text-align: left;\">7</td><td style=\"text-align: left;\">2</td><td style=\"text-align: left;\">SAT II</td><td style=\"text-align: left;\">$11.25</td></tr><br /><tr><td style=\"text-align: left;\">8</td><td style=\"text-align: left;\">1</td><td style=\"text-align: left;\">SAT II</td><td style=\"text-align: left;\">$11.25</td></tr><br /></tbody></table><br /><p>source: ACT and SAT websites</p><br /><div id='totalCost' /><br /><p>Dang. Applying to college is expensive.</p><br /><script src='//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js' type='text/javascript'><![CDATA[<br />]]></script><script src='/assets/js/applying-to-college.js' type='text/javascript'><![CDATA[<br />]]></script>"
},
{"title":"Writing my first Chrome extension",
"url":"/blog/writing-my-first-chrome-extension/",
"content": "<p>I decided to write my first Chrome extension the other day. I was on Reddit somewhere with slow internet, and gifs were taking <em>forever</em> to load. <a href='http://gfycat.com/'>gfycat</a>, however, turns gifs into WebM videos — thereby decreasing filesize and increasing load speed. I started manually loading the gifs, but that took forever. Why not write a Chrome extension? My journey began.</p>"
},
{"title":"On test driven development",
"url":"/blog/on-test-driven-development/",
"content": "<p>In July, I got contracted to write an API for an iOS app. I elected to use <a href=\"https://github.com/intridea/grape\">Grape</a> on top of <a href=\"http://rack.github.io\">Rack</a>. It started off pretty manageable, with routes being fairly distinct from one another, and not relying on one another much. However, as the code grew, it became more and more difficult to track down bugs. I spent hours, sometimes days, hunting down minuscule bugs in the database code, database interactions, in everything. Bugs started appearing out of nowhere as I added new features. I decided I had enough, and wrote some tests.</p><br /><br /><p>I had never written tests before. I’d implemented some breakpoint-type-things that would print out the status of different variables, but never formal unit tests. Despite reading article after article on Hacker News and r/programming about how tests were absolutely essential, I ignored them. Big mistake.</p><br /><br /><p>I wrote tests to cover every outcome for every API route. It was lovely. Seeing green dots pop on the screen was like magic. Tests were fantastic. But… what then? Write a route, write a test, move on? I’d heard of something called Test Driven Development, where the developer will write tests to cover the outcomes he <em>wants</em>, then write a route to match that. Before bughunting like crazy, that sounded like nonsense. Why not just go ahead and develop, maybe write tests later? A couple reasons:</p><br /><br /><ol><br /><li><br /><p>Test writing can be <em>exhausting</em>.</p><br /></li><br /><br /><li><br /><p>If no formal “spec” exists on paper, it is difficult to verify that the code works as intended.</p><br /></li><br /></ol><br /><br /><p>I started writing tests before routes. Everything got easier.</p><br /><br /><p>I’m probably not going to drive <em>all</em> of my development with tests, but for large projects it eases a lot of pain.</p>"
},
{"title":"_why is back",
"url":"/blog/why-the-lucky-stiff-is-back/",
"content": "<p>If you haven’t heard all the hubbub in the Ruby community, it appears as though prominent programmer why the lucky stiff is back. Several years ago, he disappeared completely, taking almost all traces on the internet with him. 102 days ago, in January, he updated his <a href=\"http://whytheluckystiff.net\">site</a> for the first time since he disappeared.</p><br /><br /><p>It was a cryptic message:</p><br /><br /><p><code>Public Print Queue SPOOL/DESOLEE 2012-01-06T08:21Z</code></p><br /><br /><p>Some smart people figured out that it was an HP PCL file, and converted it into a PDF.</p><br /><br /><p>Recently, _why has been uploading more and more of these files… and so I present to you a complete and live-updating collection of these files! Take a look <a href=\"http://why.apps.hypeno.de\">here</a>.</p>"
},
{"title":"Palo Alto Hackathon",
"url":"/blog/palo-alto-hackathon/",
"content": "<p>Palo Alto’s Henry M. Gunn High School is hosting a hackathon open to PAUSD students! It will take place on April 21, 2013, and will take place at Gunn.</p><br /><br /><p>All high school programmers in Palo Alto should definitely come and see what it’s all about - there will be free food, drinks, coffee, and good music.</p><br /><br /><p>The signup sheet can be found at <a href=\"http://goo.gl/9z3vG\">this Google Form</a>.</p><br /><br /><p>See you there!</p><br /><br /><p>Update: It went swimmingly. <a href=\"http://photos.bernsteinbear.com/post/52445522971\">Here</a> are some photos!</p>"
},
{"title":"Poor experience with Rackspace",
"url":"/blog/poor-experience-with-rackspace/",
"content": "<p><em>Before you read this post, please note that I do write and host most of my code on a Rackspace VPS, and in fact am writing this in a remote emacs session.</em></p><br /><br /><p>On to the story.</p><br /><br /><p>My cousin Rafi asked me to help him set up a private Minecraft server so he and his friends could play alone.</p><br /><br /><p>I, of course, defaulted to my then-favorite VPS provider: Rackspace. I created an account for him with my email address (so I could handle the tech stuff), his mom entered her credit card, and then we finished making the account.</p><br /><br /><p>I spun up a Debian 6 64bit server, downloaded the server .jar, and ran it in a tmux session. We ate dinner.</p><br /><br /><p>45 minutes later, we tried to connect - but it was offline. Funny. I tried to SSH in, but to no avail - connection timeout. I attempted to log into the control panel… that’s weird. Username/password combination unrecognized.</p><br /><br /><p>I tried for about 15 minutes… nope. Odd. I logged into my personal account and chatted support, gave them the other account details, everything needed to prove that I was the owner of the account.</p><br /><br /><p>The kind support representative told me that Rackspace had billing trouble with my account, helped me fix it and pay the invoice, but told me he could not bring back the suspended account from the dead.</p><br /><br /><p>I had to leave from my cousin’s house from the night, so I told him I’d try and set it up again later.</p><br /><br /><p>A month passed, and we were in an Apple store in Scottsdale, Arizona. We tried setting up again, but within two minutes we got an email saying that the account did not get approved. How strange.</p><br /><br /><p>I tried again, but with the same result. To be clear, I tried with a different email address, username, password, credit card, and security question.</p><br /><br /><p>I Googled about this situation, but found nothing.</p><br /><br /><p>I called up the number mentioned in the notification email, gave them my identifying information, and was transferred to a different representative.</p><br /><br /><p>He looked up the account, found that it was suspended, and told me so. I asked why, and he said that he could not tell me that. I asked why he couldn’t tell me, and he hung up on me.</p><br /><br /><p>Now I don’t believe that all Rackspace employees are like that particular disgruntled dude, but for me, that doesn’t fit their promise of “fanatical support.”</p><br /><br /><p>The several unnecessary hours I spent trying to make Rackspace work just were <em>not</em> worth my time - and so we chose Linode.</p><br /><br /><p>Linode so far has been absolutely fantastic, after the slightly unintuitive OS deployment and control panel.</p><br /><br /><p>In conclusion… well, I don’t know, really. I’ve never been hung up on by a customer service rep before, even the time when I was on the phone with Belkin for 6 hours. On the other hand, every other time I’ve used Rackspace it’s been mindblowingly amazing.</p>"
},
{"title":"On protecting our country",
"url":"/blog/on-protecting-our-country/",
"content": "<p>Mr Leahey is up to no good again, it seems. Check out this news from CNET: <a href=\"http://news.cnet.com/8301-13578_3-57552225-38/senate-bill-rewrite-lets-feds-read-your-e-mail-without-warrants/\">Senate bill rewrite lets feds read your e-mail without warrants</a>. Most of you reading this blog would find the event linked disturbing. I believe the same thing; email is and should remain absolutely private. It’s not because “I have something to hide” at all — there are in fact <a href=\"http://papers.ssrn.com/sol3/papers.cfm?abstract_id=998565&\">plenty of arguments</a> for privacy. It’s the reason people don’t shower in public.</p><br /><br /><p>My father raised the following (paraphrased) case:</p><br /><br /><blockquote><br /><p>Say you’re a judge. It’s some time after 9/11. The public is still freaking out. The Chief of Police of New York comes to you, begging for a warrant to raid the personal email account of some public official of New York. What’s his motive? He says there’s been a worrying amount of calls between this official and some young Muslims1. He checked them out, they look sketchy, and he’s nervous about the safety of the city. You deny his request, and the next day, all of lower Manhattan goes up in a huge fireball of a terrorist attack. How would you feel then?</p><br /></blockquote><br /><br /><p>There are a few things wrong with the point raised there:</p><br /><br /><ol><br /><li>It assumes something can be done. In reality, it’s pretty damn hard to stop an attack you know nothing about.</li><br /><br /><li>Nobody knows the future. Hindsight is 20/20 only because we suddenly have all the facts.</li><br /><br /><li>This is a very slippery slope. The United States of America was not created to turn into a police state. From history we know that never ends well.</li><br /></ol><br /><br /><p>I’m not a judge, nor will I ever be; I’m a programmer. That says nothing about my opinion on this issue. I belong to the school of thought that follows the ground rules for this country, in particular the Fourth Amendment to our Constitution:</p><br /><br /><blockquote><br /><p>The right of the people to be secure in their persons, houses, papers, and effects, against unreasonable searches and seizures, shall not be violated, and no Warrants shall issue, but upon probable cause, supported by Oath or affirmation, and particularly describing the place to be searched, and the persons or things to be seized.</p><br /></blockquote><br /><br /><p>This amendment is not strictly limited to the words with which it is outlined, of course; it’s up to a justice’s interpretation and normally follows some case precedent… presumably allowing digital property to be protected by the same law.</p><br /><br /><p>Our constitution and each amendment that followed in its path are <strong>not</strong> guidelines for this country to follow; they are hard and fast <strong>rules</strong>. I know not of the actual legal situation for the above case, but I firmly believe a string of phone calls does not justify the horrific invasion of privacy.</p><br /><br /><p>In other news, this bill has been <a href=\"http://news.cnet.com/8301-13578_3-57552687-38/leahy-scuttles-his-warrantless-e-mail-surveillance-bill/\">scuttled</a>, more evidence that it’s a bad idea.</p><br /><br /><p>Folks, <strong>you are your government</strong>. Don’t mess it up.</p><br /><br /><p>1I’m not prejudiced, nor will I ever be, but this is how a lot of people felt after 9/11.</p>"
},
{"title":"The perfect Linux distro",
"url":"/blog/the-perfect-linux-distro/",
"content": "<p>I recently found the subreddit <a href=\"http://reddit.com/r/distrohopping\">/r/DistroHopping</a>, and was subsequently made a moderator. This brought me back to the days (well, six months ago) when I would hop almost daily between distributions, trying to find one that works for me.</p><br /><br /><p>I never actually found the “perfect distro” that I needed, but hopefully from my analysis here I can help myself and others.</p><br /><br /><p>I started to use Ubuntu back in the days when Ubuntu 6 was hot stuff:<img src=\"/assets/img/uploads/2012/10/Screenshot.png\" alt=\"\" /></p><br /><br /><p>This was my first exposure to Linux, coming from Mac OS and Windows XP/ME. It was 2008 or so, and I was vacationing in California with my family (we used to live in California, moved to Connecticut, kept the house, and eventually moved back). Our neighbors had a tutor over who was teaching programming. I decided to jump in on the class. He required that we work in a Linux environment, so I installed the latest Ubuntu in a VM.</p><br /><br /><p>It was awesome; the menus were all logical and easily accessible, and for some strange reason, the UI looked amazing to me, and still does. I suppose I prefer GNOME2 to GNOME3 universally.</p><br /><br /><p>I migrated to the command line almost exclusively, and became a huge fan of aptitude. Its interface was simple, and all I really did was install and remove packages.</p><br /><br /><p>Either way, a pretty (but functional) UI is a big thing for me. I don’t want to be working, staring at an eyesore. So let’s keep that in mind… there should be a relatively simple UI, but things should be within reach, and preferably keyboard accessible.</p><br /><br /><p>After some time with Ubuntu, I got sick of looking at it, and moved to Fedora. Fedora was coming out with version 11 at the time, I think:<img src=\"/assets/img/uploads/2012/10/fedora_screenshot.png\" alt=\"\" /></p><br /><br /><p>The blue color scheme was refreshing… at the time I did not know about skins and theming. The switch to Fedora was for no reason exciting except for the novelty of a new OS. I learned to use yum with ease, and then the fun was over. It became in essence the same as Ubuntu.</p><br /><br /><p>Of course! They both used GNOME2. I switched to KDE, but found my hardware couldn’t handle it. Regardless, I didn’t much like my OS looking “pretty” like that, especially if I wanted to take myself seriously.</p><br /><br /><p>A problem arose: neither of these OSes is programmer-centric. Everybody thinks, “Oh, just use some distribution of Linux! They’re all for programmers.” But they’re really not. Linux is great for development, but there is no OS (that I’ve found) that is perfectly programmer-centric: console always at the ready, system monitoring in the background, minimalist UI, and a hacker “feel.”</p><br /><br /><p>I stopped using Linux for a few years, just programming in whatever Unix-based environment Mac OS X has. I moved to Palo Alto from Greenwich, Connecticut. Joined the robotics team. Became a lot more involved in anything and everything technical. Acquired a six year old HP Compaq, and installed Linux Mint. <img src=\"/assets/img/uploads/2012/10/Linux-Mint-13-RC-Cinnamon-Screenshot-Tour-20-1024x576.jpg\" alt=\"\" /></p><br /><br /><p>For our onboard robotics laptop that was going to be used for image processing, we installed Trisquel. <img src=\"/assets/img/uploads/2012/10/linux-screenshot-trisquel-5-5-03.jpg\" alt=\"\" /></p><br /><br /><p>I was happier with Mint than with Trisquel; Trisquel wasn’t as familiar, was a tad too “beautiful” for my taste, and didn’t feel like a solid distro. I don’t really know what I mean by solid, but it didn’t feel serious enough for me. It’s the reason I can’t do development on Mac OS X. Mint felt like a prettier Ubuntu with GNOME2.</p><br /><br /><p>I guess the OS really doesn’t matter; one can fairly easily adapt to the different package managers, figure out where some configurations are stored, or find binaries that will work for you. Even then, I could find an apt port for Fedora.</p><br /><br /><p>What matters, as far as looks, is the DM/WM combo. Everything else is pretty consistent.</p><br /><br /><p>Put concisely, a programmer’s ideal environment would be as such (in no particular order):</p><br /><br /><pre><code>* Terminal always at the ready<br />* Minimalist UI. Not overly pretty, but not as spartan as, say, Fluxbox or TWM.<br />* Completely configurable UI, but configuration should be optional for the love of all that is holy. This is the reason I&#39;m not particularly fond of installing Arch.<br />* Emacs/Vim as an IDE — built-in compile and testing tools, as well as some basic functionality to compute runtime complexity of some functions.<br />* Fast boot and log-in times.</code></pre><br /><br /><p>Right now, my laptop has a good amount of those. Crunchbang was great for the stats - there was some awesome Openbox config.</p><br /><br /><p>And that brings me to a failed project of mine and Sidhanth’s - eos. Eos was a debian-based OS targeted at programmers with all of the aforementioned features… but development stalled as our school loads increased, and we never got to finish. We’ll probably upload what we have to GitHub sometime.</p><br /><br /><p>I’m running the latest Fedora with Cinnamon.</p><br /><br /><p>Good luck in your search.</p>"
},
{"title":"Meet Brightswipe, a new torrent indexer",
"url":"/blog/meet-brightswipe/",
"content": "<p>Since I posted in July about the private torrent indexer, I’ve been working on something called Brightswipe. <a href=\"http://brightswipe.com\">Brightswipe</a> is a beautiful, fast, and open-source indexer written in Ruby/Sinatra.</p><br /><br /><p>I chose Sinatra because I wanted to learn Ruby, and thought Rails was too clunky for this small of a project.</p><br /><br /><p>Originally, the entirety of Brightswipe was in one 200-line Ruby file with no styling at all. As the project progressed, however, I decided instead to segment it, putting the views in their own <code>views/</code> folder.</p><br /><br /><p>Still, though, <code>indexer.rb</code> was too long and complex, so I moved the <code>configure</code> block and functions out into their separate files.</p><br /><br /><p>I tried to add a second database option — MongoDB. Mongo, unfortunately, its not suited for the structure I chose for the DB. Halfway through adding in all the code, I decided that it was not worth it at all.</p><br /><br /><p>I then ditched both and decided to use DataMapper with MySQL.</p><br /><br /><p>One day, I was reading through Hacker News, and a guy by the name of Michael Mettler (<a href=\"http://card.io\">card.io</a> co-founder) was freely offering 10 domain names that he no longer needed. Among the list, I spotted a domain that I liked: <code>brightswipe.com</code>.</p><br /><br /><p>I wrote a comment on the post, explaining how I already had written an application and just needed a designer, and gave him my email address. Within a few hours, he’d emailed me to tell me that I’d gotten the domain, and just to start the transfer process.</p><br /><br /><p>I happily complied. Within another few hours, I got an email from a guy named <a href=\"http://madebyargon.com\">Ashraful</a>. He said that he’d seen my comment, and was willing to design for me. I told him that I had a $0 budget, but would happy to code for design.</p><br /><br /><p>He agreed, and within a week I had a running design for Brightswipe: <img src=\"/assets/img/uploads/2012/08/brightswipe-home-1024x619.jpg\" alt=\"\" />](http://wp.bernsteinbear.com/wp-content/uploads/2012/08/brightswipe-home.jpg)</p><br /><br /><p>It turned out that Ashraful wasn’t so great with CSS, so all I had was a PSD and an image render. I’m not great with CSS either, unfortunately.</p><br /><br /><p>I decided to contact another designer named <a href=\"http://egegorgulu.com\">Ege</a>. I explained my predicament, and my lack of budget. I told him that he’d get his name in the footer of the site (along with mine) when it went live. He agreed to help out with translating to CSS.</p><br /><br /><p>The site goes live today. I’m posting about it on Hacker News and Reddit, too. Please, comment with your feedback!</p><br /><br /><p>P.S. The <a href=\"http://github.com/tekknolagi/indexer\">code</a> is on GitHub!</p>"
},
{"title":"New laptop - Aspire One",
"url":"/blog/new-laptop-aspire-one/",
"content": "<p>I recently changed my primary laptop, and actually my development flow with it. I’m programming (and writing this article) on the <a href=\"http://www.amazon.com/Acer-AOD150-1165-10-1-Inch-Sapphire-Blue/dp/B001QFZFS0/ref=sr_1_1?ie=UTF8&qid=1350408431&sr=8-1&keywords=acer+aspire+one+10.1\">Acer Aspire One</a>, a pretty slick little netbook. It has a 10.1” screen, relatively cramped keyboard, and okay battery life.</p><br /><br /><p>The 10.1 inch screen is not a problem; it’s actually really nice to have a laptop smaller than my paper notebook. The keyboard, on the other hand, took some getting used to; I have rather large hands and I need to crunch them together to type. Not a huge impediment, though.</p><br /><br /><p>The battery life is strange; it declines in a linear fashion from 100%, then somewhere around 45% it drops to 5%. That’s most likely a problem with the battery I have, not with the line in general.</p><br /><br /><p>I installed a 32GB SSD instead of the default 160GB HDD. It’s running smoothly so far, and since this is mainly a coding laptop, I have no problems with the smaller space.</p><br /><br /><p>I installed Linux Mint on it (pretty easy on the eyes), completely wiping Windows. I normally SSH into my VPS, hosted with Rackspace, to code, then push to GitHub. If I’m going to be offline, however, I pull from my server, code locally, then push to both when I get back online.</p><br /><br /><p>In a few months I’ll post again with an update, but for now it’s working swell. I love my desktop theme!</p><br /><br /><p><img src=\"/assets/img/uploads/2012/10/2012-10-16-104630_1024x600_scrot.png\" alt=\"\" />]</p>"
},
{"title":"A quest for anonymity",
"url":"/blog/a-quest-for-anonymity/",
"content": "<p>With all of the recent laws and acts that try to nullify internet privacy and anonymity, it’s beginning to seem impossible to remain anonymous. However, with all of the tools available to people today, it’s easier than ever. It just requires consistency and a decent amount of intelligence.</p><br /><br /><p>Most people concerned about anonymity simply won’t post personal details — but that isn’t enough.</p><br /><br /><p>You see, there’s one problem: when registering for anything, the service you use could have stored your IP address, or other identifying details. IPs can be used for geolocation, so your general whereabouts would be compromised. Especially if the government raids the blogging service you use. Bad news.</p><br /><br /><p>Most people know how to use a proxy, or at least what a proxy is — and that’s great — but it’s not the best way to hide yourself. Think about how your browser is configured, what OS you have installed, and the fonts you have installed on your computer… that’s a pretty unique combination, right? Especially if you consider cookies, and other browser data. What you have is almost a universally unique computer, unless you have a completely vanilla install.</p><br /><br /><p>There’s also the problem of packet sniffing, so unless you’re using SSL or are tunneling over a proxy that uses some form of encryption, anybody on your network can read and intercept your packets. Also bad news.</p><br /><br /><p>This is why it’s considered difficult to be completely anonymous, but if you try hard enough… you can get close. Let’s talk strategy.</p><br /><br /><h3 id=\"anonymizers\">Anonymizers</h3><br /><br /><p><strong>Proxies</strong></p><br /><br /><p>Proxies are great tools, but limited in their capabilities. They can be explained as follows, in human terms: You’re a shy person, but have this really outgoing friend. You want to ask the teacher a question, but are afraid to ask. He volunteers to go for you, talks to the teacher in private, gets the response, and then tells you about it in private later. All through that process, nobody found out who you were — but your friend had to do all the dirty work. In this example, your friend is the proxy, and you’re the computer hiding behind it.</p><br /><br /><p>Many public proxies float around the internet, allowing you to proxy over HTTP, HTTPS, SOCKS, or what have you. These proxies are often untrustworthy or slow, and are therefore poor choices. If you’ve a friend in another country with a decent internet connection, you can easily create an SSH tunnel and proxy through that. Just ask your friend to open up port 22, make you a username/password, and funnel traffic. Naturally, there’s the trust that you won’t do illegal things with his internet… but somebody has to trust you.</p><br /><br /><p><strong>Tor</strong></p><br /><br /><p>Tor is a curious creature. It’s a bit of software that allows users to forward their web browsing through random layers of computers, confusing the heck out of anybody that wants to trace an internet request back to you. It’s essentially a network of chained proxies. Let’s take a look at this diagram.</p><br /><br /><p><img src=\"/assets/img/uploads/2012/09/how_tor_works.png\" alt=\"\" />](http://wp.bernsteinbear.com/wp-content/uploads/2012/09/how_tor_works.png) Courtesy of torproject.org</p><br /><br /><p>This is the second in a series of diagrams showing how Tor works. It explains how Alice, some generic user, wants to request a page, and does so through a front of computers. Is there a way to trace it back to her? Yeah, I suppose, but it’s complicated. Very complicated. Tor is a great tool for political dissidents who want to get around firewalls, so naturally it’s perfect for the average internet user to escape being found out. With this method of requesting pages, traffic is _bound_ to be very slow… so don’t watch movies or torrent through it. That’s not the point.</p><br /><br /><h3 id=\"practices\">Practices</h3><br /><br /><p><strong>Encryption</strong></p><br /><br /><p>If you’re talking to somebody and you don’t want it seen, there’s no better way than to just encrypt your conversation. Use GPG in your email; just ASCII-armour your message and paste into the body. Of course, you need to exchange public keys, but that’s not hard. I’m actually writing a small GPG email client with a GPG address book built in. I’ll release it on GitHub when it’s done.</p><br /><br /><p><strong>Public WiFi</strong></p><br /><br /><p>No, this isn’t a joke. Never blog or log into email from home; it’s too risky. Go through whatever anonymizing software on TOP of an internet connection that’s not yours. This part is inconvenient, but it’s hard; there are plenty of libraries and coffee shops around. There’s absolutely no connection to your home/IP, then. If you must, you can use your own computer.</p><br /><br /><p><strong>No linking accounts</strong></p><br /><br /><p>You should make no connection whatsoever between your new identity and your real one. Kind of defeats the purpose. That means no logging in with Facebook, your old Gmail, talking about your hometown, or anything. Nada. Make sure it’s completely separate, and nobody would be able to associate your username or email with you in real life.</p><br /><br /><p><strong>Secure passwords</strong></p><br /><br /><p>I’m not going to preach password entropy or anything of the sort; I’ve limited knowledge of that. Find a good research article that talks about password security, especially against rainbow tables, and check out XKCD’s <a href=\"http://xkcd.com/936/\">strip</a>.</p><br /><br /><p><strong>Keep a log of services you use</strong></p><br /><br /><p>This is something I found useful when starting fresh, anonymously. It constantly reminds you of what you’re saying, and where. If somebody where to collect all the information on your various accounts (that you’d maybe forgotten about), you might be compromised.</p><br /><br /><p><strong>Everything free</strong></p><br /><br /><p>Don’t pay for stuff. Your payments can be easily traced to you. How do you get free stuff? Like this:</p><br /><br /><p>You need a new email address. You’ll use this email to sign up for services anonymously. You <em>cannot</em> use a handle (screen-name, or username) that has anything to do with your identity. You also can’t host your own email; you’ll run into the payment problem (explained below). Worry not; there are many free services out there, like GMail, Hotmail, Outlook.com, mail.com, hushmail.com… the list goes on.</p><br /><br /><p>Let’s assume you want to write a blog. You have many choices, but know for a fact that you <em>cannot</em> pay for the service you use, especially not a domain. Think about it: your credit card and name are attached to everything you buy over the internet. Let’s pick a free option: Wordpress, Blogger, Blog.com, tumblr, soup.io… and more.</p><br /><br /><p>If you want to have your own website without a preset blogging platform, you can look at places like FreeHostia, AppFog/PHPFog, and other places that offer a free (and limited) plan. Subdomains are fine. They look hacker-ish too, I suppose.</p><br /><br /><p><strong>Minimal storage on your computer</strong></p><br /><br /><p>Don’t keep anonymous/incriminating stuff on your hard drive. Just don’t. It’s an accident waiting to happen, and only speeds up police raids (if, say, you’re a dissident). It’s much harder to force access to a hosting provider, since it could be across borders, and there’s no physical computer to “hack”. And please for the love of all that is holy do <strong>not</strong> save your passwords in any browser or text file. This also makes it easy to have an easy way to jump ship.</p><br /><br /><p><strong>Emergency button</strong></p><br /><br /><p>If everything goes to hell, if you’ve been found out, if you need to disappear… know that you can’t completely do that. Chances are, if you’ve been found out, people have copied stuff from your site, or taken screenshots, and published elsewhere. Either way, delete everything. Close your email account, your blog, and all the services you should have been logging.</p><br /><br /><h3 id=\"conclusion\">Conclusion</h3><br /><br /><p>Be safe. Don’t do stupid stuff. It will come back and bite you in the ass.</p><br /><br /><p><strong>Edit</strong></p><br /><br /><p>You can definitely go to a drug store and buy a prepaid credit card with cash, or a SIM card for a phone. I suppose you can pay for things, but it’s still riskier than free stuff. Having an anonymous phone would be awesome.</p><br /><br /><h3 id=\"addendum\">Addendum</h3><br /><br /><p>Reddit user elebrin noted that I could have covered more on encryption, anonymous payments, and header spoofing, so here I go.</p><br /><br /><p><strong>Bitcoin</strong></p><br /><br /><p>Bitcoin is a peer to peer internet currency backed solely by computational power. That’s probably the most basic definition, but if you want to read up on it, check <a href=\"http://bitcoin.org/\">here</a>.</p><br /><br /><p>It’s a great way to make payments anonymously, as it doesn’t require a credit card or anything of the sort. If companies accept Bitcoin payments, then you need not compromise your identity for the sake of paying for a server.</p><br /><br /><p><strong>Truecrypt</strong></p><br /><br /><p>Truecrypt is a tool that enables you to encrypt and decrypt files on the fly, as if they’re normal files. This is perfect when you just need to use it on a flash drive. It also has a feature called a “hidden container”, whereby you can hide a block of encrypted information in a larger file. It’s practically invisible.</p><br /><br /><p>If you want to store files in the cloud for free, like with Dropbox, just upload a Truecrypt file. Of course, Dropbox tracks IPs… so that’s not a great idea.</p><br /><br /><p><strong>Opera</strong></p><br /><br /><p>Nah, this isn’t about singing. It’s a web browser that does many things, including allowing the user to alter the header, more specifically the user agent. This can further obscure your identity.</p><br /><br /><h3 id=\"further_reading\">Further reading</h3><br /><br /><p><strong>Anonymity</strong></p><br /><br /><ul><br /><li><a href=\"http://www.slashgeek.net/2012/06/15/how-to-be-completely-anonymous-online/\">slashgeek.net</a></li><br /><br /><li><a href=\"http://www.jaywhale.com/how-to-make-an-anonymous-blog\">jaywhale.com</a></li><br /><br /><li><a href=\"http://en.wikipedia.org/wiki/Anonymous_blogging\">wikipedia.org</a></li><br /><br /><li><a href=\"http://boingboing.net/2011/11/15/howto-be-more-anonymous-in-you.html\">boingboing.net</a></li><br /><br /><li><a href=\"http://ask.metafilter.com/95483/How-can-I-host-an-anonymous-Wordpress-blog-and-not-get-unmasked\">metafilter thread</a></li><br /><br /><li><a href=\"https://www.eff.org/wp/blog-safely\">eff.org</a></li><br /></ul><br /><br /><p><strong>GPG</strong></p><br /><br /><ul><br /><li><a href=\"http://www.dewinter.com/gnupg_howto/english/GPGMiniHowto.html\">Complete tutorial</a></li><br /></ul>"
},
{"title":"On moonlight escapades",
"url":"/blog/on-moonlight-escapades/",
"content": "<p>Today’s my birthday, but I decided to have my party yesterday. It was a small get-together of six people, which dropped down to three who slept over.</p><br /><br /><p>Before we went to bed, though, we decided to hang out and talk in the hot tub. That was fine and dandy, and we all had a great time. We got out at midnight, dried off, got changed in the pool house, and walked back toward the house.</p><br /><br /><p>Unfortunately for us, my parents had unwittingly locked us out of the house. We tried every door around the house before going to look for a house key. We checked the pool house, the garage, and under our nonexistent door mats. No dice.</p><br /><br /><p>We thought about our options:</p><br /><br /><ul><br /><li>Sleep outside, using whatever towels in the pool house as blankets</li><br /><br /><li>Ring the doorbell</li><br /><br /><li>Climb up the side of the house to my room’s open window, pop the screen out, and let people in</li><br /></ul><br /><br /><p>Nobody liked the first option, and the second option would have woken my siblings up. We chose the third option.</p><br /><br /><p>I put a small table on top of a bench, and then a chair on top of the table. My friends Leah, Sophia, and Nick all held them to make sure I didn’t fall over. I climbed up, pulled myself onto the roof, and crawled over toward my room. Lucky for me, the laundry room window was also open, so I worked on popping out the little pins on the inside that held the screen in place.</p><br /><br /><p>Five minutes and several bent fingernails later, all the pins were out, and I started to push the screen out. No dice; it was fixed at the bottom, presumably to prevent bugs from coming in. I have no idea why there are pins if the entire bottom is attached to the window frame.</p><br /><br /><p>I whispered down to Leah, Sophia, and Nick, relaying my discovery. We all agreed that I should go over to my parents’ room and softly knock until they opened our balcony door to let me in. I did so, and the conversation with my sleepy mother went something like this:</p><br /><br /><p>Mom: (rubbing her eyes sleepily) What… how did you get up here? Me: Don’t worry about it. Can I go and let everyone else in? Mom: (still rubbing her eyes) Sure… but what time is it? Me: Eh, roughly midnight. Not sure exactly. I don’t have a watch on and everybody’s phones are inside. I’m going to go downstairs and let people in now. Thanks! Mom: …alright, I’m going back to bed.</p><br /><br /><p>She yawned, and walked back into her room. Everybody was relieved that we didn’t have to spend the night outside, and everything went better than expected.</p>"
},
{"title":"Renting a botnet to make money",
"url":"/blog/botnet-ads/",
"content": "<p>As of June 2012, the end of the school year last year, I was effective webmaster of the Paly Voice, my high school’s strictly online publication. In order to try and cover hosting/domain costs, I put up one Google AdSense ad on the sidebar of stories.</p><br /><br /><p>If you turn off your ad blocker, you can see it in action <a href=\"http://palyvoice.com/2012/09/02/students-give-back-through-amigos-program/\">here</a>.</p><br /><br /><p>In the first few days we had the ad, I was excited to even make pennies. After a few days, however, I realized that pennies wouldn’t cover our monthly and annual expenses. My first thought was to sell ad spots to local businesses for around $500 a week. That sounds like a lot, but consider the followning:</p><br /><br /><ul><br /><li>Campanile (another Paly publication, except strictly print) sells roughly the same size ads for $200.</li><br /><br /><li>Campanile circulates for roughly 4 days.</li><br /><br /><li>Campanile has an audience of about 1000 people, total.</li><br /></ul><br /><br /><p>Assuming we’re going to scale the price up in a linear fashion, and reach the same number of people, we can charge $350 for a 24/7 ad spot. We don’t, however, have the same reach. Voice gets about 1000 unique visitors per day, and about 15000 total views per month. We could easily charge over $500, but we wanted a nice, round number.</p><br /><br /><p>This plan still isn’t particularly lucrative. We could make $4000 a month if we replaced the AdSense with local ads, and probably will. To put it bluntly: compared to the other publications, we’d be rolling around in money.</p><br /><br /><p>AdSense got me thinking, though. Sometimes we made $10 from only 4 clicks. What if there was some way of guaranteeing a large amount of clicks per day? Turns out there is. It’s called a <strong>botnet</strong>.</p><br /><br /><p>To quote Cory Doctorow’s <em>Little Brother</em>:</p><br /><br /><blockquote><br /><p>Botnets are where infected computers spend their afterlives. When you get a worm or a virus, your computer sends a message to a chat channel on IRC – the Internet Relay Chat. That message tells the botmaster – the guy who deployed the worm – that the computers are there ready to do his bidding. Botnets are supremely powerful, since they can comprise thousands, even hundreds of thousands of computers, scattered all over the Internet, connected to juicy high-speed connections and running on fast home PCs. Those PCs normally function on behalf of their owners, but when the botmaster calls them, they rise like zombies to do his bidding.</p><br /></blockquote><br /><br /><p>With so many infected computers on the market, the price of renting some time on one has dropped dramatically. When I checked last night, the price of renting one for 24 hours had <a href=\"http://www.zdnet.com/blog/security/study-finds-the-average-price-for-renting-a-botnet/6528\">plummeted to $67</a>… and that was in 2010. It’s probably dropped further. If you consider what you could accomplish with a couple thousand high-powered computers in 24 hours, that’s next to nothing.</p><br /><br /><p>With 33 legitimate clicks, Voice made $20. If each computer in a botnet only clicks once on an ad, you can easily eclipse your operating costs. To keep Google in the dark, however, you have to spread out your clicks pretty evenly. Some computers have to click, but others can only view. Assuming the average ad clicker clicks about 3 ads, you’re making a serious amount of money each day.</p><br /><br /><p>This isn’t, of course, legal… but when has that ever stopped anybody? Voice will use legitimate sources of revenue, however. Make no mistake.</p>"
},
{"title":"Torrenting and its effect on the music industry",
"url":"/blog/torrenting-and-its-effect-on-the-music-industry/",
"content": "<p>Hi, Arcade Fire! I’m Max Bernstein, an independent blogger and programmer. I was listening to your music (Sprawl II) in Aspen, Colorado, and I suddenly realized that it would be SUPER interesting to see firsthand how BitTorrent could affect profits.</p><br /><br /><p>I propose the following experiment:</p><br /><br /><ol><br /><li><br /><p>Write a few songs (or an album).</p><br /></li><br /><br /><li><br /><p>Release half of it on BitTorrent for free, with a donate button</p><br /></li><br /><br /><li><br /><p>Release the other half in an online store without DRM (like Bandcamp)</p><br /></li><br /><br /><li><br /><p>Collect stats on the downloads and income generated from each half</p><br /></li><br /><br /><li><br /><p>Publish results</p><br /></li><br /></ol><br /><br /><p>I predict a surge of popularity from the BitTorrent release, and a good amount of donations. The other half of the album, the songs in the DRM-free store, will probably sell as normal, if not a bit higher.</p><br /><br /><p>If your popularity and profits rise from this experiment, then we can roughly conclude that publishing music on BitTorrent is viable, at least for the audience you have. If not, then you will have most likely still made money (just not as much), and need not repeat this.</p><br /><br /><p>You can contact me <a href=\"mailto:tekknolagi@gmail.com\">here</a> if you’d like to partake in this experiment – I think it will be awesome.</p>"
},
{"title":"DNS tunneling, or, how to get around Gogo",
"url":"/blog/dns-tunneling/",
"content": "<p>We all hate those paywalls that companies put up in airports, airplanes, lounges, or what have you. Fortunately (and thanks to <a href=\"http://kryo.se\">kryo.se</a>), there is a tool that can get you around that. This is a concise and easy to follow tutorial on how to set a tool called <code>iodine</code> up.</p><br /><br /><p>If you’re familiar with the terminal, this should take about five minutes.</p><br /><br /><p><strong>Requirements</strong> 1 computer on which you have root privileges 1 server (with ports you can open) on which you have root privileges Control over the DNS of your server’s domain (or subdomain — see <a href=\"http://freedns.afraid.org/\">freedns.afraid.org</a>)</p><br /><br /><p><strong>Steps</strong></p><br /><br /><ol><br /><li>Visit <a href=\"http://code.kryo.se/iodine/\">code.kryo.se/iodine</a>, and figure out what package you should install, based on your OS. I’m running Ubuntu 12.04 on my server and Linux Mint 13 on my client, so on <em>both</em> I used:</li><br /></ol><br /><br /><pre><code>sudo apt-get install iodine</code></pre><br /><br /><ol><br /><li>Open up the zone file or DNS control panel for your server and set up an NS record like this:</li><br /></ol><br /><br /><pre><code>proxy IN NS serv.mydomain.com.</code></pre><br /><br /><p>Where <code>mydomain.com</code> is some domain you own, like <code>bernsteinbear.com</code>, and <code>serv</code> is the subdomain of your choice. It’ll serve as your DNS server.</p><br /><br /><ol><br /><li><br /><p>Set up an A record for <code>serv.mydomain.com</code> to point to your server’s IP.</p><br /></li><br /><br /><li><br /><p>SSH into your server and run:</p><br /></li><br /></ol><br /><br /><pre><code>sudo iodined -cP YOUR_PASSWORD 10.0.1.1 proxy.mydomain.com</code></pre><br /><br /><p>If it runs correctly, you’ll see output like this:</p><br /><br /><pre><code>Opened proxy0<br />Setting IP of proxy0 to 10.0.1.1<br />Setting MTU of proxy0 to 1130<br />Opened UDP socket<br />Listening to dns for domain proxy.mydomain.com<br />Detaching from terminal...</code></pre><br /><br /><p>This opens up <code>proxy.mydomain.com</code> to incoming requests from <code>iodine</code>.</p><br /><br /><ol><br /><li>Open up a terminal on your local box and run:</li><br /></ol><br /><br /><pre><code>sudo iodine -r proxy.mydomain.com</code></pre><br /><br /><p>You’ll get first a root password prompt and then the <code>iodine</code> password prompt.</p><br /><br /><p>Now you’ll have a fully functioning device willing to tunnel all your traffic via DNS. The IP you specified in step 4 is forwarded onto your local box, so accessing <code>10.0.1.1</code> should bring up the same page as accessing <code>mydomain.com</code>. In order to fully use this and tunnel your traffic, you can use this plain (not recommended, as it’s totally insecure), or create a secondary tunnel through it (which I did).</p><br /><br /><p>All you need to do is set up a SOCKS proxy through the host <code>10.0.1.1</code>, which will then forward your traffic through DNS requests to your server. Neat, huh?</p>"
},
{"title":"Dictionary",
"url":"/blog/dictionary/",
"content": "<p>There’s this game my family plays, either alone or with other families, and it’s called dictionary. I’m not convinced that my dad didn’t just make that name up.</p><br /><br /><p><strong>Description</strong> The players (four or more) find a dictionary, slips of paper, and enough pens so that each person has one. The starting person flips through the dictionary until he finds a word that he likes, and makes sure that nobody in the group knows what the word means. The other players copy this down.</p><br /><br /><p>The players without the dictionary try and make up the most convincing definition for the word, while the first player writes down the actual definition.</p><br /><br /><p>Everybody folds the slips of paper, and hands them to the player with the dictionary, who then proceeds to read all of them (including the real definition) aloud.</p><br /><br /><p>The non-dictionary players vote on what seems to be the realest-sounding definition.</p><br /><br /><p>The scores are then tallied up, and the dictionary passed to the next player. Repeat until everybody has had a turn. This comprises one round.</p><br /><br /><p><strong>Scoring</strong> Every player who guesses the right definition gets a point. Every player whose definition got voted on gets the same amount of points as votes. If the dictionary holding player’s real definition got no votes, he receives a point.</p><br /><br /><p><strong>Our gameplay</strong> In Aspen, Colorado, during our week there, we played a 10-person game of dictionary with another family, the Wedners. Here are some of my favorite words and definitions:</p><br /><br /><p>Whydah (pronounced “widdah”): Fake (Marcus) - The wife of a dead man Real - An African weaverbird</p><br /><br /><p>Jaborandi: Fake (Me) - Delicately woven cotten headgarments traditionally worn by the virgin women of Sri Lanka and southern India; a common term for odd hats of all sorts Real - A drug made from the dried leaves of certain South American plants of the rue family</p><br /><br /><p>Quassia: Fake (Dad) - Verb; Mongolian horseman’s mallet swing Real - A South American shrub or small tree related to ailanthus</p><br /><br /><p>Waesucks: Fake (Marcus) - The light suction administered by infant clams Real - Scottish interjection used to express pity</p><br /><br /><p>Fafnir: Fake (Dora) - An Al Qaeda term for “homeslice” Real - The Norse dragon that guarded a treasure and was slain by Sigurd</p><br /><br /><p>Hab: Fake (Me) - Noun; scruffy seafaring man; common usage as in Moby Dick with an article: “Ahab” Real - Abbreviation; Habacus; Habakkuk</p><br /><br /><p>O’odham: Fake (Me) - Surname of Irish origin; derived from an alternative spelling of the Gaelic word for “lamb” Real - the Uto-Aztecan language spoken by the Pimas and Tohono O’odhams</p><br /><br /><p>Banns: Fake (Me) - see: bans Real - A notice announcing a marriage</p><br /><br /><p>Jerkwater: Fake (Me) - An uncommon arrangement of two hydrogen molecules and one oxygen molecule such that the trio is unhappy and irritable Fake (Dora) - The full contents of a bathtub having been vacated by a teenage boy who can’t get any Real - Of or associated with small, remote, and insignificant rural settlements</p><br /><br /><p>Happy gameplay!</p>"
},
{"title":"New public key!",
"url":"/blog/new-public-key/",
"content": "<p>I deleted my old public key, and I’m trying to publicize this new one as much as possible. You can find it <a href=\"http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xBD2124B1791DAA1C\">here</a> or <a href=\"https://gist.github.com/3180485\">here</a>, as in the sidebar.</p>"
},
{"title":"Installing Ubuntu on a Chromebook",
"url":"/blog/installing-ubuntu-on-a-chromebook/",
"content": "<p>Jensen, a friend of mine, asked me a few days ago if I could install Linux on his Chromebook. His reason? He wanted to play Minecraft. Perfectly legit, I suppose.</p><br /><br /><p>It seems that not many people do this, and are happy with ChromeOS, so there wasn’t too much help online; however, I found this <a href=\"http://www.devchronicles.com/2011/10/installing-ubuntu-on-samsung-series-5.html\">one great article</a>.</p><br /><br /><p>To those unable to boot into Ubuntu for some reason, or want to switch between them… this is how!</p><br /><br /><p>EDIT: Samsung’s Series-5 Chromebook isn’t powerful enough to play Minecraft. Oh well :(</p>"
},
{"title":"Palo Alto's Meshnet and Robotics",
"url":"/blog/palo-altos-meshnet-and-robotics/",
"content": "<p>Hey guys!</p><br /><br /><p>I was at the FIRST regional in Sacramento with the rest of Team 8, and we had a great idea. Freddy, Marten, Danny and I want to create a Meshnet in Palo Alto.</p><br /><br /><p>Our setup currently requires at least a router and some computer in a weatherproofed box outside a house. We thought a <a href=\"http://www.raspberrypi.org/\">Raspberry Pi</a> (model B) wired to a <a href=\"http://www.google.com/products/catalog?q=router&hl=en&um=1&ie=UTF-8&tbm=shop&cid=16929312685474719279&sa=X&ei=MhVmT4ykMaGUiQLSuNyiDw&ved=0CKkBEPICMAA\">D-LINK</a> inside a Tupperware container would make for a cheap and effective model.</p><br /><br /><p>The Raspberry Pi would run CJDNS as both client and server, and would autoconnect and automatically pair with the other units. The router would simply make the network.</p><br /><br /><p>Ideally, we would have a power cord coming out of that (weatherproofed hole) and into an outdoor outlet. If we’re to make this rugged, the contents of the container would be secured, and then we’d duct tape exterior. If possible, we’d include a WiFi extender.</p><br /><br /><p>The total cost for one unit is around $100, and it broadcasts a wireless network. The simplest way to take part is to join this wireless network, and set up CJDNS on that computer. Hopefully this will be automated.</p><br /><br /><p>The idea is to make this Apple-simple.</p><br /><br /><p>As far as robotics</p><br /><br /><p>We went out in a blaze of glory. Even though we didn’t win, we lost a match by being physically shoved out of the arena.</p><br /><br /><p>We’ll do much better at SVR!</p>"
},
{"title":"3301",
"url":"/blog/cicada/",
"content": "<p><em>All names in this article have been changed to reflect usernames. Also, I mix points of view (“I”, “we”) since some parts were collective thinking, and others were individual. Some pieces of this story have been removed to protect the puzzle creators. I note where they are.</em></p><br /><br /><p>It all started when I was sitting in the middle of Advisory at school: my friend <em>all2well</em> told me about this puzzle that he’d found on the internet. 4chan’s /b/, specifically. A group had posted the following image:</p><br /><br /><p><img src=\"http://i.imgur.com/1CcV1.jpg\" alt=\"First image we found.\" /></p><br /><br /><p>It was January first, and from then I was hooked. all2well and I took “in this image” very literally, <code>wget</code>‘d the image, <code>cat</code>‘d it, and lo and behold — there was ASCII text at the very bottom. It read:</p><br /><br /><p><code>TIBERIVS CLAVDIVS CAESAR says &quot;lxxt&gt;33m2mqkyv2gsq3q=w]O2ntk&quot;</code></p><br /><br /><p>How odd. I’d never heard of Tiberius Claudius, but upon looking him up, I learned that he was the fourth Caesar. We used a used <code>rot4</code> on the string in quotes. Out of that came a URL: <a href=\"http://i.imgur.com/m9sYK.jpg\">http://i.imgur.com/m9sYK.jpg</a></p><br /><br /><p><img src=\"http://i.imgur.com/m9sYK.jpg\" alt=\"After decoding the ciphered text, we found this.\" /></p><br /><br /><p>At this point, I joined an IRC channel on <a href=\"http://mibbit.com\">mibbit</a>. From there, I narrowed the groupd down from 30 people to around 10, and we collectively worked on this. This is where <code>cancer0</code>, <code>habitres</code>, <code>wakeen</code>, <code>manbearpig</code>, <code>r</code>, <code>math</code>, and <code>snogfarth</code> came into play.</p><br /><br /><p>The words “out” and “guess” got us thinking. I was pretty sure that I’d heard of a steganography tool called “outguess”. For those of you unfamiliar with steganography, it’s the practice of inserting and extracting hidden data into and from carrier files (Wikipedia).</p><br /><br /><p>After getting the outguess source from their website (http://www.outguess.org/download.php), I built and compiled it. Man pages were invaluable.</p><br /><br /><p><code>outguess -r final.jpg final.txt</code></p><br /><br /><p>That command extracted hidden text from <code>final.jpg</code> and wrote it into <code>final.txt</code>. Surprise, surprise - there was hidden text:</p><br /><br /><p>“Here is a book code. To find the book, and more information, go to http://www.reddit.com/r/a2e7j6ic78h0j/” (missing the 76 lines of book code following — to see the whole thing, visit <a href=\"http://pastebin.com/aXYZzzcv\">this pastebin</a>)</p><br /><br /><p>Naturally, we followed the link. To our surprise, there were already subreddit subscribers… How odd. Some had even replied to posts in the subreddit. Looking back on that, I realized others were toying with us.</p><br /><br /><p>The creator and moderator of the subreddit was <code>CageThrottleUs</code>.</p><br /><br /><p>In the header of the subreddit, there were some Mayan numerals:</p><br /><br /><p><img src=\"http://i.imgur.com/esmLM.png\" alt=\"Curious. Very curious indeed.\" /></p><br /><br /><p>In the sidebar of the subreddit, there was a line that said “Verify: 7A35090F”. This same string also appeared in the title text of the Mayan numerals image.</p><br /><br /><p>All of the posts in the subreddit were complete gibberish — not a single was English, or any other discernible language. Evidently, some cipher had been used to mangle the text.</p><br /><br /><p>Among the <a href=\"http://i.imgur.com/awBeR.png\">nonsensical posts</a> was one clear one, entitled “Welcome.” It linked to an image of a doormat:</p><br /><br /><p><img src=\"http://i.imgur.com/KXLOP.jpg\" alt=\"Welcome to a world of puzzles.\" /></p><br /><br /><p>From then, it was sort of a dead end, until one of us realized that we might as well try <code>outguess</code> on the doormat image. Bingo. <a href=\"http://pastebin.com/Xs15TLBj\">This text</a> came of it.</p><br /><br /><p>Since they announced that they would now always PGP sign messages, we’d know for sure if they posted something.</p><br /><br /><p>What is PGP? PGP is an <a href=\"http://en.wikipedia.org/wiki/Acronym_and_initialism\">initialism</a> that stands for “Pretty Good Privacy.” It’s a form of encryption and identity verification, through what’s called “public key cryptography.” It ensures that no one can read a message except for its intended recipient. Signing is a way to ensure that anyone can read a message, and that it came from a certain recipient.</p><br /><br /><p>I promptly ran <code>gpg --keyserver pgp.mit.edu --recv-key 7A35090F</code> to download and import their public key. When I examined the key further, I noted that the UID (user ID) field was set to “Cicada 3301 (845145127)”. This number, 845145127, was previously unseen. Same deal with Cicada.</p><br /><br /><p>From there, we began a full search on Google Books for reference on Mayan numbers, “Cicada 3301”, and 845145127.</p><br /><br /><p>After hours of very well-timed posts every six hours, a post appeared on the subreddit, titled “Problem?”. It had <a href=\"http://pastebin.com/AmP7yJ5S\">signed outguess text</a> that gave a very vague hint about the location of the key, and a reference to the Holy Grail. One thing was strange about this post: it was posted by a different user, “ImagoOnNib”.</p><br /><br /><p>We tried and failed to find anagrams of ImagoOnNib and CageThrottleUs using <a href=\"http://wordsmith.org/anagram/\">this website</a>, which proved very unproductive.</p><br /><br /><p>At some point later on, however, we realized that ImagoOnNib is an anagram for Mabinogion, the title of King Arthur’s story, and CageThrottleUs is an anagram for Charlotte Guest, the first person to translate the Mabinogion to English.</p><br /><br /><p>From the Mayan numerals in the header, the subreddit name (a2e7j6ic78h0j7eiejd0120), and the sidebar text, we derived the number sequence:</p><br /><br /><p><code>10, 2, 14, 7, 19, 6, 18, 12, 7, 8, 17, 0, 19, 7, 14, 18, 14, 19, 13, 0, 1, 2, 0</code></p><br /><br /><p>For example, each character and figure in the sidebar text can be interpreted as a sort of expanded hexadecimal to yield this sequence. We took the gibberish text from the subreddit, in the order posted, and performed a sort of hybrid Caesarr shift. That produced a segment of an Arthurian legend.</p><br /><br /><h4 id=\"example\">Example:</h4><br /><br /><p>The first word of the garbage text is “Ukbn” — taking the first four numbers in the sequence and applying them in a manner similar to a shift cipher, we get this:</p><br /><br /><pre><code>U - 10 = K<br />k - 2 = i<br />b - 14 = n<br />n - 7 = g</code></pre><br /><br /><p>As you can see, we get “King” — the next word is “Arthur”, and so on. When we ran out of numbers or started a new line, we started from the beginning of the shift key.</p><br /><br /><p>Then, we used the book codes (in the format <code>line:char</code>) to get a series of characters from the mass of text.</p><br /><br /><p>This was all computed using Python, on <a href=\"http://ideone.com\">ideone.com</a> (so we could easily share code and results).</p><br /><br /><p>At first, the text was a tad mangled, so we realized that there must be a formatting error. One of the errors was that Reddit removes excess spaces from posts, so that offeset characters. We managed to extract a telephone number, spelled out, from: <code>Call us at us tele phone numBer two one four three nine oh nine six oh eight</code></p><br /><br /><p>Naturally, we called it.</p><br /><br /><p>A computer-generated voice answered, and said, “Very good. You have done well. There are three prime numbers associated with the original final.jpg image. 3301 is one of them. You will have the find the other two. Multiply all three of these numbers together and add a .com to find the next step. Good luck.”</p><br /><br /><p>Here is a <a href=\"http://www.youtube.com/watch?v=k24ZrFR2IUQ\">YouTube clip</a>, posted by our very own <code>habitres</code>.</p><br /><br /><p>Turns out that the other two prime numbers referenced are the width and height of the first image. We multiplied them all together and added a .com to get 845145127.com (now down). On the website, there was a picture of a cicada with a countdown to 9AM PST/12:00 Noon EST/17:00 UTC on Monday.</p><br /><br /><p>Naturally, we ran <code>outguess</code> on the cicada image, and found <a href=\"http://pastebin.com/L0i40NA0\">this text</a>.</p><br /><br /><p>At 17:00 UTC on Monday (expected), the site changed to a list of coordinates and this message: “Find our symbol at the location nearest you.”</p><br /><br /><p>The cicada.jpg also changed to contain a <a href=\"http://pastebin.com/iVctZ9TJ\">signed outguess text</a> with the same list of coordinates.</p><br /><br /><p>We rallied people in the IRC channels, and found which were nearest to which coordinates.</p><br /><br /><p>One of the coordinates was located in Seattle, at Dr. Charles A. Rohrmann, Jr.’s house. We found his home and cell phone number on his medical profile, and called him.</p><br /><br /><p>It went something like this:</p><br /><br /><pre><code>R: Hello. I am calling because a list of GPS coordinates were posted online. One of them led to your house. Have you noticed anything strange outside your house? Maybe suspicious people? New buildings? People knocking?<br />Doctor: Where are you calling from?<br />R: London.<br />Doctor: How do you know about my house?<br />R: Like I said, there was a list of GPS coordinates posted online.<br />Doctor: Ive not had anything strange beside this call, no.<br />R: Nothing at all?<br />Doctor: No.<br />R: Well, people may come up in the future. They may ask about the number 3301 or cicadas. Have you seen anything regarding either of them.<br />Doctor: No I have not.<br />*Hangs up*</code></pre><br /><br /><p><code>habitres</code>’s brother Bongo went do Sydney, Australia and found two pictures of a QR code. The codes scanned to images on 845145127.com.</p><br /><br /><p><code>manbearpig</code> called the barber shop located at coordinate 4, posing as a student doing a geocaching project. He asked them to take a small look outside, but they saw nothing.</p><br /><br /><p>We <code>outguess</code>ed some of the images that the codes linked to, and found <a href=\"http://pastebin.com/dKq51NsS\">this text</a>. Another book code.</p><br /><br /><p>Another several images had <a href=\"http://pastebin.com/dbAk6an2\">different text</a>.</p><br /><br /><p>The second pastebin referred to the poem Agrippa, by William Gibson. Wikipedia explains that, “Its principal notoriety arose from the fact that the poem, stored on a 3.5” floppy disk, was programmed to erase itself after a single use; similarly, the pages of the artist’s book were treated with photosensitive chemicals, effecting the gradual fading of the words and images from the book’s first exposure to light.”</p><br /><br /><p>The full text is available <a href=\"http://www.williamgibsonbooks.com/source/agrippa.asp\">here</a> and the code to decode it <a href=\"http://ideone.com/7uk2z\">here</a>.</p><br /><br /><p>The book codes did not encode two characters, both of which were <code>6</code> - the first two primes (2,3) multiplied.</p><br /><br /><p>Decoding the text results in getting a .onion domain, <code>sq6wmgv2zcsrix6t.onion</code>. We all installed Tor and promptly logged on.</p><br /><br /><p>We were greeted with this screen:</p><br /><br /><p><img src=\"http://i.imgur.com/6mBiv.jpg\" alt=\"this screen\" /></p><br /><br /><p>(kudos to <code>Traveler</code>, another IRC user), with <a href=\"http://pastebin.com/TQ5e5snx\">this</a> HTML.</p><br /><br /><p>Everybody in the channel immediately registered tens of email addresses on <a href=\"http://mailinator.com\">mailinator</a>. The site went down around Tuesday, January 10, 23:45 UTC, after many users had put in their email addresses.</p><br /><br /><p>The next day, <code>newcandy</code> discovered that 845145127.com had changed, and was now devoid of image and text. A quick look at the source revealed <code>&lt;pre&gt;</code> tags, with a lot of space between them. What was in between? <a href=\"http://pastebin.com/TbJBG1NB\">Many tabs and spaces</a>. We figured that this had to be binary, and decrypted it to find <a href=\"http://pastebin.com/wgwpenx7\">this text</a>.</p><br /><br /><p>This was the first message not to be signed by <code>3301</code>.</p><br /><br /><p><code>newcandy</code> realized that some of the numbers looked like the filenames we’d tried, and so he went to work checking them out. I <code>wget</code>ed all of them.</p><br /><br /><p>About 2-4 afters after I grabbed them, the DNS entry for 845145127.com was changed to 127.0.0.1, and the previous IP (75.119.203.244) stopped responding to pings and TCP SYNs.</p><br /><br /><p>At this point, our story takes a darker turn. Our elite IRC group of 8 people deceived the rest, and led them on a wild goose chase. We created a branch off the puzzle, and led them solving unsolvable things. We distracted them so we would progress and they would not. We’re sorry to announce that, but it’s a necessary part of the story.</p><br /><br /><p><em>For those that missed round one completely: — ends with 3301 sending out emails.</em> From here, a fellow named <code>n_</code> (not our <code>n_</code>) posted the URL <code>1853143003544.tk</code> in a chat room on n0v4, which was the sum of the largest number in each group <a href=\"http://pastebin.com/6CUVHefD\">here</a>. Each group is the larger number, prime factored. The TXT record for that URL said “Go to my largest part”. The largest prime factor of 1853143003544 is 33091839349, so we went to 33091839349.tk. This site had no TXT, but contained HTML with a black background and this image:</p><br /><br /><p><img src=\"http://i.imgur.com/NHYLD.jpg\" alt=\"this image\" />.</p><br /><br /><p>Someone (we still don’t know who) found <a href=\"http://pastebin.com/qmCYDDPn\">this text</a>. Someone (again, we don’t know who) identified the picture to be the bottom half of<a href=\"http://www.gailgastfield.com/mhh/mhh.html\">this poem</a>.</p><br /><br /><p>I copied the typed version of the text, and formatted it so that it read like the image version. I created <a href=\"http://ideone.com/6NwKn\">this code</a> to read the book code from the text - then we got to cginiziglyaobyph.onion. We all registered multiple emails there. To our knowledge, 3301 began sending out codes at Friday, January 20th, 6:49 UTC, about 3-4 days later. <em>End round one, alternate.</em></p><br /><br /><p>Somewhere between January 15th and January 16th the onion site (sq6…) came back up. Our emails came in at around 3:45 on January 15th. We put in our numbers at sq6wmgv2zcsrix6t.onion/NUM, which showed <a href=\"http://pastebin.com/4YaQ0TvJ\">this message</a>.</p><br /><br /><p>This message was served only once per number. People who shared their key or message got <a href=\"http://pastebin.com/3ztaEZ3W\">this</a> by email.</p><br /><br /><p>We grabbed our 112 digit numbers (<code>n</code>, from the paste) and a server from <a href=\"http://voxel.com\">voxel</a>, and factored using <code>factmsieve</code>. It took about 7 hours, and only cost $8.</p><br /><br /><p>From there, insert <code>p</code>, <code>q</code>, and <code>n</code> into <a href=\"http://codepad.org/nBIS91M4\">this script</a>. You’ll get a number which you need to put into the page where you got your message from.</p><br /><br /><p>As of January 16th, putting any number into the onion gave a 500 error:</p><br /><br /><p><img src=\"http://i.imgur.com/mdkZs.png\" alt=\"500 error\" />.</p><br /><br /><p>On January 17th, at around 2:49 UTC, this was fixed, and could ake numbers. When given an RSA-decrypted number, it reported: “Correct. We’ll email you.”</p><br /><br /><p>A new email was sent, and told us to go back to the onion/NUM. This led to an updated version, having a poem/song and a <a href=\"http://pastebin.com/VuyPwuL4\">PGP message</a>.</p><br /><br /><p>The PGP message was a <a href=\"http://droplet.tk/i/O8TrB.midi\">MIDI file</a>.</p><br /><br /><p>We developed a procedure for un-puzzling the MIDI:</p><br /><br /><ol><br /><li><br /><p>Take the base64-encoded portion of your message with the PGP armour headers around it, remove the “- ” from the beginning and top lines, and feed this into <code>pgp --decrypt habitres.midi &gt; song.midi</code>.</p><br /></li><br /><br /><li><br /><p>Download <code>midiscv</code>, compile, and run <code>./midiscv song.midi song.csv</code></p><br /></li><br /><br /><li><br /><p>Use <a href=\"http://ideone.com/UNPRU\">this script</a> to produce a message. This script matches the notes in track 3 of the MIDI file with the letter “chorus” at the top of the message with the MIDI in it. This produced a mapping as shown by #INSERT PASTE HERE</p><br /></li><br /><br /><li><br /><p>Using the mapping in reverse from track 2, we produce a message similar to:</p><br /></li><br /></ol><br /><br /><pre><code>very good you have proven to be most dedicated to come this far to attain enlightenment create a gpg key for your email address and upload it to the mit key servers then encrypt the the following word list using the cicada three three zero one public key sign it with your key send the ascii armoured ciphertext to the gmail address from which you received your numbers your words are word1 word2 word3 word4 word5 word6</code></pre><br /><br /><ol><br /><li><br /><p>The words appear to be unique for each person. Generate a PGP key using <code>gpg --gen-key</code>, and use the same email address you’ve been using for the puzzle. Upload the key to a PGP server (like MIT’s), with <code>gpg --keyserver pgp.mit.edu --send-key [KEY_ID]</code>.</p><br /></li><br /><br /><li><br /><p>Run <code>gpg --armour --default-key [EMAIL] --sign --encrypt</code>, type your password, paste in the words you have, hit enter, then Control-D. It will print an ASCII armoured message.</p><br /></li><br /><br /><li><br /><p>Send that file to c99…@gmail.com, the one you’ve been receiving emails from.</p><br /></li><br /></ol><br /><br /><p>At around Monday, February 6th, 3301 sent the first email. It explained that there would be no more puzzles. It gave directions to log on to a Tor hidden service, with a given username and password.</p><br /><br /><p>From there… we’ll have to wait for the next one, I guess.</p>"
},
{"title":"Replicating a Webfaction Site on Tor",
"url":"/blog/replicating-a-webfaction-site-on-tor/",
"content": "<p>If you have a website hosted on Webfaction (or any other name-based virtual host, for that matter), and want to create a .onion copy of that website, then this guide is for you. After the break!</p><br /><br /><p>First, let’s get some definitions straight.</p><br /><br /><p><strong>name-based virtual host:</strong> One user has a <code>/home/</code> partition. Each application(could be multiple domains) routes to a specific folder in <code>~/webapps/</code>.</p><br /><br /><p><strong>Tor:</strong> Service that allows your web traffic is sent through around three random computers before reaching its target, in order to preserve anonymity. Illustration (click to enlarge):</p><br /><br /><p><img src=\"/assets/img/uploads/2012/01/Tor-HTTP-Transmission-300x113.png\" alt=\"\" /></p><br /><br /><p><strong>.onion:</strong> A domain that is resolved using a series of queries on the Tor network.</p><br /><br /><p>What we’ll be doing is pointing all of the Tor traffic that comes to the .onion to the daemon (in my case nginx) on the server.</p><br /><br /><p>I first contacted the Webfaction support staff to ask if this was allowed. I had to clarify several things:</p><br /><br /><ol><br /><li><br /><p>I would not be needing a dedicated IP address</p><br /></li><br /><br /><li><br /><p>I would not be opening a port</p><br /></li><br /><br /><li><br /><p>This will not overload Webfaction with a barrage of traffic</p><br /></li><br /></ol><br /><br /><p>He (Ryan S) then OK’d my actions. I downloaded the source package from the <a href=\"https://www.torproject.org/download/download.html.en\">Download page</a>, under “Source code.”</p><br /><br /><p>I unpacked, then ran:</p><br /><br /><pre><code>cd tor_folder/<br />./configure --prefix=$HOME<br />make<br />make install</code></pre><br /><br /><p>I now had a Tor binary in <code>~/bin/</code>. Right.</p><br /><br /><p>I then needed to make a directory in which Tor could store some of my website configuration files. I made it in <code>~/tor_config</code>.</p><br /><br /><p>I then edited <code>torrc</code> in order to configure the node correctly. That troublesome file was in <code>~/etc/tor/</code>.</p><br /><br /><p>It looked like a jumbled mess of code, I scrolled through until I found something that looks like:</p><br /><br /><pre><code>HiddenServiceDir some_folder/<br />HiddenServicePort 80 some_IP:port</code></pre><br /><br /><p>Change the first field, <code>HiddenServiceDir</code>, to match the folder from above. The second part was a bit trickier.</p><br /><br /><p>If you know what port and IP your server is running, then fantastic! Just leave the 80, and plug the rest of the information in.</p><br /><br /><p>(PSST! If you’re on Webfaction, it’s this:)</p><br /><br /><pre><code>HiddenServiceDir some_folder/<br />HiddenServicePort 80 localhost:2480</code></pre><br /><br /><p>Otherwise, you have two options:</p><br /><br /><ol><br /><li><br /><p>Start up another httpd, like <code>lighthttpd</code>, in the directory where your application is stored, and change <code>some_IP:port</code> to <code>localhost:whatever_port</code> to match that.</p><br /></li><br /><br /><li><br /><p>Contact support and figure out what you can do</p><br /></li><br /></ol><br /><br /><p>I opted to contact support, to reduce strain on the server.</p><br /><br /><p>I started Tor by running:</p><br /><br /><pre><code>~/bin/tor</code></pre><br /><br /><p>And the process spewed out some stuff like this:</p><br /><br /><p><img src=\"/assets/img/uploads/2012/01/Screen-shot-2012-01-16-at-4.15.23-PM-300x80.png\" alt=\"\" /></p><br /><br /><p>Then, I opened up my Control Panel (Webfaction’s unique panel), and configured my BernsteinBear website to also serve my .onion domain. I just added a domain (<code>.onion</code>)</p><br /><br /><pre><code>cat ~/path_to_tor/config_dir/hostname</code></pre><br /><br /><p>To see what’s in it.</p><br /><br /><p>Have fun!</p><br /><br /><p>P.S. If you really want to take this forward, change your site root to your .onion domain!</p>"
},
{"title":"Winter Break (will update)",
"url":"/blog/winter-break/",
"content": "<p>I’m documenting our trip to Buenos Aires, Argentina, and Patagonia, Argentina. We’ll be traveling with our close friends, the Kleins. I cut off the post since it has a lot of pictures and text; it now won’t hog bandwidth on load.</p><br /><br /><p><strong>DAY 0</strong> Our flight down to Buenos Aires went like this:</p><br /><br /><ol><br /><li><br /><p>Leave at 11:30AM</p><br /></li><br /><br /><li><br /><p>Wait until plane leaves at 2PM</p><br /></li><br /><br /><li><br /><p>Fly to Dallas, Texas</p><br /></li><br /><br /><li><br /><p>1.5 hour layover</p><br /></li><br /><br /><li><br /><p>2.5 hour delay, waiting on the plane</p><br /></li><br /><br /><li><br /><p>10.5 hour flight</p><br /></li><br /><br /><li><br /><p>Wake up in Buenos Aires, Argentina</p><br /></li><br /></ol><br /><br /><p>Did I mention that in San Jose airport (where we left) a man sprinted through security without being checked? The TSA tracked him down with their surveillance system, and temporarily shut down all outbound flights. Craziness.</p><br /><br /><p><strong>DAY 1</strong> After finally getting to the hotel at around 2PM, we walked around and found a small market in Recoleta. ‘Twas lovely place! There was a band playing, and people were dancing and singing along.</p><br /><br /><p>Our choice restaurant for dinner (dubbed <em>Fervor</em>) had one vegetarian option. It was a rather dull pasta.</p><br /><br /><p>Removed, see gallery.</p><br /><br /><p>During dinner, my dad developed a feeling that the party of 14 at the table next to us was from Long Island, New York. After about 40 minutes of deliberation about who would get up and ask them, my little brother did. They were from LA and jokingly took offense.</p><br /><br /><p><strong>DAY 2</strong> We awoke at noon, as Buenos Aires is five hours ahead of Palo Alto. For lunch, we walked to <em>Cafe Tortoni</em>, the oldest coffee shop in the whole of Argentina. It was established in 1858.</p><br /><br /><p>Removed, see gallery.</p><br /><br /><p>After more walking by the river, we saw a fabulous bridge, dubbed <em>La Mujer</em>:</p><br /><br /><p>Removed, see gallery.</p><br /><br /><p>We’re having dinner at a very local steakhouse called <em>La Brigada</em>, which is soccer themed. <del>I shudder at the thought of their vegetarian options.</del> Their ravioli was lovely, and the rest of the family (even my father) had different cuts of beef, and loved it.</p><br /><br /><p>Removed, see gallery.</p><br /><br /><p><strong>DAY 3</strong></p><br /><br /><p>After a wakeup at 10AM, we strolled to a cafe called <em>La Biela</em>. We had coffee and toast; we were not particularly hungry.</p><br /><br /><p>Removed, see gallery.</p><br /><br /><p>A man dressed as a clown was playing a melancholy tune on an accordion. We heard that the cemetery was beautiful, and it was. We happened to accidentally walk in as a procession was going through… ‘Twas a bit awkward. We then took the subway across town to explore. After an hour and a half of heat and awesome shops, we took two cabs back to the hotel for a nap.</p><br /><br /><p><strong>Day 4</strong> After a 3.5 hour flight to El Calafate, we drove through the small town, and to the middle of nowhere. We stayed at a tiny hotel called <em>Los Notros</em>. We had a very long lunch (apparently that’s how it’s done in Patagonia…) and then napped.</p><br /><br /><p>We took a walk down a path to get close to the <em>Perito Moreno Glacier</em>. We saw some glacier calving. Calving is when chunks of ice fall off of a glacier.We showered, had some more ravioli, and went to bed. The couple next door loved each other a lot, and made that clear to all the adjacent rooms. My golly, it was loud.</p><br /><br /><p><strong>Day 5</strong> We woke up really early to get all bundled up and onto the boat to the Perito Moreno Glacier that we had seen the previous day. After a short but bumpy van ride to the dock, we hopped on and watched icebergs float by. We walked through the trees then across a beach before putting our crampons on. Without them, we’d be totally helpless on the glacier.</p><br /><br /><p>Back at the hotel, we had a two hour lunch (a recurring theme here) and then took a van out to this farm in the middle of nowhere. I went fishing with Ben, caught no fish, then built some rafts out of wood.</p><br /><br /><p>The rest of that day was shockingly uneventful.</p><br /><br /><p><strong>Day 6</strong> In the morning, we packed everything for a four hour van ride to the next hotel, and almost forgot three bags. Typical.</p><br /><br /><p>We passed through <em>El Calafate</em>, a small mountain town, only stopping to switch vans to get to the <em>Los Cerros</em>, the next hotel. We picked up a mother and her daughter, then they realized 10 minutes into the trip that they’d forgotten to pick up their dad/husband from the hotel! He thought it was worth a chuckle when we found him.</p><br /><br /><p>They were from Switzerland, and the girl’s mom spoke eight languages: French, Spanish, English, Swiss German, … and some others.</p><br /><br /><p>On the way, we learned that the wind gets up to 160 kph, but normally hovers around 100. It makes driving hard sometimes.</p><br /><br /><p>After arriving, we spoke to our guide for the next two days, Pedro. He was very animated! He spoke of the ice cap in Argentina and Chile, and how it is the third biggest in the world, next to Greenland and Antarctica.</p><br /><br /><p><strong>Day 7</strong> We awoke early for a 13 mile hike through the hills and to the base of the glacier on Mount Fitz Roy. There was a beautiful bright blue (and ice cold) lake, and we filled up our bottles. We hiked back to town and got to the hotel at around eight.</p><br /><br /><p>We slept well.</p><br /><br /><p><strong>Day 8</strong> Emma and Michael left for another hike (12 miles), and everyone but my mom, dad, and Ben left for a short walk to a waterfall. We stayed for two hours, and played around in the water.</p><br /><br /><p>We came back, had some wonderful ice cream (berry-flavoured and hand made), imported some photos (below) and then had dinner at <em>El Ritual del Fuego</em>. We met the chef earlier that day on the walk.</p><br /><br /><p><strong>Day 9</strong> This morning we did some more glacier hiking, but on a different glacier. Eduardo and Caesar guided us among the towering ice peaks and crevasses.</p><br /><br /><p>After the hike, we had lunch on the rocks (just cheese&arugula; sandwiches, but they were delicious) and returned to the hotel. <del>I think we&#39;re getting waffles for dinner tonight.</del> We had tomato soup and fettuccine for dinner, and went to bed before when they normally start serving food.</p><br /><br /><p><strong>Day 10</strong> We left Los Cerros, and drove 8 hours to a remote part in Chile; the nearest village was two hours away. We stayed in Patagonia Camp, a collection of yurts! For those of you unfamiliar with yurts, they look like this:</p><br /><br /><p><img src=\"/assets/img/uploads/2011/12/Patagonia-Camp-Yurt-300x200.jpg\" alt=\"\" /></p><br /><br /><p>We hiked some more, on the right hand side of a 4 day trail called the “w” for its shape around the peaks in the park.</p><br /><br /><p><strong>Day 11</strong> We had a more relaxed day, walked to a waterfall near the Camp, and then evacuated the Camp the next morning.</p><br /><br /><p>Though we knew of the wildfire in the area, it was only that day that it was so close. We drove 4 hours to Punta Arenas, Chile, and saw some penguins. The fire is still getting worse.</p><br /><br /><p>Took a 4 hour flight to Santiago, from there to Dallas, and then to SFO. It’s good to be back home!</p><br /><br /><p>These photos were either taken from a website (and cited) or by Rebecca, Emma, my father (Stuart), or me.</p><br /><iframe align='center' frameBorder='0' height='700' scrolling='no' src='http://www.flickr.com/slideShow/index.gne?group_id=&amp;user_id=78444242@N04&amp;set_id=72157639756360323&amp;text=' width='700'><br /></iframe><!--<br /><br /><script type=\"text/javscript\" src=\"/js/galleria/galleria-1.2.9.min.js\"></script><br /><br /><div id=\"blueimp-gallery\" class=\"blueimp-gallery\"><br /> <div class=\"slides\"></div><br /> <h3 class=\"title\"></h3><br /> <a class=\"prev\">‹</a><br /> <a class=\"next\">›</a><br /> <a class=\"close\">×</a><br /> <a class=\"play-pause\"></a><br /> <ol class=\"indicator\"></ol><br /> <div class=\"modal fade\"><br /> <div class=\"modal-dialog\"><br /> <div class=\"modal-content\"><br /> <div class=\"modal-header\"><br /> <button type=\"button\" class=\"close\" aria-hidden=\"true\">&times;</button><br /> <h4 class=\"modal-title\"></h4><br /> </div><br /> <div class=\"modal-body next\"></div><br /> <div class=\"modal-footer\"><br /> <button type=\"button\" class=\"btn btn-default pull-left prev\"><br /> <i class=\"glyphicon glyphicon-chevron-left\"></i><br /> Previous<br /> </button><br /> <button type=\"button\" class=\"btn btn-primary next\"><br /> Next<br /> <i class=\"glyphicon glyphicon-chevron-right\"></i><br /> </button><br /> </div><br /> </div><br /> </div><br /> </div><br /></div><br /><br /><div id=\"links\"><br /> <br /> <a href=\"assets/img/uploads/2011/12/DSC_0639.jpg\" title=\"\" data-gallery><br /> <img src=\"\" alt=\"\"><br /> </a><br /> <br /> <a href=\"assets/img/uploads/2011/12/DSC_0643.jpg\" title=\"\" data-gallery><br /> <img src=\"\" alt=\"\"><br /> </a><br /> <br /> <a href=\"assets/img/uploads/2011/12/DSC_0658.jpg\" title=\"\" data-gallery><br /> <img src=\"\" alt=\"\"><br /> </a><br /> <br /> <a href=\"assets/img/uploads/2011/12/DSC_0785.jpg\" title=\"\" data-gallery><br /> <img src=\"\" alt=\"\"><br /> </a><br /> <br /> <a href=\"assets/img/uploads/2011/12/DSC_0788.jpg\" title=\"\" data-gallery><br /> <img src=\"\" alt=\"\"><br /> </a><br /> <br /></div><br />-->"
},
{"title":"Messing With Programmers Part 2",
"url":"/blog/messing-with-programmers-part-2/",
"content": "<p>If I really hate a particular C programmer, I’ll litter some of these statements around <code>stdio.h</code> and other headers</p><br /><br /><pre><code>#define enum struct<br />#define main(x) exit(1)<br />#define printf scanf<br /><br />#define malloc AASDAF<br />#define free malloc<br />#define AASDAF free<br /><br />#ifdef STDIO_H_<br /> #undef STDIO_H_<br />#endif<br /><br />#define int float<br />#define double char*<br /><br />#define while(x) for(;;)<br /><br />#define FILE maint<br /><br />#define sizeof(x) (sizeof(x)*2)</code></pre>"
},
{"title":"Trig with Baked Goods",
"url":"/blog/trig-with-baked-goods/",
"content": "<p>It is given that brownies complement cookies, and that</p><br /><br /><pre><code>cos(brownies) = happiness</code></pre><br /><br /><p>Therefore,</p><br /><br /><pre><code>brownies = acos(happiness)</code></pre><br /><br /><p>(a cos of happiness)</p><br /><br /><p>So:</p><br /><br /><pre><code>90-brownies = asin(happiness)<br /><br />cookies = asin(happiness)</code></pre><br /><br /><p>(a sin of happiness)</p><br /><br /><p>Also,</p><br /><br /><pre><code>atan(happiness) = cookies/brownies = peppermint bark</code></pre><br /><br /><p>Conclusion? <strong>Math is delicious.</strong></p>"
},
{"title":"Python",
"url":"/blog/python/",
"content": "<p>Sometimes, just to screw with people, I will rewrite <code>.bashrc</code> to contain only:</p><br /><br /><pre><code>echo &quot;Python 2.6.6 (r266:84374, Aug 31 2010, 11:00:51)<br />[GCC 4.0.1 (Apple Inc. build 5493)] on darwin<br />Type \&quot;help\&quot;, \&quot;copyright\&quot;, \&quot;credits\&quot; or \&quot;license\&quot; for more information.&quot;<br />export PS1=&quot;&gt;&gt;&gt; &quot;<br />trap bashtrap INT<br />bashtrap() {<br /> echo -n &quot;<br />KeyboardInterrupt&quot;<br />}</code></pre><br /><br /><p>and watch people struggle :)</p>"
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment