Gargoyles on Watson Street

Posted: October 31, 2011 in Uncategorized

Winston Salem, NC.

Vacation Pictures

Posted: September 18, 2011 in Uncategorized

I’ve uploaded a few pics from my trip to the beach to zenfolio, starting here.

I hadn’t been to the Pine Knoll Shores aquarium since it was upgraded (6?) years ago, and it’s really nice in the off season when it’s not crowded. Someone apparently fed the otters some speed (they’ve got a really nice habitat), and the larger tank full of jacks/sharks makes for some nice scenery. It doesn’t have the Penguins like Boston, or the tropical fish and whales like Chicago, but does a really good job with local fish and the water/tanks were exceptionally clear. Very good stuff. (I still need to go see Monterrey Bay sometime). And yes, if you look at the pictures, that flounder can’t talk right now.

Random food recommendations — If folks are in that area, City Kitchen in Morehead City (it’s in an old house, owners/staff were pretty cool) and Ribeyes in Beaufort (apparently an Eastern NC chain) were both outstanding and you should check them out.

Music Gear Reconfiguration

Posted: September 11, 2011 in Uncategorized

Recently I’ve been trying to simplify my electronic music setup so I get a bit less distracted, and also in the process have been replacing some things so it sounds better. Pedal gear is going away in favor of rackable stuff, which makes things a bit less cluttered too. I’ve sort have been chasing a sound inside my head, and often attempts to add “something” to it have come out short. I’m slowly arriving at what that something is. Some sort of lo-fi synthethic progressive orchestral mashup thing. And as I find it, my thoughts about how I compose things are changing a bit too. I’m wanting things to be simple, so I can compose more and tweak things a bit less.

Current Setup:

  • Synths: (just 4!) Moog Voyager, Future Retro XS, Monomachine (synth+sequencer), Oberheim SEM Pro
  • … into rack:

  • Mixer (currently a Yamaha MG, but replacing it with a decent rack line mixer soon since I don’t use all the features and wouldn’t mind less electronics in the way messing with the sound)
  • … into …

  • Reverb: Eventide 2016 (reissue) — at end of recording chain
  • … into …

  • Presonus Central Station (monitoring control, headphone jack, etc)

None of these synths really do a crazy amount of modulation easily, though I’m avoiding synths that do because I know, from having to use computers all day at work, I do *not* have any desire to hop around inside menus to program those things, and I’d just end up preset surfing, which is a collosal waste of time and then makes the synth decide what music you are making instead of you.

I like things where I can dial up the sound I want, which is usually a pretty basic sound anyway. More WOMP, more BBBBZZZZRRRRR, less THONK, etc. While I like realistic instrumentation, the monomachine has some rather low-fi vocals, organ, and string sounds… these work for me. When I hear a Yamaha or Korg string sound, it sounds fake … but if you pick something that sounds very fake, you realize it’s not supposed to be real, and suddenly it’s all ok. You don’t realize the synthetic sounding thing is synthetic anymore. I really have no desire to go to a computer to get better sampled instruments — I’ve done that before, and computers are too fiddly, and the point is to avoid them. I’ve also learned to avoid seeking out distortion, the SEM and XS filter can make interesting aggressive noises if I want them, as can the Moog (though I’d seek that from it less).

The 2016 Reverb is too expensive, but I had this problem where (A) I really love reverb, and (B) every reverb I try doesn’t agree with me which makes me think I don’t like reverb. This one’s good though. I like old plate/room sounds, not so much the effecty reverbs of the Eventide Space. Cheaper Lexicons seemed to eat the tone of relatively nice synths for breakfast. And I don’t really want something uber-realistic either. Best of all, no menus, just knobs. I’m going to avoid gear with menus.

I’ll have 2 rack U left, so it’s rather tempting to leave room for something like an Fireworx on the effects bus for chorus, but I might not do that.
I’m avoiding compressors since I don’t understand them, and I don’t really do a lot with drums. I’d like a bit of tape delay kind of sound, so I’m hoping when the Timeline comes out it can deliver.

