Something similar was described in this GDC talk which you may find interesting https://www.youtube.com/watch?v=HZft_U4Fc-U
HN user
trun
Software engineer working at Drift https://www.drift.com
http://www.marathonmuse.com
https://github.com/trun
Some things I've worked on... dorm.io - http://dorm.io
Building management for universities made simple
Battlecode - http://www.battlecode.org
MIT's annual AI coding competition
Flashblocks - http://github.com/trun/flashblocks
A framework for creating visual, block-based programming languagesCory's link to the instrumentation source doesn't seem to exist anymore, but here's the latest public version... https://github.com/battlecode/battlecode-server/tree/master/...
Most of the interesting bits happen in RoboMethodTree.
Linkbait aside there are some reasonable points being made here, specifically "Failover means downtime" about HBase. We run into this pretty much every day in one of our customer facing applications or APIs and it's quite frustrating to have to explain that there's very little you can do to prevent it.
I haven't looked too closely at MapR yet, but "instant recovery, seamless sharding and high availability" are impressive claims. It's still decidedly differently than HBase in my mind given the cost.
You can use SaneTimeField to store sanetime objects in your Django app.
I believe someone is working on writing up a more detailed post about this, but I'll throw the sanetime library out there. It's pretty slick and even has built in Django support.
https://github.com/HubSpot/sanetime https://sanetime.readthedocs.org/en/latest/
Drunkasaurus! Oh man, 2009 was a good year :)
I'll echo what skates and iba said -- battlecode was probably one of the most productive things I did in school. when everyone else is trying to teach you how to properly to document your preconditions, battlecode is purely about GSD (get s* done) - an extremely valuable lesson for an aspiring young entrepreneur.
my favorite battlecode hack: we used to assign a fixed "cost" to certain methods, namely Arrays.hashCode(). one of the more experienced players figured out that everyone was using this to checksum their radio broadcasts. he then proceeded to reverse engineer the hash code algorithm and spam teams with enormous messages that had legitimate checksums but were actually just megabytes of trash! the poor opponents would just sit there chewing cpu until the engine finally killed them for using too much heap :)
edit: actually read through cory's post - glad to see he already mentioned this one!
Totally agree. I can't tell you how many times I tried to close apps on my android phone by swiping upwards after I started using WebOS.
Good stuff! Reimplementing old hardware on an FPGA is a really fun and enlightening exercise that I would highly recommend to any CS people with some extra time and patience. I've been working on an FPGA based GameBoy implementation in my spare time (with no prior FPGA experience) and it's been a blast.
What does this do to battery life?
Indeed. I wrote a similar framework in Actionscript / Flex a few years ago, actually with a lot of input from the Scratch team. I've been thinking about porting it to JS recently. Glad to see someone beat me to it :)
Edit: Here's my old Actionscript library in case anyone is interested. https://github.com/trun/flashblocks
Very impressive stuff. For what it's worth, I played around with the new audio reCAPTCHA a bit.
- I heard 50+ distinct words, plus the numbers 1-9
- Numbers are not written out anymore (e.g. "nine" does not work, it must be "9")
- You must get 9 out of 10 words correct to complete the CAPTCHA
So they're still working with a very small dictionary of words, and with a little practice it's not hard to nail these consistently (as a human). The extra noise makes it a little more difficult to split the samples, but that's a solvable problem. I bet they can re-break it with their existing program and not too much additional effort to retrain the system.That was my point. For example, TortoiseGit presents "revert" instead of "checkout" (e.g. on a file, not a branch). "revert" in git actually means something else entirely.
I use TortoiseGit (and was a long time user of TortoiseSVN before that), but I find it to be a poor substitute for the command line. I feel like they tried to make the names of git commands more user friendly, but having already grown accustomed to misnomers like "git checkout" it often takes me a little while to find the right action in TortoiseGit.
Not sure why you're getting downvoted -- this was my reaction as well. Particularly the lack of any sort of top or bottom border makes the app feel very cramped. Also, some of the mouse interactions I've become accustomed to in Win7 don't seem to work (such as dragging a maximized window from one screen to another) but I'm not sure what to blame for that.
Somewhat related, I think his site has my favorite 'forgot my password' email ever.
Apparently you forgot your password? Ok, so here's your new one, stupid:
EMAIL: xxxxx@gmail.com
PASSWORD: moron.xxxxxThis is really neat. One of my favorite Windows design features (there aren't many) is the way icons in the taskbar are highlighted with their primary color when you mouseover. This seems like the perfect solution to replicate that effect elsewhere.
I tried it out - very nice work! I really like the design of the landing page. A few comments...
LinkedIn doesn't seem like a great reason to "Go Pro" since I've likely already copied all of my info from LinkedIn just to try it out in the first place. However, the other features, such as analytics and additional templates are awesome additions that I might want after I try it. If I were you, I would seriously consider baking in LinkedIn support to lower the friction for new users and then upsell them with the other features.
You should allow creation of the resume in smaller chunks and save as you go. I get very nervous when I have to type more than a few sentences in an unsaved document.
I don't really need a big description box for every skill I want to list. Actually, I'd rather just list them all (LinkedIn does this).
My profile page says "Howdy Trevor.rundell", which I assume it pulled off my email address. You should just pull my first and last name off of my resume instead.
You should definitely allow users to create their own short URL (/r/trun is a lot better than /r/bejeya). Maybe this is a Pro feature.
Here are the new features...
- Instant provisioning
- Client IP address is forwarded to application as X-Forwarded-For
- Better validation of certificate files
- Rollback of certificate changesFrom the highlights in the article this appears to be very similar to an MIT student's project from a few years back...
Not sure how this stacks up against other fair use guidelines, but I'm pretty sure a 3-10 second sample is within the allowable limits of copyright law[1]. However, there are other qualifications, such as reduced quality that might disqualify his work.
It's still pretty sad. Shows like The Daily Show rely on fair use for a lot of their content and it's hard for me to see a difference between this and much of what they do. Fair use shouldn't only be available to people with expensive lawyers.
[1] http://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Music...
I actually had a friend in school who did this (lottery tickets) as a side business. They had an investor that provided the capital, and when the jackpot reached a certain level, they would buy up a few percent of the total number space. Believe it or not, the expected value actually worked in their favor.
The hardest part was sifting through the dozens of boxes of tickets (which he stored in his dorm room) to find the winners.
If you're into this kind of thing, you should check out Battlecode (http://www.battlecode.org). It's primarily an MIT competition, but in recent years we've opened it up to the general public. Also, several YC alums are former devs.
My favorite part of this article...
[T]his course is tied to two courses offered by the English department on J.R.R. Tolkien and Anglo-Saxon literature. Students in the computing course put concepts to immediate use by analyzing large bodies of text. The syllabus is more like what one would find for a humanities course.
Too often introductory CS programs focus on the "how" of programming. By showing students the "why" and "what" first, you immediately have a more compelling case for keeping them engaged. This is true of all subjects I suppose, but CS is somewhat unique in that there are problems waiting to be solved almost everywhere.
Whenever I see a story like this I always think of this XKCD strip: http://xkcd.com/137/
I don't aim to offend people with things I post online, but I don't expect to make everyone happy either. If a future employer might not hire me because I express myself publicly, chances are I don't want to work there anyways. However, I find it sad to see this kind of thing in education. I know too many great teachers in public schools that have decided to leave due to crap like this, and I can't help feeling that things only get worse in their absence.
(edited for grammar)
Great article. I've built a number of systems very similar to this and have found Redis to be a fantastic platform, both in terms of reliability and flexibiliy. I'll share a few tips that I think complement your approach.
- When you want to compute metrics for multiple intervals (hour / day / month / etc) Redis' MULTI / EXEC constructs make transactional updates to multiple keys a snap. Additionally batching (which is supported by most Redis clients) can dramatically improve performance.
- You can use Redis sets for computing uniques in realtime. You can also use set operations like SUNION to compute uniques across multiple time periods relatively quickly. For example, SUNION 24 hour intervals to get the total uniques for the day. You just have to be careful that large numbers of uniques eat up your available memory very quickly. EXPIREAT helps ensure things get cleaned up automatically.
- Using a Redis list as an event queue is a great way to further ensure atomicity. Use RPOPLPUSH to move events to a 'uncommitted' queue while processing a batch of events. If you have to rollback, just pop them back on to the original list.
Time zone support! This has always been one of the most painful things to manage IMHO. Also this little gem caught my attention...
* The if template tag now supports {% elif %} clauses.One minor critique... the example placeholders are of the form "example.com" but it seems to reject domains that are not fully qualified (e.g. "http://example.com)
Neat idea though.
Reminds me of something I saw not too long ago...
https://github.com/JulienPalard/Pipe
It would be really cool (though admittedly less Pythonic) to combine the infix notation provided by the Pipe library to allow more shell-like function chaining.
Instead of this...
print wc(ls("/etc", "-1"), "-l")
You would have this... print ls("/etc", "-1") | wc("-l")Most of that software has been rewritten several times over now, but the competition lives on (it's called Battlecode now)! We actually open sourced a bunch of the code base last year if you're interested in checking it out [1].
Additionally, the competition has since been opened to outsiders so you can participate even if you're not at MIT. We never publicized that fact very well, but I imagine it would appeal to much of the HN crowd. I also recommend checking it out if you've got some time to kill [2].
[1] https://github.com/battlecode/ [2] http://www.battlecode.org
I'm glad to see Stewart finally give this issue some coverage. I actually think the more interesting part of this bit was his montage of Daily Show clips using "copyrighted" content. It really underscores the importance of fair use and the grey area that makes copyright violations such a difficult area to police. The nerds bit was funny, but it was just the usual mockery of our elected officials he usually does.