Jetpack Compose: Rocketing in the right direction

Jetpack Compose Logo

Last week was Labweek at Comcast, one of the best traditions at Comcast, where developers and designers can take some time to pursue ideas, learn new technologies or just work with folks you don’t usually get to work with. Though every week can be labweek in my world working at Comcast Labs, I still enjoy working on something completely different from the projects-on-record for a week. You can read about a few of my previous labweek prototypes here.

For this labweek, I took the opportunity to build something with Jetpack Compose, Google’s new UI toolkit for building Android apps. In the last couple of years I have worked quite a bit with ReactJS, SwiftUI and a LOT with Flutter (read my thoughts on Flutter here) , and it was interesting to see how all of them were starting to adopt the same patterns. From the sessions at IO and conversations at the Philadelphia Google Developers’ Group that I help run, I knew Jetpack was also headed the same direction, but it took me building an app to realize how close that was.

Compose vs. SwiftUI

Compose feels the closest to SwiftUI, borrowing not only the ideas of light weight layout containers (Rows, Columns, etc) but also the use of Modifiers to manipulate the View …sorry…the Composable. Even the structure of a typical compose file with a function that defines your composable and another, annotated with a preview annotation, that lets you preview your layout is identical to the SwiftUI edit/preview experience. The similarity even extends to the documentation experience: check out the SwiftUI tutorial and the Compose tutorial page layouts with text on left that scrolls with the code on the right. Heck, even my bugs are similar in both frameworks πŸ˜‰

Compose vs. Flutter

While Flutter is similar to Compose, I do prefer Compose’s modifier approach to Flutter’s approach of composing behavior using a hierarchy of widgets, though the hot reload on a device/simulator that Flutter does is preferred to the preview experience on Compose, specially since previews cannot fetch live data from the cloud and my design was very remote image heavy.

I also find creating animations in Flutter a bit cumbersome, having to create AnimationControllers, TickerProviderMixins, Curves and callbacks. Jetpack Compose does seem to have enough complexity in their own system as well but I got a lot of mileage out of just using AnimatedVisibility with enter and exit animations, though SwiftUI with the `withAnimation` blocks is the clear winner here.

Flowchart describing the decision tree for choosing the appropriate animation API
Compose’s animation system isn’t lacking in complexity either

Random Lessons Learned

There were a couple of gotchas as I was building the app: For some functionality that I would consider core, like fetching remote images or making your app aware of things like WindowInsets, is only available as part of an external (Google authored) library called Accompanist. I had a bit of a hiccup because my version of that library wasn’t compatible with the version of Jetpack in my Android IDE. I do hope these capabilities get added to Jetpack Compose core instead of an external dependency that I’d have to track (I do prefer the batteries included approach). Also if you do plan to use the official samples as a starting point, note that some (or at least the one we were using) has a compiler instruction to fail on all warnings (that took like 2 hours to figure out)

Wrapping Up

A week of intense coding in compose gave me a lot of appreciation for this new direction for Android development. I was pleasantly surprised how productive I felt working on a completely custom Android UI. There is still a lot of features of Compose I haven’t tried out yet but am definitely looking forward to learning more. At this moment Compose is not officially out yet (the latest version is release candidate 1 that came out a few days ago), but I am sure Compose will enable some truly amazing UI experiences on Android in the next few months!

Emmy’d

Wow, my first Emmy,

Rather Comcast’s Emmy for “Outstanding Achievement in Engineering Development” for the iPad app I worked on for most of 2010. This one is my copy of it that now adorns the top shelf in my office.

Bonus points for being one of the first 3 engineers on the project!

You can find a more complete writeup on the award on the Comcast Voices blog. I haven’t been involved in that app since Jan 2011 and was recently informed that most of my code has finally been refactored out with newer/better implementations, but here’s hoping there is at least one dead code path that the team forgot about that compiles to the production app that still has my name on it πŸ˜‰

Comcast shows off 1Gbps Broadband /Filed under I-did-this ;)

Am only now catching up on all the online news around the Gigabit broadband demo that Comcast CEO Brian Roberts showed off last week at NCTA. If you haven’t seen it yet, check out the video below (the video seeks to the point when he starts showing the 1 Gig prototype, though before that is the probably-cooler next gen Comcast set-top Box experience):

