Design


ArtCrank Denver – Opening Saturday Sept 4-11, 2010

August 30th, 2010 — 9:48pm

ArtCrank is back again in Denver.

This is a poster art show for bike people, featuring works from a lot of local artists and designers. The array of work you will see will span a wide spectrum and you will definitely find at least one piece that will surely please your eyes.

art crank flier

*All posters will be limited of 30 for $30 each. Arrive early because posters will sell out fast!

Aaron RayAlan PetersAaron Cohrs • Allyson ByerlyAndrew CarrAndrew HoffmanAndrew PriceAndi & Alex TodaroAnthony CozziAron Dubois • Austin Weyer • Blue BeanieBrian OlivaBroox PulfordBryan CavanaghChase CouringtonChris HuthChris NguyenCole SlettenCristian WhitneyCypher13 • Danyel Latour • David SchellDrew DahlmanFirelilyDebbie ClapperJake ThenoJames Gardiner • Jason Bowers • Jason Shiskowsky • Jason Wedekind • Jenn & Tom Goodrich • Jeremy Graston • Jeremy Pruitt • Jerimy BrownJosh ShivelyKris Fry • Andrea Gomes • Kyle Warfield • Manu BudantMarkham Maes • Matt Scobey • Miles FennNicki & Stuart Alden • Oscar WoodruffPatrick Hansen • Paula Cuevas • Rafa JennRob Mack • Sam Turner • KernthewordSandra FettingisScot LefavorSean KlassenShane HarrisStephen BeneskiVanessa WildeNigel Penhale

The Event:

September 4 – 11
Lisa Kowalski Gallery

2762 Walnut St., Denver, CO

for more details, visit:
http://www.artcrankpostershow.com

http://www.artcrankpostershow.com/denver/

http://www.facebook.com/event.php?eid=143447882348886&ref=ts

Custom Spark Button Skin using MXML

July 16th, 2010 — 12:32pm

I’m just going to throw down a quick tutorial on how to create a custom skin for a Spark Button for Flex 4 using Flash Builder.

Everyone has their own folder structure for their projects, so mine may differ slightly from yours.

Assuming you already have a project started in Flex and a place to put your skins and/or CSS, we can start.

In Flash Builder, go to the directory where you want your skin (mine is src/assets/skins). Right-click to open the contextual menu or click File and go to “New>MXML skin.”

This will prompt a dialog to choose the name and type of skin you want to create.

Go ahead and call the skin what you want, in my example it will be called “Button_custom_skin”
(you don’t have to put the extension which is .mxml)

Now choose the “Host Component,” which is essentially the default component type you want to base this skin off of. You can search for it in the search field, and in this case we are looking for  simple “Button.”

Now after the Host Component is selected, you have the option to have it create a copy of the Spark skin template in your new file or you can deselect the CheckBox and start from scratch. If you’re unfamiliar with all of the pieces of a Button skin, I recommend you create a copy and then strip out the unnecessary items.

Open your new skin mxml file (it should open automatically upon creation).

You can see that Adobe has some comments in this file from the template and some script*. For the button we are creating you can remove all of the comments and the script tag and everything in between.

*Most of the script items provide the customization style properties for use with CSS and also some resizing and scaling management for all of the various pieces of the default Spark skin, like shadow, borders, highlights, etc., so if you did make a change to one item like the corner radius, you don’t have to worry about changing the radius for every single graphic element.

Now we still have all of  the graphical pieces, you can strip out all of this too, but leave the text layer near the bottom of the file. This is the label of the button which we will leave intact.

<?xml version="1.0" encoding="utf-8"?>
 
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
			 minWidth="21" minHeight="21" 
			 alpha.disabled="0.6">
 
    <!-- host component -->
    <fx:Metadata>
        <![CDATA[ 
        /** 
         * @copy spark.skins.spark.ApplicationSkin#hostComponent
         */
        [HostComponent("spark.components.Button")]
        ]]>
    </fx:Metadata>
 
    <!-- states -->
    <s:states>
        <s:State name="up" />
        <s:State name="over" />
        <s:State name="down" />
        <s:State name="disabled" />
    </s:states>
 
    <!-- top layer: text -->
    <!--- @copy spark.components.supportClasses.ButtonBase#labelDisplay -->
    <s:Label id="labelDisplay"
             textAlign="center"
             verticalAlign="middle"
             maxDisplayedLines="1"
             horizontalCenter="0" verticalCenter="1"
             left="14" right="14" top="2" bottom="2">
		<s:filters>
			<s:DropShadowFilter distance="1" blurX="0" blurY="0" color="#000000" alpha=".4" angle="270"/>
		</s:filters>
    </s:Label>
 
