Had a blast doing a little downtown photo walk a few weeks ago. Just got to uploading my shots this past weekend. Most of the gang have put their shots in this Flickr group.
Loud thinking from the mind of Mike Tigas.
Had a blast doing a little downtown photo walk a few weeks ago. Just got to uploading my shots this past weekend. Most of the gang have put their shots in this Flickr group.
Updated 4/20: Now with actual templates & responsive design on the listing page. Check it out (links at bottom of this post).
Did you know that Rdio has an API? I’d known about it for quite some time but hadn’t really looked into it unti this little feature request by Idan Gazit a couple days ago:
Feature request for @rdio: give me a view of new album releases from artists I have in my collection.
— Idan Gazit (@idangazit) April 16, 2012
I got bored and took it as a little call to action to tinker around with the API — and built a simple page that provides that requested feature.
Built/deployed it in near-record time by building it in Flask and throwing it online in Heroku. (By “near-record time”, I really do mean under 3.5 hours start-to-finish.)
Since I’m on a bit of an open-source spree, the project’s source is available on GitHub with some rudimentary instructions. The client bits are super simple in scope and really just wrap the getNewReleases, findUser, and getArtistsInCollection methods in the Rdio API. (I’m using the Rdio-supplied Python client library to handle all the clunky OAuth bits.)
If you’re a Rdio user: check it out. (And if you’re not: Rdio is pretty awesome and you should check them out first.)
tldr: A minimal, open-source web browser for iOS that tunnels web traffic through Tor.
I’ve been interested in Tor for quite some time, mostly out of curiosity and a nerdy (though sometimes fleeting) interest in cyber security/encryption/code breaking. (I think a lot of geek-types can relate to the same sort of “hacker nostalgia”, probably rooted in literature and film.) I’ve found the mere idea of an underground “darknet/deep web” interesting, as well.
I’ve screwed around with iPhone and iPad development in the past and although I’ve brought a few projects to feature-completion (the most recent being over 18 months ago), I haven’t actually “completed” one myself, in the sense that said project ends up on the App Store by my own hand. (They’ve all been handed off to a client or mothballed for one reason or another.)
And there’s at least one existing Tor-enabled browser on the iOS App Store that I’ve looked at but have been unimpressed with — to the tune of crashes, lack of cookie support, issues with POST requests, etc.
So I thought I’d try my hand at building a Tor-integrating iOS app and — since the idea seemed novel enough (or at least, lacked documentation of how one would even begin such a task) — I figured I could document and open-source the project to give back to the community a little bit.
What I ended up with is not the shiniest app and it is not the most fully-featured, third-party web browser for iOS. But it’s quite stable, works for almost all manner of Tor-powered web browsing that I and others have tested, and provides a few basic niceties that other “anonymizing” iOS browsers do not. (Namely, user-agent spoofing and ability to choose a cookie policy.)
The more technical notes and references can be found in the repository README (with some more references in the LICENSE). As time allows I’ll perhaps write a blog post or so about techniques I used, quirks and things I discovered, etc. A list of security caveats is on the product page.
(An interesting technical thought for now: the dependency build scripts and the “TorWrapper/AppDelegate” bits which integrate and control the Tor client could be applied to other iOS apps to provide Tor-enabled access, for example an e-mail client for the Tor Mail POP3/IMAP/SMTP services (since they reside in a hidden service), iOS clients for hidden services of other protocols such as IRC, etc.)
I plan on selling Onion Browser for $0.99. (Update 5/3: Removed block of text regarding donating a percentage of the proceeds to the Tor Project and the Electronic Frontier Foundation. As per App Store guidelines, donations as part of the app price are verboten; I’ll honor my previous commitment to this donation as a private individual — and I’ll likely keep folks up to date for verification purposes — but moving forward I cannot advertise that any portion of app sales are directly going to donation. I also implore all of you to consider donating on your own.)
It’s primarily on sale (rather than free) because I’d like to somewhat recoup my iOS Developer Program subscription cost (and perhaps make a small amount) while still making the app accessible to people who are unable to afford their own Developer Program subscription to build/install their own device copies of this app (since the source code is free). (I renewed my own iOS Developer Program subscription after over a year hiatus of iOS development just for this app.) I think selecting the lowest price point is a fair trade between public accessibility and my own overhead cost.
That’s the summary and status for the time being. Check out the product page and the GitHub project and feel free to comment here or on Hacker News.
In which I compare astronomical probabilities to the girlfriend this morning:
“You know it’s more likely to get struck by lightning twice in your life than it is to win the jackpot, right?”
“I’ve interviewed a guy who got struck by lightning twice!”
“But you've never met anyone who won the lottery, have you?”
“Nope.”
“EXACTLY.”
Now for a totally technical aside:
The odds of picking Mega Millions correctly on one ticket is just 1 in 175,711,536. For the odds of getting struck by lightning twice in your lifetime to be better, then the odds of getting struck by lightning once in your lifetime should be better than 1 in √(175,711,536) — which is just about 1 in 13,256.
…Which is generally true — NOAA (in 2011) cites 1 in 10,000 for an 80 year lifespan (based on 400 US injuries/deaths per year ÷ the US population); others like National Geographic (citing NOAA figures in 2005) peg the figure even more likely at 1 in 3,000.
A few people (including the main @Heroku account on Twitter) have mentioned that I’ve thrown together a working Heroku buildpack for PyPy. (And hey, PyPy 1.8 just dropped last Friday so you should check that out.)
This Buildpack provides PyPy 1.8 on Heroku, via @mtigas:ow.ly/92PtJ
— heroku (@heroku) February 13, 2012
I noticed a couple other attempts that were broken (with an 'import site' failed error) and did some sleuthing on my own deployed-but-broken PyPy/Heroku site: did you know you can run arbitrary commands by using heroku run? I dug around (via heroku run "ls -la *") and tinkered with a buildpack of my own and discovered that the include dir was being symlinked (not actually copied) and the lib-python and lib_pypy directories contained symlinks rather than actual .py files. (This is possibly an issue with virtualenv --relocatable and PyPy.)
I fixed the buildpack by removing those directories and copying them manually after the virtualenv is set up.
(Aside: I’ve been toying with Heroku in my spare time for a mere couple weeks now, but the Cedar Buildpack system is a really awesome concept and really caught my eye: you can essentially use them to deploy your own arbitrary projects and languages to the Cedar stack.)
In any case, this buildpack is more or less a drop-in replacement for the default Heroku one. When creating a Heroku app, you can enable it like this:
heroku create --stack cedar --buildpack git://github.com/mtigas/heroku-buildpack-pypy.git
Or, modify an existing Python/Heroku app by using:
heroku config:add BUILDPACK_URL=git://github.com/mtigas/heroku-buildpack-pypy.git
…and then re-deploying your app (by pushing).
Enjoy your easy to set up, cloud-hosted PyPy!