Archive for the 'Uncategorized' Category

An experiment in funding open source software

In the past, I’ve blogged many times about my ObjectHandles library, and today I’m starting an experiment in generating some revenue for it.

There is now a new web page at http://object-handles-examples.appspot.com/ that has 7 example applications intended as either a training resource, or as a starting point for more complex applications.  I’m charging a fee for the source code to those examples.  The fee is whatever you decide to pay (with a $15 minimum)

The more revenue that this generates, the more motivation I’ll have to spend time working on the core library and additional examples.

The core library will continue to remain free and under the MIT license.  It can always be downloaded from http://code.google.com/p/flex-object-handles/

There were a few reasons for me to do this including:

  1. My motivation to work on the library has been very low lately.  I don’t have any current projects that are using it.
  2. The donations link that I have has received a total of 3 donations over 2 and a half years.
  3. By working on these examples, I was able to really exercise some of the core functionality.  While doing this I was able to
  • Completely revamp the constraints mechanism and implement things like an Aspect Ratio constraint
  • Find and fix a handful of bugs
  • Figure out the answers to some questions others have asked that I just didn’t know the answer to
  • Make several big performance improvements

P.S.  This gave me a chance to create a real site in Python/Django/Google App Engine for the first time, and I’m impressed.

Just say no to dell

I am so frustrated with the buying experience with Dell today that I’m giving up on them.  Their customer service is useless.  Their promises for delivery are repeatedly broken.  They have crazy restocking fees.

This is for an order placed 1/18, and I have no confidence that it would have actually gotten here on the 25th so I’m canceling that.  It wouldn’t be so bad if the people you have to talk to on the phone had some idea about what’s going on.  Something like “We just can’t get that video card” or “The wireless adapter is out of stock”.  I would have modified the order to get it sooner if possible.

But all I got was corporate-speak about how great dell was and how I’d just have to wait.

I’m buying a mac mini instead.  At least apple will screw me over with a smile.

SimpleDiagrams – An ObjectHandles usage

Daniel McQuillen from www.simplediagrams.com emailed me last week to let me know about their use of ObjectHandles in the SimpleDiagrams product.  It’s an AIR application that lets you create chalkboard style diagrams in just a couple seconds.  It’s sort of Visio for people who need to get stuff done instead of diagram all day long.  I gave it a quick 10 minute try, and this might be an app I add to my arsenal of tools.

Daniel has been kind enough to offer me a small percentage of their sales as a thank-you for the ObjectHandles library.  It’s MIT Licensed, so he didn’t have to do that, but I’d like to send a big thank-you to him for that.  That’s a great way to support open source projects.

Why educational software

Here’s one reason why I’m in the educational software business.  We’re pilot-testing one of our new products (called Fraction Nation) at a local school.  The teacher gave all the kids surveys to fill out, there were a lot of great responses.  This response made my day.

Do you enjoy playing Fraction Nation?

I don’t enjoy playing Fraction Nation.  I Love it!  Very Inspiring!  You guys probably change my life and others!  Wonderful Job!

Or this one from another kid…

If you could change something about the program, what would you change?

The thing I would change would be nothing ’cause I really liked it!

Another kid, same question:

If I were to change something, I would change the background.

Oddly enough, several kids said the background thing.  I say if the background is the biggest thing they want to change, that’s a big win.

Universally in that class, the feedback was overwhelmingly positive.  Making a product that teaches fractions that kids like isn’t very easy to do, but I think we might have nailed this one.

And here’s a doodle one of them made on the back of a survey for us.

The thing that really scares me is almost every one of these kids has better handwriting than I do now.

ObjectHandles – Multiple Selection and Decorators

I’ve been playing around with a few things in ObjectHandles today. The first is multiple-selection. Last week Vlad Janvarev sent me a patch that got it working for non-rotated objects. I put that in, and spent most of my day today figuring out how to extend it to rotated objects as well (dealing with 3 coordinate spaces at once makes my head hurt!). To try it, press the shift key and select multiple objects on the screen, then you can move, rotate or resize them as a whole.
Get Adobe Flash player


View-Source is enabled in it.

It’s not working 100%, and I’m not sure why. If anyone has any ideas, let me know. The broken part is if you rotate 2 objects, then select them both, then resize them really small. At some point they sometimes start getting bigger instead of smaller depending on the rotation. I’m baffled.

The second thing I played with is the idea of “Decorators” that can draw interesting info based on the state of the set of objects either being moved or currently selected. There’s a quick screenshot of a sample one I did below.