I’m still overly critical of the composition of things I make, so I don’t upload a lot (and the things I upload usually aren’t the things I try to finish) — I made something today which would be fine for a lost level for Castlevania, but … but it’s not near Halloween yet and it’s just a little bit too repetitive. Perhaps I need to comp the Boards of Canada thing and produce a lot of 42 second long stuff instead (not sounding like that, but… I like the idea of stopping when the idea’s done and not worrying about length).

Mixing for different types of speakers is still hard — I also have a bit of a problem still in that I mostly compose things using a very nice set of headphones, but on monitors things sound quite a bit different. Things *are* going to sound quite a lot different, so perhaps I just focus on making things for headphones and be cool with that. Another thing I should realize is there’s a lot of stuff that’s commercially successful and terrible, so if something’s better than that, I can be happy. My monitors are probably a bit too accurate. Though it’s pretentious to call them monitors — I mostly use them for playing Starcraft :)

I suppose in the long run it’s more about the journey than a destination and it’s just fun to play with.

And if waitresses just dig my Moog shirt, that’s ok too.

I lose a fair amount of Starcraft. Usually it’s because I’m saving up for something big and don’t invest in my economy production rate. I’m usually saving up to buy a ultra-high tech Colossus or upgrade my Chargelots, but what you should be doing is building more worker units so I can get that item faster, not save up for it at my current rate of savings.

It’s not tech that wins the battle, it’s usually economic volume. He who can produce more faster wins. Because you’ve been saving up for that one unit (or been living in fear), you failed to colonize the rest of the map — while someone else has done it for you. There are windows of opportunity — expanding now means I could get hit as a expand, but if I don’t expand, I surely lose later to a super economic force that has expanded. It’s a military-like game, but it’s really about economic force and managing the fear of investing. Concentrating on the shiny units is all too easy, but that’s not what is about. It’s about bases and workers.

I think that’s what both real people and the government are doing today, because they are in fear of being attacked by proverbial economic Zerglings, they are building up their savings and hiding, instead of ignoring the risk of being attacked (not physically, I mean metaphorically) — and making worker units to grow their economic production rate faster so they can attack stronger later (again, metaphorically). However, if they instead build worker units, when they do need to build up their (metaphorical) forces, they can build up much much faster. In Starcraft, if you have only 3 gateways (military production buildings), you can only deploy 3 units at once… so it doesn’t matter how much money you need — the money is worthless if you are facing a large invading force. However, catch-22, if you spent all your money at the start building gateways (buildings that produce units), and didn’t build workers first to fund those gateways, you don’t have enough money to even crank out a few units at a time — regardless of how many gateways you have. The workers need to come first. Then the buildings, then the things that those buildings produce (technology) last. In order to build workers, you must spend your money to “build” them. Hording money and saving up means the guy who instead SPENT money has more workers and is in fact earning money FASTER. You can’t just be letting what workers (in the metaphor here, workers=effort spent to improve your economy) you have collect money and save it, because then you just have the few workers you built at the start of the game, while the other guy has a tremendous economy BECAUSE he’s invested in it — because risks were taken.

In Starcraft, you can choose to invest in units/tech, or workers. You should always invest in workers, because workers FUND those units/tech. In this metaphor, workers don’t represent, say, American jobs. They represent doing useful things and ignoring outside risk while you prepare for a later assault. You can’t prepare sufficiently well for any hardship without the economy behind you first. The thing is, the person running your Protoss Nexus economy isn’t the president, it’s you. Everybody’s got their own little Protoss Nexus, and you’re all building your own workers. There’s a personal economy, not just a national one, and the national one is based on everyone’s collective personal economy. And a lot of that is perception.

Hence, saving or cutting back on things that improve economy while you have little (national) income is bad. To build a stronger force, it’s better to always be spending about at your current rate of production. Always be building drones. Build other units if you have spare cash. But you always must be building drones. So hence the theory that individual lack-of-doing-useful-things is the problem. If you have a lot of cash in Starcraft, that cash is useless, because it takes time to do anything with it. And if you are constantly thinking about problems (in Starcraft, outside attack, and in our metaphor, economic doom) you are likely to forget about keeping your production maxed out.