The demo was the end product of a LOT of work by a lot of folks and it was great to see it work without a hitch at the end. The videos downloader client itself was my responsibility and was written in Java Swing.

Here are some other links from around the web about the demo:

Also check out the official post on the Comcast demos at NCTA.

PS: This is the second demo I have worked on for NCTA, with the XFinityTV iPad app prototype last year. Looks like I am a veteran now ;).

So Long CIM, Hello Comcast Innovation Labs

This post has been a little hard to write so I have been putting it off for the last few weeks.This week has been my last official week with Comcast Interactive Media, the group I have been with for the last 6 years. Its been a fantastic run, from back in Oct 2004 when I joined what was then the “Comcast Portal Engineering Team” straight out of grad school.

In the last few years I have worked with some fantastic people on products that have touched millions of users. I have had great managers throughout who have helped me grow and even experiment with what I’d like to focus on, which itself has gone from leading production applications like Comcast.net’s Flash portal and the flagship Fan product, to more recently looking into bringing technology innovations early in the product conception process within the CIM User Experience department.

But while building these products was awesome, I have always been more interested in emerging technologies often tangential to Comcast/CIM’s core business. I have also been pretty passionate about innovation within Comcast itself and even led a discussion about that at a previous BarcampPhilly event (the notes on which you can find here). It has always been challenging trying to be innovative and reactive to all the new stuff happening out there while building out products with well defined roadmaps (My former manager, friend and lead conspirator on foiling my entire office while I was on vacation Aaron Held even has a blog with that title πŸ™‚ ). Moving to the newly formed Comcast Innovation Labs with a mandate of looking at emerging technologies and products as potential areas for Comcast to grow in has me pretty excited.

Thankfully the transition only currently requires me to switch floors, moving from the 18th to the 35th, so all you CIM readers, swing by once in a while. You know I’ll be on CIM floors almost everyday ;). The engineering team still has the best coffee machine in all of Comcast Center.

P.S: Its weirdly nostalgic to look back at all the posts on this blog tagged CIM. Must. grab. tissue…

The grand 2010 recap post

Wow, cant believe its that time already.

2010 was a pretty great year for me. In Nov 2009 I moved to the User Experience team hoping to be the voice of technology as new projects were conceived and features enhanced. So the year began with me learning the workings of the UX team which was fascinating. The creative process is, not surprisingly, very different from the engineering one, and sitting in those sessions was ridiculously educational. CIM has some pretty fantastic Design and IA folks and I got to learn quite a bit on concepts such as Mental Models, Task oriented design, User Persona’s etc. I also ended up reading a few books on my new role (of which About Face might be the best one, and I recommend it strongly to anyone in the UX/UI domain) which I never would have done if I hadn’t moved to this team.

Suffice to say, if the year needed to be summarized in a word, it would be “educational” πŸ™‚

Around Feb, I also got involved in a prototype for the project that is now the Xfinity iPad app. As a UX prototyper, I was on the 3 people big prototype team that built the demo that was shown at the NCTA event. After that I ended up working with the brand new Advanced Engineering Team as we rushed to get the final product out of the door. My role in the team was not UX really, but implementation. After the initial learning curve of Objective C, I got pretty comfortable with it and actually realized that user interface frameworks and technologies are pretty similar even with syntactical differences. I wrote about the whole Xfinity App development experience here. In the last few months, I have returned to prototyping but these days they have all been functional additions to the iPad app itself.

While I didn’t write as much code for it as the iPad, I have also become extremely passionate about the Android platform. While less polished than its i-Cousin, the deeper I look into the architecture the more awesome it seems. I built a couple of apps for internal demos that ran on Android (in Java) and that was fun. I feel less proficient in the Android UI framework than in UIKit, just by virtue of time spent developing on it, but its something I hope to get better at next year. The Android world definitely lacks the sexy factor that is going on with the iDevices, and I am really hoping that changes both with upcoming OS updates and developer community maturity. I also played around with AIR for Android a little and it seems pretty decent. I am working on a project using that now. The biggest thing that has going for it is not just the familiarity of ActionScript but also the tooling of the Flash IDE. As much flak as it gets, the Flash IDE is rather fantastic for dropping visual assets for an app. I really wish AIR for Android played nicer with the core Android framework, though there are ways of doing that as mentioned in this post by Elad Erom.