</s:SparkSkin>

Now, we have a pretty empty file to start our skin. We’re going to make a button like the one shown below. Nothing fancy, but enough for this post.

Let’s break down the button into the parts we will need to create:
1) Border
This design has a small border around the edge that has a gradient. You can accomplish this with a “stroke” with a gradient fill. By default, strokes are set inside, so they won’t effect your component’s size. But the issue I have experienced with using strokes with rounded corners is that the corners get a little screwed up as if the stroke is on a fractional pixel. So, for our border, we will draw another rectangle behind the inner fill, and set the fill 1px in all around.

2) Fill
This is a rounded rectangle with a gradient from top to bottom. This will be drawn with a Rect and we will apply a corner radius (xRadius) property to it. No matter what size the button is in the layout, that radius will maintain the same value. Who needs scale 9 when you go this?

3) Label
We already left the Label from the Spark skin copy, but we need to add a shadow filter to give that inset look.

4) States
We need to ensure we have the correct appearance for all of the stats of a button: up, over, down, and disabled.

* You will also notice in the SparkSkin tag, there is a “minHeight”, “minWidth” and an “alpha.disabled” property. These are global parameters for this skin and you can adjust these if desired.

First, we will create a rectangle with corner radius (xRadius) and give it these attributes which I have pulled from the design:

<!-- border -->
   	<s:Rect height="100%" width="100%" radiusX="6"
			top="0" right="0" bottom="0" left="0">
	   <s:fill>
		   <!-- gradient fill colors - default ratios are 0,1 -->
		   <s:LinearGradient rotation="90">
			   <s:GradientEntry color="#ffcc00"
								/>
			   <s:GradientEntry color="#ff9900"/>
		   </s:LinearGradient>
	  </s:fill>
   	</s:Rect>

Next, we will draw the inner fill rectangle which will need to be 1px from top, right, bottom, left to ensure the border is exposed underneath and “appear” that it is a 1px stroke. Note that I am making the xRadius 5 – 1 less than the fill since it reside 1px inside. You could write some script to make this a variable to be shared across any object with this attribute if it was the same.

<!-- inner fill -->
	<s:Rect height="100%" width="100%" radiusX="5"
			top="1" right="1" bottom="1" left="1">
		<s:fill>
			<!-- gradient fill colors - default ratios are 0,1 -->
			<s:LinearGradient rotation="90">
				<s:GradientEntry color="#ff9900"
								 color.over="#fabe00"
								 color.down="#cc6600"/>
				<s:GradientEntry color="#cc6600"
								 color.over="#e17b00"
								 color.down="#ff9900"/>
			</s:LinearGradient>
		</s:fill>
	</s:Rect>

We have the base state of our button (up). Now let’s go back and add the color variances in the states. You do this by adding color.state=”#XXXXXX” as needed. Our border does not change and the disabled state we ahve already declared in the SparkSkin tag to be alpha.disabled=”.6″

So here is our code so far for the graphics.

<!-- border -->
   	<s:Rect height="100%" width="100%" radiusX="6"
			top="0" right="0" bottom="0" left="0">
	   <s:fill>
		   <!-- gradient fill colors - default ratios are 0,1 -->
		   <s:LinearGradient rotation="90">
			   <s:GradientEntry color="#ffcc00"
								/>
			   <s:GradientEntry color="#ff9900"/>
		   </s:LinearGradient>
	  </s:fill>
   	</s:Rect>
 
	<!-- inner fill -->
	<s:Rect height="100%" width="100%" radiusX="5"
			top="1" right="1" bottom="1" left="1">
		<s:fill>
			<!-- gradient fill colors - default ratios are 0,1 -->
			<s:LinearGradient rotation="90">
				<s:GradientEntry color="#ff9900"
								 color.over="#fabe00"
								 color.down="#cc6600"/>
				<s:GradientEntry color="#cc6600"
								 color.over="#e17b00"
								 color.down="#ff9900"/>
			</s:LinearGradient>
		</s:fill>
	</s:Rect>