So, how to change the national mentality? This probably isn’t something President Obama fixes, it’s something everybody fixes. If you have lots of money, and you aren’t spending it, the economy suffers. Meanwhile, do things that increase your economic production rate now, don’t want for things to magically “get better” and then increase your economic production rate. The people helping it “get better” are you.

In Starcraft terms, if you play defensively, you always lose to those who threw caution to the wind, built up their economy first, and then used it. You can’t just turtle up and then decide to use your economy later. This economy isn’t the national economy, it’s a symbolic figurative you. The guy that has the startup that’s just playing it safe, for instance. The people that are pulling their money out of the market and investing in more safe things.

You have to be fearless and everyone must become a production monster, something doesn’t just improve by itself. Nor is there some magic central entity that solves the problem for you. Everyone has to kick ass and be aggressive, all of the time. No matter how much you try to fortify your base against attack, the enemy is just going to break out Siege Tanks, Yamato Cannons, Carriers, and Broodlords on you. Turtling something out is not an option.

A corollary is that if the enemy things you have superior forces, they are more likely to turtle and, whether or not you had superior forces, not invest in expanding their economy. Thus *acting* like everything’s awesome is also helpful, because of much of what our economy is (imaginary numbers traded by computers) is powered by perception. Heck, there’s even bots that invest based on Twitter stats. Seriously, that’s not right.

So, make an early cannon rush for appearances sake, and crank out some probes then start building production buildings. It will allow you to build that mothership all the much sooner than if you just let the 5 workers you got at the beginning of the game do everything for you.

I’m not saying middle class people shouldn’t save, but when folks who are *not* at risk for great economic hardship all go into saving mode, turtle up, and don’t take risks, they are going to get streamrolled. Fear is the mind killer, and stocks are an imaginary index of perception. This means they are controllable by managing perception. So, quit blaming the economy (or thinking about the economy) and do something about it. If enough people do that, it will get better. It doesn’t take someone who is appointed to lead to lead, it takes people to actually to just start leading on their own.

Always be building your proverbial probes/SCVs, and when your probe/SCV population is big enough, plant down another base and maximize production at THAT base. There is no other game in town. What are you doing to influence your own personal economy and that of others? In Starcraft, turtling and hoping it will all blow over does not end well. You have to do something… yourself.

It’s easy to write an app and miss database performance until it sneaks up on you, so it’s important to be thinking about performance all the time — fixing it later can be tricky. Recently I had to deal (am dealing with) a scenario where SQL queries against a list of things are of the order of O(N) lookups, but really they should be O(1). Database efficiency is important not only because of load time (say, in webapps), but just in terms of general application responsiveness.

Here’s some things that can be done:

  • Where possible, pass objects around instead of criteria that will result in another lookup for the same data in the object. Integers don’t make a good method signature, and I like things to be more object oriented. Having things be OO can keep your untuned performance on par with the tuned performance of a very procedural application that does not have the benefit of object parameter passing.
  • If your ORM supports it, use something like Django’s select_related. This avoids lots of extra lookups to get related fields when walking over ORM relations. At least in Django, you can make this the default behavior for a particular manager by overriding get_query_set on the manager. I’ve had to implement things that did something reasonably similar, which can work to — for instance, things that join things with other things and then put them back together.
  • Consider building an in-memory object cache that lives ahead of any external caching, so that if you do make a repeated lookup (because you aren’t able to pass the variables around very well, due to code architecture), you can avoid the extra database hits. You’ll just need a small bit of logic somewhere for when to invalidate those cached items.
  • Put constants in the code rather than using constant tables, which produce lots of extra joins. This is not so terrible if using select_related but does have impacts on query size. If you think it will change later, put the string/integer values in the main table.
  • When it’s possible to add a column to something, adding a column is often better than adding a new table if there isn’t much data to track.
  • Log your queries in development, read the logs, and be on the lookout for anything that looks redundant or unneccessary. Tracking the log with “cat foo | wc -l” can be enough to see how many queries a particular series of requests takes. There’s no excuse to not do this.
  • If there are things you don’t need in a particular evaluation of a section of code, don’t look them up. Example — constructors that fetch everything they might possibly need up front.
  • Make sure you occasionally test with amounts of data comparable to the suspected users you are going to have. Make sure the “most likely worst case” scenario is acceptable in terms of performance, and you’ll be doing very well with average/good cases. Don’t use 5 rows in a datable when a production/customer/deployed scenario could have 20,000.

