6 ms·
Berliner: Sinatra like Framework written in 16 lines of CoffeeScript.
- debacle 14y agoSixteen disgustingly ugly minified lines don't count.
- runemadsen 14y agoHe, I was about to say the same. I could probably compress the worlds entire JS libraries into a single line.
- jonny_eh 14y agoBut you can't do that with Coffeescript due to the lack of semi-colons.
- agscala 14y agoWhat's the point of minimizing a server-side script anyways? It doesn't need to be transferred over the wire. Silly.
- cheap 14y ago_why begs to differ
- lucian1900 14y agoIt's just minified. There are some half-decent ideas in there, it appears to be a half-hearted, lame joke.
- deleted 14y ago[deleted]
- byroot 14y agoYou win nothing by minifying CoffeeScript. This "Framework" is more a few hundred than 18 lines.
- lucian1900 14y agoBecause it only includes the minified code.
- arturadib 14y agoWait, how's this different from Express? The whole "in X lines" makes a lot more sense in the browser context (as it needs to download the script), not so much on the server side.
- ndaversa 14y ago16 lines, not really, 16 x 80 characters = 16 lines. Otherwise, cool project.
- franze 14y agowell, at first i was excited because i would love an express like router/framework with a code base that i can grok in <15 minutes. then i saw the code https://github.com/jcoglan/berliner/blob/coffee/berliner.coffee https://github.com/jcoglan/berliner/blob/coffee/berliner.cof... and think this is just lame. would like to see the real code.
- mdgrech23 14y agoCan we see the real source please?
- vgrichina 14y agoFunny that so many commenters don't recognize trolling of CoffeeScript developers/frameworks
- rmoriz 14y ago"original" https://github.com/rkh/almost-sinatra/blob/master/almost_sinatra.rb https://github.com/rkh/almost-sinatra/blob/master/almost_sin...
- deleted 14y ago[deleted]
- jedahan 14y agoAfter js2coffee: http://pastebin.com/raw.php?i=NM4aLjWU http://pastebin.com/raw.php?i=NM4aLjWU
- j45 14y agoWill real, lasting apps be built in this? I'm not sure why languages need to put on a programming pageant. If it works for you, great, use it to build something cool. I've regularly used about a dozen languages in the last decade. End user Customers don't care what I code in as long as I make their life easier, not just my own. By taking the time to learn what I'm using for yourself these kinds of comparisons would be a lot more productive than trying to build up the coolness factor. Many Languages were made in the 90's. Even more frameworks come and go, most aim to do similar things, over and over. Maybe it's just me, bulls something for the world.
- olegp 14y agoIf you prefer synchronous server side JavaScript, I would recommend also checking out Stick, a CommonJS compatible Sinatra like framework that can also be used from CoffeeScript: https://github.com/olegp/stick https://github.com/olegp/stick
- Argorak 14y agoFor those that don't see the context: This was written at eurucamp, where we had a talk about a minimal Sinatra in 8 lines. (Almost Sinatra)
- pygy_ 14y agoFor those who wish to see the non-minified source: The code has not been minified, except perhaps for the replacement of the (carriage return+indent) by semi-columns. Most variable names are semantic. For sure, the 16 LoC thing is misleading, but the whole thing weights around 3.5 KB, which is impressive for the amount of functionality packed in it. Let's take the first two lines: [J,M,duc,euc,n,e,w]=[JSON,Math,decodeURIComponent,encodeURIComponent,((p)->p.replace(/\/*$/,'').replace /^\/?/,'/'),((d,s)->d[k]=(if d[k]instanceof Array then d[k].concat v else v)for k,v of s;d),(s,c)->s.split(/\s+/).map c] [http,url,qs,fs,async,WS,E,haml,ejs,mime]=w 'http url querystring fs async faye-websocket vault/node/aes haml ejs mime',require For iOS readers, you can scroll the code box using two fingers. So: [J,M,duc,euc]=[JSON,Math,decodeURIComponent,encodeURIComponent] is quite obvious. So is the second line except perhaps for the use of the w function. It splits the input string on spaces in an array and maps the callback passed as second argument (in this case, require, if you didn't scroll til the end of the line). We'll come to its meaning later. n = (p)->p.replace(/\/*$/,'').replace /^\/?/,'/' # normalize?(path??) not sure about his one. # p is also used elsewhere as a generic name. e = (d,s)->d[k]=(if d[k]instanceof Array then d[k].concat v else v)for k,v of s;d) # extend(destination, source) # k and v are obviously key and value. w = (s,c)->s.split(/\s+/).map c] # w(string, callback) In Ruby, w%foo bar baz% is a shortcut for creating an array of strings ["foo","bar","baz"]. The w method here is enhanced version of this, and a nod to _why, who often used it to require a bunch of libraries at the top of his scripts. See for example https://github.com/camping/camping/blob/ddea5760289a4de3c27047c17475fd1165256664/lib/camping-unabridged.rb#L31 https://github.com/camping/camping/blob/ddea5760289a4de3c270... For those who don't know about him, _why is the author of Camping, the grand-father of golf Web microframeworks. The current version doesn't use the w trick anymore because the reduction of dependencies made the normal method shorter. Here's the code (possibly NSFL for some...): https://github.com/camping/camping/blob/master/lib/camping.rb https://github.com/camping/camping/blob/master/lib/camping.r... and its heavily commented (but as terse, codewise) version: https://github.com/camping/camping/blob/master/lib/camping-unabridged.rb https://github.com/camping/camping/blob/master/lib/camping-u... Camping used to be the go to ruby microframework until _why's disappearance. Then dev stalled for a while and Sinatra took its place. It has since been revamped and is actively maintained. Neither Camping nor Berliner are meant for professional use, obviously.
- whalesalad 14y agoI'm disappointed that this is mostly a joke. I really like the docs and have been looking for something along these lines lately.
- KaoruAoiShiho 14y ago? What's wrong with express?
- whalesalad 14y agoDo you know how much boilerplate crap is required before you can do hello world with express?
- deleted 14y ago[deleted]
- secoif 14y ago>Do you know how much boilerplate crap is required before you can do hello world with express? This much: var app = require('express')(); app.get('*', function(req, res) { res.send('hello world'); }); app.listen(8080); Hello world probably a bad example.
- danneu 14y agoZappa[0] is a cool Coffeescript wrapper around Express. Unfortunately, Maurice Machado[1] dropped off the radar last October so some other people stepped in to maintain it at https://github.com/zappajs/zappajs https://github.com/zappajs/zappajs. Maurice also wrote Coffeekup[2] (a Coffeescript Jade) which has also been taken over by the community as a project called Coffeecup[3]. (Sincerely hope Maurice is ok. He was real active and put a lot of effort into his projects up until his disappearance.) [0]: http://zappajs.org/docs/crashcourse/ [1]: http://twitter.com/mauricemach [2]: http://coffeekup.org/ && https://github.com/mauricemach/coffeekup [3]: https://github.com/gradus/coffeecup
- gee_totes 14y agoYeah, the thing that gave it way for me was: * Since this is such a small module, it’s almost certainly bug-free
- toomuchcoffee 14y agoUmm, "lines"?
- FuzzyDunlop 14y agoThis was written in response to a talk at Eurucamp over the weekend, about re-writing Sinatra in as few lines of code as possible. While somewhat tongue in cheek it was as much about being creative with the language as it was about obfuscation and writing 'bad' code. https://github.com/rkh/almost-sinatra https://github.com/rkh/almost-sinatra