Now, here is our full skin mark up code. I am going to reserve some attributes to be handled in the CSS to pull in this button, like the font-size and font-weight, but you could also hard code this int the skin as part of the Label attributes.

<?xml version="1.0" encoding="utf-8"?>
 
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
             xmlns:fb="http://ns.adobe.com/flashbuilder/2009" 
			 minWidth="21" minHeight="21" 
			 alpha.disabled="0.6">
 
    <!-- host component -->
    <fx:Metadata>
        <![CDATA[ 
        /** 
         * @copy spark.skins.spark.ApplicationSkin#hostComponent
         */
        [HostComponent("spark.components.Button")]
        ]]>
    </fx:Metadata>
 
    <!-- states -->
    <s:states>
        <s:State name="up" />
        <s:State name="over" />
        <s:State name="down" />
        <s:State name="disabled" />
    </s:states>
 
	<!-- border -->
   	<s:Rect height="100%" width="100%" radiusX="6"
			top="0" right="0" bottom="0" left="0">
	   <s:fill>
		   <!-- gradient fill colors - default ratios are 0,1 -->
		   <s:LinearGradient rotation="90">
			   <s:GradientEntry color="#ffcc00"
								/>
			   <s:GradientEntry color="#ff9900"/>
		   </s:LinearGradient>
	  </s:fill>
   	</s:Rect>
 
	<!-- inner fill -->
	<s:Rect height="100%" width="100%" radiusX="5"
			top="1" right="1" bottom="1" left="1">
		<s:fill>
			<!-- gradient fill colors - default ratios are 0,1 -->
			<s:LinearGradient rotation="90">
				<s:GradientEntry color="#ff9900"
								 color.over="#fabe00"
								 color.down="#cc6600"/>
				<s:GradientEntry color="#cc6600"
								 color.over="#e17b00"
								 color.down="#ff9900"/>
			</s:LinearGradient>
		</s:fill>
	</s:Rect>
 
    <!-- top layer: text -->
    <s:Label id="labelDisplay"
             textAlign="center"
             verticalAlign="middle"
             maxDisplayedLines="1"
             horizontalCenter="0" verticalCenter="1"
             left="14" right="14" top="2" bottom="2">
		<s:filters>
			<s:DropShadowFilter distance="1" blurX="0" blurY="0" color="#000000" alpha=".4" angle="270"/>
		</s:filters>
    </s:Label>
 
</s:SparkSkin>

Now create a CSS file or add your CSS directly in your page. If you make an external stylesheet, make sure to reference the file in your main application.

I am using Button as my Class, and my selector is customButton, but you can name it anything.

s|Button.customButton {
	skinClass: ClassReference('assets.skins.Button_custom_skin');
	color: #ffffff;
	font-size: 12px;
	font-weight: bold;
}

Now in my application, I have 3 buttons on the stage.

  1. Spark Button with no styles
  2. Custom Button
  3. Custom Button made to look like the design.

Here is the markup of the Application.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" 
			   minWidth="955" minHeight="600">
	<!--
	******************************************************************************************************
	// ** Project info: Custom Skin for Spark Button Demo **
	//	Author: Patrick Hansen | http://wwww.patrickhansen.com
	******************************************************************************************************
	-->
 
	<!-- default fx declations tag (not really needed for this example) -->
	<fx:Declarations>
		<!-- Place non-visual elements (e.g., services, value objects) here -->
	</fx:Declarations>
 
	<!--Styles -->
	<fx:Style source="assets/css/base.css"/>
 
	<!-- VGroup Container -->
	<s:VGroup gap="20">
		<!-- button example -->
		<s:Button label="Unstyled Spark Button"/>
 
		<!-- custom button example -->
		<s:Button height="24" label="Custom Skin Button" styleName="customButton"/>
 
		<!-- custom button example as design noted -->
		<s:Button height="24" label="MY BUTTON" styleName="customButton"/>
	</s:VGroup>
 
</s:Application>

Note: I left the height attribute (height=”24″) to be applied in the layout, in case this style may be used on other sized buttons, but you could had code this into the skin if you prefer.

View the demo here (right click to view Source):
http://www.patrickhansen.com/demos/flex/SparkButton/