Previously I worked at about 3 shops that were using formal capital-S Scrum. While these places have had good aspects and this isn’t a knock at them, I’ve never liked the system itself. I’m now in a position where I believe I’d actually seek to avoid capital-S Scrum in the future. Now that may not be fair as your shop may be *awesome* to you, but in my experience, it’s not. So, I think I should share thoughts, in hopes that it may at least save an org somewhere… so that I don’t have to become an underwater basketweaver in the future. I don’t think they do Scrum there, in the underwater basketweaving industry. If anything, if you find a process that is specific only to a particular software for project management, that’s enough for me to a bit skeptical. I know you can manage lots of engineering projects classically, and have seen it done well. Software doesn’t get to be different, IMHO.

Part of the reason for the way I think is I got really lucky for a long while — and could work on what I *thought* needed to get done for about 4 years. You just did what you needed to do, and that was fine. Great concept, and I got really good about managing myself. I met with people when I needed to meet with people, but I’ll admit it wasn’t very collaborative with coworkers — I mostly collaborated with the internet. I missed the team aspect — though I’ve often found team aspects can be overcomplicated when they are convoluted with process.

Collaboration and process are unrelated. Collaboration happens when people can work well together. Process is what happens when you need things to fill in the gaps. Before that place, I worked at some other shops that did what I guess you’d call Waterfall or Iterative Development. Those projects worked. I’d see my project manager for about 10 minutes maybe once a week. We wrote some quality stuff. We had team meetings with just developers to talk about technical things. Business folks decided if things were acceptable to release. Pretty simple, obvious. Did we estimate up front? Yeah, totally. But we wrote just what we needed to write and we weren’t bad at estimating. I think there’s too much concern on that. People aren’t usually bad at estimating, and if you are, Scrum sweeps it under the covers by not talking about it. It measures the wrong thing because those dates still matter and you should be releasing only the minimal viable product anyway, so what scope is there to cut?

Don’t get me wrong, “agile” without the “Agile” (i.e. no major development cycle with frequent demos) is fine. In the last 3 weeks, I’m seeing a workflow where we just have demos + a very ultra quick standup (without even saying what I did yesterday!), and my levels of stress have gone down to zero while my productivity has gone way up. It’s pretty amazing, not having to re-explain your plans so often and sit through processes you already know how they are going to plan out — what is left is discussion about things you didn’t expect to be discussed, where you learn new things. If you need help, you just ask who you need to ask. You can get in the zone and work too. To me, agile is about not doing things you don’t need to do, and doing the smart things when you have to. It really has nothing do with the crusade against the Great Demon Waterfall — totally different things. In this sense, I blame agile for promoting itself by promoting the concept of agility without being, well, agile at all. Capital-A Agile is an unagile system.

Why is the Scrum consultant-ware so prevalent?

