Matias Piipari from the Sanger Institute gave a short tutorial, aimed at a scientific audience, on using Apple's Cocoa framework for developing applications.
11. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
Friday, 21 May 2010
12. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
Friday, 21 May 2010
13. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
Friday, 21 May 2010
14. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
• Networking: sockets, HTTP, service auto discovery...
Friday, 21 May 2010
15. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
• Networking: sockets, HTTP, service auto discovery...
• Data modelling & persistence (Core Data)
Friday, 21 May 2010
16. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
• Networking: sockets, HTTP, service auto discovery...
• Data modelling & persistence (Core Data)
• Using multicore CPUs: multithreading, Grand Central Dispatch
Friday, 21 May 2010
17. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
• Networking: sockets, HTTP, service auto discovery...
• Data modelling & persistence (Core Data)
• Using multicore CPUs: multithreading, Grand Central Dispatch
• 2D drawing (Quartz)
Friday, 21 May 2010
18. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
• Networking: sockets, HTTP, service auto discovery...
• Data modelling & persistence (Core Data)
• Using multicore CPUs: multithreading, Grand Central Dispatch
• 2D drawing (Quartz)
• Image / video processing (Core Image, Core Video, Quartz Composer)
Friday, 21 May 2010
19. What is Cocoa?
• High-level object oriented collection of APIs for Mac OS X
• It is much more than a GUI framework
• Interprocess communication: UNIX pipes, distributed notifications
• Networking: sockets, HTTP, service auto discovery...
• Data modelling & persistence (Core Data)
• Using multicore CPUs: multithreading, Grand Central Dispatch
• 2D drawing (Quartz)
• Image / video processing (Core Image, Core Video, Quartz Composer)
• Scripting bridge: script your app in Python, Ruby, AppleScript
Friday, 21 May 2010
36. The Objective-C language
• Object oriented language bolted onto ANSI C
• Dynamic language
Friday, 21 May 2010
37. The Objective-C language
• Object oriented language bolted onto ANSI C
• Dynamic language
• Class definitions can change (even during runtime)
Friday, 21 May 2010
38. The Objective-C language
• Object oriented language bolted onto ANSI C
• Dynamic language
• Class definitions can change (even during runtime)
• Late binding: methods looked up during runtime
Friday, 21 May 2010
39. The Objective-C language
• Object oriented language bolted onto ANSI C
• Dynamic language
• Class definitions can change (even during runtime)
• Late binding: methods looked up during runtime
• Add or swap (‘swizzle’) methods during runtime
Friday, 21 May 2010
40. The Objective-C language
• Object oriented language bolted onto ANSI C
• Dynamic language
• Class definitions can change (even during runtime)
• Late binding: methods looked up during runtime
• Add or swap (‘swizzle’) methods during runtime
• You need to manage your memory (GC exists, but it’s crap)
Friday, 21 May 2010
41. The Objective-C language
• Object oriented language bolted onto ANSI C
• Dynamic language
• Class definitions can change (even during runtime)
• Late binding: methods looked up during runtime
• Add or swap (‘swizzle’) methods during runtime
• You need to manage your memory (GC exists, but it’s crap)
• A language with some strong conventions
Friday, 21 May 2010
46. Quartz: drawing API
• Identical API for drawing into...
• a window
• an off-screen bitmap buffer
• A PDF
Friday, 21 May 2010
47. Quartz: drawing API
• Identical API for drawing into...
• a window
• an off-screen bitmap buffer
• A PDF
• API available for C and Objective-C
(or supported scripting languages)
Friday, 21 May 2010
48. Quartz: drawing API
• Identical API for drawing into...
• a window
• an off-screen bitmap buffer
• A PDF
• API available for C and Objective-C
(or supported scripting languages)
• Toll free bridging between
C structs / Objective-C objects
Friday, 21 May 2010
49. Image / video processing
with Quartz Composer
Friday, 21 May 2010
50. Image / video processing
with Quartz Composer
• A visual programming language for image /
video processing
Friday, 21 May 2010
51. Image / video processing
with Quartz Composer
• A visual programming language for image /
video processing
• Embeddable into your own application
Friday, 21 May 2010
52. Image / video processing
with Quartz Composer
• A visual programming language for image /
video processing
• Embeddable into your own application
• New in Snow Leopard: OpenCL kernels
Friday, 21 May 2010
53. Image / video processing
with Quartz Composer
• A visual programming language for image /
video processing
• Embeddable into your own application
• New in Snow Leopard: OpenCL kernels
• It is powerful but documentation isn’t great
Friday, 21 May 2010
54. Image / video processing
with Quartz Composer
• A visual programming language for image /
video processing
• Embeddable into your own application
• New in Snow Leopard: OpenCL kernels
• It is powerful but documentation isn’t great
• (DEMO)
Friday, 21 May 2010
55. Child processes, UNIX pipes
stdout
GUI process motif inference process
(native Mac app) (crossplatform Java app)
Friday, 21 May 2010
57. Networking & web services
• High-level API for streams & sockets
Friday, 21 May 2010
58. Networking & web services
• High-level API for streams & sockets
• HTTP client with asynchronous I/O
Friday, 21 May 2010
59. Networking & web services
• High-level API for streams & sockets
• HTTP client with asynchronous I/O
• XML handling
Friday, 21 May 2010
60. Networking & web services
• High-level API for streams & sockets
• HTTP client with asynchronous I/O
• XML handling
• Event based parsing
Friday, 21 May 2010
61. Networking & web services
• High-level API for streams & sockets
• HTTP client with asynchronous I/O
• XML handling
• Event based parsing
• DOM based parsing, XPath queries
Friday, 21 May 2010
62. Networking & web services
• High-level API for streams & sockets
• HTTP client with asynchronous I/O
• XML handling
• Event based parsing
• DOM based parsing, XPath queries
• SOAP OK
Friday, 21 May 2010
63. Networking & web services
• High-level API for streams & sockets
• HTTP client with asynchronous I/O
• XML handling
• Event based parsing
• DOM based parsing, XPath queries
• SOAP OK
• JSON OK
Friday, 21 May 2010
67. Core Data
• Data modelling framework
Friday, 21 May 2010
68. Core Data
• Data modelling framework
• Serialise / deserialise data
Friday, 21 May 2010
69. Core Data
• Data modelling framework
• Serialise / deserialise data
• SQLite
Friday, 21 May 2010
70. Core Data
• Data modelling framework
• Serialise / deserialise data
• SQLite
• XML
Friday, 21 May 2010
71. Core Data
• Data modelling framework
• Serialise / deserialise data
• SQLite
• XML
• Auto-generate model classes
Friday, 21 May 2010
72. Core Data
• Data modelling framework
• Serialise / deserialise data
• SQLite
• XML
• Auto-generate model classes
• Query data
Friday, 21 May 2010
73. Core Data
• Data modelling framework
• Serialise / deserialise data
• SQLite
• XML
• Auto-generate model classes
• Query data
• Automatic undo / redo support
Friday, 21 May 2010
75. Multicore
• NSOperation: high level multithreading API
Friday, 21 May 2010
76. Multicore
• NSOperation: high level multithreading API
• Grand Central Dispatch (10.6 only)
Friday, 21 May 2010
77. Multicore
• NSOperation: high level multithreading API
• Grand Central Dispatch (10.6 only)
• Use closures to represent independent work units
Friday, 21 May 2010
78. Multicore
• NSOperation: high level multithreading API
• Grand Central Dispatch (10.6 only)
• Use closures to represent independent work units
• Lighter memory footprint than threads
Friday, 21 May 2010
79. Multicore
• NSOperation: high level multithreading API
• Grand Central Dispatch (10.6 only)
• Use closures to represent independent work units
• Lighter memory footprint than threads
• Easy: worry less about resources, syncing, locking
Friday, 21 May 2010
80. Multicore
• NSOperation: high level multithreading API
• Grand Central Dispatch (10.6 only)
• Use closures to represent independent work units
• Lighter memory footprint than threads
• Easy: worry less about resources, syncing, locking
• POSIX threads
Friday, 21 May 2010
81. Multicore
• NSOperation: high level multithreading API
• Grand Central Dispatch (10.6 only)
• Use closures to represent independent work units
• Lighter memory footprint than threads
• Easy: worry less about resources, syncing, locking
• POSIX threads
• OpenCL: an extension to C for data-parallel computing
Friday, 21 May 2010
86. Scripting bridge
• Python - Objective-C bridge: PyObjC
• Ruby - Objective-C bridge: RubyCocoa
• MacRuby: a ‘native’ Cocoa Ruby interpreter
• Ruby or Python can also be used as a
replacement for AppleScript
Friday, 21 May 2010
87. Scripting bridge
• Python - Objective-C bridge: PyObjC
• Ruby - Objective-C bridge: RubyCocoa
• MacRuby: a ‘native’ Cocoa Ruby interpreter
• Ruby or Python can also be used as a
replacement for AppleScript
• My advice: keep away until you’re
comfortable with Cocoa.
Friday, 21 May 2010
95. BioCocoa
• Sequence I/O (DNA / RNA / protein)
• Annotations
• Sequence alignments
• Nothing like Bioruby / Bioperl...
• Alternatives:
• scripting bridge + Bioruby / Biopython
• pipe to a child process which does more
complex manipulations with biol data
Friday, 21 May 2010
100. Learning resources
Aaron Hillegass: Stephen G. Kochan:
Cocoa Programming Programming in
for Mac OS X Objective-C 2.0
http://itunes.stanford.edu/
Stanford University iPhone SDK course
Friday, 21 May 2010
103. My experiences
• It’s a lot of fun!
Friday, 21 May 2010
104. My experiences
• It’s a lot of fun!
• It is just C with added decoration
Friday, 21 May 2010
105. My experiences
• It’s a lot of fun!
• It is just C with added decoration
• Documentation is not always great
Friday, 21 May 2010
106. My experiences
• It’s a lot of fun!
• It is just C with added decoration
• Documentation is not always great
• ... but the community is:
Friday, 21 May 2010
107. My experiences
• It’s a lot of fun!
• It is just C with added decoration
• Documentation is not always great
• ... but the community is:
• blogs, forums
Friday, 21 May 2010
108. My experiences
• It’s a lot of fun!
• It is just C with added decoration
• Documentation is not always great
• ... but the community is:
• blogs, forums
• plenty of open source code
Friday, 21 May 2010
109. My experiences
• It’s a lot of fun!
• It is just C with added decoration
• Documentation is not always great
• ... but the community is:
• blogs, forums
• plenty of open source code
• #macdev,#iphonedev on IRC (freenode)
Friday, 21 May 2010
116. Biomartify
• Goals
• Browse the Biomart registry:
marts, their datasets
Friday, 21 May 2010
117. Biomartify
• Goals
• Browse the Biomart registry:
marts, their datasets
• Build a Biomart query: filters & attributes
Friday, 21 May 2010
118. Biomartify
• Goals
• Browse the Biomart registry:
marts, their datasets
• Build a Biomart query: filters & attributes
• Save the query on disk, edit it later
Friday, 21 May 2010
119. Biomartify
• Goals
• Browse the Biomart registry:
marts, their datasets
• Build a Biomart query: filters & attributes
• Save the query on disk, edit it later
• Submit the query
Friday, 21 May 2010
120. Biomartify
• Goals
• Browse the Biomart registry:
marts, their datasets
• Build a Biomart query: filters & attributes
• Save the query on disk, edit it later
• Submit the query
• ‘Migrate’ a query to a dataset
Friday, 21 May 2010