Dear Gartner, Fire Andrea Di Maio

I didn't know you hired racists. I mean, maybe racist is a bit of a stretch, but there's no other word for "asshole who arbitrarily stereotypes potential customers" so let's just call Andrea Di Maio the racist piece of shit he is. I say this, because in addition to pretty fucking racist comments about programmers, I'm pretty sure he's full of all sorts of other stereo types that are just lovely. He probably thinks Blacks are stupid, Latinos have big families, Women should shut up and poop out kids, and Jews are cheap and killed Jesus.

Because, let me tell you, where there's smoke there's fire Gartner, and any man who'd just come out and say anything about who I am because of my profession has got to harbor all sorts of evil bullshit mythological beliefs in his tiny little pathetic mind.

But what do I know, all of the above is just guessing, and Andrea may be a pretty upstanding guy. Hell, I'll give him the benefit of the doubt that he didn't give me and just say I take back all the things I just said about him being a Nazi racist fuck. He's probably alright, even if he is a little fucking ugly.

Read more...

Mongrel2 Is Now BSD Licensed

I believe in this programming language agnostic movement so strongly that I'm going to bet the farm on the goal by giving Mongrel2 the most flexible license I possibly can so that it can reach the largest audience possible.

Mongrel2 is now BSD licensed with commit c4b9041f42 and I want everyone to use it and not have to worry about licensing issues or problems with contributors.

The license is the basic 3 clause BSD license:

Read more...

Mongrel2's Got Config Files, Streams MP3s

It's done, and it is fucking awesome. I've been using it for the last few days while I worked on the next demo (a ICY mp3 streaming handler) and the new configuration system works amazingly well. The design is basedon a Model-View-Controller design where:

  • Mongrel2 == Controller
  • Sqlite DB == Model
  • View == m2sh config system

What's this m2sh you ask? Why, pure awesome is what. The m2sh is a simple Python command line program that acts as the View UI to a Mongrel2 config file. With m2sh you craft configurations using little Python scripts that are a lot like config files in other webservers. You can then use m2sh to start, stop, reconfigure, look at the config, create new ones, pretty much all the stuff you end up doing with janky git repos and shell scripts or etckeeper.

Read more...

Mongrel2 Python Library Working

After fixing up a bunch of bugs today and getting the HTTP handler to properly deal with request bodies, I sat down and implemented a first cut at a Python library for writing handlers. It turns out that since ZeroMQ handles a bunch of the protocol crap for me, all I have to do is parse the format and I'm done. I finalized the format last night, so tonight is just implementing some simple code.

You can install it by grabbing the Mongrel2 source and then doing:

$ cd examples/python && sudo python setup.py install

Read more...

Mongrel2 With Special Unixy Powers

If you want to try out the latest gear, read the Getting Started document that explains how to get up and running and do some demos and such. It runs through all the recent features, but is still definitely targeted at a programmer type who wants to try it out. Let's go over some of the big features.

GNU Make 4Life

I tried to like Premake4 but it just fails miserably on too many platforms. The fact that you need Premake4 to build Premake4 makes it nearly useless for many platforms, most notably OSX and a few Linux variants.

Read more...

Mongrel2: State Machines, HTTP->0MQ, Events

I'm very excited about the connection state machine because it means that in addition to the original highly accurate Mongrel HTTP parser, I've now got a connection state system that's just as accurate. It will let Mongrel2 support bizarre proxy configurations, keep-alive state, any kind of backends, HTTP long poll operations, JSSocket, and WebSockets.

As I worked on it this last week I started stumbling into extra features I got for free with this design. HTTP long poll and keep-alive from HTTP->0MQ are probably the two sexiest. Thanks to this design, long polling isn't a special feature, it's just how things work. It also means that HTTP->0MQ has the ability to do N:M processing similar to the current chat demo but using plain HTTP.

What I'm most excited about is how, since the state machine is controlled by simple integer events through a fast Ragel FSM, that means people can write filters based on the events and the callbacks. In the same way people grabbed the Mongrel HTTP Parser and used it to build web servers, this new connection state machine will let you extend Mongrel2's internal connection state processing to meet whatever hairy problems you meet.

Read more...

I Quit My Job At Dropbox 2 Weeks Ago

Don't read into that though. Dropbox has a lot of potential and if you want to work there, then go check out this job that they're promoting.

What's Next?

Rather than gossip about what's essentially a minor event in my life, you should go do something cool. I plan on dropping a major feature of Mongrel2 this weekend, assuming I can get the code right. I'm also going to play some guitar and try to get through my Bass Method book and learn "It Had To Be You". Maybe I'll see Toy Story 3, I hear it's good.

Read more...

Mongrel2 Almost Valgrind Pure, Bstring Happy

My next whack of work was to tighten up the HTTP processing so that it can handle all the bizarre ways that browsers use it, but before I did that I had some work to do.

You see, while Mongrel2 on Monday could served lots of requests without crashing, it wasn't really too tidy. I'd been slacking off in my usual C coding purity and just using all the stupid C string functions that invite buffer overflows. And while I'd been running mongrel2 under Valgrind during its entire development, I was playing fast and loose with the memory management.

It was time to get serious. Starting with this commit I finally set out to eliminate almost all use of the evil string functions using the bstring library. The bstring library is a heavily tested and very well designed library for working with strings. It gives you all the usual stuff you'd get in a modern language, and in a package that keeps things secure. I like this library because it doesn't try to become The One True String Replacement. Instead, you use it for your internal data structures, and then easily interface it to other libraries that already expect regular C strings. It's not totally foolproof, but it is a big help.

Read more...

Mac & Cheese rant

However, the truth is that I really loathe mac & cheese. I hate cooking it, I hate eating it, I hate cleaning up after it. I've thrown away pots that have been used to cook it. I claim to be different because I despise this American staple, and silly as you may think it may be it is my preference not to have anything to do with cheesy pasta. Heck, it ain't even healthy.

Note: I sometimes like some cheese on top of tomato based sauces or chili that has pasta mixed into it. This is not the same thing as mac & cheese.

Yet the complication I face is that I have dear friends and family who think that their prize-winning homemade mac & cheese made from imported unpasteurized cheese will be something that I love. That I'll change and they'll get the chance to smugly say that it was the quality of what I've eaten that discouraged me.

Read more...

Mongrel2 Sqlite3 Config System Working

The first word of warning is that obviously this is going to change. It's an interesting idea, but it has potential to go horribly wrong if it's not constantly usability tested. If you have a knee-jerk reaction to this that's based on your dislike of SQL, just hold off on that. I wouldn't force SQL on anyone who didn't want it, so expect great tooling for this to come out.

Why Sqlite?

I want Mongrel2 to be very language agnostic, and that means you should be able to configure and manage it with your favorite ops friendly language. I'd rather have people work against a known and migrateable SQL database than force everyone out there to try to write hackjob tools that munge an ever changing config file format. Hopefully this will make Mongrel2 an operations wet dream where servers can be managed easily, have their configurations migrated (yes migrated), validated for consistency, and even live reconfiguration without restarts.

Read more...

Mongrel 2 Routing And The Magnetic Bikeshed

As of commit 079c177756 I have that working, and it took me just one day. Best of all, using the two data structures, the entire piece of code that meshes them together is:

int RouteMap_collect_match(void *value, const char *key, size_t len)
{
    assert(value && "NULL value from TST.");

Route *route = (Route *)value;
Read more...

Mongrel2 Is "Self-Hosting"

A web server simply written in C that loved all languages equally. When I wrote the original Mongrel I wanted to make a server that loved all Ruby web frameworks equally. Rather than make it Rails specific I wanted everyone to have a chance, and the end result was many nice frameworks and Merb eventually taking over Rails.

I wanted to do this same thing for all programming languages.

This week, I finally started that web server and I named it Mongrel2. It took me about 1 week to get a first functioning version up once inspiration hit me of how exactly I could do it. This version is functional enough to be self-hosting and support a mostly working web chat server. The code for this is currently about 366 lines of C and 57 lines of hack Python plus some supporting libraries.

Read more...

Why I Use Fossil

For example, people who use git like to say fossil is weird. Fossil's actually pretty normal compared to git. The commands make sense, there's help, and it's simple so each thing does one thing. Git users however will avoid fossil because it's not like git, and don't want to learn anything new, yet when git came out those same people kept saying learning git was like learning C. It's good for you!

Well, what if learning fossil is good for you? Hell, I think you should know all the SCMs you can and be able to switch between them. You might not like it, and I complain all the time I have to commit a merge in mercurial, but I know how to use them anyway.

Another complaint people have about fossil is that it looks like crap. I'm sorry, but if you're comparing fossil to github or bitbucket then that's an unfair comparison. Github and bitbucket are hosted services that get paid money and have been designed to support many projects at one domain used by many people. Fossil is fairly new, and while it supports most of the features or more that github and bitbucket do, it's designed by programmers to be used by other programmers. It's not that great of a design, but the UI is pretty easy to use and gets the job done.

Read more...

The Wrong Aesthetic

The author has converted a simple for loop into a usage of boost::bind, but has also attempted to format the for loop to make it look like the same amount of code. Let's compare if I simply rework the for loop to look normal:

int Dice::total() const {
  int total = 0;
  const_iterator i;

for(i = dice.begin(); i != dice.end(); ++i) { total += (*i)->faceValue(); }

Read more...

Assholes Code Like Assholes (and Like Giles)

Life's too short to learn from people like Giles, and I want to create the next generation of compasionate coders, not asshole coders like him.

Now, let's begin!

Works Is Not Good Enough

Read more...

The days of the programmer are over. Long live the programmer.

Then, as far as I can tell it transitioned to the famous programmers being the ones that wrote books or possibly magazine articles. Then came the famous blogger/programmer, with blogger definitely the key part of that dichotomy. Now it's the ones founding companies and making a lot of money.

Is this really a problem though? Sure, it makes programmers a second class citizen, relegated to sweat away like the cog they are while others take credit for their hard work but is that likely to stay that way?

Well, yes and no.

Read more...

Please Kill FedEx And UPS

Nope, that's not how it works. I have easily 10 communications devices on my computer right now. I can go to google and punch in exact GPS coordinates and zoom in on the top of your fucking head and count your hairs. I can send text messages, twitter, emails, phone calls and even automate all of this. The ease with which FedEx or UPS could tell me that a driver is outside my door, right fucking now, or will be in 10 minutes is staggering.

But now, these stupid companies decided to write their shit in Forth and now they can't use any modern technology to accomplish the one fucking thing I am paying them extra for.

I am not paying them to drive my package into the city and then make me pick it up from a fucking warehouse. I am paying for the box to be on my doorstep with a fucking smile and goddamned signature.

Read more...

There Are No Famous Programmers (Shedding Bikes)

I read your blog on "There are no Famous Programmers" (from reddit.com), and I have my own thoughts regarding programmers and programming. I have been programming for 30 years starting with Fortran then C and C++. I have a Masters in Mechanical engineering (not CS, but have taken night classes).

Read more...

How I Perma-Trolled Reddit

If you contrast this with HN it's night and day. HNers are intelligent, and while they seem unable to read sometimes, they at least have interesting things to say. I used to love reading the HN comments, because even when they were brutal about something I wrote they were insightful 90% of the time.

Reddit is the equivalent of squeezing every pimple on every teenage nerd's face into a giant cup, irradiating it with gamma radiation, and then feeding it to the The Commic Book guy with an Star Trek phaser enema. They're pointless useless little morons, and one day I decided to troll them as hard as I could.

The end result is that I've trolled reddit so hard that they end up trolling themselves, and I'm going to explain to you exactly how I did it.

Read more...

Re: No famous Programmers

Over and over companies go through a hiring process to ramp up a project. Every time, programmers and engineers need to reprove themselves to some ahem douche. But the fault is not theirs, it is ours. We allow ourselves to be controlled and manipulated. We refuse to learn how to negotiate. We scoff at collective bargaining. In the end, we may get pissed off, threaten to go somewhere else, and finally get a raise as the realization of what we actually do sinks into some manager's head somewhere, and they panic and cave on the raise we demand. But really, we gave away our ingenuity, drive, and dedication for years at an undervalued rate.

Where am I going with this? The idea is for the programmer's "internet workshop". In the age of the internet, we can collaborate on projects like the Gnu/Linux OS. But we need to be on the same team as programmers. And we need to get paid. The "internet workshop" would be a place where companies come to get software built. Yeah, a consulting company... kind of... But it would have it's own internal mechanism for programmers from around the internet to work on projects, get paid, and establish reputation, not with clients, but internal to the "workshop community", so that they don't have to interview every time. When a hard problem comes up for a project, a talented programmer can be assigned (or choose to jump on it). When there is some "scut work", a junior programmer can get some of it out of the way, and get an opportunity for feedback from senior programmers. And they can get paid a decent rate...

It would take a lot for something like that to happen. But until it does, we will continue to compete amongst ourselves as programmers, drive our compensation down through competition, and devalue our abilities. Doctors realized this long ago, and created the AMA. Engineers (civil, mechanical) created the PE designation. Even actors created the SAG (but big stars still make millions). It's time for us to do the same as programmers.

Read more...

There Are No Famous Programmers

VCs and term sheets? Really? Well shit, tomorrow I get a x0xb0x and tonight I was hacking on a cool new web server now that I'm done with MulletDB. And these guys just think about VCs and term sheets? That's kind of sad really.

Let me tell you about this cool new web server. I figured out how to merge the ZeroMQ event polling system with the libtask coroutine library so that you can use libtask to handle tons of TCP/UDP and ZeroMQ sockets in a single thread. I then took this very cool hack, and started building a web server using my Mongrel HTTP parser, but I modified the parser so that the same server on the same port can handle HTTP or Flash XMLSockets transparently. The next step is to get this server to route HTTP and XMLSocket JSON messages to arbitrary ZeroMQ backends. I was inspired by this so much that I registered utu.im and may try to bring it back. Not sure how or when though.

Sounds cool right? Totally doesn't matter one bit. I could hack on projects like this and nobody would care at all because I'm a famous programmer, and there is no such thing as famous programmers. I don't exist. I'm an enigma.

Read more...

LPTHW Ex 38 Done: Reading Code

You should now go out and find some Python code to read. You should be finding and reading any Python code you can and trying to steal ideas that you find. You actually should have enough knowledge to be able to read, but maybe not understand what the code does. What I'm going to teach you in this lesson is how to apply things you've learned to understand other people's code.

First, take the code you want to understand and print it out. Yes, print it out, because your eyes and brain are more used to reading paper than computer screens. Make sure you only print a few pages at a time.

Second, you should go through your printout and take notes of the following:

Read more...

Exercise 36: Designing And Debugging

I'm going to give you some rules now that you know if-statements, for-loops, and while-loops that will keep you out of trouble. I'm also going to give you some tips on debugging so that you can figure out problems with your program. Finally, you're going to design a similar little game as in the last exercise but with a slight twist.

Rules For If-Statements

  1. Every if-statement must have an else.
  2. If this else should never be run, because it doesn't make sense, then you must use a die function in the else that prints out an error message and exits, just like we did in the last exercise. This will find many errors.
  3. Never nest if-statements more than 2 deep and always try to do them 1 deep. This means if you put an if in an if then you should be looking to move that second if into another function.
  4. Treat if-statements like paragraphs, where each if,elif,else grouping is like a set of sentences. Put blank lines before and after them.
  5. Your boolean tests should be simple. If they are complex, move their calculations to variables earlier in your function and use a good name for the variable.
Read more...

Round 23: Open Minded

Play only in the open position.

Come up with a nasty, gritty song using only the open position. Play no higher than the 5th fret (some say open stops at 4th, but I found that too limiting). Use alternate tuning, whammy, tap, anything.

That’s it, develop a riff and then solo over it but go no higher than the 5th fret.

You can check out what David did in his round submission as a sample of what to do. Remember it's not really an entire song in the open position, just come up with a good part of it that way.

Read more...

No subject necessary

Oh yeah, and while we're at it, it should take its other bosom buddy apple along.

Your rant is justified, but apple has become as bad, arrogant, selfish, greedy, etc. as adobe, ms, the riaa, the mpaa, the wipo, or who else.

Flash sucks orc balls - but that's no reason to fuck off users by patronising them about flash support. If they want it, they should have it. If they don't, they can have it turned off. By not providing ANY fucking means to use it (save except maybe for a half-working gnash port for jailbreakers), apple fucks users harder into the posterior than adobe by publishing a completely fucked up "rich content platform".

Read more...

Oh come on

As for the slow video thing.

Flash Cookies are there because normal cookies suck, they're adding similar stuff in HTML5 for that very reason. Don't panic they're limited to 100k unless you specifically grant more space. Chrome's "Clear data" dialog has a link to a url to help you manage them too, why don't other browsers do that I don't know.

As for the broken HTTP status thing. I don't know what you're talking about.

Read more...

Fuck Flash In The Fucking Neck With Barbed Wire Coated In Arsenic

Just in case it's not clear, I absolutely positively hope that Flash is totally wiped out and that it takes all of Adobe and their bosom buddy Microsoft with it down into the dark depths of Cthulhu's anus where things that die are dead for so long that even death is now dead and they are out of my fucking site.

Why? Because for the very last time, I am finally sick of Hulu playing video like it's a covered in molasses. Of course my more technically oriented friends will think that makes me a moron. It works great for them on their Neckbeard 9000 Triple Quad Dual X Neon Nvidia NIOPIATE computer with SSDs in RAID-26 configuration.

Nope, this is on a Mac, or Linux, or Windows and on some reasonable hardware. 1.6GHZ CPU with a decent Nvidia card designed to show HD video. In fact, I can play perfect video from Netflix on both my Mac and my Windows PC with no problems. Just watched "Up" and it looked fantastic from Netflix.

Read more...

LPTHW: Ordinal, and Cardinal Numbers

Exercise 34: Accessing Elements Of Lists

Lists are pretty useful, but unless you can get at the things in them they aren't all that good. You can already go through the elements of a list in order, but what if you want say, the 5th element? You need to know how to access the elements of a list. Here's how you would access the first element of a list:

animals = ['bear', 'tiger', 'penguin', 'zeebra'] bear = animals[0]

Read more...

Why you should study Computer Science, a rebuttal

Let me start off by saying that I don't think universities are a better place for learning culture than any other location with bright and interesting people. If you have time and interest you can learn as much as you want about any aspect of the collective human knowledge no matter what your daily occupancy is. If you really want to learn as much of the breadth and depth of the great human achievements as you can then work very hard for a few years and after that go travel around the world! Take an e-book reader with you with all the popular scientists and philosophers, poets and artists. If you think going to a university will just automatically teach you these things you are wrong. If you are lazy and you don't like to read or learn about culture, all you will learn at a university is what it is like to sit on your ass all day playing video games, and hang in a bar all night getting drunk as fuck. It will end eventually with either you dropping out or with you aging a bit, manning up and doing what it takes to actually get that degree.

So why would you go to a university and study computer science if it has no added cultural value? The answer is simple. Because you're interested in Computer Science. You've learned how to program at high school. You can make websites for shops or businesses. You could make them back-ends or optimize their data entry applications. You can use some abstract languages like PHP or Ruby, or even Java or C#. Or perhaps you're the kind of guy that works in C or C++, and you contribute patches to drivers and software you use on your linux operating system. These things are nice, and being able to do them will land you a nice job, but that is not enough for you. You might want to know what it takes to make a user interface that allows any person to use a device irrespective of complexity. You might want to know what it takes to design an operating system from the ground up. You might be interested in how to rigorously proof that a multithreaded application that monitors and controls a nuclear reactor is correct beyond a shadow of a doubt.

Do they teach you how to be a better programmer at a university? Yes and no, and probably not more than you would learn at a decent employer. A proper university will introduce you to some high level language, like Java and to test driven development using something like JUnit. The reason many universities chose Java for their introductory programming courses is not because they want to prepare you for 'the industry' or whatever organization might be giving them money. It's because java is a very strict and explicit language and that makes it an easy tool for explaining the concepts they are trying to teach. This is why software engineering courses might require you to use Java. Operating systems courses might require you to use c/c++ and functional programming courses might be in Haskell or whatever the professor thinks is appropriate. There is perhaps some truth in Zed Shaw's statement that you might be lucky if they teach you more than one language. In a computer organization course I followed the teacher explained how computer memory worked and then gave an assignment in C without a full introduction to the complicated art of C programming. He just assumed that you would be able to program in C after you had learned Java and heard about how memory access works. This is because languages are just tools. It is more about what and how you implement than in which language you do it, or using what process. (Although there is a branch of computer science that focuses on the development process, if you're interested in that!).

Read more...

Go To University, Not For CS

They're told, "If you can already code you won't learn anything in university you couldn't learn in a full time job."

So the young programmer, who's parents probably demand that they go to school and study so as not to be a loser, wonders why bother? All they want to do is code. They could skip those annoying four years of learning and just get down to doing it like a true professional. Right now. That's what everyone else says.

Sadly, I have to agree. If you go to a university and you can already code you probably won't learn much about programming. Chances are you'll end up going to some crappy Java school that's just now realizing standardizing on one language controlled by a corporation that had no clue how to actually turn a profit was a bad idea. For the next 4 to 10 years I think most university CS departments are going to be horribly behind, not just for the usual reasons of being out of touch with the current practices, but because they bet the wad on the wrong horse entirely.

Read more...

Round 22: Hank's Mixolydian Madness

That's the initial order, and we'll say the winner of the next round can change the order, remove one, or add one to the list.

Without further ado, here's Hank's round.

Read more...

Announcing MulletDB (Formerly NoNoSQL)

You can check it out in it's initial setup, which is just a Fossil repo I put up for collaborating. It's still a work in progress, but it works pretty well and has the features I need to get started on other stuff.

You'll notice MulletDB is AGPL and it's also written in C++ with Python APIs. I may release the Python driver as MIT licensed later when it's actually stable.

So far it can do the following:

Read more...

The Valley Mullet

-- The Mullet Song, Mingo Fishtrap

Every culture has a mullet. Some hideous fashion disaster that's accepted by everyone as just, well, the way a dude appears if he wants to be taken seriously, but still rock out. When you ask a southern man why he wears a mullet, his response is:

Bidness in front, partay in back.

Read more...

Facebook: Die Like AOL Already

While I'd like to think that none of that crap applies to me, I'd be remiss to overlook some interesting and rarely discussed issues around this whole social networking privacy snafu in the first place.

You see, I don't use Facebook.

I have never used Facebook, and I will never use Facebook.

Read more...

Lamson 1.0 Released, BSD and GPL Licensed

This release has a few minor bug fixes and has a hard dependency on python-daemon 1.5.5. It turns out the new python-daemon package has a broken dependency on lockfile 0.9, which isn't available through the usual package installers. Also there's a few platforms that seem to explode from weird code in lockfile (complaining about metaclasses).

When you upgrade to Lamson 1.0, if you have a problem make sure to zap any install of python-daemon and lockfile from your system first. Hopefully you've got a virtual env setup so this is easier.

About Python And The GPLv3

Read more...

You Shall Know The 20% By Their Lack Of Works

I know, you probably read that sentence and thought, "Well shit Zed, that's what you do asshole." You're right, but I restrict my ranty words to assholes I feel are hurting other people, and I can take it as good as I get it. You got something to say? You think I fucking suck? Rock on, go ahead and say it.

But, you better fucking know your shit, 'cause I sure as hell do.

Let's take an example of a troll from today named Chris Alex Thomas who decided to pathetically attempt trolling me today. At first I thought, "Oh a worthy opponent, very interesting." Then as I read his tweets:

Read more...

114 Lines Of Python For A NoNoSQL API

Of course this will need to expand as I implement things like better robustness, better error reporting, and a tighter better defined protocol for NoNoSQL. I'm also planning on adding the ability to interact with NoNoSQL in an async model, where you blast out requests and collect them later if you like.

But, if I'm going to make it useful I need to use it on a project, so I've decided to try using it on Crapmania. Hopefully by keeping to this API and using a good unit test suite I can later swap it out if NoNoSQL proves too difficult to use in practice. I'm anticipating though that it'll be very useful for the kind of application crapmania ends up being.

Crapmania First Design

Read more...

Announcing NoNoSQL

I'm calling it NoNoSQL for lack of a better name. If it gets more serious then I'll pick something else. The man part of the joke is that it's a "NoSQL" server, but it has SQL in it, but you don't use SQL to do the SQL. Let me explain.

What I did was combine 0mq with sqlite3, tokyo cabinet, and finally, the filesystem, to create a server that lets you do all four at once using the 0mq scalability and speed building blocks. In theory this thing should be dead easy to scale out, shard, cluster, whatever you need to do. Right now of course it doesn't but the potential is there.

However, I took things one step further by making most everything you send and receive JSON. When you build a SQL query, it's just a JSON abbreviated format:

Read more...

Round 21: You Write The Next Round

  1. Think up an idea for a round. Maybe it's a genre, a specific odd key+mode mix, anything you think would be challenging but not too hard.
  2. Now, play your own round and get a good recorded submission to "beta test" it.
  3. Send it in like normal as if it's a submission.

Everyone will then rate these "proposed rounds" based on whether they'd like to play them as well as if the recorded submission is any good. We'll then take the winner and all of us will do it for the next round.

Tips On Writing A Good Round

Read more...

Flash Developers: lrn2fuckingprogramkthxbai

There have already been reports of automated analysis of AppStore submissions from November 2008 for private API usage [3]. The infamous Flash-to-iPhone packager works by compiling ActionScript to native ARM assembly [4]. This would quite assuredly break static analysis.

iPhone OS 4.0 now includes various API's for background processing. Assuming [5-6] are correct this is based on Grand Central Dispatch [7]. Given that applications are now allowed this freedom, it would make sense that the static analysis tests are going to be more stringent.

Who wants to bet against the idea that the new 3.3.1 isn't a lawyer's attempt at phrasing engineering terminology for what is testable?

Read more...

Round 20: Back To Basics

Let's say you can use effects but keep it minimal. In fact, if you can get the sounds of the room into the submission then that'd be interesting. Also try to keep it to just one take with a minimum of editing.

Those are just suggestions. Most important thing is just do it with one guitar.

Ideas For Inspiration

Read more...

Learn Python The Hard Way Version 0.2 Released

This release you can get the PDF from http://learnpythonthehardway.com/ and I've close quite a few tickets but keep putting them in.

Here's the big list of things I've fixed:

  • Officially changed the '#' character from pound to octothorpe.
  • Cleaned up a ton of little edits and fixes (thanks folks!).
  • Finally got the exercise numbering and other number straight.
  • Wrote a placeholder for exercise 27 where I start to introduce logic.
  • Got the exercises to bring the reader to where they're finally reading and writing files.
  • Created the book's project web site using fossil to host it.
  • Declared the book free to distribute as long as you don't charge for it or alter it.
Read more...

Learn Python The Hard Way Site Is Live

http://learnpythonthehardway.org/static/LearnPythonTheHardWay.pdf

Which I update frequently. The site also supports the following for people interested in contributing:

  1. It's a full fossil repository, so that means you can grab the whole site for yourself, including all the sphinx code. No license decided yet so just assume I own Copyright and you can redistribute for non-commercial purposes.
  2. There's a wiki where you can write a proposed exercise if you think of one. Make sure it's good in case someone comes along on accident and doesn't get that the wiki is only a testing ground.
  3. You can enter in tickets if you find problems in the book.
Read more...

I Put Up A Quick Fossil For PTHW

You can go to:

http://zedshaw.com:8080/home

For now and after logging in as anonymous you should be able to edit the Proposed Exercises wiki page. Make sure you read the home page and the Example Exercise to get an idea of what it's all about.

Read more...

Round 19: Goin' To The Movies

It's simply this:

  1. Take a favorite movie theme you know or want to learn.
  2. Do your rendition of it.

Let's hope we don't get sued!

Read more...

Decent Free Beginner Python Books

I really quickly wanted to get the word out about two books that are so far looking to be great beginner Python books.

  1. How To Think Like A Computer Scientist is actually used as the curriculum at a few universities in the US and maybe in other locations. Despite the title it is actually good introduction to the language and to programming.
  2. A Byte Of Python is also free and has been translated to [a huge number of languages](http://www.swaroopch.com/notes/Python_en:Translations and also seems to a good first book.

My plan is to mention these two books as next steps after my book, as well as the Django Book for after they finish one of those two.

Read more...

An Attempt At A Book Teaching Beginner Python

  1. There's a bunch of exercises.
  2. Each exercise is 1 or 2 pages.
  3. There's only a little bit of prose.
  4. You do each exercise exactly, then move on.

It's a simple concept, with the idea that a big part of music is learning to do things with your instrument, and that's best accomplished by fairly repetitive progressively difficult exercises.

There's a few books that do this for other languages, like the wonderful Little Schemer, Seasoned Scheme, Reasoned Schemer series. I think those books have the right idea, but again I didn't like the format.

Read more...

How To Backpedal And Boost Like A Pro

Now on with the show.

I find it funny that some folks have tried to say I'm too hard on Mark Pilgrim, despite the fact he's just as outspoken and ranty cursy as me. I mean, double standards much? Dude is a Class-A jerk who's attacked people in the past, and I have yet to run into too many people who think the guy is that great.

In a way, I kinda like that, like a rant brother in arms. But he's seriously got some thick rose colored glasses on when it comes to his own value and the quality of his writing.

Read more...

Dive Into Python Must Die

09:42 @diveintomark @zedshaw Completely rewrite the first 3 chapters of a book I haven't touched in 6 years? Yeah, I'll get right on that.

11:32 @diveintomark @zedshaw you sure do have a lot of opinions. You should start a blog!

This is his response to me saying that he should remove ODBC from his book. Yes, OH DEE BEE CEE. He has a goddamned book that purports to teach people programming that still, in 2010, references a piece of crap technology from the 90's. Yes, he actually used that technology to teach Python in the beginning of his book six years ago. Even back then that was a stupid fucking decision.

Read more...

Sysadmins considered harmful

Its worth noting that the Puppet project was founded by a sysadmin and that the primary audience for the software has always been other admins, who aren't all as myopic and territorial as the cliche of the BOFH would have us believe. I've known some devs who could qualify as Unix experts, had read all of the relevant RFCs and needed very little help from folks like me. I've met many more, however, who didn't have the time or inclination to learn the intricacies of configuring Sendmail and would rather have someone else do it. Not everyone can be a programming or operations expert and even fewer can do both.

Read more...

Goodbye BOFH, Hello Cloud

However, I absolutely love the idea of the cloud. You know why? Because it means the death of the Bastard Operator From Hell once and for all. The days of that entrenched system administrator who does nothing more than hoard knowledge in order to keep his tiny little kingdom of power managing a few machines in some half-assed manual ssh-poking manner are over.

We all know this guy and absolutely hate him. He actually doesn't do shit until his fucking little house of cobbled together perl script cards collapses. Then he's running around in a panic, sshing into boxes manually, hacking away at configs guessing at what might be wrong, and barely getting things up and running again with no plan for preventing it in the future.

Each machine is different from the next. Nothing is documented. There's no password database. None of the configuration files are under version control. Automated deployments? Hahahahaahahahaha. Oh he doesn't fucking trust "automation". Says it causes too many errors (unlike his fat fingers).

Read more...

My Love/Hate With Music Gear

For me, I don't make any money off this, and would rather just write about things I love to use and the few pieces of tech I think nobody should buy. It fits into my general interest in technology and how people use it to express themselves.

Another theme of this blog will be expressing my love/hate relationship with technology. When it comes to programming as my profession I mostly love technology and usually only encounter frustration and difficulty due to other technologists inability to think past their own experiences. In fact, I'd say all of my frustration with technology is from other people creating junk I'm forced to work with and not with technology in general.

When I code, all my frustration is with other people I'm forced to deal with who could care less about anyone but themselves.

Read more...

The Idea Behind My Latest Invention

Once a year I like to change up my blog and online writing style. I find that the Internet is impermanent and fluid, but too often people keep their blogs exactly the same for decades. I'm not just talking the design but the writing style, topics, and how it's themed. In general I tend to stick to rants and thoughtful pieces, but lately I've been posting music on Fret War and wanted to roll that in.

Herein lies the problem: these three types of expression don't go together. The music is mostly guitar music with some oddball theme that probably only interests musicians, not coders. Fret War is also a strange concept of a "guitar competition" so even guitarists might find it weird. Posting my music to zedshaw.com wouldn't fit.

Then there's the problem of the rants vs. the essays. I'm known as the rant guy, for very good reasons. But, I also like to write more thoughtful less ranty pieces that take me much longer to compose. Those essays were getting drowned out by the fun of the rants. The rants are totally like candy for programmers, but the essays are like their veggies. People just don't like eating candy and veggies at the same time.

Read more...

The LMSD "Soap Opera" And AT&T

Reading the case so far, I'm constantly wondering why the hell nobody is in prison yet? Let me put this in perspective by explaining it this way:

Imagine that you read a news article where I was caught with the following:

  1. Chat logs from underage boys and girls on my laptop.
  2. Photos of underage boys and girls sleeping, eating, who knows what on my laptop.
  3. Software installed on their laptops without their knowledge or consent.
  4. A trail of email where I said I loved it and shared them with other freaks.
Read more...

Something To Ponder

The idea is simply this statement:

Programming languages are nothing more than a ponzi scheme.

Looking at the history of programming languages over the last 15-20 years we see a succession of languages that become dominant and then get wiped out by a more popular language. That's a given and not necessarily part of the ponzi scheme I'm talking about, but more just how technology works.

Read more...

Hilarious (apologies to Arial Meadow Stallings)

I can't believe you're debating if I'm a real person when a web search shows I've been all over the web for 15 years, have published a book, been on national television, etc etc etc x 500 bla bla bla? Hilarious!

I left Microsoft last year, which likely explains why Microspotting.com is down. It's all ancient history to me at this point, but I'm *still *not sure how a site that said on the homepage that it was run by someone who worked for Microsoft could be seen as astroturfing. But whatever: it's flattering that a year later, you're still freaking out about my work blog.

Apologies

Read more...

Would the real Ariel (Meadow) Stallings please stand up?

Love the hate, but in my book good 'writing' also includes some basic research and a little spell check. If you had devoted more than 2 hours to this exercise in MS-bashing you might have discovered that 'microspotting' isn't some johnny-come-lately, faceless marketing exercise but a fairly long running (c.2007) blog by Microsoft's internal marketing staff. You might have destroyed microspotting.com but its predecessor lives on at http://microspotting.spaces.live.com. And the font is spelled 'Arial'. 'Ariel M Stallings' is indeed flesh and blood. I know this because my wife obsesses over her other blog, http://offbeatbride.com. You could have easily discovered this yourself with a little google, e.g. try her home page http://arielmeadow.com.

Is it legitimate for Microsoft to attempt to humanise their image with genuine posts about staff members? Or must they accept the image you have of them as a clunky but hardcore coding shop for big business? I have no special love for Microsoft but in this case I have a little sympathy: the reason they have to try sites like microspotting in the first place is to counteract the paranoid hatred epitomised by your parody site.

In order to remain competitive, Microsoft has to recruit beyond the narrow band of socially isolated geeks keen to work on new programming languages and build new OSs. They need the odd 'Ariel M Stallings' or two, and maybe even some ruby fanbois. So lets call this for what it was, not a righteous take-down of a 'big mega marketing firm' but an expression of Zed Shaw's dislike for the new social media kids on the block. They might not be able to mind-meld with iPhone OS using their impressive C, but they can at least write.

Read more...

What One Man With $15 And 2 Hours Can Do

Oh look, A real person

The story goes like this. I was bored one day so I turn on my computer and go to hacker news to check out what's going on. Right away I see on the front page some story about some recruiting site being done by Microsoft called "Microspotting".

Now, for years I've kind of felt sorry for Microsoft. They're perceived as being bumbling idiots in the tech world but honestly compared to many of their competitors they probably produce more interesting and better tech. For example, what OS has Google created? From scratch? Multiple times? What programming languages has Google created? What virtual machine did they create? How many hardware platforms runs that OS they actually didn't make? How many applications run on that OS they didn't make?

Read more...

Round 18: Locker Room Bad Breath Funk

You see in Funk, the guitar is a drum. It's just a damn hihat, and is sooooo boring. wakka-wakka-wakka-wakka. It's like Fozzy Bear. Sure it's fun, and without the guitar funk just seems kinda flat, but I'm sure there's a way to make it more interesting.

This is where you come in, your job is to "funk up" something else. Using only a guitar and your favorite style, find a way to make it funky. Maybe you love blues, so do a funky blues. Maybe you're into jazz so pull out some funky Herbie Hancock minimalism. Maybe you've got a jones for neo classical metal then find that funk angle.

Extra points for putting funk where it don't belong.

Read more...

How Apple Really Screwed Up With 3.3.1

First, here's the section once again so you can review:

3.3.1 Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited)

With the key part being that software needs to be "originally" written in one of the mentioned languages. It's this word "originally" that has caused all the problems, and I guess is actually theoretically impossible to enforce technically. I'm actually thinking that Apple will probably strike this word from the license by the end of the week, but not for any particular business reason.

Read more...

Nerd Sniping Is Fun!

As much as programmers love to think they walk around life like the perfectly logical Colonel Sanders from the Matrix, they're really more like Robot SPD-13. Their insistence that they're so logical is so far from the truth that they end up just running around in circles never actually making any complete cohesive conclusions.

But, most importantly, this insistence on logical thought makes most programmers completely oblivious to the tricks of rhetoric and to any form of satire or subtext. To them any factual error, no matter how funny or hyperbolic, is inexcusable. Simply toss a few difficult to prove factual errors inside a rant about Steve Jobs being an evil super genius with a cat and they will focus on the error like a pink laser.

These are the same kind of guys who go see "Hot Tub Time Machine" and complain that the physics are totally wrong. "There's no way that time machine would work. The quantum dynamics of the force reduction drive would fail if it were immersed in water like that! (snort)" To them, the ridiculous and idiotic is not funny, it's simply an annoying fuzz filter on their incredibly boring, serious, and conservative lives that they probably absolutely hate.

Read more...

I'll Not Rant Here

The rules here are to not have any cursing, and to keep it clean. This of course doesn't mean it'll all be puppy dogs and rainbows because a huge part of programmer culture is disagreeing with the way things currently are done. But at sheddingbikes.com this disagreement will be measured and well thought out, not rants for the sake of poking fun at people and whipping the internet froth.

Just like oppugn.us you can post to sheddingbikes.com and if your post is well written then you'll be included in the roll. Your full name from your email address (the "Joe Frank" part) will be shown unless you don't set your name then your email address gets shown.

You'll also notice there are no comments on this blog. If you have something to say, write it as a post and put some effort into it.

Read more...

Grow Up

First its factually inaccurate. I'm running Ubuntu 9.04 and Snow Leopard on my Mac. Guess which one is ready to go for Ruby Development? Ubuntu's installation is easy, but its still an installation using aptitude. If Jobs hates Ruby so much or other loosely typed languages, why does the Snow Leo OS come ready for PHP/MySQL. No configuration on that assemblage either.

My first language was C, second PHP, third Java, and now I'm learning Python. This one or the other nonsense is dumb. Different languages accomplish different things. If I want to do something fast I'm all for PHP. If I want lightening speed C or Python. If I want neat elegant cross platform code then Java it is.

The great advantage to some of these languages like Ruby is that different types of people can get into the programming game. Aesthetics have a big impact on usability. Usability is what you want for the most important person in all programming projects: The end user. So cheer on with your elitist bullshit but their are plenty of hard core coders that are making some pretty excellent stuff with easy languages. Face it, the dominance of socially isolated C programmers is past. People who understand users are now in the game and its a good thing.

Read more...

Re the Ruby Fanbois

I agree with 99% of everything you say here. People who think they can program without understanding (at a fairly fundamental level) How Things Actually Work Under The Hood are just the kind of people who drive around mindlessly, without any understanding of mechanics or physics. (How much room do you need to brake in before you hit that group of kids crossing the street? In the rain?)

Valgrind, in particular, is almost something that should be automatically invoked by the compiler. Anything more complex than "hello, omniverse" can break in ways that are hard to find in inverse proportion to your command of such tools. (BoundsChecker, back in the day, saved my career. At least twice.)

However, the swipe at agile development is something I do take strong issue with. There are good TDD frameworks for C as other languages (I use CuTest myself http://cutest.sourceforge.net/). Just as no serious project these days operates without some SCM tool, and every serious programmer knows how to use a debugger and at least one diagnostic tool (like Valgrind), in the very near future, every serious developer will at least make sure his code is fully covered by tests, if not managed under a full continuous-integration system entirely. The single biggest improvement in my productivity in the last 30 years has come about when I know that any changes I make that break anything are guaranteed to not keep that breakage hidden. Your mileage may vary, but I seriously doubt by much.

Read more...

Steve Jobs Says, "Fuck You Ruby Fanbois"

Yes, you have to worry about memory management and buffer overflows, but if you have valgrind you're set. Valgrind is awesome because it detects most memory errors fairly flawlessly, assuming you're not an asshole who codes retarded C tricks. Valgrind hates tricks. In a way coding C with valgrind forces you to do it right.

And honestly C isn't that hard, it's just that people who are used to shitting out whatever is in their head into a text file have a hard time with it. To code in C you have to know what you're doing and you have to know how the computer works. Sure, that's a pain in the ass, but did you ever think that maybe that's a good thing.

I firmly believe that learning C as your backup language is a great way to make you better in every other language you use. I wouldn't want to do a web application in it, but fuck yeah I'd do another web server in it.

Read more...

Round 17: Shibumi

What you're going for is just a guitar. That's it. No drum tracks, no effects, just what you can get from a guitar, amp, and your natural room acoustics. This will be a good one to practice recording, and also just simply making a nice song with just the guitar.

There's no other restrictions, except it's just a guitar. Chord melodies, a full solo, mixes of chords and solos, whatever works as a good simple song.

Recording Advice

Read more...

On Morality

One could argue that a moral framework is an absolute necessity for a functioning human society, but don't let that though fool you for a second. Moral rights and wrongs don't only differ from society to society, but they change over time. The most important aspect however, is how morality changes with power.

To elaborate on this relationship, we need to see what motivates and influences human actions. One factor that influences actions is how favorable the consequences of that action turn out to be. Are they optimal? Are they optimal only to the human entity causing the action? Are they optimal to entities directly or indirectly related to the human entity causing that action? So we see that some people think only of themselves, and some people think about people surrounding them, the environment and so on. Between these extremes lay people with mixed emotions.

A second factor that's more important, is whether that human entity making a decision favors order versus chaos. Someone who decides to do the right thing, isn't doing it simply because it is right, but because they believe that by producing more order, they are decreasing the consumption of chaos; in other words, they prefer order because it assures them order. A person who refrains from threatening random people with a knife does so because it reduces the probability that someone else will do the same to them. In an economic sense, you can think of these people as risk-adverse. Similarly, there are people who tend towards chaos. The magic of the unknown thrills them. Not knowing the outcome of their actions influence their decisions. Like a risk-loving person playing a gamble, chaos influences the actions of a chaos-loving person.

Read more...

Writing Is More Powerful Than Your Tech Dumbshit

You see, a problem most nerds have is that they think words are useless. It's actions that matter. Don't just complain about something, go out and fix it. Complaining does nothing. Writing, words, humor, are all pointless because society means nothing and social norms are nothing but a stupid obstacle to truly getting shit done!

Then, why the fuck are you ranting about it? Could it be, and bear with me here, that words actually are pretty damn important? Words have built societies, destroyed societies, founded countries, built nuclear weapons of chaos, inspired space travel, assassinated heads of state, and got lovers to make babies. Words are powerful, and when well written and transmitted through some form of communication technology, can have massive impact.

In fact, the US was founded by a damn rant. A bunch of pissed off white dudes who wanted their tea without taxes got riled up and said "FUCK YOU BITCH!" That rant convinced citizens to fight a war against an incredibly well trained military force and win. An entire very successful country was established and proved that a government run by the citizens could work. Most people don't get this, but at the time nobody in the world except Voltaire actually thought that peasants could run jack shit.

Read more...

Quit your bitching

The instant you point out that you're aware of the problem, but unwilling to fix it, I file you in my personal mental "giant fucking dumbass" bin. If you've just spent half a page describing something that gets your panties in a bunch, and then throw up your metaphorical hands and say "nothing is going to change, woe is me!" then you're a fucking useless drain on humanity productivity, and you deserve all the misery you endure.

Here's a hint - if you've got an issue with something, think about how to fix it. I mean, come on, this is third-grade stuff. Examine your assumptions of how things should be and see where you've gone wrong. If there is a legitimate problem, and you're not just making shit up, consider putting a modicum of fucking thought into changing circumstances so your little world is a little fucking brighter.

Until you're willing to act instead of just bitching, save us all some attention and just shut the fuck up and stew on it some more.

Read more...

Get Your Fucking Feet Off The Table

It's a common theme around SF. You'll dodge a monstrous brown baby on the ground and think, "How the hell did some homeless dude pound out a steamer right in the middle of the sidewalk before I even got up for work?" It's amazing the amount of literal crap you have to watch out for in San Francisco. But, it's also fairly believable considering the high number of meth-head freaks walking around at any hour of the day and night.

It's pretty nasty, but it stays on the ground and maybe the bottom of my shoes. I take my shoes off when I go in my house, so everything's alright by me. Dodge some turds, make sure I don't walk around on my carpet with my shoes, and I'm safe.

That is, until I go to work and have to tolerate dudes putting their feet on every piece of furniture in the office. I'm not kidding either. It's like some of these guys just had hip surgery and need to keep everything below their belly button elevated or they'll have a prolapsed anus.

Read more...

Shed 9: A Fun Ear Training Exercise

First off, what this one exercise does is train several musical things at once:

  1. Singing a particular note within key.
  2. Hearing that note, in they key and playing it on the guitar.
  3. Being in key on the guitar.
  4. Playing a scale and hearing all the roots your playing.
  5. Learning the cycle of 4ths and hearing changes that way.
  6. Finally, being able to do all of this without looking at your guitar.

It sounds like quite a lot, but it's a fairly simple exercise that's just pretty hard to do at first, but then you get good at it later.

Read more...

The First Rant

The rants can be on just about anything, and could be responses to my own, but there's one simple rule:

NO THREATS OF VIOLENCE TO HUMANS.

Of course they also need to be well written, funny, clever, and just generally good, but the only thing I'll restrict is threatening to hurt humans. Seems you can say mostly anything you want as long as you don't do that.

Read more...

Round 16: Two Keys And A Bit Of Odd Meter

What you'll be doing is using chords to link two keys together so that you play Ionian in one key, and then Lydian in the next key. I'll suggest a few example chord changes, a song structure, and then also talk about odd meters for the optional challenge.

The Challenge

Ionian and Lydian are very close modes, with only one note different (the sharp 4). This means you can't really just combine the two modes, since nobody could really hear the difference. Instead, you have to change keys in the song, purposefully going from Ionian in one key to Lydian in another. There's a few ways you can do this, which I'll get into in the lesson section.

Read more...

Shed 8: Memorizing Triads And Fourths

The way I'm going to show you how to memorize this is a little different from how most musicians are taught. That's because I'm a programmer, so I try to find easier ways to memorize the few things I need to know. Rather than memorize a ton of useless information, I look for a few patterns that and mnemonics that help you memorize the information and use it.

Cycle Of Fourths

First, let's do the cycle of fourths since that's the easiest. What's meant by the "cycle of fourths" is you pick a root note C, that's the key you're in. Then you pick the 4th note in that scale, and move to the next key F. From F you pick the 4th note and move to that key and you're in Bb. For example, if you were to have this chord progression:

Read more...

Round 15: Lydian Mode For Greater Good

Included in this round is a copy of the US Navy Basic Music Manual which is an excellent free manual that covers a wide range of practical music theory. I'll be using their way of describing scales and modes since it's simple to understand, but if you have your own way then go for it.

The Challenge

For this round we are looking to get you into using the Lydian mode where you'd normally use the Ionian mode. Your challenge is to craft another simple 3 or 4 chord progression that lets you play the Lydian mode and either emphasize the sharp 4 note (F# in a C Lydian mode) or simply craft a regular major mode progression and play Lydian on it anyway.

Read more...

Round 14: In Ionian And Three Chords

The Challenge

Take the Ionian mode (the major scale) and any three chords from a chosen key and craft your song around this setup. Obviously don't play the scale in order like when you practice. Instead base your melody and soloing on the major scale over the chords you've chosen.

For extra points, try to do it in one of the following styles:

Read more...

Round 13: It's Rock, Not Metal

Now, I know some of you are going to go crazy and bust out your screaming distorting and your best Randy Rhodes tapping solo goodness, but I said Rock, not Metal.

We're talking AC/DC, Chuck Berry, Rolling Stones, Black Crowes, Cream. The classics that focus on a few chords played against a driving beat with that darker smoother distortion. The kind of music that destroyed the world in the '60s.

And we'll do this one in G. Seems to be lots of great songs are in G.

Read more...

Round 12: Let's Get The Show Back On In Style

What kind of guitar is it you ask? It is a G&L; ASAT Classic S. Not many of them made. It sounds exactly the way I want it to sound. It's first guitar that doesn't make my hands feel like raw meat after hours of playing. I now play just this guitar, all day, all night. It is lovely.

However, Fret War must go on, and it must come back in style. The Caleb experiment, while fun for a few, seems to have driven off some folks. What we need is something simple. Something fun. What we need my friends is:

An A Major Blues

Read more...

Shed 7: Chromatic Exercise

Make sure to take the progression as high up the fretboard as you can and also closer to the neck, to ensure your accuracy and speed are consistent. Start the metronome at 80 BPM and play a couple of times until you get used to it. Then increase the metronome speed by 10 BPM and play again. Repeat the process until you can play accurately at around 200 BPM, but make sure you don't rush it.

Also, these type of chromatic runs tend to put a lot of pressure on your fretting fingers. Make sure to warm up before starting the exercise. If you reach a certain BPM that is too fast for you, stop and go back to a slower BPM. Don't increase speed until you're 100% superawesome at your current speed.

Also, these are the kind of licks that easy to learn, hard to play very accurately, but great to impress a crowd with. :)

Read more...

Shed 6: Motivational post where I play Mr.Expert

How one deals with thoughts of discouragement, demotivation and giving up, is what separates a strong musician from a weak one. There are literally a billion reasons one could come up with for lacking motivation. Life, economic realities, bad breakups, disabilities, addiction and so on. But in my opinion, as long as you're still in good health, all those billion reasons have more than a billion solutions.

Just like hacking code, every solution in real life has multiple solutions. Sure, every solution may not be efficient, but the efficiency of solutions comes from experience. The important thing to realize is that if you have a problem, you can fix it. Have a lot going on in life? Cut down on the number of hours you play, but don't give up. Bad breakup? Stop moping around and starting rocking out. Can't afford better equipment? Take up a second job. Only you can fix your problems. And if you quit before even looking for solutions, then the only reason you're giving up music is you.

Personal problems aside, a major factor that might influence in giving up is lack of recognition. Sure, you can play music for playing music, because it makes you happy. But let's face it, musicians want appreciation and people want great music. It's a two-way relationship. If this was the 60s and you gave up solely because you weren't popular enough, then I might cut you a little slack. But in this day and age, that is merely an excuse musicians use to cover up for their lack of ability. Nobody knows your band? Well, buy some cheap shared hosting and a domain and put together a little page for your fans. Register a goddamn MySpace page if you can't afford hosting. Make a Facebook page. Add a hundred million people as friends and make them listen to your music.

Read more...

Round 11: Caleb Vs. The Wizard Zed: Guitar Duel Choose Your Own Adventure

What we want to do is make a "perpetual guitar duel". The theme will be Caleb battling the Wizard Zed in a blues style. Imagine Caleb has entered the Wizard's chambers and killed nearly everyone in his path. Now him and Zed fight to the death.

What we're shooting for here is a good consistent set of "clips" taken from a guitar duel you create. I'll then piece them all together after the round and do one really long guitar duel.

To make it work we need to do a bit more editing on the submission than before. Here's how you'll do it:

Read more...

Round 10: Gimme Some Soft Soul

One thing we haven't done is Soul. Stax Records. Otis Redding. Isaac Hayes. We can even throw in some Motown with Marvin Gaye, James Jamerson. You could even pick up some newer Soul/Pop like Joss Stone, or Corinne Bailey Rae.

The challenge in this round will be doing an original song in the soul style, but working out the melody with a guitar. No singing. Sing with your guitar.

Here's the parameters for this round:

Read more...

Round 9: The Epic Battles Of Caleb: Ch 4,5,6

NOTE: I'm going to implement multiple submissions better so that each submission is its own thing, similar to forum posts. Wait for that before you submit to this Round.

Chapter 4: The Wizard Zed

The evil wizard Zed appears one day in the Royal court to steal princess Telem. Zed made a deal with King Theo that he failed to honor and Zed wants his payment back. The deal was King Theo's enemies would fall if Zed was given Telem as his own. King Theo refused so Zed decides to take her.

Read more...

Round 8: The Epic Battles Of Caleb: Ch. 3-5

Chapter 3: The King's Death Dealer In Love

He returns to the kingdom a decorated hero but he can't wash the stench of blood from his fists. His powerful body is even more contorted, as he discovered in his battles that it hardens further the more he fights.

His return home is more of a retirement than anything.

Read more...

Round 7: The Epic Battles Of A Killer Named Caleb

Here's chapters 1-4 of the story, with an explanation of how this round will work after.

Chapter 1: A Train Station Coin Locker

Our hero is born into the land an ugly mutant and abandoned at a train station by his desperate parents, stuffed into a coin locker. A nun finds him, and takes him to be raised at an orphanage. He is given the name Caleb. He grows up an orphan, ugly, and not very smart, but he has a terrible gift the nuns try to hide from him.

Read more...

Show 10: Site Updates

  • You can now go to gear and see a display of the pictures people have posted of their gear.
  • Player's gear is now shown on their player page so you can see what they use when they play Fret War.
  • You can now comment on rounds just like you can on submissions.
  • You can also comment on shed and show posts too.
  • All your posts are formatted now with some simple formatting.

Try out the comments for shows on this one and shoot me any suggestions you have about the new changes. Next up is a better Winnnars display and index page.

Read more...

Round 6: The Locusts of Locrian

In Round 6 we'll explore Locrian. Your task is to come up with something that uses the Locrian mode, and if you can maybe even the Super Locrian (or Altered Scale). The goal is to stretch your musical tastes to something you may not really know how to use. To find a use for this odd dangling thumb of a mode.

To get you started, here's some basic information about the Locrian and Super Locrian scales.

Locrian

Read more...

A Few Updates To Librelist

I’ve started working the ticket queue and managed to get out a few little annoying things that people wanted or that were missing. I’m still going to be doing deploys today in my attempt to get things cleaned up further, but so far I’ve done the following:

=== 2009-12-13 ===
01:47:47 [3356e9d42c] CURRENT Stop altering the email addresses in the
         archives. (user: zedshaw tags: trunk)
01:40:30 [d7211e427a] The mailing list name is now added to the subject if not
         there already. (user: zedshaw tags: trunk)
01:29:33 [39d5ddc37b] New site layout done and pushed. (user: zedshaw tags:
         trunk)
=== 2009-12-12 ===
23:36:37 [cc081005a1] Added the librelist website code. (user: zedshaw tags:
         trunk)
=== 2009-12-01 ===
04:34:15 [0b6a443b36] Initial commit after moving from lamson project. (user:
         zedshaw tags: trunk)
04:32:14 [37f03800c8] initial empty check-in (user: zedshaw tags: trunk)

Read more...

Read more...

Librelist Is Now Fully Functional

Alright, I managed to get all of the basic features going for librelist.com early.

<ul>
    <li>Bounce detection is working great, but still needs more real world beatings.</li>
    <li>When you subscribe, if the list doesn&#8217;t exist, it sends you some possible similar existing ones, just in case you spelled it wrong.</li>
    <li>There&#8217;s now web archives (very basic) at <a href="http://librelist.com/browser/">/browser/</a> that you can browse.</li>
    <li>You can get the archives via rsync too, but don&#8217;t be a jerkwad about this.  Find a path you want and then do <code>rsync -azv librelist.com::archives/PATH</code> and you&#8217;ll get a maildir.</li>
    <li>Emails in the archive are stripped of most useless headers and the sender&#8217;s name is cleaned up a bit.  It&#8217;s not fool-proof, but then again you are sending your address on the internets to a public list, so I hope you are wearing protection.</li>
</ul></p>

Read more...

Read more...

Site Launched

Librelist.com is the third Lamson Project sample created to show off what Lamson can do. It is a fully functioning mailing list system with advanced spam blocking and bounce handling.

<p>If you want to play with it, send an email to

test.list@librelist.com and you’ll be able to test it out with a bunch of other folks.

Read more...

Read more...

Round 5: Going Country(ish)

For Round 5, you have to submit something from the south of the US. That could be Country, New Country, Blues, Bluegrass, Southern Rock, Rockabilly, anything from south of the Mason-Dixon line at 39o 43' 19.92216" N.

Hell, if you stretch this you could do Psychobilly. You could do Salsa! You could do Tejano! Blues Rock! Blues-grass-rock-psychobilly!

The goal in this round is to get as close to the genre you've chosen as possible without violating copyright.

Read more...

Show 9: Fixes Today: Replies And Password Reset

In the process I fixed a whole bunch of other bugs, but the two most important features are password reset and replies to comments.

Password reset is described here and accessible from the login forms.

Replies are simple, there's a reply link on each comment and you write what you wanna say. Eventually we'll enable the "douche flag". Here's a screenshot:

Read more...

Shed 5: Learning Those Weird Round 4 Chords

Learning to play complicated chords requires taking two chords you are having trouble with, and playing them one after another up and down the neck of the guitar. Imagine we have these two pairs of chords:

|: Gmaj7 Gmaj6 | Am7 Am6 :|

And we're going to play the following forms of these four chords:

Read more...

Round 4: Four A Blues For You

  • At least three or four weird chords.
  • How to replace common chords with more complex ones.
  • Ways to alter a basic blues into more involved structures.
  • Some Jazz chord theory.

However, we don't want to blast your brain quite yet. First you need to get started with just "a blues". Four of them actually.

Beginner To Advanced

Read more...

Show 8: Fret War Back Online, Test Please

There are possible problems with the winnars, and with submissions, so if you haven't done a submission and it fails, then please let us know.

Also, if you have confirmation/signup problems then we need to know that.

Read more...

Show 7: Round 3 and Fret Show on Holiday Schedule

Therefore, let's say Round 3 is a "holiday scheduled" round, where it lasts two weeks, and we'll pick things up like normal on Sunday Nov 29th at Midnight.

At that time all the regular rules apply, get your submission in, rate them all, then I do the show.

At the suggestion of Chad, I'm going to give everyone time to rate the submissions before doing the show and then the round.

Read more...

Show 6: Big Site Updates Based On Player Feedback

Just a quick announce telling everyone about the major site updates I did for round 3. I've been sick this last week, which is why you haven't heard much from me. I managed to get better in time to run Round 3 and implement suggested changes from everyone:

  • Flowplayer is now all over the place so you can play round and submissions easily.
  • Everything is now singular pages, no more fake tabs going on.
  • Rounds have a player that plays all the submissions so far along with the submitter's picture while it's playing.
  • Winnars page has a month's worth of past rounds, with links to the rounds and links to start rating rounds, and links to each submission.
  • Way better "blind taste-test" rating workflow. From the round, just click "Start listening to and rating submissions" under the player and you'll be able to walk through all of the ones you haven't heard yet, rate them very fast, view comments after you rate them, and move on to the next one.
  • Submission pages have flowplayer to play the submission, are more compact, and show either a login, a short rating/comment form, or the comments so far in a compact way.
  • You can easily view past submissions you're interested in by just hitting the /winnars and clicking on their titles.
  • If you just want to hear the round "album style" then use the player on the round. Try it with round 2.

Alright, now I'm gonna write some shed posts on doing a good recording, funk, and using fretwar. Let me know if you hit bugs in the above changes.

Read more...