SlideShare ist ein Scribd-Unternehmen logo
1 von 120
Cocoa for Scientists
                            Matias Piipari
                      Wellcome Trust Sanger Institute




Friday, 21 May 2010
iMotifs




Friday, 21 May 2010
Friday, 21 May 2010
Biomartify




Friday, 21 May 2010
Outline




Friday, 21 May 2010
Outline

                      1. What is Cocoa?




Friday, 21 May 2010
Outline

                      1. What is Cocoa?
                      2. What can I do with it?




Friday, 21 May 2010
Outline

                      1. What is Cocoa?
                      2. What can I do with it?
                      3. How can I learn more about it?




Friday, 21 May 2010
Outline

                      1. What is Cocoa?
                      2. What can I do with it?
                      3. How can I learn more about it?

                      BONUS: A GUI design tutorial



Friday, 21 May 2010
What is Cocoa?




Friday, 21 May 2010
What is Cocoa?
         •       High-level object oriented collection of APIs for Mac OS X




Friday, 21 May 2010
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
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
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
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
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
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
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
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
1985
Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP




Friday, 21 May 2010
NeXSTEP   OPENSTEP




Friday, 21 May 2010
NeXSTEP   OPENSTEP   Cocoa




Friday, 21 May 2010
GNUStep


                NeXSTEP   OPENSTEP   Cocoa




Friday, 21 May 2010
Cocoa Touch
                          GNUStep    (iPhone OS)


                NeXSTEP   OPENSTEP    Cocoa




Friday, 21 May 2010
NeXTSTEP legacy is clear

                      • AppKit (AppKit.h)
                      • FoundationKit (Foundation.h)
                      • “NS” prefix in the Cocoa foundation
                        classes (NSObject, NSArray, ... )
                      • Bundles (.app, .pages, .keynote, etc)
                      • Interface Builder
Friday, 21 May 2010
The Objective-C language




Friday, 21 May 2010
The Objective-C language

             •        Object oriented language bolted onto ANSI C




Friday, 21 May 2010
The Objective-C language

             •        Object oriented language bolted onto ANSI C

             •        Dynamic language




Friday, 21 May 2010
The Objective-C language

             •        Object oriented language bolted onto ANSI C

             •        Dynamic language

                      •   Class definitions can change (even during runtime)




Friday, 21 May 2010
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
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
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
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
Cocoa design patterns
                      •   Model-View-Controller

                      •   Dependency Injection

                      •   Target-Action

                      •   Delegation

                      •   Responder chain

                      •   Facade

                      •   Decorator

                      •   Command
Friday, 21 May 2010
The APIs



Friday, 21 May 2010
Quartz: drawing




                           (DEMO)
Friday, 21 May 2010
Quartz: drawing API




Friday, 21 May 2010
Quartz: drawing API
                      • Identical API for drawing into...
                       • a window
                       • an off-screen bitmap buffer
                       • A PDF



Friday, 21 May 2010
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
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
Image / video processing
                with Quartz Composer




Friday, 21 May 2010
Image / video processing
                with Quartz Composer
                      • A visual programming language for image /
                        video processing




Friday, 21 May 2010
Image / video processing
                with Quartz Composer
                      • A visual programming language for image /
                        video processing
                      • Embeddable into your own application



Friday, 21 May 2010
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
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
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
Child processes, UNIX pipes




                                         stdout
                        GUI process           motif inference process
                      (native Mac app)        (crossplatform Java app)
Friday, 21 May 2010
Networking & web services




Friday, 21 May 2010
Networking & web services
                      • High-level API for streams & sockets




Friday, 21 May 2010
Networking & web services
                      • High-level API for streams & sockets
                      • HTTP client with asynchronous I/O




Friday, 21 May 2010
Networking & web services
                      • High-level API for streams & sockets
                      • HTTP client with asynchronous I/O
                      • XML handling




Friday, 21 May 2010
Networking & web services
                      • High-level API for streams & sockets
                      • HTTP client with asynchronous I/O
                      • XML handling
                       • Event based parsing



Friday, 21 May 2010
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
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
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
Networking & web services




Friday, 21 May 2010
Core Data




Friday, 21 May 2010
Core Data




Friday, 21 May 2010
Core Data
                      • Data modelling framework




Friday, 21 May 2010
Core Data
                      • Data modelling framework
                      • Serialise / deserialise data




