
Embarrassing Flaws That Made My ‘Weekend’ App Possible - billswift
http://yieldthought.com/post/1345897970/10-flaws-that-made-my-weekend-app-possible
======
c4urself
"While thinking about this on a plane to England, my mind makes the natural
leap from my motley collection of python functions to turning down acquisition
offers from Amazon and being invited to talk at Davos."

haha happens all the time, who else suffers from this?

~~~
adbge
[One of my favorite excerpts from _Why's (Poignant) Guide to Ruby_ ]

Today I was at this Italian restaraunt, Granado’s, and I was paying my bill.
Happened to notice (under glass) a bottle of balsamic vinegar going for $150.
Fairly small. I could conceal it in my palm. Aged twenty-two years. I’ve spent
a lot of time thinking about that bottle. It is often an accessory in some of
these obsessive fantasies. In one fantasy, I walk into the restaraunt, toss a
stack of greenery on the counter and earnestly say to the cashier, “Quick! I
have an important salad to make!”

In another, related fantasy, I am throwing away lettuce. Such roughage isn’t
befitting of my new vinegar. No, I will have come to a point where the fame
and the aristocracy will have corrupted me to my core. My new lettuce will be
cash. Cold, hard cash, Mrs. Price.

Soon, I will be expending hundreds for a block of myzithra cheese. My
imaginations have now gone beyond posessions, though. Certainly, I have
thought through my acquisition of grecian urns, motorcades, airlines,
pyramids, dinosaur bones. Occassionally I’ll see wind-tossed cities on the
news and I’ll jot down on my shopping list: Hurricane.

But, now I’m seeing a larger goal. Simply put: what if I amassed such a
fortune that the mints couldn’t print enough to keep up with my demand? So,
everyone else would be forced to use Monopoly money as actual currency. And
you would have to win in Monopoly to keep food on the table. These would be
some seriously tense games. I mean you go to mortgage St. James Place and your
kids start crying. In addition, I think you’ll begin to see the end of those
who choose to use the Free Parking square as the underground coffers for city
funds.

You’ve got to hand it to fun money, though. Fake money rules. You can get your
hands on it so quickly. For a moment, it seems like you’re crazy rich. When I
was a kid, I got with some of the neighborhood kids and we built this little
Tijuana on our street. We made our own pesos and wore sombreros and
everything!

One kid was selling hot tamales for two pesos each. Two pesos! Did this kid
know that the money was fake? Was he out of his mind? Who invited this kid?
Didn’t he know this wasn’t really Tijuana? Maybe he was really from Tijuana!
Maybe these were real pesos! Let’s go make more real pesos! I think we even
had a tavern where you could get totally hammered off Kool-Aid. There’s
nothing like a bunch of kids stumbling around, mumbling incoherently with
punchy red clown lips.

------
ojbyrne
In the very oldest version of digg to be found on the internet archive, if you
view source there's an sql query inside an html comment. Embarrassment,
trapped in amber forever.

~~~
JimEngland
<http://web.archive.org/web/20041209040106/http://digg.com/>

~~~
Groxx
Proof that The Internet does indeed hate you, and wants everyone to remember
it forever, even if you don't.

------
zipdog
"If I’d played around with every piece of technology I should be using whether
I felt like it or not, I’d never have got anywhere."

I feel like this all the time. Sometimes it's better to do a less-great job in
a language you know backwards and skip the learning curve of a new tech.

The site works really well btw: after entering a handful of my favs it took my
a while to get through all the games I already like to find new ones - so it's
doing something right :)

Thanks for the interesting read.

~~~
moconnor
Great, I'm glad to hear it's proving useful! I'll do a follow up with how well
my NoDB implementation stood up to the pounding it's getting at the moment
later in the week...

~~~
theycallmemorty
Here's a feature suggestion for you from a fellow BGGer: Allow users to
restrict the search to games from with specific amounts of players.

~~~
moconnor
Yeah, #players and playingtime are both on my list of things to optionally
filter. Just need to find a nice way to do it without complicating the initial
user experience.

------
kenjackson
I haven't looked at this data to know if this would fit, but SVD worked really
well for the Netflix prize.