EspressoReader, my AIR app for consuming news (currently as a Google Reader client) continues to evolve. Just building something like that has made me learn so much about the way we consume information. It has also gotten me hooked on books on collective intelligence and text analysis. I will release a new version in the coming weeks that I am really excited about. So if you haven’t tried the app out yet, give it a try by installing it from this link to the Adobe AIR Marketplace.

I ended up travelling for work quite a bit this year, attending some pretty fantastic conferences like the NCTA Cable Show, the Web 2.0 Summit and TechCrunch Disrupt. This is a change for me, as these were more about the business and strategy than my usual fare of tech conferences. From my schedule in Jan, looks like this will continue. Btw, I am heading over to CES so if you are heading there as well, send me a holler πŸ™‚

Finally, looking ahead, 2011 seems to be at a great start. There are a lot of changes afoot which I’d love to share soon. So stay tuned πŸ™‚

Xfinity TV App is finally in the App Store

Its pretty awesome when the project you have been working on for so long is finally released. Last week, the Xfinity TV App was finally available on the Apple App Store, and has been in the top 10 most downloaded apps for the iPad pretty much since then. The app is a free app and is pretty fantastic, turning your iPad, iPhone and iTouch into a virtual remote control for controlling your Comcast Xfinity Cable box.

If you haven’t used it yet, here is a video walkthrough of the app in all its glory:

Building the app was a huge learning experience for me. Before this project I knew very little about iOS and Objective C, but working with some of the smartest developers on the platform got me to learn iOS app development pretty fast. At this point, I have worked with so many UI technologies and frameworks that I was able to apply a lot of my learnings almost directly (with syntax differences of course). For example, one feature I was responsible for was the OnDemand listings view in the app. To implement the view that was supposed to show the thousands of assets available on Xfinity, I was able to implement a virtualized list that recycles item renderers to effectively manage memory. The api and implementation of my component was very influenced by the Flex and OpenPyro List control (I have previously discussed virtualized list implementation in ActionScript here).

Btw, I have to say, if you are just getting started with iOS, the Stanford University video series on iPhone app development is a great place to start.

The Team

IPad Dev Team

Building the app was quite a fantastic (even if extremely hectic) experience, but I have to say the best part was working with an awesome team. The app definitely had us working late nights on multiple occasions but thats a lot more manageable when you work with people you actually enjoy hanging around. The picture below is the app team but behind the scenes there was a huge number of engineers across the country that handled the network and set-top box updates that allowed the app to work.

The video below has Sean Brown (Sr Director of the Advanced Applications Engineering team) talk about the development process of the app. The video occasionally switches to the co-working space that is set up where Engineering, User Experience and QA teams work together.

The Response

… has been fantastic and thats amazingly gratifying. I have embedded some of the Tweets I just found doing a twitter search for “XFinity Remote”, and its awesome to see how people react to it:

//

For more formal reviews, check out some of the posts mentioned below:

As awesome as the app is, there is a lot more features that are being added to it now. Recently we demo-ed the PlayNow functionality thats being added to the app for an upcoming release at the Web 2.0 Summit. Embedded below Neil Smit, President of Comcast, giving a walkthrough of that version at the event:

If you want to keep up with app updates etc, feel free to follow XfinityTV App on Twitter. Also if you are an Android user (like I am) rest assured that the Android version is well on its way :).

Have you seen the XFinity Social Remote app?

I am a few days late posting about this, lets just say I have been catching up on sleep I had been deprived of for the last few weeks building this app. So in case you haven’t seen it yet, check out the video of the XFinity Social Remote, unveiled at the NCTA Cable Show Conference last week.

To read more about the app, see the official post on Comcast Voices on the app and its future.

More reviews:

Fantastic stuff πŸ™‚

Congratulations to the CIM CrossPlatform team: Comcast’s MyDVRManager gets Gizmodo’d

