review: TwelveSouth BookArc for iPad

I just received and started using TwelveSouth’s stand for the iPad, BookArc. In short, it looks really cool, which is an obvious selling point. In use though, at first I was a bit dismayed, as when the iPad sits up straight in the stand, it’s at a pretty awkward angle if you’re sitting at a desktop and trying to view the screen. It does have an alternate angle, though, but it took quite a bit of figgling with the stand to figure out how to get the iPad to sit in it properly. The slot for the iPad is a very soft rubber, so it’s definitely gentle on the iPad, however when you touch the screen (as per normal interactions with the device) the iPad shakes quite a bit…just a bit annoying. I had to make sure I touched the screen gently to minimize the shake. With a bluetooth keyboard and mouse (see this hack for getting the mouse to work) though this setup seems to have quite a lot of possibilities…
Oh, and if you just recently updated to iTunes 9.2 and found out that if you want to jailbreak your iPad you’re outta luck…here’s how to downgrade iTunes to a previous version.

Comments Off

An Open Letter to Oakley.com

Dear Oakley.com,

I spent many hours in the mall in Columbia, Maryland (http://www.themallincolumbia.com), this weekend, trying to buy a pair of prescription eyeglasses. I started with the Oakley store, where I picked out the frames I wanted. I had actually decided from your web site which frames I wanted, but the Oakley store didn’t carry those frames in the color I wanted – they said their selection was very limited because they didn’t sell the prescription frames very well. I soon found out why.

Once I decided on a pair they did have that I liked, they told me that I would have to take the frames to an authorized Oakley dealer, of which there were three in that mall. They said they were no longer allowed to send the frames in themselves to get the prescription filled (I had my prescription with me) because they had gotten in trouble for that, apparently something to do with not having a doctor in their store.

So then I went to Pearle Vision. At Pearle Vision, they wanted to sell me their lenses instead of sending the frames in to Oakley. When I insisted on Oakley lenses, they made a show of calling Oakley (I have my doubts as to whether or not they actually spoke with Oakley on the phone, for the reasons I will illustrate shortly), and then they informed me that for the frames I had chosen, my prescription index was too high. The sales person claimed that Oakley told him that the frames only supported up to a total power of 5. They said they could put their own lenses in, but Oakley would not put in lenses at that prescription.

So then I went back to the Oakley store and told them what happened at Pearle Vision. The gentleman who had helped me looked up the frames in your catalog and found that Oakley supported up to a total power of 7 on those frames, not 5 as Pearle Vision claimed. They suggested that I try the other two vendors in the mall, Lens Crafters and Sterling Optical. They suggested I go to Lens Crafters first, because ‘sterling optical had lost their trust’. When I asked why that was the case, they told me that Sterling Optical had ripped off many of their customers who ordered Oakley lenses, substituting their own lenses instead and reselling the Oakley lenses for additional profit.

So then I went to Lenscrafters, where I faced a similar situation as I had at Pearle Vision. Only this time the sales representative wouldn’t even call Oakley – he said they would not send the frames to Oakley because Oakley would not fulfill my prescription. He was eager to sell me Lenscrafters lenses in my Oakley frames, however. He quoted me a price which turned out to be much higher than the price if I had gotten genuine Oakley lenses.

Finally I went to Sterling Optical. I told the sales lady what had happened to me at the other stores and I asked to her to check her Oakley catalog and call Oakley to confirm whether they would fulfill my prescription. She did that and she said that Oakley would indeed fulfill my prescription. She calculated the total power of my prescription to be sure – and indeed it was under 7, which is the limit Oakley set for those frames. She then proceeded to write up my order, which came out to $408 JUST FOR THE LENSES. Now, luckily I had done a little homework – I did notice on your website that you advertise a single online retailer. Through that retailer (Sports Vision Bend), comparable Oakley lenses are $189 plus $60 for the anti-reflective coating. So, Sterling Optical wasn’t going to rip me off by keeping my Oakley lenses for themselves (the sales lady made a point of telling me that I could tell the lenses were genuine because of the Oakley logo on the lens), but instead they were going to rip me off by charging DOUBLE the price of my Oakley lenses.

Why didn’t I just buy my glasses from the online retailer to start with? Because they only offer ONE of your vast selection of half-rim frames. That’s right – after I spent the time browsing through your great selection of frames online, I found that NOBODY actually sells them. I can’t order them direct from Oakley, I can’t buy them from the Oakley store in the mall, and even if I do find an alternate frame I’m happy with in the Oakley store, I then have to go to another retailer who is supposed to be a partner with Oakley, only to find that they really just want to sell me their own lenses (which void the Oakley warranty of-course, cost more, and don’t have any of the great technological benefits of genuine Oakley lenses), to the point that they will lie and cheat about it. I honestly felt like I was shopping for a used car rather than for glasses – such a dirty feeling. The sales person at the Oakley store seemed to think what these other stores was doing was illegal and in violation of their agreements with Oakley.

Do you see something terribly wrong here? What’s the point of having a great selection of frames on your web site, if they aren’t actually available for purchase, either online or in a retail store anywhere? What’s the point of having ‘authorized dealers’ if those dealers don’t actually want to sell your product, and just want to use your name to pull a bait and switch scheme? You really ought to allow your customers to send you their eye prescriptions directly, and order directly from your web site. You certainly won’t be hurting your partnerships with these so-called dealers since they aren’t selling your lenses, anyway.

In the end, I bought my Oakley frames and lenses from the online retailer – but I REALLY wish they would bother to carry more of a selection of your frames. Furthermore, Sports Vision Bend seems like a really small operation – I mean come one, they don’t even have their own domain name!

UPDATE: Sports Vision Bend actually contacted me, they were extremely courteous and professional, and it turns out they do indeed have a much wider selection of lenses than I originally thought – they just could use some uxd / nav improvements on their web site. Here’s a link to their full Oakley selection. Furthermore, they offered to check if the Oakley lab had a specific color they didn’t list on their site, but was listed on Oakley’s site.

Comments Off

How not to frag your Flex Team (or ‘How to prevent . actionScriptProperties and other files from getting checked into SVN)

The situation: you wake up one morning and update your flash builder project, only to get an error message saying there is a conflict in .actionScriptProperties. Images of the rap video Who Broke the Build suddenly rise up out of you memory…before you throw that keyboard through that nice 30″ Cinema display, take a deep breath and read on. It’s not as bad as you think. In fact, you could have prevented this from happening in the first place, but now that it’s happened, you can fix it so it doesn’t happen again.

Assumptions / Background:
-you’re using Subversion (SVN) for version control
-you’re using Flash Builder (same applies for Flex Builder, but this tutorial is specific to Flash Builder) with the Subclipse plugin

Sometimes you want to tell svn not to update or commit certain files in your local project, such as .project, so you don’t have to remember not to check them in when you do a check-in at root level. You could try telling your team to just not check those files in, but not only is that a pain to remember to do, but most likely in the end they will wind up getting checked in, anyway. The common solution to this is to use svn:ignore, which tells svn to ignore those files and not check them in. To get to that option normally would be easy – just right-click on the file or directory in Flash Builder and choose Team->Add to svn:ignore. However, most likely if you are trying to ignore files or directories that start with a dot ‘.’ then you aren’t seeing them in Flash Builder at all, are you? The dot is the naming syntax for hidden files in unix/linux, and Flash Builder / Eclipse respects this. OK, so to see the files within Flash Builder, first of all, switch from the Package Explorer (new to Flash Builder) to the Navigator (more like what we were used to in Flex 3 and prior):
getting to the navigator window in Flash Builderselecting the navigator window in Flash BuilderNavigate to Window->Other Views and then select the Navigator. Now you should see your project by the file structure rather than package structure. Next, select the drop down menu from within the Navigator and choose Filters, and uncheck whatever types of files you want to see.Filters option in the Navigatorviewing hidden files in the navigator

OK, so now you see the file you want to ignore…but if the file was already added to svn, that option to svn:ignore it is grayed out.

When a file has been added to svn already, the option to ignore it is disabled


Now what? This part is a little more tricky (I found the solution for this next part here):

1. Delete the file from the repository (make a backup first!)
2. Recreate it in Eclipse
3. Set svn:ignore on it via Team->Add to svn:ignore

Hopefully now you’re good to go, and your Flex team is still alive and breathing! ;)

