<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"><channel><title>NSBlog</title><link>http://www.mikeash.com/pyblog/</link><description>Mac OS X and Cocoa programming</description><lastBuildDate>Fri, 03 Feb 2012 22:01:10 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Friday Q&amp;amp;A 2012-02-03: Ring Buffers and Mirrored Memory: Part I
</title><link>http://www.mikeash.com/pyblog/friday-qa-2012-02-03-ring-buffers-and-mirrored-memory-part-i.html</link><description>Playing with virtual memory is always fun, and one place where it can be put to good use is in building a ring buffer. A ring buffer is a way to implement a FIFO queue of data, and using virtual memory tricks to mirror multiple copies of the same data can make the implementation simpler and better by virtually concatenating noncontiguous data. Readers Jose Vazquez and Dylan Lukes suggested that I explore the building of such a construct. Today I will talk about how to implement the virtual memory tricks, and then in part II I will show how to implement the ring buffer on top of them.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2012-02-03-ring-buffers-and-mirrored-memory-part-i.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2012-02-03-ring-buffers-and-mirrored-memory-part-i.html</guid><pubDate>Fri, 03 Feb 2012 16:37:00 GMT</pubDate></item><item><title>The Mac Toolbox: Followup
</title><link>http://www.mikeash.com/pyblog/the-mac-toolbox-followup.html</link><description>Welcome back to Friday, NSBlog readers. Here's the promised followup to my article last week about the Mac Toolbox, where I do a line-by-line analysis of the code from the original article, alongside Mike's Friday Q&amp;amp;A for this week.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/the-mac-toolbox-followup.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/the-mac-toolbox-followup.html</guid><pubDate>Fri, 20 Jan 2012 16:14:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2012-01-20: Fork Safety
</title><link>http://www.mikeash.com/pyblog/friday-qa-2012-01-20-fork-safety.html</link><description>It's once again time to dive into bizarre programming arcana. In today's article, I want to look at the details of fork-safe code, why the restrictions are present, and why you might care, a topic suggested by Ben Mitchell.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2012-01-20-fork-safety.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2012-01-20-fork-safety.html</guid><pubDate>Fri, 20 Jan 2012 14:07:00 GMT</pubDate></item><item><title>Plausible Labs is Hiring
</title><link>http://www.mikeash.com/pyblog/plausible-labs-is-hiring.html</link><description>Plausible Labs, creators of fine software and employer of me, is looking for a software engineer in New York City or San Francisco. Do you like to create fine software? Do you want to join a worker-owned cooperative filled with great people? Do you want to work with a guy who writes a blog? If so, &lt;a href="http://www.plausible.coop/blog/?p=35"&gt;check out our announcement&lt;/a&gt;.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/plausible-labs-is-hiring.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/plausible-labs-is-hiring.html</guid><pubDate>Wed, 18 Jan 2012 15:38:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2012-01-13: The Mac Toolbox
</title><link>http://www.mikeash.com/pyblog/friday-qa-2012-01-13-the-mac-toolbox.html</link><description>Hi again, readers of NSBlog! This is my first guest post of 2012, and also my first one writing the introduction myself. I plan to do posts every two weeks, alternating with Mike's to bring back the once-a-week format. This week, at my own suggestion, I'm doing a historical piece on the original programming environment for Macs: The Mac Toolbox. Time for a trip down memory lane!&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2012-01-13-the-mac-toolbox.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2012-01-13-the-mac-toolbox.html</guid><pubDate>Fri, 13 Jan 2012 19:28:00 GMT</pubDate></item><item><title>Buy Videos of My VTM Presentations
</title><link>http://www.mikeash.com/pyblog/buy-videos-of-my-vtm-presentations.html</link><description>I gave two presentations at the Voices That Matter conference in Boston in November. Both presentations were recorded and the videos are now available for purchase. And as a special present for my readers, you can get 35% off!&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/buy-videos-of-my-vtm-presentations.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/buy-videos-of-my-vtm-presentations.html</guid><pubDate>Mon, 09 Jan 2012 16:52:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2012-01-06: The Hopper Disassembler
</title><link>http://www.mikeash.com/pyblog/friday-qa-2012-01-06-the-hopper-disassembler.html</link><description>We've spent the last few weeks talking about disassembling executables and how to read the result. Today, I want to wrap up that discussion with a look at a powerful third-party disassembly tool called Hopper.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2012-01-06-the-hopper-disassembler.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2012-01-06-the-hopper-disassembler.html</guid><pubDate>Fri, 06 Jan 2012 15:48:00 GMT</pubDate></item><item><title>Avoid Apress
</title><link>http://www.mikeash.com/pyblog/avoid-apress.html</link><description>Nearly three years ago, I got involved with Apress to contribute to two books. The experience went disastrously wrong. It was a profoundly unpleasant experience and I want to warn any other prospective authors to avoid this publisher, and encourage readers to buy from other publishers. &lt;i&gt;Warning: this post is non-technical and something of a rant. If that's not your thing, please skip it and come back in a week when technical goodies shall resume their normal course.&lt;/i&gt;&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/avoid-apress.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/avoid-apress.html</guid><pubDate>Sun, 01 Jan 2012 03:27:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-12-30: Disassembling the Assembly, Part 3: ARM edition
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-12-30-disassembling-the-assembly-part-3-arm-edition.html</link><description>Gwynne finishes off her series on analyzing assembly code with a look at ARM assembly, for all of your iOS needs. Gwynne will be contributing the occasional article in the future as well as a guest author, without my introductions. Watch the Author field at the top of the post to see who's writing what. Without further ado, let's take a look at ARM.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-12-30-disassembling-the-assembly-part-3-arm-edition.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-12-30-disassembling-the-assembly-part-3-arm-edition.html</guid><pubDate>Fri, 30 Dec 2011 21:44:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-12-23: Disassembling the Assembly, Part 2
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-12-23-disassembling-the-assembly-part-2.html</link><description>Today I have the pleasure to present the followup to last week's guest post. &lt;a href="http://blog.darkrainfall.org/"&gt;Gwynne Raskind&lt;/a&gt; returns to complete her in-depth analysis of the assembly code generated by a small sample program.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-12-23-disassembling-the-assembly-part-2.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-12-23-disassembling-the-assembly-part-2.html</guid><pubDate>Fri, 23 Dec 2011 20:48:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-12-16: Disassembling the Assembly, Part 1
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-12-16-disassembling-the-assembly-part-1.html</link><description>As a small change of pace, today's post is written by guest author &lt;a href="http://blog.darkrainfall.org"&gt;Gwynne Raskind&lt;/a&gt;. My last post touched a bit on disassembling object files, and Gwynne wanted to dive deeply into just how to read the output in detail. Without further ado, I present her wonderful in-depth look at reading &lt;code&gt;x86_64&lt;/code&gt; assembly.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-12-16-disassembling-the-assembly-part-1.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-12-16-disassembling-the-assembly-part-1.html</guid><pubDate>Fri, 16 Dec 2011 15:02:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-12-02: Object File Inspection Tools
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-12-02-object-file-inspection-tools.html</link><description>Being able to see all stages of your work can be immensely helpful when debugging a problem. Although you can get a lot done only looking at the source code and the app's behavior, some problems benefit immensely from being able to inspect the preprocessed source code, the assembly output from the compiler, or the final binary. It can also be handy to inspect other people's binaries. Today, I want to talk about various tools you can use to inspect binaries, both your own and other people's, a topic suggested by Carlton Gibson.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-12-02-object-file-inspection-tools.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-12-02-object-file-inspection-tools.html</guid><pubDate>Fri, 02 Dec 2011 14:45:00 GMT</pubDate></item><item><title>Testing Hashcash-Based Anti-Spam Measures
</title><link>http://www.mikeash.com/pyblog/testing-hashcash-based-anti-spam-measures.html</link><description>Due to a recent uptick in spam comments (I've had to delete literally &lt;em&gt;several&lt;/em&gt; this week!) I decided to dust off my dormant JavaScript-based hashcash implementation and drop it into the comments system as an added anti-spam measure.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/testing-hashcash-based-anti-spam-measures.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/testing-hashcash-based-anti-spam-measures.html</guid><pubDate>Sat, 26 Nov 2011 18:42:00 GMT</pubDate></item><item><title>No Article For you!
</title><link>http://www.mikeash.com/pyblog/no-article-for-you.html</link><description>In honor of Thanksgiving (an American holiday celebrating the &lt;a href="http://en.wikipedia.org/wiki/Seven_deadly_sins"&gt;seven deadly sins&lt;/a&gt;), there is no Friday Q&amp;amp;A this week. I will resume next week.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/no-article-for-you.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/no-article-for-you.html</guid><pubDate>Fri, 25 Nov 2011 16:48:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-11-11: Building a Memoizing Block Proxy
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-11-11-building-a-memoizing-block-proxy.html</link><description>Last time, I talked about my crazy hack that misuses the Objective-C message forwarding machinery to do &lt;a href="friday-qa-2011-10-28-generic-block-proxying.html"&gt;block proxying&lt;/a&gt;. This allows writing code that interposes in front of an arbitrary block to intercept its arguments, manipulate its return value, etc. Today, I want to present an exanmple of using this hack which almost verges on the practical. Specifically, I'm going to discuss how to use it to build a generalized block memoization facility.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-11-11-building-a-memoizing-block-proxy.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-11-11-building-a-memoizing-block-proxy.html</guid><pubDate>Fri, 11 Nov 2011 16:06:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-10-28: Generic Block Proxying
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-10-28-generic-block-proxying.html</link><description>Here at Friday Q&amp;amp;A, I pride myself on occasionally taking my readers to places where normal people dare not tread. Today is one of those days. This is not a reader suggested topic, but today I want to talk about a fun hack I came up with that allows proxying block invocations in much the way that one can proxy Objective-C messages.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-10-28-generic-block-proxying.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-10-28-generic-block-proxying.html</guid><pubDate>Fri, 28 Oct 2011 13:57:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-10-14: What's New in GCD
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html</link><description>Happy iPhone Day to all! For those of you stuck waiting in line or waiting for the delivery guy, never fear, for I have the solution to your pain. For today's topic, Jon Shier suggested that I talk about the new features in Grand Central Dispatch in Lion and iOS 5.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-10-14-whats-new-in-gcd.html</guid><pubDate>Fri, 14 Oct 2011 12:01:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-09-30: Automatic Reference Counting
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html</link><description>Since the moment Apple announced it, readers have asked me to write about Automatic Reference Counting, or ARC. Today is the day. I'll talk about Apple's new memory management system, how it works, and how to get the most out of it.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-09-30-automatic-reference-counting.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-09-30-automatic-reference-counting.html</guid><pubDate>Fri, 30 Sep 2011 15:02:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-09-16: Let's Build Reference Counting
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-09-16-lets-build-reference-counting.html</link><description>Last time, I discussed how to build &lt;code&gt;NSAutoreleasePool&lt;/code&gt; and how it works internally. Today, I'm going to carry that theme forward by building an implementation of Cocoa reference counting with &lt;code&gt;retain&lt;/code&gt; and &lt;code&gt;release&lt;/code&gt;, a topic suggested by David Dunham.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-09-16-lets-build-reference-counting.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-09-16-lets-build-reference-counting.html</guid><pubDate>Fri, 16 Sep 2011 14:00:00 GMT</pubDate></item><item><title>Friday Q&amp;amp;A 2011-09-02: Let's Build NSAutoreleasePool
</title><link>http://www.mikeash.com/pyblog/friday-qa-2011-09-02-lets-build-nsautoreleasepool.html</link><description>It's that time again: time for more programming craziness. Dallas Brown suggested that I talk about how &lt;code&gt;NSAutoreleasePool&lt;/code&gt; works behind the scenes. I decided that the best way to do that would be to simply reimplement it, and that is what I'll discuss today.&lt;br&gt;&lt;a href="http://www.mikeash.com/pyblog/friday-qa-2011-09-02-lets-build-nsautoreleasepool.html"&gt;(Read More)&lt;/a&gt;</description><guid isPermaLink="true">http://www.mikeash.com/?page=pyblog/friday-qa-2011-09-02-lets-build-nsautoreleasepool.html</guid><pubDate>Fri, 02 Sep 2011 16:30:00 GMT</pubDate></item></channel></rss>

