SlideShare ist ein Scribd-Unternehmen logo
1 von 176
Integrating with the
Photography Ecosystem
     on Mac OS X
The Ecosystem
The Ecosystem




    Image Capture
The Ecosystem



      Image IO



    Image Capture
The Ecosystem

Image Kit    Quicktime      Core Image



              Image IO



            Image Capture
The Ecosystem
 iPhoto       Aperture      Your App!



Image Kit    Quicktime      Core Image



              Image IO



            Image Capture
Today
 iPhoto       Aperture      Your App!



Image Kit    Quicktime      Core Image



              Image IO



            Image Capture
No Private APIs




    Photo: Trey Ratcliff/Flickr
RAW
Photo: Flickr user Svet
• Sensor data + decision data




                         Photo: Flickr user Svet
• Sensor data + decision data
• No processing in-camera




                         Photo: Flickr user Svet
• Sensor data + decision data
• No processing in-camera
• No compression




                         Photo: Flickr user Svet
• Sensor data + decision data
• No processing in-camera
• No compression
• Big Files




                         Photo: Flickr user Svet
• Sensor data + decision data
• No processing in-camera
• No compression
• Big Files
• Every camera needs specific
   support




                         Photo: Flickr user Svet
Photographers who
spend money on their
  craft shoot RAW.
Photographers who will
 buy your application
     shoot RAW.
Do not assume you can
 pretend that RAW
    doesn’t exist.
That said, you do not
  want to be on the
 treadmill of directly
   supporting RAW
       formats.
Even Apple struggles
     with that.
Let Lightroom,
Aperture or iPhoto
     handle it
Photography Workflow


Ingest   Metadata   Edit   Output
Workflow

            • Image Capture
            •
Ingest        Aperture

            • Lightroom
            • iPhoto
Workflow


Ingest   Metadata   Edit   Output
Workflow

             • Title
             •
Metadata       Captions

             • Copyright
             • Keywords
Metadata is a lot of
           effort: respect that
Metadata

                  effort.
GPS Metadata
           workflow still
Metadata

              sucks.
Temporary
Metadata
            problem.
One day, all cameras
            will write geodata
Metadata

                  to EXIF.
Workflow


Ingest   Metadata   Edit   Output
Workflow

       •   Photoshop: pixel editing

       •
Edit       iPhoto: Master + single Version

       •   Aperture: Master + Versions model
Master File
(usually RAW)
Default




  Core
 Image
 Recipe




            Master File
          (usually RAW)
Default   Exposure




  Core       Core
 Image      Image
 Recipe     Recipe




             Master File
           (usually RAW)
Default   Exposure    B &W




  Core       Core           Core
 Image      Image          Image
 Recipe     Recipe         Recipe




             Master File
           (usually RAW)
Default   Exposure    B &W          Crop




  Core       Core           Core     Core
 Image      Image          Image    Image
 Recipe     Recipe         Recipe   Recipe




             Master File
           (usually RAW)
{CI Recipe}
{CI Recipe}
{Image Record}




                               {CI Recipe}
{CI Recipe}
{Image Record}




                               {CI Recipe}
{CI Recipe}
What exists and when?

• Master file exists, but may be offline.
• A JPEG preview may exist.
• CI recipes exist in Aperture DB.
Preview generation is a
      preference
Workflow


Ingest   Metadata   Edit   Output
Workflow


Output
Workflow
         •   Version Export to disk


Output
Workflow
         •   Version Export to disk

         •   Media Browser
Output
Workflow
         •   Version Export to disk

         •   Media Browser
Output
         •   Drag & Drop previews out of Aperture
Workflow
         •   Version Export to disk

         •   Media Browser
Output
         •   Drag & Drop previews out of Aperture

         •   Export plugins
Media Browser
Media Browser

       •   No API for Apple’s Media
           Browser
Media Browser

       •   No API for Apple’s Media
           Browser

       •   Check out Karelia’s iMedia
           Browser

       •   karelia.com/imedia
Preview Fingerprint
Preview Fingerprint
Aperture writes its internal ID to the IPTC
     Special Instructions in previews.
Preview Fingerprint
Aperture writes its internal ID to the IPTC
     Special Instructions in previews.

 mRG3bpEnT0GOSJ9qNuxk+g