Download the Source:
http://www.patrickhansen.com/demos/flex/SparkButton.zip

By the way, tools like Fireworks, Photoshop and Illustrator have export to FXG options where you can obtain most of this mark-up easily, but I wanted to demonstrate creating this skin from scratch.

JQTouch

July 13th, 2010 — 2:45pm

JQTouch is a JQuery plugin for mobile web development targeting the iPhone, iPod Touch, and other mobile touch devices and utilizes WebKit. What does this mean?

This means you can add interactions, layout and styles to a website which are targeted towards multi-touch devices and follow most of the guidelines and currently defined best practices for UI/UX design in this arena. Many have already accomplished some of those angles with standard HTML and CSS which caters more towards the iPhone and mobile devices, but this adds a lot more functionality and interactivity based on JQuery right out of the box, making your website a much more robust and richer experience for mobile users.

You can view the demo on your device and check it out:

http://jqtouch.com/preview/demos/main/

Visit the site:

http://jqtouch.com/

This is part of Sencha labs, which is another framework which parallels JQTouch.

Universe Juice Denver – Hip Hop Event June 5-6

June 1st, 2010 — 5:24pm

Universe Juice is one of Denver’s largest hip hop events featuring everything from live music, B-Boy battles, DJ battles, Freestyle battles, live mural painting and everything in between. This is a HUGE two day event Saturday through Sunday, June 5-6 at the Exdo Event Center located at 3500 Walnut street, Denver, CO. A full two blocks of live music, dance, murals and more! Cash prizes for the champs and hosted by Denver’s own Dent.

I’ll be thrown down the beats for Path One on Sunday during his live performance, so be sure to roll through and enjoy a whole weekend of hip hop and creative art!

All Ages!
June 5-6 Saturday & Sunday
11:00am to 9:00pm
Exdo Event Center
3500 Walnut street, Denver, CO

Line up:

DJ’s:

  • Stretch
  • Unison
  • Lazy Eyez
  • B-Money
  • Vajra
  • Musa
  • Selector Sam
  • Puffah Brown

Live Music by:

  • Path One w/ artistIQ
  • Denver Massive
  • F.O.E.
  • Fresh Breath Committee
  • The Littleague
  • Manifest & Arkhightek
  • Microphone Jones
  • Mike Wird w/ Jedi Flowerz
  • The Reminders
  • Soda Pop Heads
  • Spellbinder
  • Strange Powers
  • 420 Chronic Addicts
  • Ace Myamoto
  • DJ Cavem Moetavation
  • Main Coursse
  • Mile Hicons of ATR
  • Nofrendo w/ J.Reed
  • Panama
  • Lunalilo Di Vinci
  • Turner Jackson
  • Xperiment
  • Whygee w/ DJ Brikabrah

Artists:

  • Jive
  • Reps
  • East
  • Reks
  • Dread
  • Scribe
  • Emit
  • Ouija
  • Jolt
  • Jher
  • Gamma
  • BTR Crew

Adobe Fireworks CS5 pixel snap issues… still!

May 28th, 2010 — 3:06pm

Now, I love Fireworks for UI design. Some people are shocked when I mentioned that I, and most of our team, use FW. Some thought it was extinct after the Adobe / Macromedia acquisition, but it’s still alive and kicking and I highly recommend evaluating it if you do UI design. It a very powerful tool for web and software design, with a lot of features catered to the work flow, including pages, states (frames), shared layers, symbols and rich symbols and many more. However, this is not why I’m writing this post unfortunately.

As with any design tool, there will be some pros and cons, bugs and inefficiencies, FW is not immune to any of these.

One major annoying bug is the pixel snapping issue. If you have worked with FW CS3 or CS4, you are probably well aware of this painful issue and will be unhappy to know that it is still happening in CS5.

The problem is that FW will at times, make an object not snap on a whole pixel and it will appear blurry. This usually occurs when you move an object, sometimes when you close and reopen a document, and frequently when creating symbols. Another frustrating aspect is that the values of x,y position inputs display whole numbers and make you think everything is correct, like 300, 400, when in actuality, it is at 300.5, 399.5 or something like that. A quick fix is to focus on the x,y input sand simply press “enter” on those values, but that’s not very efficient and more so, you shouldn’t have to do that, especially with a pricey app like FW.

