14 ms·
Zed Shaw: Tir Web Framework Officially Up
- mmastrac 16y agoI love the natural style of page conversation on the example page. As a Java developer, I wish that this style were possible on the servlet platform: 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".
- zedshaw 16y agoThe natural style is sweet for things like that. I did the Hype.la signup process with natural style and it meant I didn't have to touch the database the whole time. If they quit half-way through then no DB junk left over. 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.
- jcromartie 16y agoVery cool. I was just looking for other Seaside-style web frameworks today. The "natural style" mode in Tir is just like the main way to build web apps in Seaside. 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."
- vito 16y agoI've been toying with something similar in Atomo (running atop mongrel2): http://bitbucket.org/alex/web/src/2a90b9bd6322/example.atomo http://bitbucket.org/alex/web/src/2a90b9bd6322/example.atomo 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/433d743dc4a7d91705692ff1dc6cab214583cd69 https://gist.github.com/717381/433d743dc4a7d91705692ff1dc6ca... Source code: http://bitbucket.org/alex/web/src http://bitbucket.org/alex/web/src
- jhpriestley 16y agoCode written in the continuation monad (i.e., simple imperative style) can be translated to an Automaton arrow and fit into a Haskell on a Horse application. This approach has the advantage of type-safety and greater composability.
- cullenking 16y agoNot sure if I should laugh at myself for not knowing if this was a joke when I first read it.
- kanwisher 16y agoLOL for some reason I feel less smart after reading that comment ;) had to look up each word
- ericlavigne 16y ago
- grandalf 16y agovery cool! looking forward to trying it out.
- mikeryan 16y agoSo in 2010 Zed has written his own web server which runs his new framework he wrote for the new webapp he wrote. What did you do this year?
- mwhooker 16y agodon't forget writing a book on python
- kmfrk 16y agoAnd a great one at that.
- angelbob 16y agoIn 2010? I reworked my Comet-based realtime game-in-a-web-server library, RailsGame. 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.
- clyfe 16y agoIndeed writing and interacting about something levels you up. I'm not (yet) a blogger but recently I have started interacting on a few social coding networks (stackoverflow, github, HN) and I feel more productive. PS. Is RailsGame open source ? It looks interesting!
- viraptor 16y agoThis one really surprised me: "Finally, there's not much for deployment. I run my apps in GNU screen and that's about it." Seriously? Is he that lucky, serves that little traffic, or does he run with redundant power, network, server and 24/7 monitoring in an inaccessible bunker? 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.
- buro9 16y agoOn my hobby projects I run stuff in screen, I haven't had a problem and my server uptime is currently above 200 days. Is it being used? Something like 1,000 concurrent users for most of the day, so yes. I regarded this as cowboy, but as it worked for me I haven't needed to re-visit it.
- aaronblohowiak 16y agoIt is cowboy, but there is a time and place for that. If you did this in a large organization, you'd be putting the team at risk. Since it is just you, well, do what you find prudent.
- zedshaw 16y agoHype.la is the only real Tir app, with the Mongrel2 BBS demo being a "proto-Tir" app. There's hardly anyone on it yet since I didn't really "launch" it. Because of that, I just run it in screen and I'll worry about the deployment scenario later. Also, the Tir start command actually works kind of like a little monit/daemontools, so if a handler dies it gets restarted. It's pretty robust already. And yeah I need some monit soon, but so far it's been running fine for the small scale.
- samd 16y ago-------------- 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.
- zedshaw 16y agoHa, yeah I had to put that in. I find working in the valley is kind of like working with a bunch of guys before Knuth and Dijkstra established structured programming. It's like they say, "Yo, I don't do if-statements man. I use gotos only. That logic and structure crap just slows me down and busts up my creative chi." 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.
- meric 16y agoLast time this was posted I was really interested in it. So interested in fact, I built a django-style template library to go with it because I really liked 'extends' and 'block'. Github https://github.com/meric/tier/ https://github.com/meric/tier/ Example https://github.com/meric/tier/blob/master/main.lua https://github.com/meric/tier/blob/master/main.lua http://pastehtml.com/view/1c26ovp.html http://pastehtml.com/view/1c26ovp.html Zed would think this is contradicting the point of Tir, though; it being a micro-framework. =\
- zedshaw 16y agoInteresting, I'll take a look at this some more. My only question is, isn't plain old Lua already like django's templates. What specifically are you adding that embedded lua doesn't just give you?
- meric 16y agoTemplate inheritance. See http://docs.djangoproject.com/en/dev/topics/templates/#id1 http://docs.djangoproject.com/en/dev/topics/templates/#id1 `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).