When I first heard its use in recommender systems I laughed and then
thought... wow, that's kind of perfect.

Here's a good explanation if you're not familliar with it, and very accessible
to those who haven't studied linear algebra (or haven't thought about it in a
long time) <http://journal.batard.info/post/2009/04/08/svd-fun-profit>

~~~
stevenbedrick
+1 to this... I've had _very_ good luck using SVD/LSA-ish approaches for
building recommendation engines.

HOWEVER- the big catch with naïve (i.e., simple to implement and understand)
approaches to LSA are that every time you add a new datum, you have to
recompute the SVD of your data- which is time consuming, and raises some
interesting logistical challenges when done in the context of a web app (i.e.,
how you persist your matrices, etc.). There are more sophisticated LSA
approaches that get around some of these problems, but they're more complex to
implement.

Nothing insurmountable, but kind of a pain nonetheless, and w.r.t. the system
described in the parent post, I'm not sure how well they'd integrate with GAE-
can you use NumPy/GSL/etc. on GAE? Or would you be stuck using some sort of
Java numerical computing library?

~~~
binomial
I'd love any resources you could point to that were helpful to you when
builder your recommendation engines (also, do you have links to the actual
engines?). I've been going through a tutorial to understand how SVD works [1],
but it would be nice to find something that will help me deal with
implementation details. I thought I might just use Gensim [2] for now, but the
authors of that tool themselves say that Gensim is more of a framework to
learn about these things rather than a production-ready tool.

[1] [http://www.miislita.com/information-retrieval-
tutorial/svd-l...](http://www.miislita.com/information-retrieval-tutorial/svd-
lsi-tutorial-1-understanding.html) [2]
<http://nlp.fi.muni.cz/projekty/gensim/index.html>

~~~
stevenbedrick
Sorry for the delay, I just now saw that somebody had replied. Regarding links
to the systems- the only one that was ever publicly accessible was for a
Facebook app that I wrote some years back that was let researchers post links
to their publications on their profiles, and also featured a recommendation
system to find other users of the app that had "similar" publications. It's
unfortunately fallen into a pretty sorry state of disrepair, as I haven't had
any time to devote to maintenance in more than two years and Facebook's APIs
have changed quite a bit since then. I described the underlying system a
little bit in a conference paper:
<http://view.ncbi.nlm.nih.gov/pubmed/18999247>

The other systems I've used the approach for have all been along either
bibliometric/bibliographic lines, or have been relating to content-based image
retrieval. It's a pretty robust approach, but can take a little bit of tuning
to get just right- coming up with a good evaluation strategy is important to
getting the most out of it, I've found.

As far as references that were useful:

Ilya Grigorik has a very accessible getting-your-feet-wet tutorial on his
site: [http://www.igvita.com/2007/01/15/svd-recommendation-
system-i...](http://www.igvita.com/2007/01/15/svd-recommendation-system-in-
ruby/)

It might be a little dated w.r.t. specific libraries or APIs, but the basic
technique is there. For a more comprehensive look at the SVD-IR approach, take
a look at:

Berry et al. Using Linear Algebra for Intelligent Information Retrieval. SIAM
Review (1995) vol. 37 (4) pp. 573-595

The SVD approach falls in the same family as Latent Semantic Analysis, which
is a whole black art unto itself- I'd actually suggest going back to the early
papers by Landauer, Dumais, etc. if you're really interested- those guys did a
great job writing up what was at the time really novel stuff.

My contact info should be in my profile, drop me an email if you have any more
questions (or to let me know what you end up doing!).

------
gacba
Another great story on 30 days to an "overnight success". Launching a product,
even a "weekend project" is just damned hard to get right, end-to-end. Harder
than you think out of the gate. I love how this puts things into perspective.

~~~
gridspy
Actually I think this just raises the bar - "Look, it only took 2 hours * 2
weeks to make something useful."

Now everyone who has been slaving away for >24 months to make their own end-
to-end power monitoring solution feels slightly lame.

