Bestseller TalkTen years ago, almost to the day, I delivered what turned out to be the “best-selling” talk of all my conference speaking career, with effects that I can feel to this day.
Learning A New Programming Language per Year in the Age of AIPeople don’t really learn new programming languages every year anymore thanks to AI, so why do I stick with this activity? Call me old fashioned, but I still like to dive into a new programming language every year, no matter what, and thus here comes yet another update in my lifelong obsession to learn more and more programming languages.
Objective-C and Cocoa in 2025Back in 2015 I gave a talk titled “Cocoa is the new Carbon: the Future of Apple’s Beloved Framework”, whose presentation has a slide that said “Cocoa should remain for backwards compatibility during 10 years at least, until 2025”.
Mobile Application Testing BookGoing through my archives I found a booklet I wrote 10 years ago, about testing iOS and Android mobile apps. I’m adding it to my Books page for the sake of memory, even though its contents are not at all relevant by today’s standards.
Memories of WWDC 2008Exactly 15 years ago, on Monday, June 9th, 2008, I published a blog post with a picture taken in the big room of the Moscone conference center in San Francisco, waiting for Steve Jobs to introduce the iPhone 3G to the world at the annual Apple World Wide Developers’ Conference 2008.
Yup, Still Learning a New Programming Language Every YearI gave an update on this lifetime activity of mine in 2006, 2007, 2011, and 2013, and here we go for 2023.
What Objective-C 3.0 Could Have BeenIn a parallel universe, in a parallel WWDC 2014, instead of Swift, developers got Objective-C 3.0, and this is what it would have looked like. It’s the same parallel universe where Russia doesn’t annex Crimea, by the way.
Killer AppsThe D programming language lacked a “killer app” to break through. Another brilliant language suffered from this situation, objectively deserving a much better fate than the one it had; Smalltalk.
Text Editors for WorkThere has been a particular text editor that defined each period of my career as a software developer. This article is a summary of that history, so far.
Polyglot ConwayMy personal project during the pandemic was Conway, a project providing implementations of Conway’s Game of Life in as many programming languages as possible.
The Next Big ThingLooking backwards, the migration from Objective-C to Swift as main programming language for the Apple galaxy was quite an event.
12 Years of iPhone – A Developer's PerspectiveThis is the talk that I gave in the 4th MCE Conference in Warsaw, Poland, on May 8th, 2017 (conference organized by Polidea) and (with updates) at UIKonf on May 15th, 2018 and at NSConfArg on April 20th, 2019.
The Developer Guide to Migrate Across GalaxiesThis is the presentation I gave at the second App Builders Conference in Lausanne, Switzerland, April 25th, 2017.
Refactoring iOS ProjectsPresentation given in Dnipropetrovsk, Ukraine, on July 16th, 2016. In this session we are going to learn simple yet effective techniques to refactor large iOS codebases in order to make them more testable, to adapt them to be eventually rewritten in Swift, and to make them as “future proof” as possible.
Cocoa is the new Carbon: the Future of Apple’s Beloved FrameworkIn this talk, Adrian will provide lots of speculation and highly arguable unverified gossip, about how the design of Swift will lead Apple to redesign Cocoa into new directions, and maybe replacing it altogether. Some code examples will help him defend a point that nobody outside of Cupertino can sustain for sure.
Still Learning One Language per YearQuick update about my “one language per year” lifelong initiative:
Getting the Next and the Previous NSIndexPath InstancesVery often, when you work with UITableViewControllers driven by NSFetchedResultsControllers, that you want to get the “previous” or the “next” elements in the results controller. Visually, this operation corresponds, from the point of view of the user, to select the cell that sits immediately above or below from the currently selected one.
Determining Delegate Object Method Call Order in Objective-C with NSProxyThis is a guest post + code, wrote together with Joe D’Andrea from LiquidJoe LLC!
A Proposed Architecture for Network-Bound iOS AppsOne of my most popular answers in StackOverflow is the one I gave to the following question: “What is the best architecture for an iOS application that makes many network requests?”
Learning One New Language Every YearHere’s an update of the current status of my “one language per year” lifelong initiative:
Smart Pointers in Objective-C++One of the coolest features of C++ are templates, of which I’ve been drooling in the past. One of the most useful things that templates have brought to C++ are smart pointers, which simplify memory management tremendously; they combine the capacity of C++ to instantiate objects in the stack, the flexibility of heap allocation, and template classes, all in one thing.
How knowing C and C++ can help you write better iPhone apps, part 1While learning how to write iOS applications, you will often encounter the phrase “learn C first”. Writers of Cocoa applications apparently benefit from knowing about C (sometimes even C++), but it is not very clear to many new developers how this actually works.
Migrating iPhone 3.x apps to iPad and iOS 4.0Right now, creating Universal Applications for the iPod touch, the iPhone and the iPad is not really a straightforward task. The current panorama of iOS-compatible software and hardware platforms is getting more and more complex, and this blog post is a small guide (by no means exhaustive) of tips and tricks that have helped me get my apps running in as many platforms as possible, with as few headaches as possible.
Core Text Objective-C WrapperOne of the most promising and mysterious new frameworks introduced in iOS 3.2 is Core Text. Apple defines Core Text as a “text drawing engine”, which allows Mac (and now iPad) apps to render rich text on any graphics context. Strings drawn with Core Text feature lots of custom settings such as detailed font information, columns, variable line and paragraph heights and several different attributes, which designers and font aficionados surely understand much better than I do. Many new apps have been using this framework since the release of the iPad, particularly newspapers and ebook reader applications, rendering gorgeous text in custom fonts, many of them not available natively in iOS. This framework is also used in lifestyle and corporate applications, too, where using a custom font is sometimes required to match the specifications of brands and trademarks.
Objective-C Categories as StylesheetsIt is very important that iPhone and iPad applications use visual styles in a coherent way. This helps users learn how to use your application faster, it helps them scan your UI for important information as quickly as possible, and it also can convey a strong marketing message; companies who want iPhone or iPad applications often have complex visual identities, including predefined fonts and colors, and they will want their applications to match those choices.
initWithContentsOfURL: Methods Considered HarmfulAs I promised on Twitter, here’s a small discussion about the problems brought by the “initWithContentsOfURL:” family of methods.
EasyTableView for iPhone PrototypingOur first blog post of 2010 presents a tool that we’ve been using internally and that might be useful for other people.
iPhone Apps without Objective-CYes, it’s possible. Even if Objective-C is one of my preferred programming languages, in any case I think it’s worth mentioning that, 2 years after the official iPhone SDK has been announced, the iPhone development landscape has really grown up, and many, many different options are available today. This article provides a very high-level enumeration of some options I’ve found on the web, but I’m sure there are even more alternatives around.
Code Organization in Xcode ProjectsXcode does not impose any structure to your source code tree. This is both cool and useful to quickly throw a couple of lines for a prototype, but in my experience, this approach does not scale. More often than not, without any hygiene, your project can become a mess. Just using Xcode defaults, after a while your resources will sit beside your .xcodeproj file, all the project classes will be thrown together in the Classes folder, and if you have a relatively large project, this approach makes finding individual files painful.
Objective-C Compiler WarningsA recent comment by Joe D’Andrea in a previous post reminded me about the importance of removing compiler warnings in Xcode projects. Most importantly, it reminded me of a conversation with a fellow developer a couple of weeks ago, in which he told me that he was surprised to see that my projects compiled all the time without warnings. Not a single one. Nada. And that I took the time to remove them before checking code into source control.
OpenGL ES 2.0 on iPhone OS 3.0Now that the NDA on the iPhone OS 3.0 SDK has been lifted (which happened much faster than what I thought it would take!) here’s my first contribution to the world of iPhone OS 3.0 open source code: sample code about how to use OpenGL ES 2.0 on the iPhone 3GS, something I announced in Twitter last week.
nib2objc(Somehow this project seems to me so simple, that I’m sure someone has done this before. Anyway). This is my feeble attempt to bring an answer to the eternal dichotomy between those arguing about the relative benefits of creating user interfaces via Interface Builder or via pure Objective-C code: let me introduce nib2objc.
NIBs or code? Why not both? Here's nib2objc.(Somehow this project seems to me so simple, that I’m sure someone has done this before. Anyway). This is my feeble attempt to bring an answer to the eternal dichotomy between those arguing about the relative benefits of creating user interfaces via Interface Builder or via pure Objective-C code: let me introduce nib2objc.
10 iPhone Memory Management TipsMemory management in the iPhone is a hot topic. And since I’m talking about it on tonight’s monthly meetup of the French-speaking Swiss iPhone Developers group, I might as well share some tips here from my own experience.
Objective-C REST Client UpdateI’ve uploaded (yet another) update to the Objective-C REST client I’ve blogged about previously. This time I’ve scanned the code with the excellent LLVM/Clang Static Analyzer and fixed a couple of memory leaks here and there. I strongly recommend to scan your own projects with this tool, it’s extremely simple to use:
NibsI’m sure the pun between the acronym for “NeXT Interface Builder” and this definition of “cocoa beans” is intentional, but it surprised me anyway:
The Beauty of Cocoa(Highly geeky post ahead. You’ve been warned!) I have found the very message that summarizes the beauty of Cocoa in a single word.
Amazing XcodeXcode is amazing. Of all the IDEs I’ve used (and this is, as always, a personal opinion, having used Visual Studio since version 6, Eclipse, Kdevelop and others) it’s the one I prefer. And today I found another reason to like it.
Playing With HTTP LibrariesIt’s fun to find out how to tackle the same task in different programming languages; in this case, it’s all about doing HTTP requests over a network: fortunately, there are networking libraries in virtually all major programming languages. In my current project, I’m generating wrappers easing the access to the core of the project itself, a RESTful API. This way, developers interested in using the API can just take a wrapper, include it in their projects, and start coding right away. No need to know this (relatively low-level) stuff; just use the API. The wrappers themselves are auto-generated from the API definition itself, but that’s another story ;)
Null ReferencesThere’s an interesting discussion going on these days on Ruby blogs about, basically, how to avoid one of the most common, annoying, easy-to-create bugs in any programming language: calling a method on a null reference (or pointer, depending on your language).
Preferred Programming LanguagesThere are basically 5 languages that I really like. For several reasons. 2 of them are proprietary, while 3 are open-source. 2 are statically typed, and 3 are dynamically typed. All are fully object-oriented. 3 can be used for web development, 4 for desktop apps. And none is Java.
This Year's Programming LanguagesTrying to keep my promise of learning a new programming language every year, I have identified a couple of candidates for 2007:
How to Grab or Capture Your Screen With CocoaLately I got curious to know how could I grab the entire desktop of my computer, and save it into a file, or display it into an NSImageView component. I started to look around on the web and discovered that:
A New Programming Language Every YearSomewhere I read that it was a good thing to learn at least one new programming language every year; I think I have kept up that trend since 1992: