S3 ‘n’ Me, or, My Lost Semi-Weekend

July 21, 2008 on 7:07 am | In Communication, Programming | 1 Comment

Yesterday I was busy playing around with my new web application, when all of a sudden it froze up.  I was a little worried but, hey, it’s sort of in a super-early preview so some bugs are expected.  I logged into the Noteflight Amazon EC2 instance to check out the production logs, and found a “Connection Reset By Peer” error.  The peer was Amazon’s S3 (Simple Storage Service), on which we completely rely at this point for all data persistence needs.  My web app couldn’t communicate with the S3 service to fetch or store data — kind of an essential function.

Next I fired up an S3 client on my machine to look at the data from another vantage point. It couldn’t connect successfully.  Uh oh.  With a little more digging I found my way to Amazon’s Services Health Dashboard, which showed that there was in fact some kind of service disruption.  “Elevated error rates,” it said.  A few minutes later, this turned into “Service Disrupted”.  All over the web, sites relying on Amazon S3 were either not showing vital data or crashing and burning.

In the end, the outage lasted almost 7 hours.  Every other discussion group has someone flaming about how they’re going to have to find some other solution, that S3 and “the cloud” won’t cut it after all, and so on.

Me?  I’m not so upset.  I think it’s not so surprising that there should be a major outage with something as new and complicated as this, and Amazon provided updates every 20 minutes or so for the duration of the downtime.  If anything, it’s good when we’re more aware of our dependencies, and act with full knowledge of what could happen.  I’m not at all happy about my site being unavailable because of Amazon’s problems (and I am anxious to see a real explanation posted, not just status updates), but I compare that with the bad situations I’ve had with some other hosting providers, and I feel I am still getting my money’s worth.  Is it perfect?  No. Does it enable businesses like mine to scale without huge up-front capital investments?  Yes… and that’s why I picked AWS, accepting the risk and the dependency that goes with that.  We’ll have to see where they take it from here.

1 Comment

My Inflection Point

July 17, 2008 on 7:26 pm | In Flex, Music, Programming | 4 Comments

Let’s get nerdy for a second. Just one second. As Wikipedia would have it:

In differential calculus, an inflection point, or point of inflection (or inflexion) is a point on a curve at which the curvature changes sign. The curve changes from being concave upwards (positive curvature) to concave downwards (negative curvature), or vice versa. If one imagines driving a vehicle along the curve, it is a point at which the steering-wheel is momentarily “straight”, being turned from left to right or vice versa.

My steering wheel is turning, for darn sure. I have recently left the wonderful company for which I have been working, Allurent, to start my own business. It’s an exciting change and one that I didn’t quite see coming until it had almost occurred by itself. This was a decision that felt like it happened to me, not a decision that I consciously made. I have an idea that I am absolutely passionate about, and must work on, as disruptive as the consequences may be. It’s as simple as that.

I will be talking much more about my company — called Noteflight — quite soon. Noteflight is an online platform for creating, sharing, viewing and hearing music. It’s a serious application, aimed at people who perform, compose, study, teach or collect musical content. Expect some very substantial posts from me in the next month or two.

I am also working with the crack Boston development shop Infrared5. To say these are smart folks is a huge understatement; go take a look at their site, their team and their achievements. Besides being smart, they’re also really nice folks, and I’m very pumped about the work we’ll do together, and are already doing now. Plus… they have some great dogs hanging around the office. I mean, how can you beat that?

Lastly, one more bit o’ news: I’ll be speaking at the Flash on Tap conference in Boston this year. Hope you can come!

4 Comments

TR Coffey speaking on skinning, styling at Boston FUG

July 3, 2008 on 10:34 am | In Flex, Programming | No Comments

This is just to give a quick heads up to my local readership: TR Coffey of Allurent will be speaking at this month’s Boston Flex User Group meeting on Tuesday July 8th at Adobe’s Newton office. TR is a really smart designer and information architect, one of the best people I ever worked with, and here’s why you should come hear TR talk about Flex styling and skinning:

  • TR has invented some really creative and powerful ways of using CSS to control the look of Flex apps, going well beyond the textbook approaches that you can read about yourself.
  • TR doesn’t just solve the problem in front of him, he’s someone who always looks at the larger context of other similar problems. So the stuff he came up with might help you in your job.
  • TR is a really articulate and well-spoken person, and you’ll enjoy hearing him talk, no matter what he says.

Surely those are reasons enough to come! Hope to see you there.

No Comments

Audio-enabled Physics Engine Example

June 9, 2008 on 4:16 am | In Flex, Music, Programming | No Comments

