development


The flood of Snackr downloads has finally slowed down to about 150 a day. Over 13,000 people have downloaded it so far; it looks like maybe about 500-600 people are running it daily–not bad for a little side project :)

Various people have requested the source code, so I’ve decided to host it on Google Code at http://snackr.googlecode.com/. You can file bugs/enhancement requests on the Issues tab there (the issues and wish list items from snackr.net have been migrated there), and check out the source anonymously using Subversion (instructions are on the Source tab).

The source is currently in an interim state–there are a couple of half-implemented features (the ability to “star” items to read later, and the Google Reader integration that Rob is working on)–but you should be able to run what’s there (the GR stuff isn’t hooked up at all to the UI yet, and the “star” functionality works but the UI is slightly broken). I’m planning to post interim test builds there once in awhile as well.

The source also probably isn’t the prettiest code ever :) , and I haven’t finished commenting it, but I’m hoping to continue cleaning it up and refactoring over time. Feel free to check it out, and let me know if you have suggestions–or, better yet, patches you’d like to submit!

Digg!digg this | del.icio.usdel.icio.us | 7 Comments

Wow–nearly 600 people have downloaded Snackr in the last two days! Thanks to everyone who’s sent mail or posted comments; it’s great to know people like it. The most common requests so far seem to be:

  • Allow multiple selection in the feed list, so you can delete a bunch of feeds at once. It seems like a lot of people imported large feed lists from their existing blog readers, then realized they didn’t want to actually see all of those feeds in Snackr.
  • Support Asian language characters. Currently, Snackr uses Myriad Web, and the font is embedded in order to make fade animations work properly for text, but that font only has Latin characters. I’ll either need to add an option to use the system font (and turn off fade animations), or maybe build a version that embeds a font with Asian characters in it (though that would probably lead to a huge installer).
  • Ability to keep a list of items to read later (e.g. by starring them). I’ve been wanting this for awhile but haven’t gotten around to implementing it yet–now I have some incentive!
  • Posting the source. I do really want to do this, but I need to set aside some time to make the code slightly less embarrassing :)

I also noticed today as I was using it on my machine that for some short posts, the popup seems to “bobble around” a bit and end up at a very thin size (it’s different from the jittery animation on Vista/Linux; this is happening even on OS X). It’s intermittent, but it reproduces pretty regularly on certain kinds of posts. Has anybody else seen this? I’ll have to look into it–it must be a recent injection, as I never noticed it before.

I’m planning to make regular updates to Snackr, though things are pretty busy; I’m hoping I can carve out enough time to release a new version in a couple of weeks. Snackr should automatically notify you when an update is available.

Keep those cards and letters coming!

Digg!digg this | del.icio.usdel.icio.us | 14 Comments

I realized a few months ago that, unlike pretty much everyone else I know, I don’t regularly use an RSS reader. Not that I haven’t tried—I used FeedDemon early on, and more recently tried out Google Reader—but never managed to form the habit of checking them regularly. Both of them are fine apps; the problem was with me. Every time I sat down and saw that I had a gazillion unread items in my hundreds of feeds, I didn’t know where to start. Eventually I just gave up trying to keep up.

Around the same time I came to this realization, Adobe AIR 1.0 was publicly released. I wanted to try to write an AIR app just for fun, and it occurred to me that I might be able to make something that would solve my RSS problem.

The result is Snackr, a ticker-like widget that lives on the bottom (or side) of your screen and scrolls random items from your RSS feeds. (It’s called “Snackr” because it lets you nibble on your feeds. Guffaw.) Here’s what it looks like on my desktop:

I’m actually finding Snackr really useful—it helps me keep up with blogs I want to keep up with, and also gives me a great smattering of items from sources I wouldn’t normally read regularly. Please try it out and let me know if you like it! (Of course, it’s still an alpha, so please expect bugs; there’s a list of known issues on the Snackr website.)

Snackr has also been really fun to write, and along the way I figured out some tips and tricks for doing various things with Flex and AIR. Some notes on that after the jump.

(more…)

Digg!digg this | del.icio.usdel.icio.us | 23 Comments

It’s been busy here in Thermo-land, as we work furiously (no really! we’re furious people!) to turn our vision into reality. I have a fun side project that I’m going to post about in a little bit once I get a few bugs worked out. In the meantime, here’s a video interview that Ryan Stewart, Thermo evangelist extraordinaire, did with me about designer/developer workflow in Thermo and Flex 4. It was our first video, so it’s a little blurry and off-center, but just pretend it’s artsy and edgy and you’ll be fine. (We did edit out the part where the siren went off when someone went out the wrong door in the cafeteria.)