I’ll leave a few observations on Scrum. These are not about any particular company, but more of a melding of several in equal measure combined with an observation of the pulse of the intertubes:

  • I think the big-A agile system is very akin to “USA PATRIOT ACT” in terms of labeling and advocacy, similarly the problems it addresses are overstated in terms of importance.
  • Scrum is not actually a minimal process, it’s a MAXIMAL process. 35-60% meetings is probably normal.
  • Scrum planning meetings often require team members with no relevancy to a particular set of tasks to sit idle waiting for their turn, by mixing too many types of people in one planning session
  • Scrum can be used as an advancement vehicle; and makes it easy to throw stones at current process while presenting a new unproven one.
  • The concept of Scrum often seems to be in tricking the team to get in the habit of micro managing itself, but the team would probably rather be working than policing.
  • If the team manages itself, management’s function becomes hard to define.
  • Scrum is a process that many groundlings dislike, but are afraid to call people on it (Source: lots of straw polls).
  • Scrum, in estimation practices, often assumes developers are interchangeable when they are not, which is very dangerous. Specialization exists, use the right people for the right jobs.
  • There’s nothing wrong with a Gantt chart. This is another word treated like “Death Panels” as a Scrum scape goat. They are useful in identifying bottlenecks and seeing how to parallelize when you need them.
  • If you’re already rolling out a minimal viable product, there’s little scope to cut. So the scope control features don’t add much value. Get your PMs to ask for what they need and then stop.
  • Scrum as a process focused on estimation seems interested in keeping tasks short that should not be, including research tasks, prototyping, and trying new creative ideas
  • Scrum is designed so free time is spent working on the backlog, so this also reduces time for creative exploration
  • Scrum seems to be a system evolved out of a lack of trust in quality of work, which I find offense to engineering professionalism. That being said, not everyone looks at software with engineering rigor.
  • Scrum is often religious in that if you question it, it feels that you are often labelled a “cowboy waterfall terrorist”. You should be able to discuss the process.
  • There was nothing wrong with iterative development and having just a few cycles to release a product. Been there, done that, it was great! This is often the best model for some products, especially those that involve a lot of intense work that shouldn’t be interupted. And the “Design Up Front” stuff didn’t need to go that far either. Good engineers should be able to determine what you need to implement pretty quick.
  • Often Scrum planning tends to focus on the short term without focus on the long term, making compromise decisions.
  • Often Scrum planning seems to encourage small estimates (because so much weight is placed on estimation), and does not favor doing things correctly
  • Planning Poker, Fists of Five, Chickens/Pigs, no laptops, taking attendance or marking lateness, inability to use chairs — it feels like kindergarten
  • It is better to get work done and sell product than pretend to be following a system that helps you but doesn’t
  • Phrasing user stories in long form does not enhance explanations, just talk about what you really want and then do it
  • Any meeting that needs lots of post meetings wasn’t efficient, figure out why and fix it.
  • Good processes are created by groundlings who need them, and revoked when needed

It’s weird, but something so small as a process … you’re there 40 hours+ a week, it matters a lot what you’re subjected to. I would call upon those who institute project management systems to avoid their interest in certifications, books, and so forth, and just really take a hard look at what they need to do to get stuff done, and then do it. It’s important that we stop inventing systems that are counter productive and saying they are an improvement.

I write this not because those experiences were bad, but I’m experiencing good, real non-capital-A agile, and remembering times before it existed… and both are better. And it should be ok to talk about those *working* as well, not just the ones that have well defined names, books, and consulting backing.

As I posted on the twittersphere, I rediscovered my lost Shure 535 headphones this morning. Before owning the Shure 535′s, I had some Shure 2s, 3s, and 4′s, so I’ve had a long history of using Shure canalphones. I believe the 3s and 4s were replaced to the wires fraying, though the 5′s have detachable/replaceable wires. When I thought I lost the Shure 535′s, I bought some Westone 3′s as a replacement, which, I remember posting, I thought were much better… though I never owned the same pair at the same time to A/B them. Hardly anyone knows of Westone, I believe I found a random reference on the intertubes, but they are good stuff.

So, now I can do that. Testing time!

Results? The Shure 535′s are amazingly accurate. They can reveal subtletly in recordings, making some vocals and solo instrumentation sound very interesting. However, they also reveal flaws in recordings just as well. The midrange to me seems a little shrill, though the bass is pretty solid. I can totally see why you’d use these for monitoring live music. However, the midrange response curve just feels a bit wrong to me, and some of my favorite songs I like much less than on the Westone’s.

