So I am co-manager of the Philadelphia Flex User Group

…or rather as of a month or so ago. Still it felt worthy of a blogpost if nothing else to mark this date (/month) for posterity. I will be working with Derek Wischusen who has been doing an amazing job so far organizing local meetups. If you are in Philadelphia and interested in Flex, I would love to get to know you better and welcome your suggestions on making the group truly kick@$$.

The timing has been perfect, with Flex 4 on the horizon that seems really cool. In fact on the 24th of June, Adam Lehman from Adobe will be coming down to talk about Flex 4 and Coldfusion NEXT (details for the event can be found at the Philadelphia Flash Platform Group page on Adobe User Groups portal. Going forward we are hoping to coordinate even more events with the Philadelphia Flash Platform Adobe User Group as Flash and Flex come together.

If you have any suggestions on content, agendas and such for group activities, do join the conversation on our Google group. And if you are a local Flash or Flex developer who’s on Twitter, do drop me a comment here with your Twitter id (mine is @arpit).

My experience with Git and why I think Open Source projects should be released on Git

Over the last couple of years I have released a bunch of libraries under Open Source licenses, usually on Google code. However the my last project, OpenPyro was a little different and was released on GitHub with Git as the Version Control System. I write this as a developer with more experience and comfort using Subversion and yet encourage you to release your open source projects on Git.

So what is Git? The one line description (from Wikipedia) is “Git is a distributed version control system, born with the fundamental mechanisms making branching and merging really easy.” A detailed description of Git is beyond this post but the Wikipedia page is a good place to start.

Releasing OpenPyro on Git was not an easy decision to make. The project represents a lot of work on my part and I am nowhere near as comfortable yet with Git as I was with SVN. I definitely did not want an unfamiliar Version Control System deter possible contributors to the project. However the fundamental philosophy of Git was what finally won me over.

The Git workflow is kind of new (at least to me). A developer working on a project begins by forking the core repository. He can commit code to his fork at his whim and needs to keep merging from the original branch to get the latest updates from there. Its up to him to merge changes from the core repository as they happen. People working on different forks merge changes from each other as they see fit (if you are working in a non-distributed environment, you can all merge off of a source of truth repo)

Forking basically allows the project to achieve velocities greater than the initiator of the project. If tomorrow I stop working on OpenPyro, there could be a fork that has developers more committed than I could be. Why should OpenPyro stall just cause the original developer may have.

As of right now OpenPyro has been forked a couple of times. The first fork was for a Haxe port and this was before OpenPyro was on GitHub so it wont show up on the network graph on Github. The second fork was by Kelvin Luck who fixed a few bugs on his branch and is adding new functionality there. However he didnt have to wait for me to commit his changes into OpenPyro head. I merged his changes into the OpenPyro head much later. And now the OpenPyro history shows his additions to the project as official commits.

The diagram below shows the state of the repository as it got branched and merged at different times.

OpenPyro Git Graph

This kind of collaboration wasnt possible with SVN, something I realized while working on LogBook. I would get patches for bugs on the project, sometimes feature updates I didn’t much care about. But it was up to me to add those in, and sometimes time pressures made me miss commiting some features forcing the developer on the other side to wait with probably changes local to his machine.

I have been on the receiving side of that as well and I am sure you have as well. How many times have you looked at an open source project that seems to fit the bill for what you are working for but comes up slightly short. What do you do then ? Do you fork it? Without commit access to the core repository that the original author is maintaining, you cannot branch the project. All you can do is export all the files and recommit them into a new repository that you control. But now you have lost the project history (plus something about this approach just smells wrong, with very little attribution on the “forked” repository to the main project).

There are other features that are great in Git. Offline commits is another great feature that I use quite a bit. A more detailed comparison against SVN can be found here

Whether this paradigm works as well within teams working together, I am not sure. At work we continue to use SVN right now and I am not sure if we plan to move off it anytime soon, But if you are a developer releasing code under open source, I strongly encourage you to try Git. In the meanwhile here are some resources that you could find useful. Linus Torvald’s talk at Google is a good place to start understanding Git philosophically.

Git Manual
GitCasts: Videos on using Git
Getting Started with Git docs on OpenPyro

OpenPyro 0.4 released !

I am excited to announce the first official dot release (0.4) of OpenPyro, the open source UI framework I have been working on (on and off) for the last few months. All the information including source code, samples and documentation can be found at OpenPyro.org. I would love to hear some feedback as well. I am really hoping for this to be community powered and would love to integrate or help integrate more features into the framework, so if you are interested in the project and would like to collaborate, please feel free to contact me via blog comments, Twitter (http://twitter.com/arpit) or via the OpenPyro mailing list. And definitely take a look at the OpenPyro Wiki, which has a bunch of examples, samples and some concepts explained.

The biggest feature in 0.4 is the measurement and layout system that is pretty similar to Flex that I love and a fairly decent component set. Because all OpenPyro components use composition rather than inheritance, I am really hoping to build something very Flex4-esque but keeping filesize . Am also hoping to keep the core library pretty small and create a comprehensive library of functionality using plugins, basically libraries whose functionality depends on OpenPyro but not the other way around. For a full set of development themes check out the section here on the wiki.

I have been writing about OpenPyro on this blog for the last few months as well, all those posts can be found here

Hopefully this can grow into a body of code that the community finds useful.

Flex Builder Tip: Use SWCs for image assets, not Embed metatags for pure Actionscript Projects

I have been using Flex Builder for a while now as my main Actionscript IDE for both Flex and Actionscript projects. Of course in the latter, I have been very sensitive to not using even an iota of the Fx library. However traditionally I had always used the [Embed] metatag to embed graphic symbols into my Swfs. What I did not realize was that the Embed tag brought in Flex code into my project. I only discovered that as I was getting a build of OpenPyro ready for a release (its going to be 0.4, isnt out yet, but probably early next week).

I was trying to build the OpenPyro swc that users could be imported into projects. However running the compc command resulted in the following error screen:

Compc Error

Apparently, using the Embed metatag was causing the graphic to be imported but then converted to an instance of the Flex SpriteAsset class. WTF, this was definitely not what I wanted. Googling (at 2 am, so I may not have used the best queries) did not bring in any meaningful results. However a friend of mine recently switched from Flex Builder to FDT and I remembered him showing me how he did it, so here are the steps:

1) Create MovieClip symbols in the Fla and export them for Runtime Sharing with appropriate class names.
2) Generate the SWC from the Fla
3) Place the SWC in the classpath of the Actionscript project.
4) Use the exported symbol’s class name to reference the graphic symbol

So this worked. I was pretty aware that the Bindable tag was Flex specific but I didnt know that Embed tag did as well. Adobe really needs to differentiate the Flex specific metatags like Bindable and Embed with the pure AS3 ones like Event. My one big complaint with Flex Builder was that it never complained considering I was in a pure Actionscript project.

I hope Gumbo fixes this.

Why Facebook’s new changes don’t feel like the death of Twitter

I had a pretty interested conversation with JPToto yesterday, on Facebook no less, on Facebook’s new features and their impact on Twitter. JP posted his thoughts on the coming twit-pocalypse on his blog today. I am posting my conversation with JP below. However the very fact that I cant actually link to it is the main reason I am less of the opinion that Facebook can devour Twitter completely.

fbConversation

Twitter is definitely a fascinating beast ( and being a twittaholic, my opinions here may be biased. Follow me on http://twitter.com/arpit). People use it in very different ways. I definitely use it to keep tabs on my close friends and share a link every once in a while. In that respect, yes I dont care if I get that information from Facebook or Twitter.

However the real value I get out of twitter is a cursory connection with the people who I have the highest admiration for, the big names in Flash, Flex, Silverlight, Java world, guys who are running companies I respect or have opinions I think are valid. The connection isn’t always two way. I follow more people whom I dont know personally than those I do. Twitter is now my main source of personalized news and I dont see Facebook becoming that.

And what about services getting on Twitter that are really useful. The utilitarian awesomeness of things like @comcastcares is just hard to translate to Facebook metaphors.

The Facebook redesign is interesting, though I wonder if they were completely influenced my the more vocal but smaller fraction of their user base. My friends who aren’t into Twitter dont like the design much but they’ll learn to live with it. It may make them more active over the next few years (maybe) but I dont see it changing the way people who have invested time on building a group on Twitter leaving it for Facebook, unless they change their entire security system allowing follows with limited privileges.

Whats really going to start getting annoying to me is the fragmentation of conversation again (its already a headache if you are trying to follow blog comments/conversations). My status update will now be duplicated as will my friends’ and I have no idea where to respond for whom, and lack of the reply API on Facebook’s apis makes it even more irritating.

It will be interesting to see how it goes but I am not giving up my Twitter profile anytime soon.

On Technology, User Experience and the need for Creative Technologists

Of late I have been involved in a lot of conversations around user experience, especially since the last few months the sessions at the RefreshPhilly group that I am involved in have had quite a number of speakers on that topic. Speakers on UX usually come from a design background which isn’t surprising. The opinion I sometimes find prevalent and which I strongly disagree with though is that user experience is solely a design concern.

A while back, after a rather frustrating day with Javascript, trying (unsuccessfully) to create a rather simple transition effect that would orient the user to a change in state of the application, I vented on twitter on the choice of Javascript for the application given Flash’s general penetration. My main gripe was that while the application would be functional in Javascript, Flash would let me do really interesting transitions and effects, adding a layer of richness to the application. Remember this was an application that didnt have any SEO requirement and the application in that design would be completely unusable from a hand held device (the wont work for iphone argument carries a lot of weight these days).

A friend of mine (whom I hope doesn’t mind being cited here 😉 ) from the creative side of the biz responded:
twitter-message

This is what I feel is one of the biggest misconceptions in our industry. Recently, Grant Skinner, one of my favorite Flash developers, gave a talk at the FITC Amsterdam conference. Though I didn’t attend the conference, I did browse his presentation online. One of his slides had the diagram shown below.

UX

That pretty much hit the nail right on the head. And thats exactly my take on it. I think technology has a huge contribution to user experience. However traditionally that has not really been recognized as much.

The need for Creative Technologists:

I think there is a real need for the Creative Technologist. As technologists we understand whats possible with the current and the cutting edge technologies, which enables us to truly understand the problem statement. More so now when online landscape includes more than just technologies like Java, Flash, etc. What do the new platforms like Facebook, Yahoo Open, OpenID bring to the table? Look at how the labs features in GMail improve user experience.

Gmail Labs

How about browser extensions like Gears that could let enhance the user experience by letting them take your online content offline for reading later or BrowserPlus that could literally allow you to trigger the speech command on the local operating system and have it read out the content text for him.

And the opinion is not mine alone. Another great read is the article by Dan Harrelson from Adaptive Path (you know, the company that coined the term AJAX) on “What Makes a Design Technologist?” The 4 points he mentions for a creative technologist are:

1. A comfort level with front-end programming (web, desktop, mobile, device)
2. A tool belt filled with techniques for creating interactive apps
3. The ability to quickly pick up new tools
4. A itch to dive into code and “just built it”

And Creative Technologists have started becoming less rare to find on the web. Another article I recently read on the Read Write Web blog was on the fantastic Enjoysthin.gs application built by Ted Roden who is now employed by NYTimes as a Creative Technologist.

While Creative Technologist is still not a title that gets any results in Monster.com, I wonder if that’ll change soon.

RefreshPhilly March event is tomorrow!

Its that time of the month again! RefreshPhilly’s March session in tomorrow with sessions from the Luke Crawford, the CTO of Muxtape as well as by Todd Warfel from MessageFirst on Sketching and Rapid Iterative Design.

If you havent done so, do RSVP on the Facebook event page (we need the names for security passes for the building).

And in related news, Roz recently got interviewed by Technically Speaking on Refresh Philly. Great going Roz! Oh and I am totally stealing Rob Francis‘s badge for the event:

OpenPyro now being ported to Haxe. Can you help ?

Its really awesome to see community interest in OpenPyro, the Flex-lite framework that I have been working on for the last few months. The latest news on that front is an effort to port OpenPyro to HaXe, an open source programming language that can be compiled to a variety of languages like Flash, Javascript, PHP etc by Don-Duong Quach. Don evaluated OpenPyro and has started a Git repository on the porting effort. He was even able to compile a previous example I had built with OpenPyro to a Haxe version which you can find here.

Its really exciting to see this work. My own knowledge of Haxe is minimal so I can’t be as helpful as I would like to be, but if there are other HaXe developers out there, your help in the effort would be really appreciated. The conversation around the port is happening at the OpenPyro mailing list.

In other news, OpenPyro finally has an official home at OpenPyro.org. I am going to start posting architecture documents and examples there. The latest can be found at the OpenPyro wiki and the OpenPyro asdocs page.

An app for myself: Facebook EventSync

Off late I have become pretty involved in a local (Philadelphia) user group called RefreshPhilly. The group meets the first Monday of every month and hosts a couple of talks by some local new-media professionals, designers or developers. The event is hosted at the new Comcast building where I work.
However like a lot of big corporate buildings, the Comcast building only allows registered guests into the building. This meant that all attendees had to be registered with building security to allow them to enter. Since our attendee list often reaches 100 odd people, I needed to get the names to security in chunks, so that I didnt have to get all of them at the last second. Unfortunately the Facebook events page only shows the total number of people who have confirmed their attendence. What I really needed was “How many new people have confirmed since the last time I looked”. So I whipped this little app that uses the Facebook API to take snapshots of the attendee lists from any Facebook event (using a valid event id) at any time and show the number of new people who have confirmed attending or maybe attending status by comparing the snapshot to the previous snapshot saved on a local file.

Facebook Event Sync

I am almost sure this app will only ever have one user (me) but hey, if you ever need it, you can download it from here. Feel free to comment if you would like to see any additional functionality here, or if you have an idea for this being a more practical app 🙂