Digg!digg this | del.icio.usdel.icio.us | 2 Comments

A number of people have written me over the past few months to mention that they’ve had trouble getting the Reflection component to work in various cases. I haven’t had time to look at each of the problems, but I do have an updated version of Reflector.as that may work better. If you’ve been having trouble with the original Reflector code, try this one out and let me know if it fixes your problem.

Digg!digg this | del.icio.usdel.icio.us | 12 Comments

Well, Thermo caused quite a buzz at MAX, and needless to say, we’re very excited about all the reaction. If you weren’t at MAX, you can see Aral Balkan’s video of the Thermo demo up on YouTube: part 1, part 2, part 3.

Since we did the demo, I’ve been semi-obsessively searching MXNA for blog posts about Thermo, and among the generally positive responses, people have also posted a number of questions and concerns. I thought I’d address some of these here, to help clarify and amplify what we showed in the demo. (Sorry–no spoilers about release dates or other features here!)

The demo showed Thermo creating a lot of bitmap graphics. Will Thermo applications be large and bitmap-heavy?

The demo happened to have a lot of bitmaps in it, since it was a CD cover browser, but Thermo will work with both vector and bitmap assets. The main difference between graphics in Thermo and in Flex today is that vector artwork in Thermo is expressed through bona-fide MXML tags, rather than opaque SWF symbols. In the demo, for example, Photoshop text layers came over as TextGraphic tags, and rectangle shape layers came over as Rect tags. Naturally, MXML graphics will also support complex Bezier paths, rounded rectangles, and so on, and will support importing from Illustrator and Fireworks as well as Photoshop.

Why is it useful to have graphics tags? Why not just import graphics as SWFs or bitmaps as in earlier versions of Flex?

For static graphics, you could argue it’s about the same. But few graphics in a Flex application are static. Much of the “rich” in RIAs comes from dynamic graphics–graphics that change in response to user gestures or dynamic data.

In Flex as it is today, developers have to create dynamic graphics by writing imperative ActionScript code. With MXML graphics, developers no longer need to recode the designer’s graphics in order to make them dynamic–they can simply modify the graphics at runtime through simple property access, data binding, the transitions/effects engine, and so on. Designers can continue to edit the graphics visually in Thermo without disturbing the developer’s code.

For example, suppose I draw a button skin in Illustrator that’s filled with a blue gradient, and we want to create multiple buttons with the same look but different colors. My developer can just import that as MXML, and then data-bind the gradient color to some style parameter. Voila–instant styleable skin, without writing a line of AS code. I can then edit the shape of the skin visually in Thermo, and the color style will continue to work, without my having to rewrite a bunch of Graphics method calls.

Now let’s say I want to animate that gradient color when I mouse over the button. Again, I can create this through declarative transitions written in MXML, rather than having to build the animation into an opaque SWF symbol. And again, because the transition is in MXML rather than ActionScript code, I can visually design that transition using the Thermo UI.

The text field that was created in the demo seemed to have its skin specified inline. Will Thermo create large single-file applications? Will the code be huge?

Thermo is being created for designers, but of course it won’t be successful unless its output can be easily consumed by developers. Thermo will definitely provide easy ways to factor the resulting code into separate files. For example, skins can be automatically put into separate output files and generalized into CSS rules. (Flex Builder 3 actually already has functionality for extracting inline styles into CSS, and we would certainly have the same functionality in Thermo.)

One example of code factoring that wasn’t obvious from the demo was that when Steven created a list from the individual CD covers, the item renderer for the list was actually created as a separate file. When he then double-clicked on an item in the list to edit it, it felt like it was being edited directly in place in the context of the larger application, but Thermo was actually making edits to the separate item renderer file behind the scenes. This is an example of how we can keep clean code separation without forcing the designer to understand the guts of Flex.

It’s great that you can turn graphics into buttons, scrollbars, etc., but what about custom components? Will Thermo work with components created by developers?

Definitely. Our intention is to make it so that developers can create components that are usable in Thermo the same way the built-in components are. Naturally, they will need to conform to certain rules and/or implement a certain API in order for those components to work well in Thermo, but our intent is to keep those requirements lightweight.

Thermo seems geared towards letting designers build a complete Flex application. Does that mean you expect designers to create business logic as well?

That’s not the goal of Thermo. One way I like to think about the designer/developer dichotomy (woo, alliteration!) was suggested by Rob Adams: developers deal with system logic, and designers deal with user logic. The two are not exactly the same, though they obviously intersect. Our goal is to make it so that designers can use Thermo to design the user logic of the application (along with importing and editing the visual design), and provide a clean way for that user logic to be hooked up to backend data and business logic by a developer.