Preview Fingerprint
Aperture writes its internal ID to the IPTC
     Special Instructions in previews.

 mRG3bpEnT0GOSJ9qNuxk+g
  You can access versions by ID through
               AppleScript
The Ecosystem
 iPhoto       Aperture      Your App!



Image Kit    Quicktime      Core Image



              Image IO



            Image Capture
Image IO
 iPhoto         Aperture      Your App!



Image Kit      Quicktime      Core Image



                Image IO



              Image Capture
Your interface to RAW
Your interface to EXIF
      and IPTC
Your interface to
thumbnail generation
Part of
ApplicationServices
   framework
CGImageSource
CGImageSource

• CGImageSourceCreateWithURL()
CGImageSource

• CGImageSourceCreateWithURL()
• CGImageSourceCopyPropertiesAtIndex()
CGImageSource

• CGImageSourceCreateWithURL()
• CGImageSourceCopyPropertiesAtIndex()
• CGImageSourceCreateImageAtIndex()
CGImageSource

• CGImageSourceCreateWithURL()
• CGImageSourceCopyPropertiesAtIndex()
• CGImageSourceCreateImageAtIndex()
• CGImageSourceCreateThumbnailAtIndex()
CGImageSourceCopyPropertiesAtIndex()



• Returns a dictionary of key/value pairs
  representing image metadata.
• EXIF, IPTC, Manufacturer-specific fields
• Keys are defined in CGImageProperties.h
High-level dictionaries
           kCGImageProperty{*}Dictionary

•                           •
    TIFF                        MakerCanon
•                           •
    GIF                         MakerNikon
•                           •
    JFIF                        MakerMinolta
•                           •
    Exif                        MakerFuji
•                           •
    PNG                         MakerOlympus
•                           •
    IPTC                        MakerPentax
•                           •
    GPS                         8BIM
•                           •
    Raw                         DNG
•                           •
    CIFF                        ExifAux
EXIF Keys

• kCGImagePropertyExifExposureTime
• kCGImagePropertyExifFNumber
• kCGImagePropertyExifExposureProgram
• kCGImagePropertyExifFocalLength
• kCGImagePropertyExifISOSpeedRatings
• ...etc...
GPS Keys
• kCGImagePropertyGPSLatitude
• kCGImagePropertyGPSLongitude
• kCGImagePropertyGPSAltitude
• kCGImagePropertyGPSTimeStamp
• kCGImagePropertyGPSDOP
• ...etc...
#1 ImageIO Gotcha:
nothing is guaranteed.
Do not assume the
existence of any key in
    this dictionary.
After all, cameras come
    from hardware
manufacturers and they
never support anything
   entirely correctly.
CGImageSourceCreateImageAtIndex()


• Creates a CGImageRef from an image in
  the file.
• Most image files have one image, but there
  is support for multiple representations.
• CGImageSourceGetCount() tells you how
  many there are.
CGImageSourceCreateThumbnailAtIndex()



 • Creates a thumbnail from an index
 • Control thumbnail size with the options
   dictionary:
   • kCGImageSourceThumbnailMaxPixelSize
#2 ImageIO Gotcha:
can’t write RAW files.
This is not your
nibware geotagging API.
The Ecosystem
 iPhoto       Aperture      Your App!



Image Kit    Quicktime      Core Image



              Image IO



            Image Capture
Image Kit
 iPhoto         Aperture      Your App!



Image Kit      Quicktime      Core Image



                Image IO



              Image Capture
Image Kit: iPhoto in a box
Image Kit: iPhoto in a box

     IKImageBrowserView
        IKImageView
         IKSlideshow
       IKImageEditPanel
IKImageBrowserView
IKImageBrowserView
IKImageBrowserView
     provides:
IKImageBrowserView
     provides:
• Fast, scalable, memory-efficient thumbnail
  view.
IKImageBrowserView
     provides:
• Fast, scalable, memory-efficient thumbnail
  view.
• Zooming
IKImageBrowserView
     provides:
• Fast, scalable, memory-efficient thumbnail
  view.
• Zooming
• Selection
IKImageBrowserView
     provides:
• Fast, scalable, memory-efficient thumbnail
  view.