Friday, 21 May 2010
Core Data
                      • Data modelling framework
                      • Serialise / deserialise data
                       • SQLite




Friday, 21 May 2010
Core Data
                      • Data modelling framework
                      • Serialise / deserialise data
                       • SQLite
                       • XML



Friday, 21 May 2010
Core Data
                      • Data modelling framework
                      • Serialise / deserialise data
                       • SQLite
                       • XML
                      • Auto-generate model classes


Friday, 21 May 2010
Core Data
                      • Data modelling framework
                      • Serialise / deserialise data
                       • SQLite
                       • XML
                      • Auto-generate model classes
                      • Query data

Friday, 21 May 2010
Core Data
                      • Data modelling framework
                      • Serialise / deserialise data
                       • SQLite
                       • XML
                      • Auto-generate model classes
                      • Query data
                      • Automatic undo / redo support
Friday, 21 May 2010
Multicore




Friday, 21 May 2010
Multicore
                •     NSOperation: high level multithreading API




Friday, 21 May 2010
Multicore
                •     NSOperation: high level multithreading API

                •     Grand Central Dispatch (10.6 only)




Friday, 21 May 2010
Multicore
                •     NSOperation: high level multithreading API

                •     Grand Central Dispatch (10.6 only)

                      •   Use closures to represent independent work units




Friday, 21 May 2010
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
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
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
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
Scripting bridge




Friday, 21 May 2010
Scripting bridge
                      • Python - Objective-C bridge: PyObjC




Friday, 21 May 2010
Scripting bridge
                      • Python - Objective-C bridge: PyObjC
                      • Ruby - Objective-C bridge: RubyCocoa




Friday, 21 May 2010
Scripting bridge
                      • Python - Objective-C bridge: PyObjC
                      • Ruby - Objective-C bridge: RubyCocoa
                      • MacRuby: a ‘native’ Cocoa Ruby interpreter



Friday, 21 May 2010
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
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
BioCocoa




Friday, 21 May 2010
BioCocoa
                      • Sequence I/O (DNA / RNA / protein)




Friday, 21 May 2010
BioCocoa
                      • Sequence I/O (DNA / RNA / protein)
                      • Annotations




Friday, 21 May 2010
BioCocoa
                      • Sequence I/O (DNA / RNA / protein)
                      • Annotations
                      • Sequence alignments




Friday, 21 May 2010
BioCocoa
                      • Sequence I/O (DNA / RNA / protein)
                      • Annotations
                      • Sequence alignments
                      • Nothing like Bioruby / Bioperl...



Friday, 21 May 2010
BioCocoa
                      • Sequence I/O (DNA / RNA / protein)
                      • Annotations
                      • Sequence alignments
                      • Nothing like Bioruby / Bioperl...
                      • Alternatives:


Friday, 21 May 2010
BioCocoa
                      • Sequence I/O (DNA / RNA / protein)
                      • Annotations
                      • Sequence alignments
                      • Nothing like Bioruby / Bioperl...
                      • Alternatives:
                       • scripting bridge + Bioruby / Biopython

Friday, 21 May 2010
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
Fine...
                      but it’s Mac only


Friday, 21 May 2010
... or is it?



Friday, 21 May 2010
Cocotron




Friday, 21 May 2010
GNUStep




Friday, 21 May 2010
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
Learning resources
                      • http://mattgemmell.com/
                      • http://cocoawithlove.com/
                      • http://www.cocotron.org/blog/
                      • http://www.boyfarrell.com/tutorials/
                      • http://weblog.bignerdranch.com/
                      • http://abizern.org/
                      • http://cocoadev.com/
Friday, 21 May 2010
My experiences




Friday, 21 May 2010
My experiences
                      • It’s a lot of fun!




Friday, 21 May 2010
My experiences
                      • It’s a lot of fun!
                      • It is just C with added decoration




Friday, 21 May 2010
My experiences
                      • It’s a lot of fun!
                      • It is just C with added decoration
                      • Documentation is not always great




Friday, 21 May 2010
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
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
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
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
Interface Builder
                           Tutorial



Friday, 21 May 2010
Target - Action



Friday, 21 May 2010
Bindings
                      key-value observing




Friday, 21 May 2010
Controllers



Friday, 21 May 2010
Biomartify




Friday, 21 May 2010
Biomartify

                      • Goals




Friday, 21 May 2010
Biomartify

                      • Goals
                       • Browse the Biomart registry:
                         marts, their datasets




