While there are several books on programming for Mac OS X, Advanced Mac OS X Programming: The Big Nerd Ranch Guide is the only one that contains explanations of how to leverage the powerful underlying technologies. This book gets down to the real nitty-gritty. The third edition is updated for Mac OS X 10.5 and 10.6 and covers new technologies like DTrace, Instruments, Grand Central Dispatch, blocks, and NSOperation.
“Next time some kid shows up at my door asking for a code review, this is the book that I am going to throw at him.” –Aaron Hillegass, founder of Big Nerd Ranch, Inc., and author of Cocoa Programming for Mac OS X Unlocking the Secrets of Cocoa and Its Object-Oriented Frameworks Mac and iPhone developers are often overwhelmed by the breadth and sophistication of the Cocoa frameworks. Although Cocoa is indeed huge, once you understand the object-oriented patterns it uses, you’ll find it remarkably elegant, consistent, and simple. Cocoa Design Patterns begins with the mother of all patterns: the Model-View-Controller (MVC) pattern, which is central to all Mac and iPhone development. Encouraged, and in some cases enforced by Apple’s tools, it’s important to have a firm grasp of MVC right from the start. The book’s midsection is a catalog of the essential design patterns you’ll encounter in Cocoa, including Fundamental patterns, such as enumerators, accessors, and two-stage creation Patterns that empower, such as singleton, delegates, and the responder chain Patterns that hide complexity, including bundles, class clusters, proxies and forwarding, and controllers And that’s not all of them! Cocoa Design Patterns painstakingly isolates 28 design patterns, accompanied with real-world examples and sample code you can apply to your applications today. The book wraps up with coverage of Core Data models, AppKit views, and a chapter on Bindings and Controllers. Cocoa Design Patterns clearly defines the problems each pattern solves with a foundation in Objective-C and the Cocoa frameworks and can be used by any Mac or iPhone developer.
Overcome the vexing issues you’re likely to face when creating apps for the iPhone, iPad, or iPod touch. With new and thoroughly revised recipes in this updated cookbook, you’ll quickly learn the steps necessary to work with the iOS 7 SDK—including ways to store and protect data, send and receive notifications, enhance and animate graphics, manage files and folders, and take advantage of UI Dynamics.
The C++11 standard allows programmers to express ideas more clearly, simply, and directly, and to write faster, more efficient code. Bjarne Stroustrup, the designer and original implementer of C++, thoroughly covers the details of this language and its use in his definitive reference, The C++ Programming Language, Fourth Edition. In A Tour of C++, Stroustrup excerpts the overview chapters from that complete reference, expanding and enhancing them to give an experienced programmer–in just a few hours–a clear idea of what constitutes modern C++. In this concise, self-contained guide, Stroustrup covers most major language features and the major standard-library components–not, of course, in great depth, but to a level that gives programmers a meaningful overview of the language, some key examples, and practical help in getting started. Stroustrup presents the C++ features in the context of the programming styles they support, such as object-oriented and generic programming. His tour is remarkably comprehensive. Coverage begins with the basics, then ranges widely through more advanced topics, including many that are new in C++11, such as move semantics, uniform initialization, lambda expressions, improved containers, random numbers, and concurrency. The tour ends with a discussion of the design and evolution of C++ and the extensions added for C++11. This guide does not aim to teach you how to program (see Stroustrup’s Programming: Principles and Practice Using C++ for that); nor will it be the only resource you’ll need for C++ mastery (see Stroustrup’s The C++ Programming Language, Fourth Edition, for that). If, however, you are a C or C++ programmer wanting greater familiarity with the current C++ language, or a programmer versed in another language wishing to gain an accurate picture of the nature and benefits of modern C++, you can’t find a shorter or simpler introduction than this tour provides.
Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. In this unique collection, you'll learn about the processes that led to specific design decisions, including the goals they had in mind, the trade-offs they had to make, and how their experiences have left an impact on programming today. Masterminds of Programming includes individual interviews with: Adin D. Falkoff: APL Thomas E. Kurtz: BASIC Charles H. Moore: FORTH Robin Milner: ML Donald D. Chamberlin: SQL Alfred Aho, Peter Weinberger, and Brian Kernighan: AWK Charles Geschke and John Warnock: PostScript Bjarne Stroustrup: C++ Bertrand Meyer: Eiffel Brad Cox and Tom Love: Objective-C Larry Wall: Perl Simon Peyton Jones, Paul Hudak, Philip Wadler, and John Hughes: Haskell Guido van Rossum: Python Luiz Henrique de Figueiredo and Roberto Ierusalimschy: Lua James Gosling: Java Grady Booch, Ivar Jacobson, and James Rumbaugh: UML Anders Hejlsberg: Delphi inventor and lead developer of C# If you're interested in the people whose vision and hard work helped shape the computer industry, you'll find Masterminds of Programming fascinating.
“Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. “His book is very compatible with XP. It is not about drawing pictures of a domain; it is about how you think of it, the language you use to talk about it, and how you organize your software to reflect your improving understanding of it. Eric thinks that learning about your problem domain is as likely to happen at the end of your project as at the beginning, and so refactoring is a big part of his technique. “The book is a fun read. Eric has lots of interesting stories, and he has a way with words. I see this book as essential reading for software developers—it is a future classic.” —Ralph Johnson, author of Design Patterns “If you don’t think you are getting value from your investment in object-oriented programming, this book will tell you what you’ve forgotten to do. “Eric Evans convincingly argues for the importance of domain modeling as the central focus of development and provides a solid framework and set of techniques for accomplishing it. This is timeless wisdom, and will hold up long after the methodologies du jour have gone out of fashion.” —Dave Collins, author of Designing Object-Oriented User Interfaces “Eric weaves real-world experience modeling—and building—business applications into a practical, useful book. Written from the perspective of a trusted practitioner, Eric’s descriptions of ubiquitous language, the benefits of sharing models with users, object life-cycle management, logical and physical application structuring, and the process and results of deep refactoring are major contributions to our field.” —Luke Hohmann, author of Beyond Software Architecture “This book belongs on the shelf of every thoughtful software developer.” —Kent Beck “What Eric has managed to capture is a part of the design process that experienced object designers have always used, but that we have been singularly unsuccessful as a group in conveying to the rest of the industry. We've given away bits and pieces of this knowledge...but we've never organized and systematized the principles of building domain logic. This book is important.” —Kyle Brown, author of Enterprise Java™ Programming with IBM® WebSphere® The software development community widely acknowledges that domain modeling is central to software design. Through domain models, software developers are able to express rich functionality and translate it into a software implementation that truly serves the needs of its users. But despite its obvious importance, there are few practical resources that explain how to incorporate effective domain modeling into the software development process. Domain-Driven Design fills that need. This is not a book about specific technologies. It offers readers a systematic approach to domain-driven design, presenting an extensive set of design best practices, experience-based techniques, and fundamental principles that facilitate the development of software projects facing complex domains. Intertwining design and development practice, this book incorporates numerous examples based on actual projects to illustrate the application of domain-driven design to real-world software development. Readers learn how to use a domain model to make a complex development effort more focused and dynamic. A core of best practices and standard patterns provides a common language for the development team. A shift in emphasis—refactoring not just the code but the model underlying the code—in combination with the frequent iterations of Agile development leads to deeper insight into domains and enhanced communication between domain expert and programmer. Domain-Driven Design then builds on this foundation, and addresses modeling and design for complex systems and larger organizations.Specific topics covered include: Getting all team members to speak the same language Connecting model and implementation more deeply Sharpening key distinctions in a model Managing the lifecycle of a domain object Writing domain code that is safe to combine in elaborate ways Making complex code obvious and predictable Formulating a domain vision statement Distilling the core of a complex domain Digging out implicit concepts needed in the model Applying analysis patterns Relating design patterns to the model Maintaining model integrity in a large system Dealing with coexisting models on the same project Organizing systems with large-scale structures Recognizing and responding to modeling breakthroughs With this book in hand, object-oriented developers, system analysts, and designers will have the guidance they need to organize and focus their work, create rich and useful domain models, and leverage those models into quality, long-lasting software implementations.
The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered object-oriented platforms, such as Java and .NET, have become commonplace. These new tools and technologies are capable of building powerful applications, but they are not easily implemented. Common failures in enterprise applications often occur because their developers do not understand the architectural lessons that experienced object developers have learned. Patterns of Enterprise Application Architecture is written in direct response to the stiff challenges that face enterprise application developers. The author, noted object-oriented designer Martin Fowler, noticed that despite changes in technology--from Smalltalk to CORBA to Java to .NET--the same basic design ideas can be adapted and applied to solve common problems. With the help of an expert group of contributors, Martin distills over forty recurring solutions into patterns. The result is an indispensable handbook of solutions that are applicable to any enterprise application platform. This book is actually two books in one. The first section is a short tutorial on developing enterprise applications, which you can read from start to finish to understand the scope of the book's lessons. The next section, the bulk of the book, is a detailed reference to the patterns themselves. Each pattern provides usage and implementation information, as well as detailed code examples in Java or C#. The entire book is also richly illustrated with UML diagrams to further explain the concepts. Armed with this book, you will have the knowledge necessary to make important architectural decisions about building an enterprise application and the proven patterns for use when building them. The topics covered include · Dividing an enterprise application into layers · The major approaches to organizing business logic · An in-depth treatment of mapping between objects and relational databases · Using Model-View-Controller to organize a Web presentation · Handling concurrency for data that spans multiple transactions · Designing distributed object interfaces
As the application of object technology--particularly the Java programming language--has become commonplace, a new problem has emerged to confront the software development community. Significant numbers of poorly designed programs have been created by less-experienced developers, resulting in applications that are inefficient and hard to maintain and extend. Increasingly, software system professionals are discovering just how difficult it is to work with these inherited, "non-optimal" applications. For several years, expert-level object programmers have employed a growing collection of techniques to improve the structural integrity and performance of such existing software programs. Referred to as "refactoring," these practices have remained in the domain of experts because no attempt has been made to transcribe the lore into a form that all developers could use. . .until now. In Refactoring: Improving the Design of Existing Code, renowned object technology mentor Martin Fowler breaks new ground, demystifying these master practices and demonstrating how software practitioners can realize the significant benefits of this new process. With proper training a skilled system designer can take a bad design and rework it into well-designed, robust code. In this book, Martin Fowler shows you where opportunities for refactoring typically can be found, and how to go about reworking a bad design into a good one. Each refactoring step is simple--seemingly too simple to be worth doing. Refactoring may involve moving a field from one class to another, or pulling some code out of a method to turn it into its own method, or even pushing some code up or down a hierarchy. While these individual steps may seem elementary, the cumulative effect of such small changes can radically improve the design. Refactoring is a proven way to prevent software decay. In addition to discussing the various techniques of refactoring, the author provides a detailed catalog of more than seventy proven refactorings with helpful pointers that teach you when to apply them; step-by-step instructions for applying each refactoring; and an example illustrating how the refactoring works. The illustrative examples are written in Java, but the ideas are applicable to any object-oriented programming language.
This classic book is the definitive real-world style guide for better Smalltalk programming. This author presents a set of patterns that organize all the informal experience successful Smalltalk programmers have learned the hard way. When programmers understand these patterns, they can write much more effective code. The concept of Smalltalk patterns is introduced, and the book explains why they work. Next, the book introduces proven patterns for working with methods, messages, state, collections, classes and formatting. Finally, the book walks through a development example utilizing patterns. For programmers, project managers, teachers and students -- both new and experienced. This book presents a set of patterns that organize all the informal experience of successful Smalltalk programmers. This book will help you understand these patterns, and empower you to write more effective code.
An in-depth look into Mac OS X and iOS kernels Powering Macs, iPhones, iPads and more, OS X and iOS are becoming ubiquitous. When it comes to documentation, however, much of them are shrouded in mystery. Cocoa and Carbon, the application frameworks, are neatly described, but system programmers find the rest lacking. This indispensable guide illuminates the darkest corners of those systems, starting with an architectural overview, then drilling all the way to the core. Provides you with a top down view of OS X and iOS Walks you through the phases of system startup—both Mac (EFi) and mobile (iBoot) Explains how processes, threads, virtual memory, and filesystems are maintained Covers the security architecture Reviews the internal Apis used by the system—BSD and Mach Dissects the kernel, XNU, into its sub components: Mach, the BSD Layer, and I/o kit, and explains each in detail Explains the inner workings of device drivers From architecture to implementation, this book is essential reading if you want to get serious about the internal workings of Mac OS X and iOS.
This ebook is the first authorized digital version of Kernighan and Ritchie’s 1988 classic, The C Programming Language (2nd Ed.). One of the best-selling programming books published in the last fifty years, "K&R" has been called everything from the "bible" to "a landmark in computer science" and it has influenced generations of programmers. Available now for all leading ebook platforms, this concise and beautifully written text is a "must-have" reference for every serious programmer’s digital library. As modestly described by the authors in the Preface to the First Edition, this "is not an introductory programming manual; it assumes some familiarity with basic programming concepts like variables, assignment statements, loops, and functions. Nonetheless, a novice programmer should be able to read along and pick up the language, although access to a more knowledgeable colleague will help."
Most books on data structures assume an imperative language like C or C++. However, data structures for these languages do not always translate well to functional languages such as Standard ML, Haskell, or Scheme. This book describes data structures from the point of view of functional languages, with examples, and presents design techniques so that programmers can develop their own functional data structures. It includes both classical data structures, such as red-black trees and binomial queues, and a host of new data structures developed exclusively for functional languages. All source code is given in Standard ML and Haskell, and most of the programs can easily be adapted to other functional languages. This handy reference for professional programmers working with functional languages can also be used as a tutorial or for self-study.
Head First C provides a complete learning experience for C and structured imperative programming. With a unique method that not only goes beyond syntax and how-to manuals, this guide not only teaches you the language, it helps you understand how to be a great programmer. You’ll learn key areas such as language basics, pointers and pointer arithmetic, and dynamic memory management. Advanced topics include multi-threading and network programming.
Ruby Under a Microscope gives developers an inside, hands-on look at Ruby's core, using simple diagrams coupled with clear explanations. Rough Cuts
This is the Rough Cut version of the printed book. Enabling professional developers to focus on what matters most - deliver business value via clean and maintainable code - Ruby on Rails strips complexity from the development process. Rails was created in 2004 to maximize the use of the Ruby programming language in an open source web application framework, causing an explosion of interest in Ruby. In less than ten years, Ruby on Rails has forcefully taken its place as the dominant king of web frameworks, with the support of thousands of open source contributors. The Rails™ 4 Way is the only comprehensive, authoritative guide to delivering production-quality code with Rails 4. Pioneering Rails expert Obie Fernandez and his team of leading Rails experts illuminate the entire set of Rails APIs, along with the idioms, design approaches, and libraries that make developing applications with Rails so powerful. Drawing on their unsurpassed experience and track record, they address the real challenges development teams face, showing how to use Rails to maximize your productivity. Using numerous detailed code examples, the author systematically covers Rails key capabilities and subsystems, making this book a reference that you can depend on every day. He presents advanced Rails programming techniques that have been proven effective in day-to-day usage on dozens of production Rails systems and offers important insights into behavior-driven development and production considerations such as scalability. Dive deep into the subtleties of the asset pipeline and other advanced Rails topics such as security and scalability. The Rails 4 Way is your best guide for making Rails do exactly what you want it to do. Rough Cuts
This is the Rough Cut version of the printed book. Ruby is an agile object-oriented language, borrowing some of the best features from LISP, Smalltalk, Perl, CLU, and other languages. Its popularity has grown tremendously in the five years since the first edition of this book. The Ruby Way takes a “how-to” approach to Ruby programming with the bulk of the material consisting of more than 400 examples arranged by topic. Each example answers the question “How do I do this in Ruby?” Working along with the author, you are presented with the task description and a discussion of the technical constraints. This is followed by a step-by-step presentation of one good solution. Along the way, the author provides detailed commentary and explanations to aid your understanding. Coverage includes An overview of Ruby, explaining terminology and basic principles Operations on low-level data types (numbers, strings, regular expressions, dates) The new regular expression engine (Oniguruma) Internationalization (I18N) and message catalogs in Ruby Operations on hashes, arrays, and other data structures such as stacks, trees, and graphs Working with general I/O, files, and persistent objects Database coverage including MySQL, SQLite, Oracle, DBI, and more Ruby-specific techniques in OOP and dynamic programming Graphical interfaces in Ruby (Tk, GTK+, Fox, and Qt) Working with Ruby threads for lightweight multitasking Everyday scripting and system administration in Ruby Working with image files, PDFs, YAML, XML, RSS, and Atom Testing, debugging, profiling, and packaging Ruby code Low-level network programming and client-server interaction Web development tools including Rails, Nitro, Wee, IOWA, and more Working with distributed Ruby, Rinda, and Ring Ruby development tools such as IDEs, documentation tools, and more The source code for the book can be downloaded from www.rubyhacker.com Rough Cuts
iOS UICollectionView: The Complete Guide, Second Edition teaches you everything you need to know to take advantage of Apple's new user interface, UICollectionView. UICollectionView is a content- and layout-agnostic tool that developers can use to display content in applications. User interfaces created with collection views are some of the most immersive and distinctive interfaces in iOS applications. But to get the most out of UICollectionView, developers need to understand its complexity. Author and iOS developer Ash Furrow shows you how to leverage this amazing tool to create intuitive, immersive experiences within your own applications. In this book he provides a wide variety of examples and sample code in each chapter, all of which can be downloaded at http://ashfurrow.com/uicollectionview-the-complete-guide. Coverage includes: • A brief introduction to the Model View Controller paradigm, which is used throughout the book • How to set up UICollectionView, using .xib files and Storyboards • The basics of cell use • Contextualizing content through the use of supplementary views • An exploration of the ICollectionViewDataSource and UICollectionViewDelegate protocols • Subclassing flow layouts and subclassing UICollectionViewLayout directly to create a wide variety of custom layouts • Adding interactivity to layouts, primarily through the use of gesture recognizers and UIKit Dynamics • What's changed in iOS 7, including bugs that have been fixed • Custom UIViewController transitions demo with UICollectionView Approximately 200 pages. Rough Cuts
Get a solid grounding in all the fundamentals of Cocoa Touch, and avoid problems during iPhone and iPad app development. With this revised edition, you’ll dig into Cocoa and learn how to work effectively with Objective-C and Xcode. This book covers iOS 7 in a rigorous, orderly fashion—ideal whether you’re approaching iOS for the first time or need a reference to bolster existing skills.
Get Started Fast with iOS 7 Core Data App Development Covers iOS 7 and Xcode 5 This is the first Core Data book to fully reflect Apple’s latest platform innovations, including its dramatic¿ recent improvements to iCloud support. Hands-on from start to finish, it teaches you step-by-step as you create a modern data-driven iOS app using Storyboards, ARC, iOS 7, and Xcode 5. Tim Roadley introduces new patterns and best practices designed to overcome the frustrations of Core Data development. One step at a time, you’ll build and extend your skills--even mastering advanced techniques such as complex model migration, deep copy, background processing, and integration with Dropbox, StackMob, and iCloud. Downloadable versions of this book’s main project are provided with each chapter, so you can see exactly what your app project should look like--and get cookbook-style code for your own projects. Chapter exercises help you explore even further, whether you’re a self-learner or a student in an iOS development course. If you’re an experienced iOS developer, this guide brings together all the skills, tools, code, and patterns you need to add powerful data management capabilities to any app--quickly, easily, and painlessly. Coverage includes the following: Understanding Core Data Adding Core Data to an existing project Designing, upgrading, and migrating data models (automatically and manually with progress indication) Populating views with data, including table-views and picker-views Preloading a “default data” persistent store from XML Deep-copying from one persistent store to another Performance tuning with Instruments, using large photos as the example Background processing, using thumbnail generation as the example Efficient search Seamlessly backing up and restoring with Dropbox Stable integration with iCloud--with full support for multiple accounts, seeding, and de-duplication Web service integration with StackMob
If you want to build an app optimized for iPhone or iPad, you need a thorough understanding of the Objective-C language, the Cocoa API, and the Xcode development environment. This practical guide walks you through the fundamentals of these iOS building blocks, complete with easy-to-follow code examples. Rough Cuts
This is the Rough Cut version of the printed book. The massive success of apps like Instagram, iMovie, and Vine proves that users want tools to help them capture, edit, and share their lives. If you want to build those apps for iOS or OS X, you need to understand Apple's most powerful media framework: AV Foundation. Until now, however, this meant wrestling with Apple's massive, out-of-date API documentation. Now, there's a more productive and efficient alternative. Learning AV Foundation helps you gain real-world mastery by teaching each aspect of the framework in the context of building real world applications. By the time you finish, you'll have built a voice memo app, custom video player, video editor, and an image and video camera app -- and you'll have mastered all the techniques you need to write your own advanced media apps with AV Foundation. Most chapters contain additional optional exercises, to help you further deepen your understanding. Learning AV Foundation comes with a complete collection of starter apps that abstract away visual aspects, so you can focus solely on AV Foundation without getting bogged down in supporting infrastructure. Coverage includes: Understanding the AV Foundation media environment Basic techniques for working with media: playback, recording, and more Basic and advanced media capture Media creation and editing: composing media, mixing audio, creating video transitions, and layering animated content Advanced topics, including real-time audio and video effects Integrating AV Foundation with Core Audio
The Objective-C programming language continues to grow in popularity and usage because of the power and ease-of-use of the language itself, along with the numerous features that continue to be added to the platform. If you have a basic knowledge of the language and want to further your expertise, Pro Objective-C is the book for you. Pro Objective-C provides an in-depth, comprehensive guide to the language, its runtime, and key API's. It explains the key concepts of Objective-C in a clear, easy to understand manner, and also provides detailed coverage of its more complex features. In addition, the book includes numerous practical examples--code excerpts and complete applications--that demonstrate how to apply in code what you're learning. The book begins with an exploration of Objective-C's basic features and key language elements. After reviewing the basics, it proceeds with an in-depth examination of the Objective-C dynamic programming features and runtime system. Next the book covers the Foundation Framework, the base layer of APIs that can be used for any Objective-C program. Finally, new and advanced features of Objective-C are introduced and shown how they make the Objective-C language even more powerful and expressive. Each topic is covered thoroughly and is packed with the details you need to develop Objective-C code effectively. The most important features are given in-depth treatment, and each chapter contains numerous examples that demonstrate both the power and the subtlety of Objective-C. Start reading Pro Objective-C and begin developing high-quality, professional apps on the OS X and iOS platforms using the Objective-C programming language! What you'll learn Objective-C fundamentals and key language elements Objective-C runtime system Foundation Framework APIs Objective-C advanced language features Xcode Essentials Debugging with LLDB Who this book is for This book is geared towards intermediate to advanced developers who already have some Objective-C experience and want pro-level coverage of the language, including advanced Objective-C features, recent additions to the language, and practical usage of its core frameworks and APIs. It's also great for those developers not familiar with Objective-C that have done some C programming and also understand object-oriented programming concepts.