Capital Flash Camp 2010 : A brief recap

I attended Flash Camp in DC today and though I would share my initial impressions, given that we were at 360 Flex not too long ago and a lot of attention is being given to the upcoming Flash & the City conference coming up in NYC soon. First off, I will admit my motivations for attending were (a) because it was local to us and (b) because our User Experience Designer, @adnaanahmad was presenting on Catalyst. If reason (a) were the only reason, I might have gotten lazy and not gone at all, but reason (b) was enough to mandate my attendance. Anyway, three main areas caught my attention regarding Capital Flash Camp: the speakers/presentations, the conference / organization itself, and the food. You might think that the first area, the speakers / presentations, should be the sole focus, but I guess, the same way you notice bad design because it hinders you, but you don’t notice good design because it’s doing its job, also these satellite issues contribute or detract from an event such as this.

Conference / Organization
What, no name tag?
I guess this is an area where stuff I had been taking for granted, from my experiences at MAX, and now 360 Flex, kind of stood out. We might tend to think of name tags as a bother, but part of the reason we attend conferences is to network. There seemed to have been no thought given to the networking aspect at all at Capital Flash Camp. Don’t get me wrong, we don’t need fancy lanyards and stuff – a simple sticker you write your own name on would have been sufficient. Then again, I guess that forces folks to try and open their mouths and actually ask each others names…not such a bad thing, eh? So, was this an oversight or actually a clever, well designed ploy to encourage folks to get out of the closet and actually develop social skills? Either way, it did get my attention.