I just installed CS5 and I wanted to see if that problem has been corrected, and within a few minutes, I was surprised to see that it is NOT corrected. I was able to recreate it easily by creating a symbol and simply moving and scaling the object. Another interesting thing is that it appears differently when viewing the symbol on stage vs. digging into the symbol and viewing it inside. Very strange and frustrating, and I wish Adobe would address this issue.

I have looked in the preferences to see if there was anyway to turn on “pixel snapping” or if there was any other parameter that might fix this, but had no luck.

Here is a screenshot of the object and the issue involved.

Don’t get me wrong, this issue does suck, but it is not enough to drive me away from using Fireworks. I constantly work with various other formats such as Photoshop and Illustrator, and those tools have their issues too. Especially designing for interfaces, since those tools were not intended for that purpose originally. This is a whole other post though, so I’m out.

*Update: June 01, 2010:
There was a great comment (Michel) with mention to “Snap to Pixel” feature which is under Modify>Snap to Pixel or command+k (mac), control+k (Windows). This is great for working with “raw” shapes on the stage, but once you start working with symbols, this feature is not available and does not resolve the issue. Michel also wrote a great review about FW CS5 on Smashing Magazine.

Here is a quick video screencast of the issue.

  1. I have a symbol on stage and appears shifted and blurry and Snap to Pixel is not available.
  2. I double click the symbol to go inside, you will notice it appears to shift as I go inside. I select the green square, and I can Snap to Pixel.
  3. Once I exit the symbol and go back to the canvas, the symbol shifts again and becomes blurry.

Responsive Web Design

May 28th, 2010 — 2:08pm

A List Apart features another great article, this time on Responsive Web Design. This derives from an emergent discipline called “responsive architecture.” The philosophy focuses highly on “how physical spaces can respond to the presence of people passing through them.”

This concept can be applied to other arenas outside of physical structures which already have the technology and flexibility to adapt, web and software interfaces. Now, the concept of adapting UI’s isn’t new, but the techniques used both in the technologies used and the experience/design vary in solutions and some are arguably not the best.

Fluid layouts in web design have been around for awhile, and although they do achieve flexible design and presentation and are quite successful for desktop device viewing, they are not full proof across multiple devices such as mobile phones to tablets.

Ethan Marcotte provides a great article which goes further in depth of this concept and he provides an excellent responsive web design layout example. Even the images scale smoothly to accommodate the various layouts. The examples do have some dependencies on javascript/JQuery for some of the more advanced image handling and media queries which shoudl also be considered when designing a responsive layout.

There are several examples demonstrating approaches for various resolutions. Catch the article here:

http://www.alistapart.com/articles/responsive-web-design/

Graffiti Analysis

May 28th, 2010 — 9:55am

This project looks pretty sick. And the good thing about it is, that even though it is bringing technology and graffiti/street art together, it’s not exploiting it with some mainstream adulteration.

Graffiti Analysis 2.0: Digital Blackbook from Evan Roth on Vimeo.

I think it is pretty tight how it not only renders the visual result of a tag/piece, but it focuses on capturing the “motion,” which is a big characteristic and and driving mechanism of defining the unique styles portrayed in graffiti and individuals that most would never be able to see or perceive. That is a finely tuned attribute of the craft that really isn’t a secret or anything, but it just isn’t something that is easily exposed or conveyed to some. It’s the “feel” of creating art, that even though this analysis project is getting really close to it, I’m still not sure if that can ever be transmitted precisely to everyone. It not only goes for visual art, but even other skills such as shooting a basketball, or playing the violin. Sometimes you just gotta’ “feel it.”

Visit the project site here:
http://graffitianalysis.com/

JQuery image-based buttons

May 13th, 2010 — 9:47am

I’ve been playing around with javascript and JQuery lately and was working with some image-based buttons. This is nothing new and there are hundreds of solutions out there for this approach including the popular CSS direction. I did find some javascript solutions, but I couldn’t find any examples that were scalable and/or didn’t require several dependencies or explicit references like requiring ID’s or exact image file names and paths, which can be a hassle if you are dealing with multiple image-based buttons on a page or site.

So for whatever reason you may need a JQuery controlled image-based button, here you go.