• Zooming
• Selection
• Grouping (iPhoto-style and Aperture-style)
IKGroupDisclosureStyle




  iPhoto: Thumbnails
IKGroupDisclosureStyle




  iPhoto: Thumbnails
IKGroupDisclosureStyle




  iPhoto: Thumbnails
IKGroupBezelStyle




 Aperture: Stacks
IKGroupBezelStyle




 Aperture: Stacks
IKGroupBezelStyle




 Aperture: Stacks
IKImageBrowserDataSource
IKImageBrowserDataSource

• Required:
IKImageBrowserDataSource

• Required:
 • -numberOfItemsInImageBrowser:
IKImageBrowserDataSource

• Required:
 • -numberOfItemsInImageBrowser:
 • -imageBrowser:itemAtIndex:
IKImageBrowserDataSource

• Required:
 • -numberOfItemsInImageBrowser:
 • -imageBrowser:itemAtIndex:
   • Returned item must implement
     IKImageBrowserItem protocol
IKImageBrowserItem

• Required:
 • - (NSString *) imageUID
 • - (NSString *) imageRepresentationType
   • Constants for supported types
 • - (id) imageRepresentation
IKImageBrowser{*}RepresentationType

 •                   •
     Path                QTMovie

 •                   •
     NSURL               QTMoviePath

 •                   •
     NSImage             QCComposition

 •                   •
     CGImage             QCCompositionPath

 •                   •
     CGImageSource       QuickLookPath

 •                   •
     NSData              IconRefPath

 •                   •
     NSBitmapImage       IconRef
IKImageBrowserDataSource
IKImageBrowserDataSource
• Optional:
IKImageBrowserDataSource
• Optional:
• -numberOfGroupsInImageBrowser:
IKImageBrowserDataSource
• Optional:
• -numberOfGroupsInImageBrowser:
• -(NSDictionary *)imageBrowser:groupAtIndex:
IKImageBrowserDataSource
• Optional:
• -numberOfGroupsInImageBrowser:
• -(NSDictionary *)imageBrowser:groupAtIndex:
 • IKImageBrowserGroupStyle
IKImageBrowserDataSource
• Optional:
• -numberOfGroupsInImageBrowser:
• -(NSDictionary *)imageBrowser:groupAtIndex:
 • IKImageBrowserGroupStyle
 • IKImageBrowserGroupBackgroundColorKey
IKImageBrowserDataSource
• Optional:
• -numberOfGroupsInImageBrowser:
• -(NSDictionary *)imageBrowser:groupAtIndex:
 • IKImageBrowserGroupStyle
 • IKImageBrowserGroupBackgroundColorKey
 • IKImageBrowserGroupTitleKey
IKImageBrowserDataSource
• Optional:
• -numberOfGroupsInImageBrowser:
• -(NSDictionary *)imageBrowser:groupAtIndex:
 • IKImageBrowserGroupStyle
 • IKImageBrowserGroupBackgroundColorKey
 • IKImageBrowserGroupTitleKey
 • IKImageBrowserGroupRangeKey
NSMakeRange(0,4)
NSMakeRange(0,4)



NSMakeRange(4,2)
NSMakeRange(0,4)



NSMakeRange(4,2)   NSMakeRange(6,2)
NSMakeRange(0,4)



NSMakeRange(4,2)   NSMakeRange(6,2)



    NSMakeRange(8,3)
Two Gotchas
Two Gotchas

• Constants for
  IKImageBrowserGroupStyleKey are defined
  in an enum, so pack them in NSNumber.
Two Gotchas

• Constants for
  IKImageBrowserGroupStyleKey are defined
  in an enum, so pack them in NSNumber.
• IKImageBrowserGroupRangeKey’s value
  should be an NSRange packed into an
  NSValue.
IKImageView
• Rotate
• Zoom
• Crop
• Drag & Drop
• Quite hard to customise for additional
  functionality
IKImageEditPanel
IKImageEditPanel
IKImageEditPanel
IKImageEditPanel
IKSlideshow
IKSlideshow
• Think: Quick Look slideshow in Finder.
IKSlideshow
• Think: Quick Look slideshow in Finder.
• IKSlideshowDataSource:
IKSlideshow
• Think: Quick Look slideshow in Finder.
• IKSlideshowDataSource:
 • -numberOfSlideshowItems