There was also no swag…not at the registration desk, anyway…kind of a disappointment. I don’t count Adobe pens and stickers left over from 360 Flex as swag, sorry…aren’t conference shirts a defacto standard?

Attendance wise, I was actually pretty disappointed. The conference was held in a relatively small area, with all the talks being held in a single, small auditorium with a huge curved screen. However, the number of attendees might have made the place look vast. There were maybe only fifty attendees in the beginning, and for some reason as the conference progressed that number continuously dwindled. I left early myself, with two sessions and the giveaways still pending, but at that time there might have only been twenty or so folks left.

Speakers / Presentations

I walked into the conference in the middle of @jefftapper ‘s presentation Flex 4 for Flex 3 Developers. Jeff’s presentation was excellent, and I definitely plan to go download his lecture notes since we are at the beginnings of a flex 3 -> flex 4 migration, ourselves. Of particular interest is the list of mx components that were not ported to the spark space at all, such as DataGrid and ViewStack. One of the first questions I posed on twitter as we started migrating our code to the spark space was, ‘are we supposed to mix mx and spark components by design?’ I got a bunch of tweets in response referring either to custom components folks had built in the spark space or on how to mix mx and spark components. Jeff’s response was that he felt that Adobe hadn’t done this themselves yet due to time constraints. Ah…

Next up was @queencodemonkey on Greenthreading in Flex. I already saw her presentation at 360 Flex, but as I told her, it was one of the best presentations I had attended, with regards to stuff I was able to take back to my team and say, ‘hey, this is something we should look into with regards to what we’re currently doing’. So it was enjoyable to see it again, and a good review of the concepts and applications. I also made a note to go and read an article she referred to by @ jesterxl on loading massive amounts of data in the Flash player, and they both were kind enough to tweet the link to the article.

Next was The Art of Storytelling by @christiansaylor. It was a nice change of pace from the technical presentations, and indeed, he is a great story teller himself. I kept thinking that his presentation style was highly reminiscent of Steve Jobs, and when one of his slides was a huge photo of The Evil One (as one audience member called out, lol) it pretty much cinched it in my mind that was a source of influence for him. In a good way…

Christian also convinced me to take a closer look at Audi…

Towards the middle to end of the presentation, I kind of felt like it was tending towards a sales plug for Universal mind, but then again, they sponsored and organized the event, half the speakers were from their company – so what could you expect? In the least, at least this presentation was pertinent and well done, unlike the eBay sponsor presentation at 360 Flex, which had me wondering if anyone, really, ANYONE in the entire audience cared an iota about what the speaker had to say or if what he spoke on had anything at all to do with real business problems faced by anyone in the audience.

next was lunch…

The Food
What can I say, without getting too insulting? Meh. Not a highlight of the conference. At 360 Flex, they had good food, but it would run out before you could actually get any. For some reason, I found that more appealing than food you got but didn’t find appetizing.

More Great Speakers
@carlsmith spoke on the importance of listening to your audience in It’s a Matter of Trust. Frankly this was by far the most entertaining session, hands down. The volume and amount of laughter in the audience was a clear indication of that. He brought up twitter a lot in examples of customers complaining about the service of companies, and the successes and failures of companies leveraging twitter to satisfy customers. The bottom line of his presentation: treat your audience as people, not as statistics.

The last session I attended before ditching was Introduction to Flash Catalyst by @adnaanahmad. Adnaan’s presentation was great, especially considering it was his first conference presentation, ever. I think the audience was hungry for more on his demo side; the background info etc. is all good and well, but that’s stuff folks can read about later or have already done so, the demo is what really engaged us. He also made a pretty good case considering there was only one designer left in the audience at that point and the rest were developers.

You can find a small slideshow of the photos I took at the conference here.

in review: ‘Crush It!’ by @garyvee

If you’re already on top of social media, using LinkedIn, twitter, Flickr, blogging, etc., and if you already have a terrific work ethic and do what you love, this book has absolutely nothing to offer you. Well, Gary is an engaging speaker, so maybe it will keep you awake during rush hour if you get the audio book, but I’m sure you could spend your money on something more engaging for the price. Gary is a bit rough around the edges, I can’t see value in this as a print book as compared to the audio book which is read by him, and his strength is clearly as a speaker and not as a writer. I would recommend this book to those of my friends who I know don’t quite understand the social media scene or who might need a little motivation. If you watch some of the free videos online of Gary speaking you will get a pretty good idea what this book is about and what it has to offer – its not much different from his keynote speeches.

Flex 3 Word Wrapping Does Work Afterall