Friday, 21 May 2010
Biomartify

                      • Goals
                       • Browse the Biomart registry:
                         marts, their datasets
                       • Build a Biomart query: filters & attributes



Friday, 21 May 2010
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
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
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

Weitere ähnliche Inhalte

Ähnlich wie Cocoa for Scientists

Multi Handset Development - ETE 2010
Multi Handset Development - ETE 2010Multi Handset Development - ETE 2010
Multi Handset Development - ETE 2010
Kevin Griffin
 
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
Patrick Chanezon
 
Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010
Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010
Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010
Guillaume Laforge
 
Moeller bosc2010 debian_taverna
Moeller bosc2010 debian_tavernaMoeller bosc2010 debian_taverna
Moeller bosc2010 debian_taverna
BOSC 2010
 

Ähnlich wie Cocoa for Scientists (20)

Nuxeo World Session: Mobile ECM Apps with Nuxeo EP
Nuxeo World Session: Mobile ECM Apps with Nuxeo EPNuxeo World Session: Mobile ECM Apps with Nuxeo EP
Nuxeo World Session: Mobile ECM Apps with Nuxeo EP
 
Scaling webappswithrabbitmq
Scaling webappswithrabbitmqScaling webappswithrabbitmq
Scaling webappswithrabbitmq
 
Bar Camp Auckland - Mongo DB Presentation BCA4
Bar Camp Auckland - Mongo DB Presentation BCA4Bar Camp Auckland - Mongo DB Presentation BCA4
Bar Camp Auckland - Mongo DB Presentation BCA4
 
Mobile Development with uPortal and Infusion
Mobile Development with uPortal and InfusionMobile Development with uPortal and Infusion
Mobile Development with uPortal and Infusion
 
Multi Handset Development - ETE 2010
Multi Handset Development - ETE 2010Multi Handset Development - ETE 2010
Multi Handset Development - ETE 2010
 
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
AFCEA C4I Symposium: The 4th C in C4I Stands for Cloud:Factors Driving Adopti...
 
Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010
Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010
Implementing Groovy Domain-Specific Languages - S2G Forum - Munich 2010
 
Mozilla Research Party Talk
Mozilla Research Party TalkMozilla Research Party Talk
Mozilla Research Party Talk
 
.NET, OSS & Mono
.NET, OSS & Mono.NET, OSS & Mono
.NET, OSS & Mono
 
Moeller bosc2010 debian_taverna
Moeller bosc2010 debian_tavernaMoeller bosc2010 debian_taverna
Moeller bosc2010 debian_taverna
 
Open GeoSocial API
Open GeoSocial APIOpen GeoSocial API
Open GeoSocial API
 
Check Please!
Check Please!Check Please!
Check Please!
 
2023-My AI Experience - Colm Dunphy.pdf
2023-My AI Experience - Colm Dunphy.pdf2023-My AI Experience - Colm Dunphy.pdf
2023-My AI Experience - Colm Dunphy.pdf
 
More than a 1000 words
More than a 1000 wordsMore than a 1000 words
More than a 1000 words
 
PyData Texas 2015 Keynote
PyData Texas 2015 KeynotePyData Texas 2015 Keynote
PyData Texas 2015 Keynote
 
Webinar Mobile ECM Apps with Nuxeo EP
Webinar Mobile ECM Apps with Nuxeo EPWebinar Mobile ECM Apps with Nuxeo EP
Webinar Mobile ECM Apps with Nuxeo EP
 
Sylvain Bellemare Resume
Sylvain Bellemare ResumeSylvain Bellemare Resume
Sylvain Bellemare Resume
 
Mars - ESUG 2010
Mars - ESUG 2010Mars - ESUG 2010
Mars - ESUG 2010
 
Building Apps with PhoneGap
Building Apps with PhoneGap Building Apps with PhoneGap
Building Apps with PhoneGap
 
Microsoft & open source a 'brave new world' - CORESTART 2.0
Microsoft & open source a 'brave new world' - CORESTART 2.0Microsoft & open source a 'brave new world' - CORESTART 2.0
Microsoft & open source a 'brave new world' - CORESTART 2.0
 

Mehr von Francis Rowland

Speed sketching UX Cambridge 2011
Speed sketching UX Cambridge 2011Speed sketching UX Cambridge 2011
Speed sketching UX Cambridge 2011
Francis Rowland
 