I thought I’d put up a fun demo SWF from my “Flash Bang” talk of a couple of weeks ago. This is an example of what can be done with the new FlashPlayer 10 (”Astro”) Sound API; it synthesizes sounds on the fly that are synchronized with colliding objects in a simple physical simulation. The volume and pitch of the sounds are controlled by the collision force and the nature of the colliding objects.

To run this demo, get hold of the FP10 standalone player, then use it to open this URL:

http://www.joeberkovitz.com/projects/StandingWave/physicalSound/physicalSound.swf

(If you try this with FP9, you’ll get a runtime error dialog, or the app won’t open. And at some point soon the FP10 API will probably change, invalidating this app and obliging me to rebuild it, so in the near future YMMV.)

The sync between the sounds and the visuals is quite delicate and if it is off by even a little bit, the results look terrible. On my MacBook Pro, the auto-calculation of the audio latency is near perfect, but on Windows the player API’s Sound.position property seems to be off by about 150 msec, enough to ruin everything. You can play around with the latency in this example by moving the slider.

I didn’t post source because I am using a proprietary library, but the sound code in the example is not very interesting or complex actually. The trickiness in this app is all in the audio/visual synchronization. I am actually running two identical physical simulations, one of which runs ahead of the other, generating each collision sound exactly the right time interval before the other simulation displays the same collision. You can see both simulations by clicking the checkbox in the upper left of the example.

I used an open source physics engine called APE (Actionscript Physics Engine) available, at http://www.cove.org/ape/index.htm. I picked it because it was very easy to modify the collision detection mechanism to add audio hooks, but I haven’t done enough research to compare it to other engines for this purpose.

Here’s a screenshot (without sound of course!):

screenshot

No Comments

“Flash Bang”: upcoming talk on Flash audio synthesis

May 25, 2008 on 6:01 am | In Flex, Music | 2 Comments

This Wednesday evening (5/28), I am giving a talk on bleeding-edge Flash audio and music synthesis at the Boston Flash Platform Users Group . Jeez Louise, I must be about the worst self-publicist ever… I’ve been so busy that I forgot to blog my own speaking event. Anyway, the meeting is at the NEIA Annex building, 303 Boylston Street, Brookline MA at 7 pm.

I think this will be a fun one — my computer will be making a lot of noise and playing some tunes. Some of the highlights include:

  • The strange and scary things you have to do to synthesize audio in Flash 9
  • The big audio improvements in Flash 10 (code and demos will be shown!)
  • Architectural approaches to dealing with latency and synchronization
  • Adding simulated sound to a physics engine
  • The brave new world of Flash applications for creating music, not just playing it back

Hope you can make it!

2 Comments

Flexcover 0.50 released on Google Code

May 22, 2008 on 6:21 pm | In Flex, Programming | 7 Comments

Flexcover 0.50 is now available on Google Code. This version is a lot better than the previous release, which we called “experimental” for a reason!

There are two really enormous improvements in Flexcover 0.50:

Branch (or path) coverage: the new Flexcover compiler tracks all the conditions in your code that affect control flow, and counts how many times each condition has evaluated true or false. This is an extremely powerful feature, because it looks not only at what parts of your code run, but at why and how they run. It’s fair to say that without it, we wouldn’t have considered Flexcover to be a worthy coverage tool.

Simpler build process: Flexcover 0.11’s Ant-based build/launch process gave a lot of people a hard time. It’s been scrapped and the new approach is very simple: whenever you use the Flexcover modified SDK instead of a standard one, you automatically get coverage instrumentation and metadata. No Ant needed, and no special compiler options needed either. Finally, the Coverage Viewer is an installable AIR application that launches whenever you open a coverage metadata or report file.

Check out the release notes on Google code for all the gory details.

7 Comments

Flexcover Branches Out

May 10, 2008 on 4:26 am | In Flex, Travel | 1 Comment

Just dropping a quick note to followers of Flexcover and the ongoing AS3 code coverage adventure. It’s been a super busy time at work for me, but I’ve found enough spare cycles to put together a working branch coverage feature. It’s pretty cool: instead of toting up the number of lines that were executed (and highlighting lines that didn’t run in the source view), it counts “branches” that were executed: every conditional that affects program flow is tracked to count whether it has evaluated false or true, and how many times. In other words, if (a == 1) {…} else {…} counts as two different branches, one for the if clause and one for the else clause. Even better, if (a == 1) {…} also counts as two branches: you will be able to tell if the if clause ever got skipped because a was equal to 1. Try doing that with line coverage! [Continued…]

1 Comment

Next Page »

Entries and comments feeds. Valid XHTML and CSS.
All content copyright (c) 2006-2007 Joseph Berkovitz. All Rights Reserved.