Turns out that word wrapping in Flex 3 datagrids does work after all.  After adding wordWrap=”true” to Flex 3 datagrid columns to no effect and much fustration I came across this solution/explanation by Bruce Phillips.  In short, you need to add the parameter variableRowHeight=”true” as a property of your Datagrid.  For a more detailed explanition be sure to read the full article on Bruce’s blog.

Comments Off

Two-way Data Binding in Flex 4

In Flex 3 we created a data binding expression using curly braces, like so:

<TextInput label="textInput1" />
<TextInput label="textInput2" text="{textInput1.text}" />

In Flex 3 if you wanted to make the binding two-way, you had to make a second binding expression. However, in Flex 4 you can just add an @ sign to the binding expression to make it two-way, like this:

<s:TextInput label="textInput1" />
<s:TextInput label="textInput2" text="@{textInput1.text}" />

Comments Off

would the REAL iPhone killer please stand up?

Certain defenders of Apple’s stance on excluding the Flash platform from Mobile Safari, such as Daring Fireball have been trying to flip the argument, saying that Flash is an outdated technology, the concept of browser plugins is outdated, and that HTML 5 has all but deprecated any need for Flash. They also argue that the only use for Flash is for playing silly games that would be better rendered as native applications, anyway (obviously they have never heard of Rich Internet Applications).

By now Adobe has announced Flash Player 10.1 and Adobe AIR for Android at the Mobile World Congress (funny, we just completed a web redesign for a client who is a sponsor of MWC, centered around the event, but I had no idea about Adobe’s role there). This demo of using Adobe Connect on the Droid by Kevin Hoyt says something totally contrary.

Here we have a real business case scenario that Mobile Safari can’t compete with. Sure, maybe they will make something comparable to the iChat capability of screen sharing available on iPhone one day, but here it is, Adobe Connect, running on a Droid, now.

Personally, I have always been of the opinion that Apple will allow Flash on their mobile devices when, and only when, it will make them more money. Currently they have pretty tight control (jail-breaking aside) over what can be run on their devices, and all money to be made from application development flows through Apple’s iTunes store. Would having AIR on the iPhone totally upset that? Of course. Until, and unless, Apple perceives they are losing economic ground due to competing platforms, they aren’t going to change their stance.

Overall, I think Apple’s stance is actually very healthy for the market. It has driven Adobe to work really hard to improve the full version of the Flash player (as opposed to Flash Lite), which is great for developers who don’t want to have to develop a separate code base just to support their applications in the mobile world (having to revert to ActionScript 2, which is pretty much a different language altogether, when you have been living in the AS3 world, is uninviting to say the least). By improving Flash, they have made it more viable for running on mobile devices as well as for application development. It has also given an opening to every other maker of mobile devices to step up to the plate and compete with Apple by offering what Apple doesn’t, on their devices.

I think Steve Job’s demo at the January unveiling of iPad said it all…throughout the demo, he kept hitting those blue lego boxes due to lack of Flash support, and you can hear the audience laughing out loud every time. I couldn’t resist putting together a few screen shots.

Web to Print: Client Side PDF Generation from Adobe Flex / AS3

Generally when the question of PDF generation from Adobe Flex applications comes up, the defacto answer has been ‘use LiveCycle’ or some other server-side technology to handle the PDF generation. But sometimes we don’t have the option of using a server-side solution for PDF generation. There was a very interesting discussion thread on LinkedIn, recently, concerning web to print PDF generation. While the original question wasn’t looking for a client-side PDF generation solution, a lot of links to various APIs for client side PDF generation were posted, including one from Sephiroth, who happened to also write my favorite ActionScript editor prior to the advent of Flex 2.0 (speaking of which, writing ActionScript in the built-in editor in the latest version of the Flash IDE is still SO BAD, I wish Adobe would just buy SE|PY and integrate it with with Flash IDE).

So here’s a list of some solutions for client-side PDF generation from AS3:

  • purePDF – a port of the Java iText library – this seemed like the most robust solution out there
  • ALIVEPDF – ported from the FPDF PHP project. Interestingly, ALIVEPDF was used in Balsamiq Mockups, which we reviewed here
  • LIBHARU AS3 – ported from LibHaru
  • Comments Off

    A new level of Bokeh in film/video…nice application of the Canon 5D MkII

    When I first started watching this video, my immediate thought on seeing the head shots of the little girl were,

    ‘what lens is that?!? It looks like the 50mm 1.2 L series on my 5D, only this is video I’m watching!’ (I might be wrong about the lens, but yeah, that is seriously what went through my head)

    Hannah & Leonard

    Hannah & Leonard

    Sure enough, on the right margin of the web page, it says ‘production tools: Canon 5D MkII, Adobe After Effects’

    This has GOT to change the playing field in the flim industry.

    Comments Off