IKSlideshow
• Think: Quick Look slideshow in Finder.
• IKSlideshowDataSource:
 • -numberOfSlideshowItems
 • -slideshowItemAtIndex:
IKSlideshow
• Think: Quick Look slideshow in Finder.
• IKSlideshowDataSource:
 • -numberOfSlideshowItems
 • -slideshowItemAtIndex:
 • -nameOfSlideshowItemAtIndex:
IKSlideshow
• Think: Quick Look slideshow in Finder.
• IKSlideshowDataSource:
 • -numberOfSlideshowItems
 • -slideshowItemAtIndex:
 • -nameOfSlideshowItemAtIndex:
 • -canExportSlideshowItemAtIndex:
                        toApplication:
IKSlideshow items
IKSlideshow items
• No interface to implement, just return:
IKSlideshow items
• No interface to implement, just return:
 • NSImage
IKSlideshow items
• No interface to implement, just return:
 • NSImage
 • NSString (a path)
IKSlideshow items
• No interface to implement, just return:
 • NSImage
 • NSString (a path)
 • NSURL
IKSlideshow items
• No interface to implement, just return:
 • NSImage
 • NSString (a path)
 • NSURL
 • NSFileWrapper
IKSlideshow items
• No interface to implement, just return:
 • NSImage
 • NSString (a path)
 • NSURL
 • NSFileWrapper
 • CGImageRef
IKSlideshow items
• No interface to implement, just return:
 • NSImage
 • NSString (a path)
 • NSURL
 • NSFileWrapper
 • CGImageRef
 • PDFPage
The Ecosystem
 iPhoto       Aperture      Your App!



Image Kit    Quicktime      Core Image



              Image IO



            Image Capture
Aperture
 iPhoto         Aperture      Your App!



Image Kit      Quicktime      Core Image



                Image IO



              Image Capture
Export Plugins
Export Plugins
• Primary method of getting data from
  Aperture and iPhoto.
Export Plugins
• Primary method of getting data from
  Aperture and iPhoto.
• ObjC API-level access to Aperture
Export Plugins
• Primary method of getting data from
  Aperture and iPhoto.
• ObjC API-level access to Aperture
• Focus on Aperture, mostly also valid for
  iPhoto
Export Plugins
• Primary method of getting data from
  Aperture and iPhoto.
• ObjC API-level access to Aperture
• Focus on Aperture, mostly also valid for
  iPhoto
• SDKs for both apps from
  connect.apple.com
Process


Select   Export     Plugin UI   Rendering   Post-Export
Rendering
MyPlugin                                 ApertureExportManager



             -exportManagerShouldBeginExport

                    -shouldBeginExport

           -exportManagerWillBeginExportToPath:

      -exportManagerShouldExportImageAtIndex:
Rendering
MyPlugin                              ApertureExportManager



      exportManagerShouldWriteImageData:
         toRelativePath:forImageAtIndex:

exportManagerDidWriteImageDataToRelativePath:
              forImageAtIndex:

           -exportManagerDidFinishExport
Process: Post-Export


Post-Export
Process: Post-Export
              • Upload the images to the web
                • FlickrExport does all its upload
                  work in
                  exportManagerDidFinishExport
Post-Export
Process: Post-Export
              • Upload the images to the web
                • FlickrExport does all its upload
                  work in
                  exportManagerDidFinishExport
Post-Export



              • AppleScript another application to
                ingest them
Process: Post-Export
              • Upload the images to the web
                • FlickrExport does all its upload
                  work in
                  exportManagerDidFinishExport
Post-Export



              • AppleScript another application to
                ingest them

              • Burn a disc
Process: Post-Export
              • Upload the images to the web
                • FlickrExport does all its upload
                  work in
                  exportManagerDidFinishExport
Post-Export



              • AppleScript another application to
                ingest them

              • Burn a disc
              • Add metadata back to Aperture
Aperture Metadata

• - addKeywords:toImageAtIndex:
• - addHierarchicalKeywords:toImageAtIndex:
• - addCustomMetadataKeyValues:
                 toImageAtIndex:
Hierarchical Keywords




Events > Conferences > C4[2] > Craig Hockenberry
addKeywords:
toImageAtIndex:
addKeywords:
     toImageAtIndex:
• Be careful: all keywords become top-level
  keywords in Aperture’s hierarchy,
addKeywords:
     toImageAtIndex:
• Be careful: all keywords become top-level
  keywords in Aperture’s hierarchy,
• Mess
addKeywords:
     toImageAtIndex:
• Be careful: all keywords become top-level
  keywords in Aperture’s hierarchy,
• Mess
• Remember: photographers == picky
  curmudgeons obsessed with organisation
-addHierarchicalKeywords:
    toImageAtIndex:
NSArray *kwdOne = [NSArray arrayWithObjects:
    @”Foo”,
    @”Bar”,
    @”Baz”,
    nil];


NSArray *allKeywds = [NSArray arrayWithObject:
kwdOne];
-addHierarchicalKeywords:
    toImageAtIndex:
NSArray *kwdOne = [NSArray arrayWithObjects:
    @”Foo”,                Leaf Keyword
    @”Bar”,
    @”Baz”,
    nil];


NSArray *allKeywds = [NSArray arrayWithObject:
kwdOne];
-addHierarchicalKeywords:
    toImageAtIndex:
NSArray *kwdOne = [NSArray arrayWithObjects:
    @”Foo”,                Leaf Keyword
    @”Bar”,                   Parent
    @”Baz”,
    nil];


NSArray *allKeywds = [NSArray arrayWithObject:
kwdOne];
-addHierarchicalKeywords:
    toImageAtIndex:
NSArray *kwdOne = [NSArray arrayWithObjects:
    @”Foo”,                Leaf Keyword
    @”Bar”,                   Parent
    @”Baz”,                   Parent
    nil];


NSArray *allKeywds = [NSArray arrayWithObject:
kwdOne];
addCustomMetadataKeyValues:
      toImageAtIndex:

• Arbitrary dictionary of key/value pairs
• Must be NSStrings
• Appear in Aperture’s metadata inspector
• Can be used in Smart Album criteria
FlickrExport Example
• FlickrExport writes back:
 • Flickr ID
 • Flickr URL
• Knowing the Flickr ID of a version in
  Aperture lets FlickrExport do replacement
  on a re-export
Custom metadata




Custom
                       Value
 Key
[“Flickr ID” length] != 0
rating >= 3 &&
[“Flickr ID” length] == 0
iPhoto Limitations

• Can’t add metadata back to iPhoto
• Can’t create new keywords
• API has different method names, but
  conceptually almost identical
Thank You

• fraser@speirs.org
• @fraserspeirs
• http://speirs.org
• http://connectedflow.com

Weitere ähnliche Inhalte

Ähnlich wie Integrating with the Photography Ecosystem on Mac OS X

Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"
Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"
Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"LogeekNightUkraine
 
We should optimize images
We should optimize imagesWe should optimize images
We should optimize imagesShogo Sensui
 
Mo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformanceMo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformancejohncromartie
 
Jython on Django
Jython on DjangoJython on Django
Jython on Djangofwierzbicki
 
Getting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James HalpernGetting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James HalpernFITC
 
Altitude London 2018: A hands-on tour of Image Optimisation workshop
Altitude London 2018: A hands-on tour of Image Optimisation workshopAltitude London 2018: A hands-on tour of Image Optimisation workshop
Altitude London 2018: A hands-on tour of Image Optimisation workshopFastly
 
Conquering Gef Part2: Building graphical web-apps with Eclipse
Conquering Gef Part2: Building graphical web-apps with EclipseConquering Gef Part2: Building graphical web-apps with Eclipse
Conquering Gef Part2: Building graphical web-apps with EclipseVineet Sinha
 
Core image presentation
Core image presentationCore image presentation
Core image presentationKyle Stewart
 
Imagecon 2019 - Jon Sneyers
Imagecon 2019 - Jon Sneyers Imagecon 2019 - Jon Sneyers
Imagecon 2019 - Jon Sneyers Cloudinary
 
Evaluation question 6
Evaluation question 6Evaluation question 6
Evaluation question 6sj105479
 
My History with Atlassian Tools, and Why I'm Moving to Studio
My History with Atlassian Tools, and Why I'm Moving to StudioMy History with Atlassian Tools, and Why I'm Moving to Studio
My History with Atlassian Tools, and Why I'm Moving to StudioAtlassian
 
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationRendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationUnity Technologies
 