note:
My example here is just providing a JQuery approach for image-based buttons. This can also be done quite easily using only CSS and altering the background image for the state. You would have to create a selector for each button and provide explicit height/width attributes for each button in the CSS. I would recommend using the CSS approach over the JQuery one, as it is more scalable if you decide to change the appearance of your buttons, you only have to alter the CSS and don’t need to mess with the markup.

Back to the JQuery Image-based button example:
There were several reason why I wanted to make this as generic as possible:

  • Versatile Usage: Need to re-use this script across a site, different pages, even in PHP include files, and these files/pages may reside in various directories which would alter any explicitly declared image paths in the script.
  • Image Type: Uncertain what type of image the buttons may be comprised of across the site: gif, jpg, png, etc.
  • Number of buttons: May have several button instances and types throughout the site.
  • No CSS Buttons: For some reason, the site is not using CSS based buttons

This script addresses all of those concerns with only 3 minimal requirements:

  1. The obvious, must have current JQuery lib file linked to your page, and this script either in the page or in external linked js file.
    Download JQuery Here
  2. Must assign the class the script references to the anchor tag for your button.
    (example: <a class=”js_uniButton” …></a> ).
  3. The up and over images MUST have the same file name and be the same file type, but the over image must be appended with “_hover“. (example: MyImage.gif and MyImage_hover.gif)

I’m a novice using JQuery with only a couple months experience, so if there is a better way, then feel free to let me know. A friend of mine helped me write the image URL caching function, which ensures the image URL only gets called once.

Below is an example of the script with detailed comments and extra line breaks for easier readability.

Click here to VIEW the demo

Click here to DOWNLOAD the demo

note:
This needs to be within a doc ready function either in the page or in external js file:
$(document).ready(function()
// insert script here
});

//*************** JQeury Universal Image Button ***************
function getHoverPath (imgPath) {
//split imgPath after each '/' and create array to path directories and file name
var srcPathArray = imgPath.split('/');
//find image file name get length of srcPathArray and retrieve last item which is the image file ex: "images/buttons/IMG.gif"
var imgFile = srcPathArray[srcPathArray.length-1];
//image file name array split at "." to get:[fileName, ext]
var imgArray = imgFile.split('.');
//img name (first item in imgArray)
var imgName = imgArray[0];
//image ext (second item in imgArray)
var imgExt = imgArray[1];
//image src path
var srcPath = imgPath.split(imgFile , 1);
// concatenate path and add "_hover" to image file name
return srcPath + imgName+'_hover.'+ imgExt;
};
// get hover button array
var hoveredButtons = new Array();
 
$('.js_uniButton').mouseover (function() {
$this = $(this);
//get image path of this instance
var imgPath = $this.children('img').attr('src');
//cache img path url on initial mouseover
if (typeof(hoveredButtons[ imgPath ]) == 'undefined') {
hoveredButtons[ imgPath ] = getHoverPath( imgPath );
//console.log('cache image path ' + imgPath + ' and hover path ' + hoveredButtons[ imgPath ]);
 }
$this.children('img').attr('src' , hoveredButtons[ imgPath ]);
 
//mouseout actions
$this.mouseout(function() {
//define this handler
var $this = $(this), handler = arguments.callee;
 
//unbind mouseout handler
$this.unbind('mouseout', handler);
 
// on mouseout, swap current image with original image path
$this.children('img').attr('src' , imgPath);
});
});

Adobe: Freedom of Choice

May 13th, 2010 — 9:03am

Adobe has been spreading the word of their support for “Openness” in the creative and technology industries, primarily focused around the web (HTML 5) and Flash.

adobe we love choice

This is obviously a response to Apple’s recent lack of support for Flash on their mobile devices such as iPhone, iPad and iPod Touch, and their recent posts on their stand.

Watch for this ad popping up around the series of tubes…

View their perspective here:

http://www.adobe.com/choice/?sdid=GXRVG

Apple’s thoughts on Adobe Flash

April 29th, 2010 — 9:18am


There has been a lot of controversy revolving around Apple’s position not to support Flash on the iPod Touch, iPhone and iPad. This article from Apple has a detailed explanation of Apple’s position.

http://www.apple.com/hotnews/thoughts-on-flash/

Here is another great, and humorous, article about Apple’s history with Adobe and how some of the past may have lead to Apple’s current position.

http://www.roughlydrafted.com/2010/04/14/chronicles-of-conflict-the-history-of-adobe-vs-apple/

Back to top