Implementing Data Visualization Apps          on iOS Devices      Douglass Turner      Elastic Image Software      tweets:...
iOS software development is done using Objective-C anobject-oriented superset of C.It was developed in the spirit of Small...
• Objective-C is simple, approachable, lightweight, and pragmatic. No frills.• Objective-C and C can be intermingled freel...
Objective-C Supports• Class: Grouping of data + code. The type of an object.• Instance: A specific copy of a class.• Method...
Interface - .h file@interface className : superclassName@property(nonatomic, retain) Type *propertyForType;+(return_type)cl...
Implementation - .m file@implementation classname@synthesize propertyForType;+(return_type)classMethod {    // do stuff}+(r...
Apple style tends towards longSelfDocumentingMethodNames.                    Elastic Image Software LLC                   ...
Instantiationself.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];Property settingself.window.bac...
Objective-C Types   Elastic Image Software LLC               9
Dynamically-typed:      id whoCaresWhatThisIs;   Statically-typed:     Thang* aThang;                  Elastic Image Softw...
Selectors identify methods by name@interface Observer : NSObject- (id)initWithTarget:(id)object action:(SEL)action;@proper...
Selectors identify methods by nameobserver = [[Observer alloc] initWithTarget:self	 	    	 	 	 	 	                     act...
Objective Lifecycle• Create an instance.• Futz with it (Send messages. Pass it around.)• Discard it.                  Elas...
iOS is designed around one foundational pattern: Model View Controller.Much of iOS development - excluding Model developme...
referenceModel                                          View        reference                  reference            Contro...
Model                                                View                      Key-value Observing                        ...
iOS has rich support for a loose, flat, decoupled style ofprogramming           •   Notification           •   Target - Acti...
NotificationsElastic Image Software LLC           18
NotificationNotifier[[NSNotificationCenter defaultCenter] postNotificationName:MyNotification object:self];                 ...
Notification Notification respondent[[NSNotificationCenter defaultCenter] addObserver:self                                  ...
Target - ActionElastic Image Software LLC           21
Target - Action Elastic Image Software LLC            22
Target - Action Elastic Image Software LLC            23
Target - Action Elastic Image Software LLC            24
Target - Action@interface Counter : NSObject@property(nonatomic, strong) NSNumber *count;- (IBAction)trackSlider:(UISlider...
Target - Action@implementation Counter-(IBAction) trackSlider:(UISlider *)slider; {!    self.count = [NSNumber numberWithF...
Target - Action@class Observer;@class Counter;@interface EIViewController : UIViewController@property(nonatomic, strong) I...
Target - Action@implementation EIViewController- (void)viewDidLoad {       self.observer = [[Observer alloc] initWithTarge...
Key-value Observing (KVO)     Elastic Image Software LLC                29
Any property is by default “Key-value Compliant” allowing itto be observed.                      Elastic Image Software LL...
Example: HelloSliderGitHub: http://bit.ly/XDxIvp   Elastic Image Software LLC              31
Example: HelloSliderGitHub: http://bit.ly/XDxIvp   Elastic Image Software LLC              32
Example: HelloSliderGitHub: http://bit.ly/XDxIvp   Elastic Image Software LLC              33
Example: HelloSlider           GitHub: http://bit.ly/XDxIvp@interface Counter : NSObject@property(nonatomic, strong) NSNum...
Example: HelloSlider                 GitHub: http://bit.ly/XDxIvp@implementation Counter-(IBAction) trackSlider:(UISlider ...
Example: HelloSlider              GitHub: http://bit.ly/XDxIvp@interface Observer : NSObject- (id)initWithTarget:(id)objec...
Example: HelloSlider                                  GitHub: http://bit.ly/XDxIvp@implementation Observer- (void)observeV...
Example: HelloSlider                               GitHub: http://bit.ly/XDxIvp@implementation EIViewController- (void)vie...
Blocks & Dispatch Queues    Elastic Image Software LLC               39
Blocks & Dispatch QueuesBlock^{ NSLog(@"Doing something"); }Dispatch Queuedispatch_queue_t queue = dispatch_get_global_que...
Blocks & Dispatch Queues- (void)updateFeaturesWithNotification:(NSNotification *)notification {    dispatch_async([UIAppli...
Delegation (Protocol)  Elastic Image Software LLC             42
Delegation (Protocol)A protocol is identical to an interface in Java. A collection ofmethod signatures implemented by the ...
Delegation (Protocol)@interface UITableViewController:UIViewController <UITableViewDelegate, UITableViewDataSource>       ...
UITableViewDelegate@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>@optional	 - (NSIndexPath *)tableView:will...
UITableViewDataSource@protocol UITableViewDataSource<NSObject>@required- (NSInteger)tableView:numberOfRowsInSection:;@opti...
iOS devices combine mobility, gesture, and apowerful GPU. This makes iOS App developmentan entirely new form of software d...
Mobility introduces context as a driver for usage.New app types appear to meet user needs drivenby context.               ...
Gesture forces a “no interface”, approach toapp design and U/X mindset.Data representation drives interaction andassociate...
GPU. That cute little iPhone in your hand is agraphics processing beast.It is a GPU device tamed for domestic use.The enti...
Developers must discard many of their desktopassumptions when developing for iOS           • No mouse           • No inter...
Demos & CodeElastic Image Software LLC           52
Multi-resolution Image• CATiledLayer• UIScrollView• Amazon Web Services (S3)       Elastic Image Software LLC             ...
Multi-resolution Image• 8k x 8k image resolution. 101MB on disk.• Subsampled 4 successive times• Diced into 256 x 256 tile...
Elastic Image Software LLC           55
Elastic Image Software LLC           56
Elastic Image Software LLC           57
IGV for iPad• CoreGraphics• Dispatch Queues• UIScrollView  Elastic Image Software LLC             58
Elastic Image Software LLC           59
Elastic Image Software LLC           60
Elastic Image Software LLC           61
Elastic Image Software LLC           62
Elastic Image Software LLC           63
Elastic Image Software LLC           64
Elastic Image Software LLC           65
Elastic Image Software LLC           66
Elastic Image Software LLC           67
Elastic Image Software LLC           68
Elastic Image Software LLC           69
Elastic Image Software LLC           70
Elastic Image Software LLC           71
The Elastic Image• OpenGL• GLSL - OpenGL Shading Language• Shader/Gesture plug-ability via plist• UISplitViewController   ...
Elastic Image Software LLC           73
Elastic Image Software LLC           74
Elastic Image Software LLC           75
Elastic Image Software LLC           76
Elastic Image Software LLC           77
Elastic Image Software LLC           78
Elastic Image Software LLC           79
Elastic Image Software LLC           80
Elastic Image Software LLC           81
Elastic Image Software LLC           82
Elastic Image Software LLC           83
Elastic Image Software LLC           84
Elastic Image Software LLC           85
Elastic Image Software LLC           86
Elastic Image Software LLC           87
The Elastic ImageGestures are fundamental to iOS apps. A gesture is attached to aUIView. Gestures come in different flavors...
The Elastic ImagePhoto f/x are implemented in GLSL. The OpenGL ShadingLanguage. Shaders are written in a C-like language a...
The Elastic ImageTextureMapShader - apply a texture (the photo) to a quad (the rendering surface).varying!       vec2 v_st...
The Elastic ImageProperty lists enable simple specification of a shader gesture and its handler.The Objective-C runtimes en...
The Elastic ImageProperty lists enable simple specification of a shader gesture and its handler.The Objective-C runtimes en...
Beautiful Panoramas• OpenGL• GLSL - OpenGL Shading Language• Proprietary Panorama Engine• UIPopoverController           El...
Elastic Image Software LLC           94
Elastic Image Software LLC           95
Elastic Image Software LLC           96
Elastic Image Software LLC           97
Elastic Image Software LLC           98
Elastic Image Software LLC           99
Elastic Image Software LLC           100
BMW Interior Panorama• OpenGL• GLSL - OpenGL Shading Language• Proprietary Panorama Engine• 3D Spatial Picking            ...
Elastic Image Software LLC           102
Elastic Image Software LLC           103
Elastic Image Software LLC           104
Elastic Image Software LLC           105
Elastic Image Software LLC           106
Elastic Image Software LLC           107
RadPad• OpenGL• GLSL - OpenGL Shading Language• Wavelet Image Decompression• UISplitViewController• UIScrollViewController...
Elastic Image Software LLC           109
Thank YouDouglass TurnerElastic Image Softwaretweets: @duglaemail: douglass.turner@gmail.com        Elastic Image Software...
Upcoming SlideShare
Loading in …5
×

Implementing Data Visualization Apps on iOS Devices

2,275 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,275
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
29
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Implementing Data Visualization Apps on iOS Devices

  1. 1. Implementing Data Visualization Apps on iOS Devices Douglass Turner Elastic Image Software tweets: @dugla email: douglass.turner@gmail.com Elastic Image Software LLC
  2. 2. iOS software development is done using Objective-C anobject-oriented superset of C.It was developed in the spirit of Smalltalk. Elastic Image Software LLC 2
  3. 3. • Objective-C is simple, approachable, lightweight, and pragmatic. No frills.• Objective-C and C can be intermingled freely.• Think OOP for C hackers and Unix heads. Elastic Image Software LLC 3
  4. 4. Objective-C Supports• Class: Grouping of data + code. The type of an object.• Instance: A specific copy of a class.• Method: A message that an object can respond to.• Instance variable (ivar): A piece of data belonging to an object Elastic Image Software LLC 4
  5. 5. Interface - .h file@interface className : superclassName@property(nonatomic, retain) Type *propertyForType;+(return_type)classMethod;+(return_type)classMethodWithParam:(paramType) paramName;-(return_type)instanceMethodWithParam1:(param1Type)param1Name andParam2:(param2Type) param2Name;@end Elastic Image Software LLC 5
  6. 6. Implementation - .m file@implementation classname@synthesize propertyForType;+(return_type)classMethod { // do stuff}+(return_type)classMethodWithParam:(paramType) paramName { // do stuff}-(return_type)instanceMethodWithParam1:(param1Type)param1Name andParam2:(param2Type) param2Name { // do stuff}@end Elastic Image Software LLC 6
  7. 7. Apple style tends towards longSelfDocumentingMethodNames. Elastic Image Software LLC 7
  8. 8. Instantiationself.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];Property settingself.window.backgroundColor = [UIColor whiteColor];Message passing[self.window makeKeyAndVisible]; Elastic Image Software LLC 8
  9. 9. Objective-C Types Elastic Image Software LLC 9
  10. 10. Dynamically-typed: id whoCaresWhatThisIs; Statically-typed: Thang* aThang; Elastic Image Software LLC 10
  11. 11. Selectors identify methods by name@interface Observer : NSObject- (id)initWithTarget:(id)object action:(SEL)action;@property(nonatomic, strong) id targetObject;@property(nonatomic) SEL targetAction;@end Elastic Image Software LLC 11
  12. 12. Selectors identify methods by nameobserver = [[Observer alloc] initWithTarget:self action:@selector(updateDisplay:)]; Elastic Image Software LLC 12
  13. 13. Objective Lifecycle• Create an instance.• Futz with it (Send messages. Pass it around.)• Discard it. Elastic Image Software LLC 13
  14. 14. iOS is designed around one foundational pattern: Model View Controller.Much of iOS development - excluding Model development - involvescustomization and extension of this pattern. Elastic Image Software LLC 14
  15. 15. referenceModel View reference reference Controller Elastic Image Software LLC 15
  16. 16. Model View Key-value Observing or Notification Target - ActionKey-value Observing or Notification Controller Elastic Image Software LLC 16
  17. 17. iOS has rich support for a loose, flat, decoupled style ofprogramming • Notification • Target - Action • Key-value Observing (KVO) • Block & Dispatch Queue • Delegation (Protocol) Elastic Image Software LLC 17
  18. 18. NotificationsElastic Image Software LLC 18
  19. 19. NotificationNotifier[[NSNotificationCenter defaultCenter] postNotificationName:MyNotification object:self]; Elastic Image Software LLC 19
  20. 20. Notification Notification respondent[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(respondToMyNotification:) name:MyNotification object:nil];- (void) respondToMyNotification:(NSNotification *)notification { // do stuff} Elastic Image Software LLC 20
  21. 21. Target - ActionElastic Image Software LLC 21
  22. 22. Target - Action Elastic Image Software LLC 22
  23. 23. Target - Action Elastic Image Software LLC 23
  24. 24. Target - Action Elastic Image Software LLC 24
  25. 25. Target - Action@interface Counter : NSObject@property(nonatomic, strong) NSNumber *count;- (IBAction)trackSlider:(UISlider *)slider;@end Elastic Image Software LLC 25
  26. 26. Target - Action@implementation Counter-(IBAction) trackSlider:(UISlider *)slider; {! self.count = [NSNumber numberWithFloat:slider.value];}@end Elastic Image Software LLC 26
  27. 27. Target - Action@class Observer;@class Counter;@interface EIViewController : UIViewController@property(nonatomic, strong) IBOutlet UILabel *label;@property(nonatomic, strong) Observer *observer;@property(nonatomic, strong) IBOutlet Counter *counter;- (void)updateLabel:(NSNumber *)newValue;@end Elastic Image Software LLC 27
  28. 28. Target - Action@implementation EIViewController- (void)viewDidLoad { self.observer = [[Observer alloc] initWithTarget:self action:@selector(updateLabel:)]; [self.counter addObserver:self.observer forKeyPath:@"count" options:NSKeyValueObservingOptionNew context:NULL];}-(void) updateLabel:(NSNumber *)newValue { self.label.text = [NSString stringWithFormat:@"%.2f", [newValue floatValue]];}@end Elastic Image Software LLC 28
  29. 29. Key-value Observing (KVO) Elastic Image Software LLC 29
  30. 30. Any property is by default “Key-value Compliant” allowing itto be observed. Elastic Image Software LLC 30
  31. 31. Example: HelloSliderGitHub: http://bit.ly/XDxIvp Elastic Image Software LLC 31
  32. 32. Example: HelloSliderGitHub: http://bit.ly/XDxIvp Elastic Image Software LLC 32
  33. 33. Example: HelloSliderGitHub: http://bit.ly/XDxIvp Elastic Image Software LLC 33
  34. 34. Example: HelloSlider GitHub: http://bit.ly/XDxIvp@interface Counter : NSObject@property(nonatomic, strong) NSNumber *count;- (IBAction)trackSlider:(UISlider *)slider;@end Elastic Image Software LLC 34
  35. 35. Example: HelloSlider GitHub: http://bit.ly/XDxIvp@implementation Counter-(IBAction) trackSlider:(UISlider *)slider; {! self.count = [NSNumber numberWithFloat:slider.value];}@end Elastic Image Software LLC 35
  36. 36. Example: HelloSlider GitHub: http://bit.ly/XDxIvp@interface Observer : NSObject- (id)initWithTarget:(id)object action:(SEL)action;@property(nonatomic, strong) id targetObject;@property(nonatomic) SEL targetAction;@end Elastic Image Software LLC 36
  37. 37. Example: HelloSlider GitHub: http://bit.ly/XDxIvp@implementation Observer- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { [self.targetObject performSelectorOnMainThread:self.targetAction withObject:[object valueForKeyPath:keyPath] waitUntilDone:NO];}@end Elastic Image Software LLC 37
  38. 38. Example: HelloSlider GitHub: http://bit.ly/XDxIvp@implementation EIViewController- (void)viewDidLoad { self.observer = [[Observer alloc] initWithTarget:self action:@selector(updateLabel:)]; [self.counter addObserver:self.observer forKeyPath:@"count" options:NSKeyValueObservingOptionNew context:NULL];}-(void) updateLabel:(NSNumber *)newValue { self.label.text = [NSString stringWithFormat:@"%.2f", [newValue floatValue]];}@end Elastic Image Software LLC 38
  39. 39. Blocks & Dispatch Queues Elastic Image Software LLC 39
  40. 40. Blocks & Dispatch QueuesBlock^{ NSLog(@"Doing something"); }Dispatch Queuedispatch_queue_t queue = dispatch_get_global_queue(0,0);dispatch_async(queue, ^{ NSLog(@"Doing something");}); Elastic Image Software LLC 40
  41. 41. Blocks & Dispatch Queues- (void)updateFeaturesWithNotification:(NSNotification *)notification { dispatch_async([UIApplication sharedIGVAppDelegate].trackControllerQueue, ^{ [self updateFeatures]; dispatch_async(dispatch_get_main_queue(), ^{ [self.coverageTrack setNeedsDisplay]; [self.track setNeedsDisplay]; }); });} Elastic Image Software LLC 41
  42. 42. Delegation (Protocol) Elastic Image Software LLC 42
  43. 43. Delegation (Protocol)A protocol is identical to an interface in Java. A collection ofmethod signatures implemented by the object that “conforms” tothe protocol.The delegate/protocol pattern is ubiquitous throughout iOS. Elastic Image Software LLC 43
  44. 44. Delegation (Protocol)@interface UITableViewController:UIViewController <UITableViewDelegate, UITableViewDataSource> UITableViewController inherits from UIViewController and conforms to the UITableViewDelegate and UITableViewDataSource protocols Elastic Image Software LLC 44
  45. 45. UITableViewDelegate@protocol UITableViewDelegate<NSObject, UIScrollViewDelegate>@optional - (NSIndexPath *)tableView:willSelectRowAtIndexPath:; - (NSIndexPath *)tableView:willDeselectRowAtIndexPath:;@end Elastic Image Software LLC 45
  46. 46. UITableViewDataSource@protocol UITableViewDataSource<NSObject>@required- (NSInteger)tableView:numberOfRowsInSection:;@optional- (NSInteger)numberOfSectionsInTableView:;- (NSArray *)sectionIndexTitlesForTableView:;@end Elastic Image Software LLC 46
  47. 47. iOS devices combine mobility, gesture, and apowerful GPU. This makes iOS App developmentan entirely new form of software development. Elastic Image Software LLC 47
  48. 48. Mobility introduces context as a driver for usage.New app types appear to meet user needs drivenby context. Elastic Image Software LLC 48
  49. 49. Gesture forces a “no interface”, approach toapp design and U/X mindset.Data representation drives interaction andassociated affordances. Elastic Image Software LLC 49
  50. 50. GPU. That cute little iPhone in your hand is agraphics processing beast.It is a GPU device tamed for domestic use.The entire interface is GPU driven.That is why iOS apps feel the way they do.Light. Effortless. Friction free. Like butter. Elastic Image Software LLC 50
  51. 51. Developers must discard many of their desktopassumptions when developing for iOS • No mouse • No interface • Minimal keyboard • Arms length interaction • One handed Interaction • Two handed Interaction • Untethered resources Elastic Image Software LLC 51
  52. 52. Demos & CodeElastic Image Software LLC 52
  53. 53. Multi-resolution Image• CATiledLayer• UIScrollView• Amazon Web Services (S3) Elastic Image Software LLC 53
  54. 54. Multi-resolution Image• 8k x 8k image resolution. 101MB on disk.• Subsampled 4 successive times• Diced into 256 x 256 tiles• Stored on Amazon S3 Elastic Image Software LLC 54
  55. 55. Elastic Image Software LLC 55
  56. 56. Elastic Image Software LLC 56
  57. 57. Elastic Image Software LLC 57
  58. 58. IGV for iPad• CoreGraphics• Dispatch Queues• UIScrollView Elastic Image Software LLC 58
  59. 59. Elastic Image Software LLC 59
  60. 60. Elastic Image Software LLC 60
  61. 61. Elastic Image Software LLC 61
  62. 62. Elastic Image Software LLC 62
  63. 63. Elastic Image Software LLC 63
  64. 64. Elastic Image Software LLC 64
  65. 65. Elastic Image Software LLC 65
  66. 66. Elastic Image Software LLC 66
  67. 67. Elastic Image Software LLC 67
  68. 68. Elastic Image Software LLC 68
  69. 69. Elastic Image Software LLC 69
  70. 70. Elastic Image Software LLC 70
  71. 71. Elastic Image Software LLC 71
  72. 72. The Elastic Image• OpenGL• GLSL - OpenGL Shading Language• Shader/Gesture plug-ability via plist• UISplitViewController Elastic Image Software LLC 72
  73. 73. Elastic Image Software LLC 73
  74. 74. Elastic Image Software LLC 74
  75. 75. Elastic Image Software LLC 75
  76. 76. Elastic Image Software LLC 76
  77. 77. Elastic Image Software LLC 77
  78. 78. Elastic Image Software LLC 78
  79. 79. Elastic Image Software LLC 79
  80. 80. Elastic Image Software LLC 80
  81. 81. Elastic Image Software LLC 81
  82. 82. Elastic Image Software LLC 82
  83. 83. Elastic Image Software LLC 83
  84. 84. Elastic Image Software LLC 84
  85. 85. Elastic Image Software LLC 85
  86. 86. Elastic Image Software LLC 86
  87. 87. Elastic Image Software LLC 87
  88. 88. The Elastic ImageGestures are fundamental to iOS apps. A gesture is attached to aUIView. Gestures come in different flavors.Panself.panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];[self addGestureRecognizer:self.panGesture];Pinchself.scaleGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handleScaleGesture:)];[self addGestureRecognizer:self. scaleGesture];Tapself.toggleGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleToggleGesture:)];self.toggleGesture.numberOfTapsRequired!! = 1;self.toggleGesture.numberOfTouchesRequired! = 1;[self addGestureRecognizer:self.toggleGesture]; Elastic Image Software LLC 88
  89. 89. The Elastic ImagePhoto f/x are implemented in GLSL. The OpenGL ShadingLanguage. Shaders are written in a C-like language andevaluated in a SIMD manner on the entire image inrealtime. Elastic Image Software LLC 89
  90. 90. The Elastic ImageTextureMapShader - apply a texture (the photo) to a quad (the rendering surface).varying! vec2 v_st;uniform sampler2D hero;void main() {!! gl_FragColor =(heroChannels == 1) ? vec4(texture2D(hero, v_st).a) : texture2D(hero, v_st);!}varying! vec2 v_st;uniform sampler2D hero;void main() {!! gl_FragColor = (heroChannels == 1) ? vec4(texture2D(hero, v_st).a) : texture2D(hero, v_st);!} Elastic Image Software LLC 90
  91. 91. The Elastic ImageProperty lists enable simple specification of a shader gesture and its handler.The Objective-C runtimes enables easy conversion from string to class instance Elastic Image Software LLC 91
  92. 92. The Elastic ImageProperty lists enable simple specification of a shader gesture and its handler.The Objective-C runtimes enables easy conversion from string to class instance- (UIGestureRecognizer *)createGestureWithDictionary:(NSDictionary *)gestureDictionary { NSString *gestureClassName = [gestureDictionary objectForKey:@"class"]; Class _gesture = NSClassFromString(gestureClassName); NSString *selectorName = [gestureDictionary objectForKey:@"selector"]; SEL _selector = NSSelectorFromString(selectorName); UIGestureRecognizer *shaderGesture = [[[_gesture alloc] initWithTarget:self action:_selector] autorelease]; shaderGesture.delegate = self.detailController; return shaderGesture;} Elastic Image Software LLC 92
  93. 93. Beautiful Panoramas• OpenGL• GLSL - OpenGL Shading Language• Proprietary Panorama Engine• UIPopoverController Elastic Image Software LLC 93
  94. 94. Elastic Image Software LLC 94
  95. 95. Elastic Image Software LLC 95
  96. 96. Elastic Image Software LLC 96
  97. 97. Elastic Image Software LLC 97
  98. 98. Elastic Image Software LLC 98
  99. 99. Elastic Image Software LLC 99
  100. 100. Elastic Image Software LLC 100
  101. 101. BMW Interior Panorama• OpenGL• GLSL - OpenGL Shading Language• Proprietary Panorama Engine• 3D Spatial Picking Elastic Image Software LLC 101
  102. 102. Elastic Image Software LLC 102
  103. 103. Elastic Image Software LLC 103
  104. 104. Elastic Image Software LLC 104
  105. 105. Elastic Image Software LLC 105
  106. 106. Elastic Image Software LLC 106
  107. 107. Elastic Image Software LLC 107
  108. 108. RadPad• OpenGL• GLSL - OpenGL Shading Language• Wavelet Image Decompression• UISplitViewController• UIScrollViewController Elastic Image Software LLC 108
  109. 109. Elastic Image Software LLC 109
  110. 110. Thank YouDouglass TurnerElastic Image Softwaretweets: @duglaemail: douglass.turner@gmail.com Elastic Image Software LLC

×