Author Archive for Steve

Adobe Photoshop Scripting

I’ve used Adobe Photoshop for a while now and never really progressed beyond the basics.  That is, until recently, when faced with the challenge of putting together a collage image for an Enterprise Search presentation that I’m working on.  The idea for the image was not mine.  I saw the document icon collage idea when researching online material.  Of course, I sought to acquire an acceptable copy of the image but, to no avail.  So, I designed my own, shown here:

document_icon_collage_med

Clearly, with very basic Photoshop skills in hand, the prospect of inserting and aligning different sized document icons, in random order, was daunting to say the least.  And, even worse would be the prospect of having to redo the layout if either the results were crap, or different icons or icon arrangements were needed.  One could easily end up going blind and getting carpel tunnel syndrome.

Automation was needed and this is where Adobe’s ExtendScript Toolkit saved the day.  The toolkit provides a scripting editor where you can write ExtendScript to manipulate and build a Photoshop image.  ExtendScript is Adobe’s extended implementation of JavaScript, so anyone familiar with JavaScript will have no problems writing ExtendScript.

So, putting my geek hat on, and with the ExtendScript Toolkit to hand, my high-level approach was as follows:

  1. Create two different sized sets of icons.  Each set stored in their own folder.
  2. Create the framework image which contains the effects layers (e.g. shading, shadowing, etc) and separate layers for the icons: small icons collage, large icons collage, and the spotlighted icon.
  3. Write an ExtendScript function to open the icon image files and randomly copy each icon image (from the “pool” of opened icon images) into the icon layer in aligned rows, repeating until the entire image is covered.  The function would be run for each icon collage layer.
  4. Manually add in the spotlighted icon as an “illuminated search hit”.

Now, I have script that I can reuse to build alternative icon collages or build other type of collages.  The script has literally saved me hours and hours of work.

Maybe there’s way of easily achieving the same thing without resorting to scripting?  If so, please let me know.

Get in touch if you’re interested in more details about the script implementation.

Technorati Logo , , , ,

Growth at the Expense of Brand Value

On the subject of coffee parlours, today I read a great diagnosis of the growth-induced erosion of Starbucks’ brand value and, consequentially, the erosion of their growth.  Clearly Starbucks have lessons to learn about balancing growth with brand, but they certainly aren’t new lessons.  What happened?  Read John Quelch’s article “How Starbucks’ Growth Destroyed Brand Value” to find out.  Allen Roberts posted a comment that nicely sums up the value of the brand:

This maintenance of the integrity of the brand as THE vital component of the value proposition to the consumer is basic marketing 101. Starbucks when they started knew this, and practised this as if their life depended on it, as it did!  However, it is the easiest thing to compromise when the driver becomes numbers, and short term financials, as tends to happen after an IPO, as brand integrity and the relationship consumers have with a brand is not easily quantifiable, so is less visible, easily ignored by (often) new management under the pump for results who have not “lived” the brand.

Technorati Logo , ,

The Last Mile

I like the coffee from Take 5 Cafe. Beats Starbucks hands down.  I mean, when all that the Starbucks “barista” has to do is press a button to brew a shot … well, I’m sure Starbucks was aiming for infallible consistency while maximizing throughput but they lost the plot when it comes to the ceremony and “romance” of the coffee shop.  Starbucks CEO Howard Schultz admitted as much in a leaked memo:

…when we went to automatic espresso machines, we solved a major problem in terms of speed of service and efficiency.  At the same time, we overlooked the fact that we would remove much of the romance and theatre that was in play with the use of the La Marzocca machines.  This specific decision became even more damaging when the height of the machines, which are now in thousands of stores, blocked the visual sight line the customer previously had to watch the drink being made, and for the intimate experience with the barista.

The romance and theatre of a serious coffee parlour are core ingredients of the business, not last mile ingredients and Take 5 have got it right compared to Starbucks.  A beautifully crafted espresso machine, a delight to behold, is used by the barista (occasionally a delight to behold) to brew espresso shots.  The sounds of the production are classic espresso machines sounds.  Coffee aromas are untrapped in their portafilters.  European styling. Granite countertops to receive the coffee product.  We have theatre. Delivered, finally, is your coffee order and we’re now at the last mile stage.  To prevent the heat of the coffee from burning your hand and pissing you off so much you decide to sue because, ummmmm, you were never properly taught thermodynamics in high school, a sleeve is used to give you a comfortable, cool, area to hold the cup. Yep, the sleeve is one of those “last mile” items.  Take 5 have screwed up at the last mile by using an ugly plastic sleeve that feels like you’ve grabbed hold of a squid.

plastic_sleeve1

So, it looks and feels like crap.  Does Take 5 really want to have their carefully designed, eye pleasing, coffee cup adorned with such a sleeve?  What are they saving per sleeve over the cardboard variety?  0.5 cents?  1 cent?  Yes, it must be about money because I can’t believe the Take 5 management would vote for the plastic sleeve over the cardboard sleeve if the costs were the same.  Or, maybe I’m wrong, and the plastic crap keeps the heat at bay better than the cardboard sleeves?  If so, then give me the heat.