Mehr von Francis Rowland (20)

Sabotage
Sabotage Sabotage
Sabotage
 
Visual note-taking: listening, learning, remembering
Visual note-taking: listening, learning, rememberingVisual note-taking: listening, learning, remembering
Visual note-taking: listening, learning, remembering
 
A UX Journey into the World of Early Drug Discovery - UX Cambridge 2015
A UX Journey into the World of Early Drug Discovery - UX Cambridge 2015A UX Journey into the World of Early Drug Discovery - UX Cambridge 2015
A UX Journey into the World of Early Drug Discovery - UX Cambridge 2015
 
Les super pouvoirs du sketching
Les super pouvoirs du sketchingLes super pouvoirs du sketching
Les super pouvoirs du sketching
 
Le Design Studio
Le Design StudioLe Design Studio
Le Design Studio
 
Useful questions to ask when designing data visualisations
Useful questions to ask when designing data visualisationsUseful questions to ask when designing data visualisations
Useful questions to ask when designing data visualisations
 
Jeux d'Innovation (FLUPA UX Day 2013)
Jeux d'Innovation (FLUPA UX Day 2013)Jeux d'Innovation (FLUPA UX Day 2013)
Jeux d'Innovation (FLUPA UX Day 2013)
 
What the heck are sketchnotes?
What the heck are sketchnotes?What the heck are sketchnotes?
What the heck are sketchnotes?
 
VIZBI 2013 - UX design tutorial
VIZBI 2013 - UX design tutorialVIZBI 2013 - UX design tutorial
VIZBI 2013 - UX design tutorial
 
User research: the gentle art of not asking users what they want
User research: the gentle art of not asking users what they wantUser research: the gentle art of not asking users what they want
User research: the gentle art of not asking users what they want
 
Design for Society
Design for SocietyDesign for Society
Design for Society
 
Why usability problems go unfixed - UX Bristol 2012
Why usability problems go unfixed - UX Bristol 2012Why usability problems go unfixed - UX Bristol 2012
Why usability problems go unfixed - UX Bristol 2012
 
Vizbi 2012 Takeaway
Vizbi 2012 TakeawayVizbi 2012 Takeaway
Vizbi 2012 Takeaway
 
The user experience of EGA data access
The user experience of EGA data accessThe user experience of EGA data access
The user experience of EGA data access
 
Speed sketching UX Cambridge 2011
Speed sketching UX Cambridge 2011Speed sketching UX Cambridge 2011
Speed sketching UX Cambridge 2011
 
Drupal at the EBI
Drupal at the EBIDrupal at the EBI
Drupal at the EBI
 
Reactome: Usability testing - is it useful?
Reactome: Usability testing - is it useful? Reactome: Usability testing - is it useful?
Reactome: Usability testing - is it useful?
 
Usability Testing is Easy! (redux)
Usability Testing is Easy! (redux)Usability Testing is Easy! (redux)
Usability Testing is Easy! (redux)
 
Usability Testing is Easy!
Usability Testing is Easy!Usability Testing is Easy!
Usability Testing is Easy!
 
Complementing Computation with Visualization in Genomics
Complementing Computation with Visualization in GenomicsComplementing Computation with Visualization in Genomics
Complementing Computation with Visualization in Genomics
 

Kürzlich hochgeladen

Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
ssuserdda66b
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
ciinovamais
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
heathfieldcps1
 

Kürzlich hochgeladen (20)

Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Graduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - EnglishGraduate Outcomes Presentation Slides - English
Graduate Outcomes Presentation Slides - English
 
How to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POSHow to Manage Global Discount in Odoo 17 POS
How to Manage Global Discount in Odoo 17 POS
 
Towards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptxTowards a code of practice for AI in AT.pptx
Towards a code of practice for AI in AT.pptx
 
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
ICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptxICT Role in 21st Century Education & its Challenges.pptx
ICT Role in 21st Century Education & its Challenges.pptx
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
On National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan FellowsOn National Teacher Day, meet the 2024-25 Kenan Fellows
On National Teacher Day, meet the 2024-25 Kenan Fellows
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Dyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptxDyslexia AI Workshop for Slideshare.pptx
Dyslexia AI Workshop for Slideshare.pptx
 