Look ma - power monitoring in only 1200 hours! (<http://gridspy.co.nz>)

------
jacksonh
I've used that same template before. Opened the article and was like "oh god,
is this about one of my embarrassing weekend projects?"

------
techbio
"I remind myself that pride is another I Ain’t Gonna Need and get on with it."
YAGNI applies liberally.

------
brown9-2
Anyone know which analytics tool is generating these graphs?
<http://media.tumblr.com/tumblr_lai5rgUrSd1qd3z7l.jpg>

~~~
thrdOriginal
<http://www.analytk.com>
[http://www.analytk.com/view/?url=http://yieldthought.com/pos...](http://www.analytk.com/view/?url=http://yieldthought.com/post/1345897970/10-flaws-
that-made-my-weekend-app-possible)

~~~
moconnor
Ah, my other unreleased side project has come to light. Time to add some login
screens, then :-)

~~~
moconnor
Actually, forget the login screens, it can stay public. This is the first time
I've ever launched a site in a 4th level comment, though.

Analytk's a pet real-time blog tracking site I wrote because I was thoroughly
dissatisfied with the typical ones. It tracks each post individually, updating
every minute to begin with (exponential backoff after 1 hour, not truncated).
It also picks up HN and reddit ranks and scores, and tweets. It's only half-
finished. Please be nice.

~~~
thrdOriginal
Whoops, didn't mean to out your pet project. I enjoyed your post and I too was
curious which analytics script you were using so I checked the page source to
see what was going on. I wondered about the lack of documentation on the
homepage...looks cool though.

------
sp4rki
There was a time in my life where I really thought I needed to keep up with
the latest and greatest technologies, libraries, et cetera. As the author
discovered, you don't need to. I can now sleep easily knowing that I 'marked
as read' the newest no-sql magix and do x y & z gems that I really didn't mind
to read about. Great read.

------
jayliew
moconnor: did you keep a journal while you were building this app?

I'm thinking to myself as I am reading this that there's no way you could have
gotten from A-Z, then only after that started filling in the blanks accurately
about what you did on day #X. (Heck, I can't remember what I ate yesterday!)

Motivational, good stuff, thanks for sharing.

Now I'm thinking of an app for HN'ers who just need a little help getting
something like this off the ground: An app that lets you chronicle every day a
short paragraph of what you did to move the ball forward.

Plus, there will be a nagging^H^H^H^H^H^H^Hpeer-accountability feature built-
in. Your progress is public and other HN'ers can "tap" you on the shoulder if
there's a lack of progress and say "what's up with this?"

~~~
gridspy
Personally, I keep a timesheet on when I started and finished working on
something, for instance

Tue 19/10/2010 | 15:40:00 | 17:10:06 | 1:30:06 | Looking at admin interface
for sensor daetails. Trying to fix None issue, seems to be related to
subclassed models. Adding code to twisted for CT settings

Turns out that one of my Django models is breaking the Django admin interface,
and also that I have to have calibration details for the Current Transformer
sensors we use (<http://gridspy.co.nz>)

Another one

18/10/2010 | 8:50:00 | 9:56:36 | 1:06:36 | Server maintaince, removed orbited,
checked memory usage. Killed backup scripts, installed python 2.7

Naturally it is all in an Excel spreadsheet. :)

~~~
jayliew
Do you find that it helps? The closest thing I got that looks like what you
got above there are my git log messages!

~~~
irrelative
Seconded. Using distributed RCS, you commit often and therefore have a pretty
good log of your daily activities.

~~~
gridspy
I don't commit anything with

"Talked to client" "Wrote email" "Made blog entry" "Spent 60 minutes wasting
time doing X"

Also, the gaps in the timeline are just as telling. I always feel that little
bit guilty returning from HN and seeing a 1hr gap where I could have worked.

------
8ren
AppEngine is amazing. It's free web-hosting, that also happens to include
everything you need to make webapps.

 _The man who never made a mistake never made anything_

------
raccer
"Day 5 - Embarrassing Flaw #3: Making a stupid business plan, then ignore it
anyway"