Headline news: “The Sleeve That Sunk Take 5 Cafe”.  Not going to happen and that’s not what my herniated sleeve yarn is implying.  But, no doubt, businesses loose custom beyond a sustainable level (i.e. they fail) because they’ve overlooked or ignored last mile aspects.

I’m a details guy.  It’s the nature of my job in Information Technology. So “last mile” stuff is always on my radar and I’m continually miffed at how many people and companies don’t understand the importance of hitting the ball out of the park for those last mile items.  Tom Peters wrote a book called “The Pursuit of WOW!” in which he explains how important it is for businesses to have pleasant, clean bathrooms.  If memory serves, I believe he solidly drove home the point that you’re an idiot if you neglect your washrooms as a business owner in a competitive marketplace.  You establish your business, plan your brand, build your brand, take care of all the core pieces, cut the ribbon, unveil the business …. and the “last mile” toilets, well, go down the toilet.  Sure, a majority of new business starts don’t build hole-in-the-ground toilets; unless you’re starting a business in France or China.  But there’s still a noticeable number of establishments that screw up either right out of the gate, or through neglect over time.

Speaking of washrooms, one of the premier examples of a business hitting it out of the park for their washrooms is Cactus Club Cafe.  Talk about the pursuit of toilet WOW.  The washrooms at the Cactus Club on the corner of Broadway and Ash are fantastic. Immaculate, spacious, beautifully designed and decorated, a leather couch, etc … basically a posh studio apartment with modern decor.  People talk about the Cactus Club washrooms as part of the Cactus Club experience; they add value to the Cactus Club brand. Flush with style.

What aspects of your business operate in the last mile zone AND could serve as differentiators in a competitive marketplace?  Find out, focus on them, and improve.

Technorati Logo , , ,

MSIL Foray

Recently I took a dive into the world of Microsoft Intermediate Language (MSIL).  Why? I didn’t yet have the source code for an assembly I was referencing and I needed to remove a date validation constraint that was affecting the solution.  This is how I resolved the situation:

  • Disassembled the assembly into Microsoft Intermediate Language (IL) using the Microsoft IL Disassembler (ildasm.exe) located in “C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin”.
  • Edited the MSIL file and updated the date validation code to pass validation.
  • Assembled the IL back into an assembly using the Microsoft IL Assembler (ilasm.exe) located in “C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322″.

Pretty straight forward except for having to learn some MSIL.  Oh, and there was also the effort required to identify the area of code in question.  To cut that story short, I’ll simply say that I pinned down the boolean variable that was used to determine if today’s date was within or outside of the hard coded date range … and that variable is simply “named” variable “2″. I searched the MSIL file for all areas where variable “2″ was updated and then came across the date validation logic that I had to amend.

Following is the MSIL code snippet containing the date validation check which I’ve amended to pass validation by “widening” the year values.  This snippet is asking the question: Is the current date between Oct 3, 2009 and Aug 7, 2000? If so, then the “date invalid” flag is set to true, otherwise leave the “date invalid” flag as false.

  • IL_0017: Get the current date and push it on to the stack.
  • IL_001c: Push the value 0×7d9 (2009) on to the stack.
  • IL_0021: Push the value 10 on to the stack.
  • IL_0023: Push the value 3 on to the stack.
  • IL_0024: Instantiate a DateTime instance for the date Oct 3, 2009. This will pop the year, month, and day values from the stack leaving the current date (from IL_017) at the top of the stack.
  • IL_0029: Compare the current date to Oct 3, 2009 and place the result on the stack.
  • IL_002e: Load the value 0 on to the stack.
  • IL_002f: Compare the value 0 (from top of stack) to the DateTime::Compare result (second from top on the stack) and branch to IL_004a if greater than or equal. In other words, if “Now” is greater than or equal to Oct 3, 2009, branch to IL_004a where the date validation flag is set to true, meaning “failed validation”.
  • IL_0031 to IL_0048: Compare “Now” to the date Aug 7, 2000 and branch to IL_004c if “Now” is greater than or equal to Aug 7, 2000. In other words, branch past the code that sets the date validation flag “invalid” (value of 1).
  • IL_004a to IL_004b: Push the value 1 (true, in this case) on to the stack and store that value (stloc) in location 2 (”variable 2″). In order words set the “date is invalid” variable to true.
Technorati Logo ,

Roberto Announces Connected Health Framework

Roberto Ruggeri has just posted an article announcing the publication of the Microsoft Connected Health Framework.  As usual, Roberto has done a good job of introducing and explaining things and, therefore, you should be able to easily discern how the Connected Health Framework (CHF) is being positioned.  I really like Roberto’s focus on how CHF is not intended as a vertically targeted, technology-centric framework but is, instead, geared towards the interaction of services and business components in a industry-neutral manner. As Roberto says:

What makes a solution specific to healthcare is the type of messages that are exchanged, the security and policies for authentication, authorization and information access and of course the nature of services and business components

Technorati Logo , ,



Bad Behavior has blocked 89 access attempts in the last 7 days.