This is also in the link above under “Example 8″. This is just a proof of concept for now. If you want to try it, do it before trying the multi-select since the multi-select can leave objects on fractional pixel boundries which won’t line up perfectly.

Neither of these is ready for prime-time yet. The multi-select stuff is creating tons and tons of temporary objects so the GC kicks in periodically freezing the interface. That’ll need a little optimization.

ObjectHandles Version 2, first release

For the ObjectHandles fans out there, I’ve just submitted changes that let ObjectHandles 2 play nicely with FlashBuilder4 / Flex 4 SDK. While doing that I fixed a couple bugs, and set up a build environment so I can easily publish OH2 releases onto the google code page. So now you can download OH2 from the downloads section of the google code page. (Previously, you could only get it from subversion) That package contains source, documentation, and precompiled swcs for both Flex 3 and Flex 4.

http://code.google.com/p/flex-object-handles/downloads/list

I hope to write some better documentation on how to use this new release soon. If you’ve been using ObjectHandles Version 1, it’s not a straightforward port to the new stuff. There are drastic changes to how it all works.

Flash Builder Beta2, Catalyst, asset organization, FXP->SWC

Today, I’ve been experimenting with project structure and workflows.  I’ve got two major problems I want to solve.

Problem #1

When working in Flex Builder, if you have a lot of non-embedded assets, it can go really slow.  At seemingly random times Eclipse will decide it needs to delete all of your output files and re-copy them.  For our current project, that can take 10 minutes.  We have yet to figure out what triggers this behavior.

Problem #2

When working in Flex builder, if you have a lot of embedded assets, it can go really slow.  Especially on clean builds, or builds that touch a lot of modules.  This is an every-compile type thing, but is far less severe than problem #1.

Solution for Problem #1

Don’t let Eclipse do the copying for you.  Put your assets outside of your source tree, and turn off “Copy non-embedded assets”.  To the right is an example directory structure.  There are a few differences than most Flex/Flash builder projects.

  1. My assets folder is a sibling of my src folder, instead of inside it.
  2. My compiler is set to output to assets/bin-debug instead of just bin-debug

In your source, you’ll have to link to your assets a little bit differently.  Here’s an example from my TestProject.mxml that shows both an embedded and a runtime loaded asset.

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.          xmlns:s="library://ns.adobe.com/flex/spark"
  4.          xmlns:mx="library://ns.adobe.com/flex/halo"
  5.          minWidth="1024" minHeight="768"
  6.  
  7.         <s:layout>
  8.         <s:VerticalLayout />
  9.         </s:layout>
  10.         <mx:Image source="@Embed(‘../assets/art/Image1.png’)" />
  11.         <mx:Image source="../art/Image2.png" />
  12. </s:Application>

