What did you do this year?
I fully rewrote, updated and released a webapp called WantMyJob.com.
I wrote a circuit simulator game called Shanna's Pizza to start teaching my two-year-old the basics of programming. I also started doing Snap Circuits with her so she'd have a physical basis to understand the circuit simulator game. Also, had a second kid.
I wrote a Rails 3 tutorial, including an app with logins and nested resources, called RefactorIt!
I finally put together a real programming portfolio, on the web and everything (angelbob.com/portfolio).
I read up on Bayesian Statistics and Data Analysis (thanks, O'Reilly!).
I blogged and blogged and blogged.
I reworked, resurrected and took screen shots of a scary amount of my old work, partly for the portfolio. This sort of blurs with converting my old Rails stuff to Rails 3, but I did some of both.
I continued to work on my day job, of course. And gave a JRuby presentation for Engine Yard based on what we do there.
Did you know you get more done if you write it down somewhere (like a blog and portfolio) and tell people about it? True story.
That's probably part of Zed's trick, too.
Do you find that? I'm the opposite, once I "announce" something all desire and motivation for completion goes out of the window. For me I think it's about the appreciation, so when I explain the idea and love it, why complete it.
PS. Is RailsGame open source ? It looks interesting!
Oh, nope, that was Zed, too!
(But seriously, Mongrel 2 is an amazing work of software engineering. In addition to being a good web server, it's also a good example of how nice C is if you forget how they did it in the 70s and write it like it's 2010.)
I mean we are mostly all people who make stuff here. I am slightly offended by your attitude that ZS is some how showing us up and we need to prove what we did this year.
The hero worship really puts me off checking HN.
* Grew my main business, had our first year where I've not had a single worry about running out of money (touch wood) in the middle of a serious recession.
* Started building academic and vendor relationships (never thought I'd do that) to develop new technologies and services.
* Did more vulnerability research this year than I have in the last two but haven't published anything public yet.
* Moved to Sales, Marketing, now back to Technical for the time being.
* Took on a business partner and mentor
* Bid for two research grants
* Built up pipeline, wrote more proposals than I have in a long time.
* Seriously damaged my knee in a freak dancing accident.
* Grew a Mo to support Prostate Cancer charities (and raised a few bob too)
* Started a proper non-security side project (http://www.minklinks.com/) - failed to get it into beta for HN November but it will be out before year end.
* Did a whole load of pentesting.
That's it so far, still more things to come before year end though. Hope I pull them off.
* I quit my full time job, start doing contracting again.
* I co-founded http://cooln.es to test our theory about points relationships between social sites.
* I founded http://mybucket.co because all other bookmarking apps are too much work.
* manual classification of news is too much work, so I created Bayesian filter on top of Redis. It's open source: https://github.com/didip/bayes_on_redis
* I'm still helping out Python newcomers on Pylons, Tornado, and recently Flask mailing list.
* I fix bugs on a couple of gems.
* I start blogging again.
* I start learning http://keplerproject.github.com/orbit not too long ago after answering my own question "I wish there's a hybrid between ruby+python and faster than both."
I'd say it hasn't been a bad year.
Aside from Lua and Smalltalk, what other languages could host this kind of framework? I know Ruby 1.9 has Wee, but that doesn't seem to be "ready for prime time."
In its early stages it was continuation-based, but now it's just regular ol' closures. You can still use continuations rather easily though; some of it is modeled on the PLT stack (send/suspend, etc.).
Earlier progress: https://gist.github.com/717381/433d743dc4a7d91705692ff1dc6ca...
Source code: http://bitbucket.org/alex/web/src
http://common-lisp.net/project/cl-weblocks/
I have posted some Continuity code here before (see http://news.ycombinator.com/item?id=1686177 & http://news.ycombinator.com/item?id=1006071).
Also check out Squatting (http://search.cpan.org/dist/Squatting/) which is a RESTful MVC micro framework which (by default) sits on top of Continuity.
The significance of this is that Tir can provide one API for all three styles without special effort from the user.
I haven't been able to run even my toy web apps without something like monit - due to both things under my control and outside of it.
And yeah I need some monit soon, but so far it's been running fine for the small scale.
I regarded this as cowboy, but as it worked for me I haven't needed to re-visit it.
Github https://github.com/meric/tier/
Example https://github.com/meric/tier/blob/master/main.lua http://pastehtml.com/view/1c26ovp.html
Zed would think this is contradicting the point of Tir, though; it being a micro-framework. =\
`Template inheritance¶
The most powerful -- and thus the most complex -- part of
Django's template engine is template inheritance. Template
inheritance allows you to build a base "skeleton" template
that contains all the common elements of your site and
defines blocks that child templates can override.`
Having made it in lua myself, I can tell you it is indeed quite complex. ;)The lua template only has "include" (i.e. copying another template into this template), but not "extends", (i.e. use another template as a skeleton and this template only provides details on how to fill it).
local login_page = Tir.view("login.html")
local login_form = Tir.form { 'login_name', 'password'}
local function login(web, req)
local params = login_form:parse(req)
repeat
params = web:prompt(login_page {form=params, logged_in=false})
until login_form:valid(params)
return web:redirect('/')
end
Tir.start {route='/Login', main=login}
Also, +1 to this: "the framework creator shouldn't be shoving stateful/stateless dogma in your face".Where this kind of coroutine stuff sucks though is in anything that's "RESTy". In other parts of Hype.la I had simple Xhr callbacks that just grabbed lists of data, so the coroutines were just annoyingly in the way and half the time they were just a big loop with an if-statement for the URLs.
That's where the evented came in. In that way I just map actions to callbacks and done.
Then I ran into a few simple things that didn't work in evented and were still stateless, like the search interface, and so I use the stateless handler for that. Nice and snappy with no extra junk.
Another advantage of all this is that, if you have a part of your app that needs to be resistant to restarts, then you can craft it evented or stateless. In other parts, restarts aren't a big deal so you can do natural. And since everything is just a bunch of little processes, it scales out nice and doesn't have as much of the "gotta-copy-the-world-for-users" that Seaside upgrades do.
-------------- NO TESTS ----------------
You must work at a startup.
Brilliant.Hype.la is also pretty slick. Maybe it will become the blogroll of open-source projects.
As for hype.la, stay tuned. I gotta fix up the ad blocks and improve the UI a bunch, but I'm really aiming for it to be for FLOSS and other artists to do ads without feeling like sleeze. Definitely something I want.