Awesome! (I lol'd) I love inventing. It's only recently that I've started to
add business logic to my imagination, I'm no Jedi in this capacity, but the
force was strong at startup school; and I want to train!

------
chipsy
I just put a Flash game into the sponsorship process today. I made the initial
game in 48 hours for Ludum Dare some months back. Then I returned to it and
put in approximately another 72-96 hours(real-time, not work-time) of effort,
spread out between Thursday, Monday, Tuesday, and this morning, to rework the
theme, polish everything up, and bulk out the content.

Its obvious flaws are having no animation to speak of and minimal
tutorialization, but in comparison to the bloated things I've worked on in the
past, it was a breakthrough performance. A game in five-six days of work. I'm
going to start on another one, now... hopefully I will finish around the 25th
:)

------
brisance
Nice writeup. Did you consider using Google's Prediction API before rolling
your own recommendation system?

<http://code.google.com/apis/predict/>

~~~
moconnor
No. I thought about Directed Edge, but playing with recommendation algorithms
was the raison d'etre of the project. I didn't want to make a web site and
throw some amazon referral links at it, I wanted to play data miner!

~~~
SudarshanP
That's great! [http://techcrunch.com/2010/09/15/hunch-taste-graph-
business-...](http://techcrunch.com/2010/09/15/hunch-taste-graph-business-
model-api/) is another alternative. Maybe you could try tweaking your algo
continuously and comparing with how well hunch recommends stuff. The advantage
of the hunch api is that it is able to use a lot more info about the visitor
to make more awesome predictions. Just curious to see how far it goes!!!
<http://hunch.com/developers/v1/>

------
icefox
A while ago I did a somewhat similar board game web app. I wanted to find a
better ranking than what is on boardgamegeek.com Alas another weekend project
that hasn't really gone anywhere.

<http://icefox.net/picktheboardgame/>

Based off of an older (more fun) app I wrote a long time ago:
<http://toybin.org/pickthetransformer/>

------
Timothee
This convinced me to use AppEngine for a tiny little project I've been
thinking of this past week. It'd be useful to me, probably others, but knowing
that I wouldn't have to worry about anything on the hosting side (be it
bandwidth, uptime...) would be nice.

Actually, I'm looking forward to have some time soon to get started...

~~~
albemuth
also www.heroku.com

~~~
nopal
I really wish they'd show me what I can run on Koi (links to current sites). I
know they make deployment a snap, but I worry that I'd be forced to add more
and more resources to keep my site running as I'd hope.

~~~
bricestacey
The only difference between Blossom and Koi is the size of the database. The
only way to improve performance is to increase the number of dynos or workers
you use.

~~~
zrail
This is actually possible to do dynamically[1] so you can keep your costs
down. I found this post last week and implemented it over the weekend, and
it's pretty neat to watch it work. So far I've only implemented this for
workers, but it's certainly possible[2] to implement it for dynos.

[1]: [http://blog.darkhax.com/2010/07/30/auto-scale-your-resque-
wo...](http://blog.darkhax.com/2010/07/30/auto-scale-your-resque-workers-on-
heroku) [2]: <http://github.com/ddollar/heroku-autoscale>

------
js2
get it done; make it right; make it fast

------
rmoriz
Munich? cool, I'm probably not so alone :)

~~~
moconnor
Call in at <http://combinat56.com> sometime; there's always a couple of devs
doing interesting stuff there.

~~~
rmoriz
I know about combinat56 but their website and their self presentation turned
me a bit off.

~~~
moconnor
Shame, it's a really nice place to work. Nice Sumo sacks, too. There's a
couple of HNers work there; I'm around most afternoons.

------
Tichy
Wow, great idea. I am envious.

------
moron4hire
So I take it from the comments that, "We'll be back shortly. Our servers are
over capacity and certain pages may be temporarily unavailable. We're
incredibly sorry for the inconvenience." is not the embarrassing flaw?

~~~
gacba
Why do these observations of a site being down get downvoted so harshly? The
observation is accurate for him, and it _could_ be for everyone...

~~~
silentbicycle
Because they're trite. For example, it seems like whenever somebody posts an
article about databases, there's a comment saying, "Whoops, looks like your
database doesn't scale after all! Haha". Similar versions (such as this) for
web hosting, etc.

If you're going to take the time to post a "hey is this down" comment, at
least link to the site's google cache or something. Otherwise it's just noise.

~~~
moconnor
Especially when the blog's hosted on tumblr and the app on GAE ;)

