The document provides an overview of iOS 5 development using Objective-C. It begins with introductions and contact information, then outlines the agenda which includes a review of Objective-C and iOS, an overview of new iOS 5 features, and a demonstration of the Lobstagram app. The document then discusses iOS development requirements and provides a 10 minute crash course on Objective-C, covering classes, methods, properties, and implementation.
The document provides an overview of options for iOS development including HTML5, cross-platform frameworks like Titanium and PhoneGap, and native iOS development using Objective-C. HTML5 allows using existing web technologies but has limited hardware access and cross-browser issues. Cross-platform frameworks provide better hardware access but compatibility may vary. Native development using Objective-C offers the most control and best performance but only works on iOS. Xcode is used for native iOS development. An introduction to Objective-C covers classes, methods, and basic syntax similar to C with object-oriented additions.
This document discusses object-oriented programming concepts like inheritance, subtyping, and polymorphism. It uses an example database application called DoME to demonstrate how inheritance can be used to avoid code duplication between similar classes like CD and Video. The key concepts covered are defining subclasses that inherit from a common superclass, allowing subclass objects to be used where the superclass is expected, and storing heterogeneous objects in polymorphic collections.
Building High Performance Android Applications in Java and C++Kenneth Geisshirt
This document discusses building high-performance Android applications using Java and C++. It covers using the Java Native Interface (JNI) to call C/C++ code from Java, mapping between Java and C/C++ types, memory management across languages, and logging and debugging native code. An example is provided of estimating pi by throwing virtual darts, implemented in pure Java, pure C++, and a mixture using JNI. Key steps like generating header files, building native code, and throwing Java exceptions from native code are explained.
The document discusses Guild, a new concurrency abstraction for Ruby that allows parallel execution across Guilds while avoiding data races. It provides demonstrations of Guild performance on a 40 vCPU system. Guilds allow sharing immutable and specially defined mutable objects between Guilds, while normal mutable objects cannot be shared to avoid data races. Inter-Guild communication uses an actor model with sending/receiving semantics. Non-shareable objects can be sent between Guilds either by copying or moving ownership.
The document provides an introduction to the Java Virtual Machine (JVM) bytecode and JIT compiler. It discusses how bytecode works, including inspection, generation and the bytecode instructions. It also covers how the JIT compiler works and is monitored. Examples of viewing bytecode with javap and generating bytecode with BiteScript are provided.
The document discusses strategies for improving the startup performance of JRuby. It describes how the JRuby team optimized startup by using a Java-heavy JDK instead of native code, tweaking JVM flags, and implementing Drip - a technique that pre-boots the JVM and caches runtime configurations between runs. Drip reduced JRuby startup times from over 10 seconds to under 1 second for many common tasks. Later, it discusses challenges with JNI and how the Java Native Runtime (JNR) provides a better alternative for interfacing Java with native code and libraries.
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Thoughtworks
3 years ago, Springer decided to use Scala on a large, strategic project. This talk is about the journey the development teams made. Why did they choose Scala in the first place? Did they get what they hoped for? What challenges and surprises did they encounter along the way? And, most importantly, are they still happy with their choice?
The document discusses the agenda for an Enterprise JavaScript session, which includes recapping functions, exceptions, and the history object in JavaScript. It then goes into detail on the typeof operator, function properties like arguments and this, and how to use the call and apply methods. Hands-on exercises demonstrate working with arguments and exceptions. Finally, the document explains how the history object works and how HTML5 introduced new methods like pushState and replaceState to programmatically modify the browser history.
The document provides an overview of options for iOS development including HTML5, cross-platform frameworks like Titanium and PhoneGap, and native iOS development using Objective-C. HTML5 allows using existing web technologies but has limited hardware access and cross-browser issues. Cross-platform frameworks provide better hardware access but compatibility may vary. Native development using Objective-C offers the most control and best performance but only works on iOS. Xcode is used for native iOS development. An introduction to Objective-C covers classes, methods, and basic syntax similar to C with object-oriented additions.
This document discusses object-oriented programming concepts like inheritance, subtyping, and polymorphism. It uses an example database application called DoME to demonstrate how inheritance can be used to avoid code duplication between similar classes like CD and Video. The key concepts covered are defining subclasses that inherit from a common superclass, allowing subclass objects to be used where the superclass is expected, and storing heterogeneous objects in polymorphic collections.
Building High Performance Android Applications in Java and C++Kenneth Geisshirt
This document discusses building high-performance Android applications using Java and C++. It covers using the Java Native Interface (JNI) to call C/C++ code from Java, mapping between Java and C/C++ types, memory management across languages, and logging and debugging native code. An example is provided of estimating pi by throwing virtual darts, implemented in pure Java, pure C++, and a mixture using JNI. Key steps like generating header files, building native code, and throwing Java exceptions from native code are explained.
The document discusses Guild, a new concurrency abstraction for Ruby that allows parallel execution across Guilds while avoiding data races. It provides demonstrations of Guild performance on a 40 vCPU system. Guilds allow sharing immutable and specially defined mutable objects between Guilds, while normal mutable objects cannot be shared to avoid data races. Inter-Guild communication uses an actor model with sending/receiving semantics. Non-shareable objects can be sent between Guilds either by copying or moving ownership.
The document provides an introduction to the Java Virtual Machine (JVM) bytecode and JIT compiler. It discusses how bytecode works, including inspection, generation and the bytecode instructions. It also covers how the JIT compiler works and is monitored. Examples of viewing bytecode with javap and generating bytecode with BiteScript are provided.
The document discusses strategies for improving the startup performance of JRuby. It describes how the JRuby team optimized startup by using a Java-heavy JDK instead of native code, tweaking JVM flags, and implementing Drip - a technique that pre-boots the JVM and caches runtime configurations between runs. Drip reduced JRuby startup times from over 10 seconds to under 1 second for many common tasks. Later, it discusses challenges with JNI and how the Java Native Runtime (JNR) provides a better alternative for interfacing Java with native code and libraries.
Scala in-practice-3-years by Patric Fornasier, Springr, presented at Pune Sca...Thoughtworks
3 years ago, Springer decided to use Scala on a large, strategic project. This talk is about the journey the development teams made. Why did they choose Scala in the first place? Did they get what they hoped for? What challenges and surprises did they encounter along the way? And, most importantly, are they still happy with their choice?
The document discusses the agenda for an Enterprise JavaScript session, which includes recapping functions, exceptions, and the history object in JavaScript. It then goes into detail on the typeof operator, function properties like arguments and this, and how to use the call and apply methods. Hands-on exercises demonstrate working with arguments and exceptions. Finally, the document explains how the history object works and how HTML5 introduced new methods like pushState and replaceState to programmatically modify the browser history.
Fast as C: How to Write Really Terrible JavaCharles Nutter
For years we’ve been told that the JVM’s amazing optimizers can take your running code and make it “fast” or “as fast as C++” or “as fast as C”…or sometimes “faster than C”. And yet we don’t often see this happen in practice, due in large part to (good and bad) development patterns that have taken hold in the Java world.
In this talk, we’ll explore the main reasons why Java code rarely runs as fast as C or C++ and how you can write really bad Java code that the JVM will do a better job of optimizing. We’ll take some popular microbenchmarks and burn them to the ground, monitoring JIT logs and assembly dumps along the way.
This document introduces dependency injection (DI), a design pattern that allows for flexible organization of classes. DI frameworks allow objects to be constructed and injected with their dependencies automatically based on configuration, avoiding hardcoded dependencies. Aspect oriented programming (AOP) allows cross-cutting concerns like logging or error handling to be defined separately from application code. Inversion of control (IOC) "flips" construction such that classes request fully initialized dependencies rather than constructing them directly. DI promotes loose coupling, testability, and flexibility in swapping implementations.
Kenneth Geisshirt gave a presentation on extending Node.js using C++. He covered why to write extensions in C++, demo C++ classes, building extensions, wrapping classes, methods, callbacks, exceptions, and more. The goal was to learn the basics of V8 internals, wrapping C++ classes, and writing an extension.
Type Profiler: An Analysis to guess type signaturesmametter
This document discusses type profiling, which is a technique for extracting type information from Ruby code without requiring type annotations. It proposes three type profilers:
1. Static Analysis 1 (SA1) guesses type signatures for method parameters based on which methods are called on those parameters.
2. Static Analysis 2 (SA2) focuses on guessing types for built-in classes.
3. Dynamic Analysis (DA) enhances the existing RubyTypeInference tool by running test suites and monitoring method calls and returns to aggregate type information.
The document evaluates SA1 on a sample WEBrick codebase and finds some common failures in the guessed types. Overall, type profiling aims to extract type information automatically as an alternative
This document presents an agenda for becoming a "console cowboy" by learning to be more productive using the terminal and bash shell. It covers the basic terminal tools, bash usage and configuration, utilities like grep, sed and awk, scripting with variables, conditionals and loops, and tools for developers like Homebrew, Git, Xcode and xcpretty. The goal is to stop using the mouse and automate work by writing scripts to harness the power of the Unix command line.
Louis Loizides iOS Programming IntroductionLou Loizides
This document provides an introduction and overview of iOS development using Objective-C. It discusses key concepts like classes, inheritance, memory management, and pointers. It also covers setting up an iOS development environment with Xcode and Cocoa Touch frameworks. Specific topics covered include Objective-C syntax and conventions, the stack and heap, creating and initializing classes, and using Automatic Reference Counting for memory management.
This document provides an overview of iOS development using Objective-C. It discusses key concepts like classes, inheritance, pointers and memory management. It also covers setting up development with Xcode on Mac, and recommends books for learning iPhone programming and Objective-C.
Slides from Ajax Experience 2009. In this session:
- Object creation patterns
- Code reuse patterns
- Functional patterns
- More on object creation
- Design patterns
Some example patterns: object creation with literals and constructos, prototypes, inheritance and other code reuse patterns, lazy definition, callbacks, singleton, factory, classical and prototypal inheritance, namespaces, chaining, modules, static methods, private and privileged members
For more information, see:
http://jspatterns.com
My column in the JavaScript Magazine (http://jsmag.com)
Blog: http://phpied.com
This document provides an agenda and notes for a talk on optimizing Scala code to solve real-world problems without explosions, broken thumbs, or bullet wounds. The agenda includes discussing mantras, collection functions, implicits, and style. It emphasizes writing expressions instead of statements, avoiding null, staying immutable, using options instead of null checks, and limiting the scope of implicits. It also covers collection functions, type classes, and breaking out of for-comprehensions. The overall message is to write clear, concise Scala code using best practices around expressions, immutability, and type safety.
This document provides an overview of Groovy, a dynamic language for the Java Virtual Machine. It discusses Groovy's features like properties, closures, and integration with Java. The document outlines what's new in Groovy 1.5, including Java 5 features like annotations and generics. It also covers how to integrate Groovy in applications using mechanisms like the GroovyShell and GroovyClassLoader. The presentation aims to help attendees learn about Groovy and how they can use it in their projects.
Writing native bindings to node.js in C++nsm.nikhil
The document provides an overview of how to build a C/C++ link to the V8 JavaScript engine and Node.js in order to use C/C++ libraries and functions in Node.js. It discusses topics like initializing V8, handling handles, injecting primitives, defining functions and objects, adding methods, asynchronous I/O, and linking external libraries. Code examples are provided for basic functions, objects, inheritance using ObjectWrap, and asynchronous functions.
This document summarizes Eugene Lazutkin's talk on programmer's tools and how Dojo supports different programming paradigms in JavaScript. The talk discusses code structuring techniques like modules, object-oriented programming, mixins, and how Dojo implements these patterns through features like dojo.declare and dojo.require. It also mentions asynchronous programming tools in Dojo and other topics not covered in the talk like widgets and graphics.
JRuby 9000 introduced a new intermediate representation that allows us to use classic compiler strategies to optimize Ruby. This talk describes what we're doing with this new IR and why current JVM capabilities are not sufficient.
Slides della sessione su Automatic Reference Counting, tenuta da Giuseppe Arici alla WhyMCA 2012.
http://www.whymca.org/intervento/automatic-reference-counting
This document summarizes Hamlet D'Arcy's presentation on AST transformations using tools like Lombok, Groovy, CodeNarc, and Mirah. It discusses how these tools allow manipulating abstract syntax trees to add functionality like automatic property generation, static analysis, and embedded domain-specific languages. Local AST transformations are performed without changing bytecode or requiring new semantics. Type checking can also be added through transformations. Mirah compiles to pure Java classes without additional syntax.
Down the Rabbit Hole: An Adventure in JVM WonderlandCharles Nutter
The document discusses exploring interesting Java features and how they are compiled and executed by the JVM. It will look at bytecode, compiler logs, and native code generated for simple Java examples. The goal is to understand hidden performance costs, how code design impacts performance, and what the JVM can and cannot optimize. It begins with a "Hello World" example and examines the bytecode, compiler logs showing inlining, and native assembly code generated by the JIT compiler.
JRuby 9000 - Taipei Ruby User's Group 2015Charles Nutter
The document discusses JRuby 9000, a new version of JRuby that runs on a new runtime based on an intermediate representation (IR). Some key points:
- JRuby 9000 includes major performance improvements like just-in-time compiling of blocks and optimized define_method performance.
- The new runtime represents code as IR instructions instead of an AST for better optimization capabilities. It allows registering passes to optimize the IR.
- Future work includes improved inlining, numeric specialization to use primitives on the JVM, and leveraging ahead-of-time compilation capabilities being added to the JVM to improve startup time.
- The overall goal is to continue optimizing JRuby to perform
This document provides an agenda for an iOS 5 kick-start presentation, including origins of iOS, Xcode 4, Objective-C, iOS/MVC architecture, and a case study of an ISELTech Twitter app. The presentation covers the history and development of iOS, the Xcode integrated development environment, the Objective-C programming language, the iOS model-view-controller design pattern, and demonstrates an example Twitter app project to illustrate iOS/MVC concepts.
This document provides an overview of iOS development using Objective-C. It discusses that Objective-C is a superset of C that uses message passing and is based on interfaces and implementations. The document also provides a simple code example of an iOS app lifecycle using AppDelegate and ViewController, and demonstrates adding a web view to display content. It concludes by advertising that the company TAGonSoft is hiring.
Fast as C: How to Write Really Terrible JavaCharles Nutter
For years we’ve been told that the JVM’s amazing optimizers can take your running code and make it “fast” or “as fast as C++” or “as fast as C”…or sometimes “faster than C”. And yet we don’t often see this happen in practice, due in large part to (good and bad) development patterns that have taken hold in the Java world.
In this talk, we’ll explore the main reasons why Java code rarely runs as fast as C or C++ and how you can write really bad Java code that the JVM will do a better job of optimizing. We’ll take some popular microbenchmarks and burn them to the ground, monitoring JIT logs and assembly dumps along the way.
This document introduces dependency injection (DI), a design pattern that allows for flexible organization of classes. DI frameworks allow objects to be constructed and injected with their dependencies automatically based on configuration, avoiding hardcoded dependencies. Aspect oriented programming (AOP) allows cross-cutting concerns like logging or error handling to be defined separately from application code. Inversion of control (IOC) "flips" construction such that classes request fully initialized dependencies rather than constructing them directly. DI promotes loose coupling, testability, and flexibility in swapping implementations.
Kenneth Geisshirt gave a presentation on extending Node.js using C++. He covered why to write extensions in C++, demo C++ classes, building extensions, wrapping classes, methods, callbacks, exceptions, and more. The goal was to learn the basics of V8 internals, wrapping C++ classes, and writing an extension.
Type Profiler: An Analysis to guess type signaturesmametter
This document discusses type profiling, which is a technique for extracting type information from Ruby code without requiring type annotations. It proposes three type profilers:
1. Static Analysis 1 (SA1) guesses type signatures for method parameters based on which methods are called on those parameters.
2. Static Analysis 2 (SA2) focuses on guessing types for built-in classes.
3. Dynamic Analysis (DA) enhances the existing RubyTypeInference tool by running test suites and monitoring method calls and returns to aggregate type information.
The document evaluates SA1 on a sample WEBrick codebase and finds some common failures in the guessed types. Overall, type profiling aims to extract type information automatically as an alternative
This document presents an agenda for becoming a "console cowboy" by learning to be more productive using the terminal and bash shell. It covers the basic terminal tools, bash usage and configuration, utilities like grep, sed and awk, scripting with variables, conditionals and loops, and tools for developers like Homebrew, Git, Xcode and xcpretty. The goal is to stop using the mouse and automate work by writing scripts to harness the power of the Unix command line.
Louis Loizides iOS Programming IntroductionLou Loizides
This document provides an introduction and overview of iOS development using Objective-C. It discusses key concepts like classes, inheritance, memory management, and pointers. It also covers setting up an iOS development environment with Xcode and Cocoa Touch frameworks. Specific topics covered include Objective-C syntax and conventions, the stack and heap, creating and initializing classes, and using Automatic Reference Counting for memory management.
This document provides an overview of iOS development using Objective-C. It discusses key concepts like classes, inheritance, pointers and memory management. It also covers setting up development with Xcode on Mac, and recommends books for learning iPhone programming and Objective-C.
Slides from Ajax Experience 2009. In this session:
- Object creation patterns
- Code reuse patterns
- Functional patterns
- More on object creation
- Design patterns
Some example patterns: object creation with literals and constructos, prototypes, inheritance and other code reuse patterns, lazy definition, callbacks, singleton, factory, classical and prototypal inheritance, namespaces, chaining, modules, static methods, private and privileged members
For more information, see:
http://jspatterns.com
My column in the JavaScript Magazine (http://jsmag.com)
Blog: http://phpied.com
This document provides an agenda and notes for a talk on optimizing Scala code to solve real-world problems without explosions, broken thumbs, or bullet wounds. The agenda includes discussing mantras, collection functions, implicits, and style. It emphasizes writing expressions instead of statements, avoiding null, staying immutable, using options instead of null checks, and limiting the scope of implicits. It also covers collection functions, type classes, and breaking out of for-comprehensions. The overall message is to write clear, concise Scala code using best practices around expressions, immutability, and type safety.
This document provides an overview of Groovy, a dynamic language for the Java Virtual Machine. It discusses Groovy's features like properties, closures, and integration with Java. The document outlines what's new in Groovy 1.5, including Java 5 features like annotations and generics. It also covers how to integrate Groovy in applications using mechanisms like the GroovyShell and GroovyClassLoader. The presentation aims to help attendees learn about Groovy and how they can use it in their projects.
Writing native bindings to node.js in C++nsm.nikhil
The document provides an overview of how to build a C/C++ link to the V8 JavaScript engine and Node.js in order to use C/C++ libraries and functions in Node.js. It discusses topics like initializing V8, handling handles, injecting primitives, defining functions and objects, adding methods, asynchronous I/O, and linking external libraries. Code examples are provided for basic functions, objects, inheritance using ObjectWrap, and asynchronous functions.
This document summarizes Eugene Lazutkin's talk on programmer's tools and how Dojo supports different programming paradigms in JavaScript. The talk discusses code structuring techniques like modules, object-oriented programming, mixins, and how Dojo implements these patterns through features like dojo.declare and dojo.require. It also mentions asynchronous programming tools in Dojo and other topics not covered in the talk like widgets and graphics.
JRuby 9000 introduced a new intermediate representation that allows us to use classic compiler strategies to optimize Ruby. This talk describes what we're doing with this new IR and why current JVM capabilities are not sufficient.
Slides della sessione su Automatic Reference Counting, tenuta da Giuseppe Arici alla WhyMCA 2012.
http://www.whymca.org/intervento/automatic-reference-counting
This document summarizes Hamlet D'Arcy's presentation on AST transformations using tools like Lombok, Groovy, CodeNarc, and Mirah. It discusses how these tools allow manipulating abstract syntax trees to add functionality like automatic property generation, static analysis, and embedded domain-specific languages. Local AST transformations are performed without changing bytecode or requiring new semantics. Type checking can also be added through transformations. Mirah compiles to pure Java classes without additional syntax.
Down the Rabbit Hole: An Adventure in JVM WonderlandCharles Nutter
The document discusses exploring interesting Java features and how they are compiled and executed by the JVM. It will look at bytecode, compiler logs, and native code generated for simple Java examples. The goal is to understand hidden performance costs, how code design impacts performance, and what the JVM can and cannot optimize. It begins with a "Hello World" example and examines the bytecode, compiler logs showing inlining, and native assembly code generated by the JIT compiler.
JRuby 9000 - Taipei Ruby User's Group 2015Charles Nutter
The document discusses JRuby 9000, a new version of JRuby that runs on a new runtime based on an intermediate representation (IR). Some key points:
- JRuby 9000 includes major performance improvements like just-in-time compiling of blocks and optimized define_method performance.
- The new runtime represents code as IR instructions instead of an AST for better optimization capabilities. It allows registering passes to optimize the IR.
- Future work includes improved inlining, numeric specialization to use primitives on the JVM, and leveraging ahead-of-time compilation capabilities being added to the JVM to improve startup time.
- The overall goal is to continue optimizing JRuby to perform
This document provides an agenda for an iOS 5 kick-start presentation, including origins of iOS, Xcode 4, Objective-C, iOS/MVC architecture, and a case study of an ISELTech Twitter app. The presentation covers the history and development of iOS, the Xcode integrated development environment, the Objective-C programming language, the iOS model-view-controller design pattern, and demonstrates an example Twitter app project to illustrate iOS/MVC concepts.
This document provides an overview of iOS development using Objective-C. It discusses that Objective-C is a superset of C that uses message passing and is based on interfaces and implementations. The document also provides a simple code example of an iOS app lifecycle using AppDelegate and ViewController, and demonstrates adding a web view to display content. It concludes by advertising that the company TAGonSoft is hiring.
'Development using iOS5 NewStuff' keynote for #IDOC2012. Bandung, 18th February 2012.
- iCloud Storage
- CoreImage
- NewsStand
Demo and sample code : https://github.com/DeenNa
The document provides an overview of iOS app development basics including building a "Hello World" app, application architecture and states, coding in Objective-C, short message sending, storyboarding, and static table views. It discusses setting up an Xcode project, the app delegate, view controllers, windows, and application states like active, background, and suspended. It also covers Objective-C basics like properties, accessors, and blocks.
New features in iOS 5 include iCloud for syncing content across devices, Notification Center for managing alerts, iMessage for messaging between iOS 5 users, and Newsstand for organizing magazine and newspaper subscriptions. Additional features are Reminders, integrated Twitter support, camera and photo enhancements, and PC-free backup and updating using iCloud. iOS 5 also brings multitasking gestures and AirPlay mirroring to the iPad as well as new features for Safari, Mail, Calendar, Game Center, and Wi-Fi sync. Developers benefit from tools like Automatic Reference Counting and the new LLVM compiler in Xcode 4.2.
The document summarizes key points from an iOS 5 Tech Talk in Rome about developing applications for iOS 5. It outlines new technologies in iOS 5 like AirPlay and iCloud and encourages developers to take advantage of these features. Developers are urged to focus on user interface, prioritize touch experience, use gestures and animations, iterate through prototyping, and ensure their apps meet high quality standards. Several example applications are referenced.
iOS 5 introduces a new notification center that makes notifications more prominent and engaging, Twitter integration that allows for easy sharing from apps, the ability to download updates, music, and apps without a PC, iCloud for seamless access to data across devices, and iMessage for integrated messaging. These changes will affect marketers by providing more effective ways to use notifications, enabling mass reach through Twitter, ensuring consumers have the latest version of apps and OS, allowing brands to be experienced uniformly across platforms, and potentially spurring new messaging channels for brands to engage in conversations.
iOS is a mobile operating system created by Apple that originally launched on the iPhone in 2007. It has since expanded to support iPod touch, iPad, and Apple TV devices. The operating system is updated annually and has added many new features over time, such as app store functionality, Siri voice assistant, iCloud services, and more. Applications available on iOS include native apps designed specifically for the platform, hybrid apps that are web-based but wrapped in a native container, and web apps that run within a mobile browser. Popular app categories include games, social media, productivity, entertainment, and more.
This document provides an overview of mobile development and the iOS ecosystem. It discusses that mobile apps require UI optimization and a mission statement. It also covers Xcode, Objective-C, memory management, UIKit, MapKit, and annotations for displaying locations on maps. The document recommends designing mobile apps differently than desktop apps and following Apple's human interface guidelines.
Objective-C is an object-oriented language built on C that uses message passing. It is used for programming Mac and iOS apps. The document explains key Objective-C concepts like classes, properties, inheritance, initialization, and categories. It also recommends resources for learning more about MVC, delegation, blocks, KVO/KVC, the runtime, and other advanced Objective-C features.
The document provides an overview of writing idiomatic Objective-C code. It discusses key Objective-C concepts like classes, methods, memory management with ARC, properties, protocols, threading with GCD, blocks, and common design patterns used in Apple's frameworks like MVC, target-action, KVC, and delegation. It emphasizes adopting Apple's conventions for naming, file organization, and other practices to write code that fits with Cocoa frameworks.
The document provides an overview of iOS development basics including the iOS ecosystem, development tools like Xcode and Instruments, Objective-C language syntax, UI elements, memory management, and connecting to network resources. It covers setting up an iOS developer account, provisioning profiles, and submitting apps to the App Store. Key classes for networking like NSURL, NSURLRequest, and NSURLConnection are introduced along with using delegates and data sources. Parsing JSON and XML is also briefly discussed.
The document provides an overview of topics to be covered in an iPhone application development course, including:
1. The course schedule covers Objective-C basics, the MVC design pattern, networking services like Facebook API and location-based services.
2. Resources for self-study include the Stanford iOS course, Apple documentation, and books like "iOS Programming: The Big Nerd Ranch Guide."
3. Today's topics are the iPhone SDK, Objective-C language basics, common foundation classes, and creating a first iPhone application.
Никита Корчагин - Programming Apple iOS with Objective-CDataArt
This document provides an overview of programming iOS apps with Objective-C, including how to get started, the Objective-C and Swift languages, Model-View-Controller (MVC) pattern, differences between desktop and mobile development, and human interface guidelines. Key topics covered include installing the necessary software, understanding core Objective-C concepts like classes, methods, and memory management, using view controllers and the MVC pattern to structure apps, and important considerations for mobile like limited resources and touch interfaces.
Cappuccino - A Javascript Application FrameworkAndreas Korth
Cappuccino is a framework for building desktop-class applications for the web. It is based on Objective-J, an object-oriented language extension to Javascript.
The document discusses Objective-C classes and instances. It explains that classes have interfaces defined in .h files and implementations in .m files. Cocoa classes can only be interacted with through header files, not source code. The document also covers how instances are created, either from factory methods or by alloc-init, as well as nib-based instantiation. Keywords like self and super, instance variables, accessors, and properties are also summarized.
C++ was originally developed as an extension of C to add object-oriented capabilities. While C++ retains much of C's syntax and functionality, it introduces important new concepts like classes, objects, and inheritance. A class defines the common properties and behaviors (methods) that objects of that class will have. Objects are instances of classes that allocate memory at runtime. This allows C++ to support object-oriented programming by encapsulating data into objects that can receive messages.
The document discusses Python objects and types. It covers key concepts like object-oriented programming in Python, classes and instances, namespaces, scoping, and exception handling. Some main points include:
- Everything in Python is an object with an identity, type, and value. Objects live in dynamic namespaces and can be accessed via names.
- Classes are type objects that act as templates for creating instances when called. Instances are objects with the same methods and attributes as its class.
- Namespaces are where names are mapped to objects. Python has module, class, and instance namespaces that follow LEGB scoping rules.
- Exceptions are class objects that inherit from the built-in Exception class. The raise statement is used
Dependency Injection: Why is awesome and why should I care?devObjective
This document introduces dependency injection (DI), a design pattern that allows for flexible organization of classes. DI frameworks allow objects to be constructed and injected with their dependencies automatically based on configuration, avoiding hardcoded dependencies. Aspect oriented programming (AOP) allows cross-cutting concerns like logging or error handling to be defined separately from application code. Inversion of control (IOC) "flips" construction such that classes request fully initialized dependencies rather than constructing them directly. DI promotes loose coupling, testability, and flexibility in swapping implementations.
"JavaScript in 2016" by Eduard Tomàs
Some years ago in a far far away company, Brendan Eich created JavaScript. A lot of things happened since then. Times changed, the web grown, the language itself was updated, and we as a developers need to adapt too. Last year the last standard of the language arose: ECMAScript 2015 is here, and has some new and interesting features. In this talk we will show the most relevant ones, and also we will introduce some interesting patterns that you can use in JavaScript: you'll learn how to master the language and made JavaScript your best ally to conquest the world!
Swift is a new programming language that is statically typed, multi-paradigm, and designed to work with Cocoa and Cocoa Touch. It features modern language elements like optionals, generics, closures, and pattern matching. Swift code is compiled to native executables making it performant, and it is designed to bridge seamlessly with Objective-C and Cocoa allowing existing iOS and OS X apps to migrate code over.
Objective-C for iOS Application DevelopmentDhaval Kaneria
The document provides an introduction to Objective-C and iPhone development. It discusses key aspects of Objective-C including its syntax which extends C with object-oriented capabilities. Objective-C uses class definitions with interfaces and implementations. Programs create class instances that can receive messages to call methods. Classes can inherit from superclasses and support polymorphism. The document also outlines core concepts like memory management, frameworks for iOS development and examples of Hello World programs.
This document provides an overview of developing applications for the iPhone using Objective-C and the UIKit framework. It discusses Objective-C concepts like classes, memory management, categories and protocols. It also covers the iPhone UIKit including views, navigation controllers, tab bar controllers and table views. Other topics include data storage options like property lists, SQLite and web services. Sample code is provided to demonstrate various Objective-C and iPhone programming concepts.
The first question after people have learned about how to implement anadvanced architecture in their applications from scratch is: "How do I transform my codebase from its current state to a well architected app?" Forget about BigBang rewrites. Come and learn some strategies, tricks, and gotchas about how to do the migration to an advanced arch mobile app. Move to from Objective-C to Swift in the process and keep it functional during the whole process.
The document discusses how to work with Cocoa and Objective-C from Swift. It covers importing Objective-C frameworks, interacting with Objective-C APIs such as initializers, properties, and methods, type remapping between Objective-C and Swift types, working with AnyObject and optionals, blocks, and integrating Swift code with Interface Builder using outlets and actions.
This document provides an overview of the Python programming language. It discusses what Python is, its key features like being multi-purpose, readable, and productive. It then demonstrates Hello World programs in Python, C++, Java, and PHP. The rest of the document covers Python concepts like operators, variables, strings, lists, conditions, loops, functions, object oriented programming, and design patterns like strategy, closure, generator, and decorator patterns.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024Neo4j
Neha Bajwa, Vice President of Product Marketing, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
Communications Mining Series - Zero to Hero - Session 1DianaGray10
This session provides introduction to UiPath Communication Mining, importance and platform overview. You will acquire a good understand of the phases in Communication Mining as we go over the platform with you. Topics covered:
• Communication Mining Overview
• Why is it important?
• How can it help today’s business and the benefits
• Phases in Communication Mining
• Demo on Platform overview
• Q/A
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
“An Outlook of the Ongoing and Future Relationship between Blockchain Technologies and Process-aware Information Systems.” Invited talk at the joint workshop on Blockchain for Information Systems (BC4IS) and Blockchain for Trusted Data Sharing (B4TDS), co-located with with the 36th International Conference on Advanced Information Systems Engineering (CAiSE), 3 June 2024, Limassol, Cyprus.
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
6. Where we’re going:
• Quick Objective-c and iOS review
• Overview of iOS 5 additions and changes
7. Where we’re going:
• Quick Objective-c and iOS review
• Overview of iOS 5 additions and changes
• Introducing Lobstagram
8. Where we’re going:
• Quick Objective-c and iOS review
• Overview of iOS 5 additions and changes
• Introducing Lobstagram
• Other iOS 5 features (as time permits)
27. Getting Started
• Recommended but not required
• Some knowledge of C
• malloc() . . . free() ?
• Some knowledge of design patterns:
28. Getting Started
• Recommended but not required
• Some knowledge of C
• malloc() . . . free() ?
• Some knowledge of design patterns:
• MVC, Singleton, Delegation
35. Obj-C in 10 minutes
• All the things you know from C
36. Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
37. Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
• int, float, double, char
38. Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
• int, float, double, char
int foo = 5;
39. Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
• int, float, double, char
int foo = 5;
• Separate compilation
40. Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
• int, float, double, char
int foo = 5;
• Separate compilation
• .h for interface declaration
41. Obj-C in 10 minutes
• All the things you know from C
• Variables are typed:
• int, float, double, char
int foo = 5;
• Separate compilation
• .h for interface declaration
• .m for implementation (instead of .c)
43. Obj-C in 10 minutes
• Functions / Methods have return types and
typed arguments
44. Obj-C in 10 minutes
• Functions / Methods have return types and
typed arguments
int sumOfItems(int i, int j)
{
return i + j;
}
45. Obj-C in 10 minutes
• Functions / Methods have return types and
typed arguments
int sumOfItems(int i, int j)
{
return i + j;
}
• Other types
46. Obj-C in 10 minutes
• Functions / Methods have return types and
typed arguments
int sumOfItems(int i, int j)
{
return i + j;
}
• Other types
• void, NULL
47. Obj-C in 10 minutes
• Functions / Methods have return types and
typed arguments
int sumOfItems(int i, int j)
{
return i + j;
}
• Other types
• void, NULL
• pointers to types (int *, void *)
50. Obj-C in 10 minutes
• Objective-C Additions:
• BOOL - YES / NO
51. Obj-C in 10 minutes
• Objective-C Additions:
• BOOL - YES / NO
BOOL isSet = YES;
52. Obj-C in 10 minutes
• Objective-C Additions:
• BOOL - YES / NO
BOOL isSet = YES;
• id - strictly a pointer to an object
53. Obj-C in 10 minutes
• Objective-C Additions:
• BOOL - YES / NO
BOOL isSet = YES;
• id - strictly a pointer to an object
• nil - a zero’d out pointer
54. Obj-C in 10 minutes
• Objective-C Additions:
• BOOL - YES / NO
BOOL isSet = YES;
• id - strictly a pointer to an object
• nil - a zero’d out pointer
• nil != (necessarily) NULL or 0
57. Obj-C in 10 minutes
• Classes
• Exist as a class pair
58. Obj-C in 10 minutes
• Classes
• Exist as a class pair
• Instance variables and instance methods act
on an instance object
59. Obj-C in 10 minutes
• Classes
• Exist as a class pair
• Instance variables and instance methods act
on an instance object
• Class (static) methods act on the class
object
60. Obj-C in 10 minutes
• Classes
• Exist as a class pair
• Instance variables and instance methods act
on an instance object
• Class (static) methods act on the class
object
• There is only ever one class object at any
given time
61. Obj-C in 10 minutes
• Classes
• Exist as a class pair
• Instance variables and instance methods act
on an instance object
• Class (static) methods act on the class
object
• There is only ever one class object at any
given time
• Class variables really don’t exist
62. Obj-C in 10 minutes
• Classes
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
{
id aChildObject;
NSArray *someItems;
}
+ (NSString *)className;
- (void)logMe;
@property (nonatomic, retain) id aChildObject;
@end
63. Obj-C in 10 minutes
• Classes Include a header
#import <Foundation/Foundation.h>
file
@interface MyClass : NSObject
{
id aChildObject;
NSArray *someItems;
}
+ (NSString *)className;
- (void)logMe;
@property (nonatomic, retain) id aChildObject;
@end
87. Obj-C in 10 minutes
• What’s with all the ‘@’ and ‘[ ]’?
88. Obj-C in 10 minutes
• What’s with all the ‘@’ and ‘[ ]’?
•@
• Objective-C keywords
• Initializer for string constants
89. Obj-C in 10 minutes
• What’s with all the ‘@’ and ‘[ ]’?
•@
• Objective-C keywords
• Initializer for string constants
• ‘[]’
• “Send a message to an object”
• Like calling a method, but more dynamic
110. Key Objects
• UIViewController
• Contains a view, manages all the information and
widgets on the view.
• One Controller per view (screen)
111. Key Objects
• UIViewController
• Contains a view, manages all the information and
widgets on the view.
• One Controller per view (screen)
• UIView
• The view itself. All UI widgets inherit from
UIView.
• Objects on a view are “subviews” of that view
119. Key Patterns
• Delegation (Datasource)
• Alleviates subclassing
“I’m a table view. The user tapped the fourth cell.
Thought you should know.”
120. Key Patterns
• Delegation (Datasource)
• Alleviates subclassing
“I’m a table view. You need to give me a cell object to
display at row 5. I don’t really care what’s in it.”
135. iOS 5
• Thousands of new APIs
• Newly available frameworks
• Game Center
• Automatic Reference Counting
• Storyboards
• iCloud
• It’s really really really big
144. A Brief Tour
• A Table View of images already
taken
• Camera button chooses a photo
(or takes a photo)
145. A Brief Tour
• A Table View of images already
taken
• Camera button chooses a photo
(or takes a photo)
• Next view applies the photo title
and saves to CoreData
146. A Brief Tour
• A Table View of images already
taken
• Camera button chooses a photo
(or takes a photo)
• Next view applies the photo title
and saves to CoreData
• Table refreshes.
147. A Brief Tour
• A Table View of images already
taken
• Camera button chooses a photo
(or takes a photo)
• Next view applies the photo title
and saves to CoreData
• Table refreshes.
• Not worth $1 Billion
150. A Brief Tour
• UITableView as described earlier.
• UIImagePickerViewController is an
easy to use built in control.
151. A Brief Tour
• UITableView as described earlier.
• UIImagePickerViewController is an
easy to use built in control.
• CoreData is an ORM on steroids
for working with persistent
storage.
152. A Brief Tour
• UITableView as described earlier.
• UIImagePickerViewController is an
easy to use built in control.
• CoreData is an ORM on steroids
for working with persistent
storage.
• All written in ARC code.
155. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
156. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
• Reference counting system implemented on
NSObject.
157. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
• Reference counting system implemented on
NSObject.
• alloc . . . init
158. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
• Reference counting system implemented on
NSObject.
• alloc . . . init
• retain
159. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
• Reference counting system implemented on
NSObject.
• alloc . . . init
• retain
• release
160. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
• Reference counting system implemented on
NSObject.
• alloc . . . init
• retain
• release
• autorelease
161. The Dark Ages
• Manual Memory Management
• No garbage collection as in C#, Java, Ruby,
PHP, Python
• Reference counting system implemented on
NSObject.
• alloc . . . init
• retain
• release
• autorelease
• dealloc
170. ARC Decorators
• __strong - owning reference (default)
• __weak - non-owning reference
• __unsafe_unretained - manual management
• __autoreleasing - used in out parameters
171. ARC Decorators
• __strong - owning reference (default)
• __weak - non-owning reference
• __unsafe_unretained - manual management
• __autoreleasing - used in out parameters
• No dealloc
172. Using __weak
• Use __weak to refer to an object that
you’re confident will be retained elsewhere.
173. Using __weak
• Use __weak to refer to an object that
you’re confident will be retained elsewhere.
NSArray *array = [NSArray arrayWithObjects:@"foo", @"bar",
@"baz", nil];
// The array is owning all the objects in it, so we don't
// need a strong reference here (but there's nothing wrong
with it)
NSString * __weak first = [array objectAtIndex:0];
177. __unsafe_unretained
• Used for backwards compatibility with iOS
4.
• Pointer is NOT nil’d out after deallocation.
// nil initialization is automatic
NSNumber * __unsafe_unretained n = nil;
if (YES)
{
n = [[NSNumber alloc] initWithInt:25];
NSLog(@"%@", n);
}
// n loses scope
NSLog(@"%@", n); // CRASH! (probably)
178. __unsafe_unretained
• Used for backwards compatibility with iOS
4.
• Pointer is NOT nil’d out after deallocation.
// nil initialization is automatic
NSNumber * __unsafe_unretained n = nil;
if (YES)
{
n = [[NSNumber alloc] initWithInt:25];
NSLog(@"%@", n);
}
// n loses scope
n = nil;
NSLog(@"%@", n); // a-ok
179. __autoreleasing
• Used with out parameters
NSError * __autoreleasing error = nil;
if (![managedObjectContext save:&error])
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"The photo could not be saved"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
else
{
[delegate photoSettingsViewController:self didSaveNewPhoto:photo];
}
• (Note, the compiler will rewrite this if you
use a strong reference)
181. So what?
• ARC drastically reduces up front development
time.
182. So what?
• ARC drastically reduces up front development
time.
• ARC drastically reduces debugging time.
183. So what?
• ARC drastically reduces up front development
time.
• ARC drastically reduces debugging time.
• ARC is not perfect:
184. So what?
• ARC drastically reduces up front development
time.
• ARC drastically reduces debugging time.
• ARC is not perfect:
• Still possible to have retain cycle
185. So what?
• ARC drastically reduces up front development
time.
• ARC drastically reduces debugging time.
• ARC is not perfect:
• Still possible to have retain cycle
• Still need to understand pointer scope
186. So what?
• ARC drastically reduces up front development
time.
• ARC drastically reduces debugging time.
• ARC is not perfect:
• Still possible to have retain cycle
• Still need to understand pointer scope
• Doesn’t work on CF objects
187. So what?
• ARC drastically reduces up front development
time.
• ARC drastically reduces debugging time.
• ARC is not perfect:
• Still possible to have retain cycle
• Still need to understand pointer scope
• Doesn’t work on CF objects
• The compiler is smarter than you.
194. Twitter.framework
• TWTweetComposeViewController
• Super easy view for composing a tweet
• TWRequest
• Encapsulates the handling of HTTP
requests to the Twitter server.
• Requires the user to have set up Twitter in
the device’s settings.
195. Tweet Composer
• Appears looking great
automatically.
• Can add links and images
• Literally zero
configuration.
201. The Dark Ages
• UI Customization was labor intensive
• Every instance of a widget had to be
customized individually.
202. The Dark Ages
• UI Customization was labor intensive
• Every instance of a widget had to be
customized individually.
• Subclassing
203. The Dark Ages
• UI Customization was labor intensive
• Every instance of a widget had to be
customized individually.
• Subclassing
• Helper methods
204. The Dark Ages
• UI Customization was labor intensive
• Every instance of a widget had to be
customized individually.
• Subclassing
• Helper methods
• Overriding drawRect or haphazardly
adding subviews.
205. UIAppearance
• Certain UI Widgets expose an “appearance
proxy” which can be customized once and
the look persists everywhere.
[[UINavigationBar appearance] setTitleTextAttributes:navBarTextProperties];
[[UILabel appearanceWhenContainedIn:[UIButton class], nil] setTextColor:
[UIColor whiteColor]];
• Elements can also be customized
individually via the same methods.
206. What it’s not . . .
• A Cascading Style Sheet
• Outermost rule breaks a tie-
breaker
• No way to specify things by Id
• Unexpected consequences . . .
223. CoreImage Workflow
• Create a CIContext
• Grab an input image
• Declare and configure a filter
• Get the output image from the filter
224. CoreImage Workflow
• Create a CIContext
• Grab an input image
• Declare and configure a filter
• Get the output image from the filter
• Billion dollar profit
225. Some caveats
• Documentation is scant
• The core image filter list applies to
MacOS only.
• To get the full list available on the iPhone:
NSLog(@"%@", [CIFilter filterNamesInCategory:kCICategoryBuiltIn]);
• There are filters in the device that aren’t
documented.