Guida cameraraw en
Guida cameraraw enGuida cameraraw en
Guida cameraraw enjvecinoso
 
New opportunities for Developers With GraalVM
New opportunities for Developers With GraalVMNew opportunities for Developers With GraalVM
New opportunities for Developers With GraalVMAlina Yurenko
 
Twiggy - let's get our widget on!
Twiggy - let's get our widget on!Twiggy - let's get our widget on!
Twiggy - let's get our widget on!Elliott Kember
 
GDC 2009: iPhone Development: Exploring The New Frontier
GDC 2009: iPhone Development: Exploring The New FrontierGDC 2009: iPhone Development: Exploring The New Frontier
GDC 2009: iPhone Development: Exploring The New FrontierNoel Llopis
 
Q7. technology
Q7. technologyQ7. technology
Q7. technologytorian95
 

Ähnlich wie Integrating with the Photography Ecosystem on Mac OS X (20)

Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"
Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"
Kostiantyn Yelisavenko "Mastering Macro Benchmarking in .NET"
 
We should optimize images
We should optimize imagesWe should optimize images
We should optimize images
 
Mo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformanceMo devtablet johncromartie-graphicsperformance
Mo devtablet johncromartie-graphicsperformance
 
Jython on Django
Jython on DjangoJython on Django
Jython on Django
 
Getting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James HalpernGetting Intimate with Images on Android with James Halpern
Getting Intimate with Images on Android with James Halpern
 
Altitude London 2018: A hands-on tour of Image Optimisation workshop
Altitude London 2018: A hands-on tour of Image Optimisation workshopAltitude London 2018: A hands-on tour of Image Optimisation workshop
Altitude London 2018: A hands-on tour of Image Optimisation workshop
 
Conquering Gef Part2: Building graphical web-apps with Eclipse
Conquering Gef Part2: Building graphical web-apps with EclipseConquering Gef Part2: Building graphical web-apps with Eclipse
Conquering Gef Part2: Building graphical web-apps with Eclipse
 
Paperclip
PaperclipPaperclip
Paperclip
 
Core image presentation
Core image presentationCore image presentation
Core image presentation
 
Flowframes
FlowframesFlowframes
Flowframes
 
Imagecon 2019 - Jon Sneyers
Imagecon 2019 - Jon Sneyers Imagecon 2019 - Jon Sneyers
Imagecon 2019 - Jon Sneyers
 
Evaluation question 6
Evaluation question 6Evaluation question 6
Evaluation question 6
 
My History with Atlassian Tools, and Why I'm Moving to Studio
My History with Atlassian Tools, and Why I'm Moving to StudioMy History with Atlassian Tools, and Why I'm Moving to Studio
My History with Atlassian Tools, and Why I'm Moving to Studio
 
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationRendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
 
Guida cameraraw en
Guida cameraraw enGuida cameraraw en
Guida cameraraw en
 
New opportunities for Developers With GraalVM
New opportunities for Developers With GraalVMNew opportunities for Developers With GraalVM
New opportunities for Developers With GraalVM
 
Twiggy - let's get our widget on!
Twiggy - let's get our widget on!Twiggy - let's get our widget on!
Twiggy - let's get our widget on!
 
GDC 2009: iPhone Development: Exploring The New Frontier
GDC 2009: iPhone Development: Exploring The New FrontierGDC 2009: iPhone Development: Exploring The New Frontier
GDC 2009: iPhone Development: Exploring The New Frontier
 
PNGHack 1.0 Presentation
PNGHack 1.0 PresentationPNGHack 1.0 Presentation
PNGHack 1.0 Presentation
 
Q7. technology
Q7. technologyQ7. technology
Q7. technology
 

Kürzlich hochgeladen

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 

Kürzlich hochgeladen (20)

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 

Integrating with the Photography Ecosystem on Mac OS X

Hinweis der Redaktion

  1. Nikon Coolpix P6000 with GPS.
  2. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.
  3. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.
  4. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.
  5. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.
  6. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.
  7. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.
  8. Note that IKImageBrowserGroupRangeKey takes the location of the first image in the group whilst the method parameter _index_ refers to the index of the group.