Python Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docxPython Notes for mca i year students osmania university.docx
Python Notes for mca i year students osmania university.docx
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17How to Create and Manage Wizard in Odoo 17
How to Create and Manage Wizard in Odoo 17
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
Spatium Project Simulation student brief
Spatium Project Simulation student briefSpatium Project Simulation student brief
Spatium Project Simulation student brief
 
Single or Multiple melodic lines structure
Single or Multiple melodic lines structureSingle or Multiple melodic lines structure
Single or Multiple melodic lines structure
 
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdfUGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
UGC NET Paper 1 Mathematical Reasoning & Aptitude.pdf
 

Cocoa for Scientists

  • 1. Cocoa for Scientists Matias Piipari Wellcome Trust Sanger Institute Friday, 21 May 2010
  • 6. Outline 1. What is Cocoa? Friday, 21 May 2010
  • 7. Outline 1. What is Cocoa? 2. What can I do with it? Friday, 21 May 2010
  • 8. Outline 1. What is Cocoa? 2. What can I do with it? 3. How can I learn more about it? Friday, 21 May 2010
  • 9. Outline 1. What is Cocoa? 2. What can I do with it? 3. How can I learn more about it? BONUS: A GUI design tutorial Friday, 21 May 2010
  • 10. What is Cocoa? Friday, 21 May 2010
  • 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
  • 29. NeXSTEP OPENSTEP Friday, 21 May 2010
  • 30. NeXSTEP OPENSTEP Cocoa Friday, 21 May 2010
  • 31. GNUStep NeXSTEP OPENSTEP Cocoa Friday, 21 May 2010
  • 32. Cocoa Touch GNUStep (iPhone OS) NeXSTEP OPENSTEP Cocoa Friday, 21 May 2010
  • 33. NeXTSTEP legacy is clear • AppKit (AppKit.h) • FoundationKit (Foundation.h) • “NS” prefix in the Cocoa foundation classes (NSObject, NSArray, ... ) • Bundles (.app, .pages, .keynote, etc) • Interface Builder Friday, 21 May 2010
  • 35. The Objective-C language • Object oriented language bolted onto ANSI C 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
  • 42. Cocoa design patterns • Model-View-Controller • Dependency Injection • Target-Action • Delegation • Responder chain • Facade • Decorator • Command Friday, 21 May 2010
  • 44. Quartz: drawing (DEMO) 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
  • 56. Networking & web services 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
  • 64. Networking & web services 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
  • 83. Scripting bridge • Python - Objective-C bridge: PyObjC Friday, 21 May 2010
  • 84. Scripting bridge • Python - Objective-C bridge: PyObjC • Ruby - Objective-C bridge: RubyCocoa Friday, 21 May 2010
  • 85. Scripting bridge • Python - Objective-C bridge: PyObjC • Ruby - Objective-C bridge: RubyCocoa • MacRuby: a ‘native’ Cocoa Ruby interpreter 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
  • 89. BioCocoa • Sequence I/O (DNA / RNA / protein) Friday, 21 May 2010
  • 90. BioCocoa • Sequence I/O (DNA / RNA / protein) • Annotations Friday, 21 May 2010
  • 91. BioCocoa • Sequence I/O (DNA / RNA / protein) • Annotations • Sequence alignments Friday, 21 May 2010
  • 92. BioCocoa • Sequence I/O (DNA / RNA / protein) • Annotations • Sequence alignments • Nothing like Bioruby / Bioperl... Friday, 21 May 2010
  • 93. BioCocoa • Sequence I/O (DNA / RNA / protein) • Annotations • Sequence alignments • Nothing like Bioruby / Bioperl... • Alternatives: Friday, 21 May 2010
  • 94. BioCocoa • Sequence I/O (DNA / RNA / protein) • Annotations • Sequence alignments • Nothing like Bioruby / Bioperl... • Alternatives: • scripting bridge + Bioruby / Biopython 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
  • 96. Fine... but it’s Mac only Friday, 21 May 2010
  • 97. ... or is it? 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
  • 101. Learning resources • http://mattgemmell.com/ • http://cocoawithlove.com/ • http://www.cocotron.org/blog/ • http://www.boyfarrell.com/tutorials/ • http://weblog.bignerdranch.com/ • http://abizern.org/ • http://cocoadev.com/ 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
  • 110. Interface Builder Tutorial Friday, 21 May 2010
  • 111. Target - Action Friday, 21 May 2010
  • 112. Bindings key-value observing Friday, 21 May 2010
  • 115. Biomartify • Goals 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