Since the embed is relative to the source folder, we need to use paths in the form of ../assets/art/*

The runtime loaded assets are relative to the final compiled location, so those take the form ../art/*

Now, eclipse will never try to manage your assets.  This appears to completely solve problem #1.

Solution for Problem #2

A while back I blogged about turning a Flash Catalyst project into a .swc.  (Read that here)

I dusted off my script and tried it with the Beta-2 of Flash Builder and Catalyst.  And low-and-behold it worked without any changes.  The only thing I had to do was reset my FLEX_HOME environment variable to the new location.

So, if we were to move away from a model where we embed assets from designers into Flash Builder, and to a model where the Designer puts those assets into Catalyst, and then we run a script to compile the catalyst project into a .swc, I think that would completely solve problem #2.

One week with Droid – my impressions

So it’s been a week since I got my Verizon Droid.  How’s it been?

I had been using one of the G1 phones on TMobile’s network.  It was running Android 1.6, the new Droid is running Android 2.0.  Let’s compare Droid to that first.

Let me start by saying, they’re not all that dissimilar.  The one plus the G1 had was the keyboard was easier to use.  It actually had separate physical buttons whereas the Droid has them all on a single etched piece of rubbery plastic.  The droid is faster, has more memory and storage, and looks better – all by a lot.  Holding the phone if feels like it’s engineered and manufactured well.  Holding the G1, it kind of felt like a toy.

I haven’t had any problems finding or running any apps.  All the ones I’ve tried have been great.

The new Google Maps with navigation is amazing.  Better than my Garmin stand alone GPS unit.  It’s got “layers” now that can overlay all kinds of things.  Some of my favorites include traffic and Wikipedia.  The Wikipedia layer shows all of the Wikipedia references on a map.  When looking around my home, there’s maybe a dozen points listed.  I’m hoping a Geocaching app takes advantage of that layer functionality soon.

The battery life seems good.  I used the navigation app for an hour and a half on my commute to work one day.  That includes the screen being on the entier time, GPS updates contantly, and lots of network traffic.  As well as the speaker telling me the directions and a traffic overlay showing me where the road would slow down.  At work, I left all of the services (bluetooth, wifi, gps) all day long.  I consciously tried to use it as much as possible.  At the end of the day there was still 15% battery life left.  Normally, I plug it in while driving, but it’s nice to know I dont have to.

So, if those things were the only differences from my old phone to this one, the $200 TMobile cancellation penalty, plus the $200 new phone cost might not have been worth it.  But there was one major other difference.  The network.  Verizon is amazing compared to TMobile.  I’ve used the same speed-testing app on both phones in a variety of situations.  The fastest speed I ever saw with TMobile was around 300kbs.  When I was at my house, it never went over 5kbs, usually in the 1-2 range.  With Verizon, the slowest I’ve seen is around 300kbs.  At my house, I average 500kbs.  That over a 25000% increase.  When in the office at work, it wasn’t worth even trying to get a data signal with TMobile.  With verizon, it works perfectly.  This is the biggest single selling point of the entire experience for me and I’m am a very happy customer.  This speed changed the way I use my phone from the G1 tot he Droid as much as the G1 changed the way I use a phone from a dumb-phone to a smart phone.

Cost-wise the monthly plans between TMobile and Verizon are about the same.  I do get a 17% discount because my company has a contract with Verizon so your price may varry.

I heard a great Droid radio ad today.  This one below is similar, but the Radio one was better.

TSP Build Notification Board

A couple posts back I blogged about playing around with an Arduino.  Since then I’ve completed my first project, a Build Notification Board for work. It sits in my office window facing the main part of our office building.

At work, whenever a developer submits a change to a project we automatically make a build to make sure nothing goes wrong.  This board gives us the current status of four different automated builds that happen on those cruise control servers.  The green light indicates that the last build was successful (it switches to red if it failed).  The blue light lets us know if it’s currently building (it does a nice pulsing fade in/out).

On any failure, a flag is also risen from the top of the board.

There’s two meters at the top.  The first one shows an overall project completion (that’s manually entered by me right now).  The other one shows “communication density”.  Right now, it’s a random value that ticks up and down.  Eventually it’ll represent the volume of traffic on our project mailing lists.

The top gauge looks like this (The 0-180 scale is a bit of an internal joks that any fellow TSP employee would get):

The electronics are fairly simple.  4 pins of the arduino control the red/green lights.  4 pins control the blue lights.  One of them controls a servo that raises/lowers the flag, and two pins are for the two meters.

Besides that I have a switch on the back that activates “demo mode” that does some pretty flashing lights and raises the flag.  There are a couple status indicator lights that tell how the board is functioning back there as well.

The meters are 1970’s era amp-meters in the micro-amp range that I opened up and replaced the background label with customized print outs.  I was suprised to see that a simple resistor and PWM signal could control them accurately.  I was thinking I’d need a capactitor in there to even out the current.

Here’s the back of the board.  Normally, there is a panel that covers all this to make it look less like a fire hazard.  At the top you can see one of the meters.  Next to that is a small protoboard that the status lights, demo-switch and flag-servo are all soldered into.

If you follow the green wires down from there you’ll come to my Arduino board which is actually a lower-cost Seeduino that I bought so I could continue playing with my arduino for other projects.  One nice thing about the Seeduino is you can solder connectors directly to it.  I’ve got 2 8-pin connectors attached to it that connect all the lines I needed to the proto board below it through those rainbow-wires.  That second proto-board has the resistors for the blue lights and the connections for all of the lights on it.

To the left of all that is a structure that holds all of the lights, the lenses, and some dividers between the lights.  To control two lights with a single pin it was easier for me to put those resistors closer to the LEDs so that’s what you see there.

The black wire from the Seeduino to the foreground is a USB cable providing power and status updates.   On the computer it’s attached to there is an AIR application that queries status info from our cruise control servers and relays it to a program running on the seeduino.

Pulse Particles MXP

Sorry for a lack of posts recently, been really busy with project work. I’m on vacation next week, so I’m trying to get caught up on posts today.

Dominik Pesch over at 11com7 has created and sent me a .mxp package for Pulse Particles. This package adds the particle explorer as a new window within the Flash authoring environment and makes the component available from the standard libraries.  This could really make it easier for designer-types to use.

Download PulseParticlePackage.mxp (4mb)

Thanks Dominik!