That’s all for now. Please feel free to comment (or post in your own blogs) if you have more questions about Thermo–naturally, we can’t answer all of them at this point, but we’re really interested to hear your thoughts!

Digg!digg this | del.icio.usdel.icio.us | 5 Comments

Well, here it is–almost time for MAX 2007, and the last post I made to my blog was just after MAX 2006. I’ve been a little busy :) We’ve been working on some really neat stuff to show off at MAX, so stay tuned.

In the meantime, one bit of news–the Code Anatomy prototype I published in my last post is turning into a real feature! Our Learning Resources team is getting a real Flex developer to rebuild it from the ground up as a skinned, fully-reusable Flex app, and will be shipping several code samples that use it with Flex 3. Best of all, we’re planning to release the source code, so other folks can post anatomies of their own apps.

I probably won’t be coming up for air till after MAX (at least), but I will be attending, though not giving a talk. Hope to see you there!

Digg!digg this | del.icio.usdel.icio.us | No Comments

I’m back from MAX, and it was a great time. I’m amazed by how much traction Flex seems to have gotten—granted, the MAX attendees are people who already love Adobe/Macromedia, but it was still great to meet so many people who were enthusiastic about Flex. It was also very cool to see the first public demos of Apollo—I think they really helped people understand why we’re excited about it.

(Oh yeah, and I won a lot of money at no-limit hold ‘em. One of my adversaries turned out to be an analyst; after I put him all-in and won a big hand, he told me he was so totally going to write bad stuff about Adobe in retribution. I’m pretty sure he was joking.)

But now to business.

Here’s something I hacked up during MAX. (If any of my coworkers are reading this: No, I didn’t work on it during your talk. Okay, maybe I did, just a little.)

Click: Anatomy of a simple Flex app. (I recommend maximizing the browser window.)

The sample app in it is one you’ve probably seen before—a simple Flickr browser. The more interesting part is the annotated source view, which you can get to by clicking “FlickrBrowser.mxml” at the top. You can click on annotations, click on links within the annotations, or step through the walkthrough using the arrows on the right.

So, what’s this about?

While looking through some sample Flex apps, it occurred to me that it would be good to have a nicer way to document sample code. Having a bunch of comments in the code explaining conceptual stuff disrupts the readability of the code, while having a completely separate article walking through the app makes it so you have to keep bopping back and forth between the code and the article. So I hacked up this annotated code viewer.

This particular sample is obviously pretty simple if you already know Flex, but I thought it might be a good intro for people who are new to the platform, and you could imagine applying it to more complicated samples like FlexStore. If you know anyone who’s curious about Flex, feel free to forward this to them and see if it helps them understand what it’s about.

The code for the annotated viewer is hacky/ugly and not generalized yet, but I thought I’d put this out there to see if anyone would be interested in seeing more code samples annotated like this (or using it for their own code). If so, please let me know, and I’ll spend more time making a nice reusable version. And, of course, thoughts on how to improve it (either the viewer itself or the content/annotations within it) are welcome.

(By the way, there’s a known bug that if you scroll the code viewer, the annotations don’t scroll with it. I haven’t found a good workaround for this problem yet.)

Let me know what you think. Thanks!

(Update: I obscured my Flickr API key in the app and the source—thanks to my coworker Jono for pointing this out. You can get your own at http://www.flickr.com/services/api/keys/.)

Digg!digg this | del.icio.usdel.icio.us | 19 Comments

Somehow I missed the announcement, but the Flash Player 9 beta for Linux is now available on Adobe labs. If you’re a Linux user/developer, don’t forget that you can develop Flash applications today using the free Flex SDK, which runs on Linux.

I’m going to be at MAX in Las Vegas next week—I’m not speaking, but will be hanging out with the Flex folks (and hopefully playing some poker). If you see me there (my badge has my full name, “Narciso Jaramillo”), say hello!

Digg!digg this | del.icio.usdel.icio.us | No Comments

The Flex team has started posting some free components on the Adobe Flex Exchange. The first one up is an auto-completing text input component. I haven’t looked at it yet, but it looks like it works the same way as a normal TextInput, with the addition of a dataProvider property that you can set to give it the list of possible completions. You can also specify a custom filter function that lets you implement other kinds of matching against the completion list (the default is to find entries with the user’s typed string as a prefix). Check it out!

Digg!digg this | del.icio.usdel.icio.us | 3 Comments

Next Page »