There is a lot of blood sweat and tears behind this product, but its pretty satisfying when you see how much people like it. CIM’s MyDVRManager application for remotely managing your DVR hit Gizmodo yesterday. The service is being rolled out in phases and a good way to check if you may have access to the application is if your on-screen guide has changed to look like the new one as in the video below:

RDVR was also the biggest JavaScript/HTML based RIA I worked on with Chris, Mat and Bonnie (note: I have since moved from being Software Engineer to User Experience Technologist position but the RDVR remains one of my main projects, now from a user experience prototypes point of view) and these guys have done an awesome job with the codebase. Some of the things we used there were:

  • JQuery
  • ScrewUnit for unit testing
  • LessCSS for CSS rules
  • An internally custom MVC framework that completely decouples UI from the business logic

So once again, congrats to the CIM CrossPlatform team (Design/IA/Dev/Product/PM and QA). Am anxiously waiting for the app to go live where I live so I can be as happy as this guy here (he is using the manager to manage his Comcast Tivo box, but its the last version of the client application with a different color scheme):

So long Engineering, hello User Experience

Today was my last day as Lead Software Engineer at Comcast Interactive Media (CIM), and tomorrow I start my new role as a User Experience Technologist / Principal Application Developer for CIM. Its been an awesome 5 years in engineering but its time to move to newer domains.

The decision to move to UX was definitely not something I just woke up to. I have always considered myself an engineer, and have a Masters in Computer Engineering to back that up. Heck, this blog is a testament to my love for programming. I love learning new technology, and am fascinated by programming concepts and domains. However for me programming is the means to an end. My end goal has always been to get ideas down to working apps and getting them out there in front of the huge user base Comcast has. That was the most gratifying part of working on different projects like the Fan, the Comcast.net portal and more recently microchannels within Comcast.net and Fancast.com.

A while back I wrote a post on the need for creative technologists, and that feeling is something that has steadily grown over the last couple of years. The new technologies are enabling a much richer experience for an end user but there is a lack of experience designers who investigate the new platforms. And these platforms are more than just pure technology, they include things Facebook, OpenSocial, Yahoo Homepage, etc. It is something I hope I can bring to the table in my new role. And just for effect, I will re-insert Grant Skinner’s Venn diagram on where UX fits in the engineering/design world:

UX

Thankfully it feels like the perfect time to be at this position. Off the shelf technology and instant on solutions like Google App Engine promise to reduce the temporal gap between ideation and functional prototypes. And with a strong initiative within CIM to encourage grassroots innovation, it seems like the perfect storm of awesomeness :). Personally this position also will help me grow in areas I have traditionally not dabbled in, be it more middleware/backend programming or business and finance. I am very thankful to CIM for enabling me to explore this direction.

I am a little emotional about no longer being called an Engineer, but hopefully I wont be an outcast from the engineering team, even if I do wear a beret and occasionally talk about shades of teal ;). This blog will still be called Code Zen, and I will continue to release open source libraries (the 0.6 release of OpenPyro is coming up btw), but I think now I can be a little less bashful about commenting about user experiences and methodologies. I will be learning a lot in the next few months and as always, will share it all here.

Color me excited πŸ˜‰ !

On Innovation in big companies

These notes are from BarcampPhilly ’08 that were lost in the depths of my computer’s hard disk and I only just found again. At the event, a few of us from CIM held a round table discussion on innovation, especially developer led innovation in big companies. Here are the points that people mentioned:

  • Innovation only comes from free cycles, even the best ideas need time to be thought through
  • Leverage something thats existing rather than a brand new idea
  • Agile development can actually hurt innovation with too much transparency. Its hard to justify something that you may feel has a long term win
  • Technical managers should whet the ideas of their team members
  • Innovation comes from bottom almost never from top
  • Innovation = Risk
  • True story: At AOL, the AOL IM service was declared a risk
  • Constraints actually push innovation
  • Innovation wont happen without proper incentives/rewards.
  • How about cross team innovation. How do designers/developers collaborate to innovate?

So this has only taken almost a year to put up, with BarcampPhilly ’09 coming up soon. Since then there has been a few opportunities within CIM to push bottom-up innovation, including a labweek for all of engineering.