The Westone’s (IMHO) make good recordings sound better than on the Shure, and also are more tolerant on bad recordings. They are less monitor-like, and have a better frequency response across the entire range. Things are a bit less open, meaning the sound is fuller. If you get a bass drum hit, it carries, it doesn’t just “thonk”. I’m not sure if it’s the right thing I’m perceiving or not, but it seems like they have more sustain. Maybe that’s the wrong phenomenon and frequencies are rolling off. I don’t know, I’m not one of those crazy burnt-in-cable audiophile folks, I just like good speakers :)

While it sounds like I can “hear” something better and more accurately on the Shure 535s, the Westone 3′s are more enjoyable. They seem to have this quality that makes everything come out of them sound extra awesome. So I think if you’re a jazz listening audiophile type, the Shure’s are better for you, and for everyone else, I’d recommend the Westone’s. I should say though that both are exceptional and way better than what most people are used to.

I used Comply Foam tips on both to avoid any difference in “seal” between the two, which is vital for getting good bass on canal phones. That being said, with the same tips, the Westone’s are lighter, fit better, and have lighter wires. I used to like tri-flange tips on my cheaper Shure’s, but the Comply tips make things much better, and they are pretty comfortable. They are like super-slow memory foam and last a long time.

Music used in A/B testing, for no particular reason:

The Shins — Know Your Onion!
Blitzen Trapper — Furr
Gnarls Barkley — Run
Porcupine Tree — Halo
Neil Young — A Man Needs A Maid / Heart of Gold (From Live @ Massey Hall)

I have to wonder about the Westone 4′s if they are that much better, some intertube reports seem to make me think they’ll sound more like the Shure’s and I’ll like them less.

Winner: Westone 3′s, with the Shure’s still being awesome.

Previously I’ve often had the problem of needing to debug a process inside a network application while it interacts with a client application. While I’m not sure there’s a good analog in Perl (where I wanted this pretty badly and had to use lots of logging), at work, we’ve been using epdb, which is pretty cool. Java’s had remote wire debuggers for a while, but what’s nice here is everything is vim friendly and you can define breakpoints just by modifying your code; the ease of use in epdb is very good. With some of the Java debuggers (this was “back in the day”), they were generally not so usable so, even then, they went unused. epdb is not like that.

So, how to start? Inside your program, you can add multiple breakpoints locally by:

import epdb; epdb.st()

Though you can also (by modifying the first breakpoint) make things work in a network accessible way:

import epdb; epdb.serve()

By default, serving happens over port 8080. Occasionally a daemon will do something with a filehandle and mess up the serving code, but usually it works. I can run it inside mod_python fine.

Remote debugging can be accessed by:

python -c "import epdb; epdb.connect()"

or just telnet 127.0.0.1 8080. Type “?” once activated to see the available commands.

I’d suggest python friends familiar with pdb (or not, because they couldn’t really take advantage of pdb before) check it out.

Where’s Michael

Posted: June 24, 2011 in Uncategorized

I believe I alluded on the tweetverse that I had a new job, but didn’t post details in public yet. For those that don’t know, I’m now at rPath in Raleigh, and had an absolutely great first week. Awesome folks, office, and very impressive tech stack (and Python!). Lots of potential for world domination. Lots.

Loyal readers from Cobbler/Puppet/Systems-Management land will correctly infer that this means I’m once again helping to build SkyNet, and you should probably carry around a large EMP device if this alarms you.

We do what we must because we can.

Pictures from Chicago

Posted: June 20, 2011 in Uncategorized

I last went to Chicago for a tech conference a couple of years ago, but didn’t have much time to look around. Here’s 50+ pictures from a vacation where I did.

New pictures start at #18 in the gallery (click me), and include Millenium Park, the Buckingham Fountain, Sears/Willis Tower’s Skydeck (meh), the Chicago Art Institute (drool), Shedd Aquarium (thank you to the incredibly photogenic Jellyfish), the Stained Glass Museum at Navy Pier (most pictures are Tiffany Studios works, which photos don’t do justice to) & Ferris Wheel, the Museum of Science and Industry (glad to see the lower level this time), and some random buildings — so basic touristy stuff.

I didn’t get a photo, but I also spotted these awesome street art ferrets from the L (pictured at bottom of post).

Go Ferrets.