Zed Shaw's latest project - Fret War(fretwar.com)
fretwar.com
Zed Shaw's latest project - Fret War
http://www.fretwar.com
Fret War is a guitar competition site where contestants try to defeat lesser guitarists in weekly rounds playing randomly generated music. Awards are given each week for interpretation, accuracy, speed, and uniqueness.
39 comments
Did zed ever get another job? (didn't he leave to California a couple of months ago?)
https://www.dropbox.com/about -- He's an engineer at Dropbox now.
Hot damn! I'd never have expected him to find his way there, but it seems like it would be a good fit. A smart ambitious guy who hates bullshit, and one of the few companies that it's impossible to accuse of bullshitting. I wish them both luck.
[deleted]
The concept isn't clear enough. Either that or there's not enough content yet. Or maybe I have to sign up? I'm confused.
I don't like the idea. I prefer playing with other musicians, not trying to beat them. That doesn't even sound fun to me.
Sure, you might prefer jamming with other musicians. But Fret War really is for guitarists who're keen on developing technical proficiency,, composition and improvisation skills. To be technically proficient, you always have to strive to be better than others, not necessarily "beat them".
The information collected is actually pretty interesting. I assume voting will have something to do with sounding good in addition to speed and accuracy. Besides making a cool site, he just crowd-sourced music production (everything is released with a CC license).
So, this is GuitarWar, right?
http://runplaybook.com/ is just rsync, right?
:-)
:-)
Not even. It's mostly straight SSH. With a little Ragel thrown in.
who wants to spend time learning to play this?
http://fretwar.com/static/data/round/1/media/xzibitonics_C.m...
http://fretwar.com/static/data/round/1/media/xzibitonics_C.m...
Jamming to randomly generated music doesn't sound like everyone's cup of tea.
Well the challenge wasn't to "jam" to it, it was to be able to play it. I did it, and I'll say it was way too hard for most guitarists.
This was on purpose to act as a sort of implicit "invite only" mechanism. It kind of worked a bit too well.
The next round will be more "jamming" oriented and open ended so more people can play.
This was on purpose to act as a sort of implicit "invite only" mechanism. It kind of worked a bit too well.
The next round will be more "jamming" oriented and open ended so more people can play.
I didn't find it hard at all, just not very interesting, so wasn't motivated to learn it (no offense). I think having more open-ended jam tracks would work better.
Alright, prove it. Send in your submission. If it was so easy you should be able to send it in and compete, regardless of whether it's interesting or not.
Using Ruby on Rails and running on Mongrel, I assume?
Nope, not rails (troll). It's a web.py application combined with a Lamson application. The frontend is run through nginx and I use some heavy caching tricks to make it fast as possible.
The primary design for hosting costs (scalability) are:
1) http://wiki.nginx.org/NginxHttpAdditionModule to serve static headers and footers so the framework doesn't.
2) Javascript determines the login state of a user and then displays user state links.
3) Generation of the site is "out of order" for convenience of generation/caching, and then javascript knits it back together. We'll explore more of this later.
4) Caching for about 5 minutes on most pages, depending on usage.
5) Use of http://wiki.nginx.org/NginxHttpProxyModule#proxy_store to do page caching for content that needs to be dynamically generated very infrequently.
6) Gzip compression (should do precompression really) and other tuneups.
7) Using Lamson to accept posts via email so that they're processed off-line and statically generated. This is also really easy for people to use and easy to setup, so triple win.
It's currently not close to a production setup, but I'm going for making it easy to host on a small server to keep costs low. Part of that is just not using the framework when possible.
For statistics, right now the Nginx server is getting a modest 4-10 req/sec for html, but the backend is only serving about 1 request a minute thanks to all the above. Also the site really doesn't accept uploaded content via HTTP except say for photos.
Hope that helps, I may blog about it more later.
The primary design for hosting costs (scalability) are:
1) http://wiki.nginx.org/NginxHttpAdditionModule to serve static headers and footers so the framework doesn't.
2) Javascript determines the login state of a user and then displays user state links.
3) Generation of the site is "out of order" for convenience of generation/caching, and then javascript knits it back together. We'll explore more of this later.
4) Caching for about 5 minutes on most pages, depending on usage.
5) Use of http://wiki.nginx.org/NginxHttpProxyModule#proxy_store to do page caching for content that needs to be dynamically generated very infrequently.
6) Gzip compression (should do precompression really) and other tuneups.
7) Using Lamson to accept posts via email so that they're processed off-line and statically generated. This is also really easy for people to use and easy to setup, so triple win.
It's currently not close to a production setup, but I'm going for making it easy to host on a small server to keep costs low. Part of that is just not using the framework when possible.
For statistics, right now the Nginx server is getting a modest 4-10 req/sec for html, but the backend is only serving about 1 request a minute thanks to all the above. Also the site really doesn't accept uploaded content via HTTP except say for photos.
Hope that helps, I may blog about it more later.
Wow, someone else using web.py, and that too for a "real" project! I always feel like a n00b for using such a stripped-down "framework" but after spending some time trying Pylons and Django, I found them both to be too "heavy-weight" for me.
What do you like and dislike about web.py?
What do you like and dislike about web.py?
I like web.py for this because it's tiny, fits HTTP real well (try doing REST with Django), and it's "just a library" so it's easy to mesh with Lamson. Also, I was bored.
What I don't like about web.py is this:
https://bugs.launchpad.net/webpy/+bug/435370
I have to hack that fix in to every web.py install because they're too arrogant to actually fix it properly, even when given the fix.
What I don't like about web.py is this:
https://bugs.launchpad.net/webpy/+bug/435370
I have to hack that fix in to every web.py install because they're too arrogant to actually fix it properly, even when given the fix.
Zed, I know you mean well, but your wording in that bug report is extremely asshole-ish. Can't you point out flaws without being so snarky?
It's not asshole-ish at all, it was just direct and made the point much clearer with the proper amount of urgency. This bug crashes sites consistently and is easily exploited. That's serious enough to warrant an immediate fix and release with an apology for the design. That's what I've done on my projects, and that's what I expect.
Now, the question is why do you demand humility from me, but not from them?
Now, the question is why do you demand humility from me, but not from them?
Given the downvotes and the other comment here, it seems taht I'm in error, and I'll retract my statement. I guess I misread it; sorry about that.
Seriously? A bug report that identifies a DOS condition gets flagged as "won't fix" -- and Zed's followup explains, with details, why it should be fixed, and what the fix should be.
I tried, and I couldn't find anything asshole-ish about the bug report. It looks like good work to me.
I tried, and I couldn't find anything asshole-ish about the bug report. It looks like good work to me.
Hi Zed, did you roll your own session and caching library?
In the past, I've had a few problems with sessions on web.py, like AttributeError (Googling around, one of them is still there https://bugs.launchpad.net/webpy/+bug/204084).
In the past, I've had a few problems with sessions on web.py, like AttributeError (Googling around, one of them is still there https://bugs.launchpad.net/webpy/+bug/204084).
We actually keep the sessions very light, and if I could I'd get rid of them entirely.
For caching I'm just using nginx and generating as much content to disk as possible. It is much simpler that way, and the goal is to keep things simple and cheap so I can bootstrap the site.
For caching I'm just using nginx and generating as much content to disk as possible. It is much simpler that way, and the goal is to keep things simple and cheap so I can bootstrap the site.
He posted sample python code for the rating system in a blog post.
http://zedshaw.com/blog/2009-11-6.html
http://zedshaw.com/blog/2009-11-6.html
I think Zed's pretty much done with Rails. He said he'd only use it if absolutely necessary.
Seems like 'web 2.0' guitarwar.com right?