Making a mach server

Posted by cwright on 2019.08.17 @ 13:23

Filed under:

(This is a sort of simplified retelling of http://fdiv.net/2011/01/14/machportt-inter-process-communication with some added lore. You should probably start there.)

Much of the magic behind macOS and iOS (and all the derived xOSs - watch, appleTV, the stripped down versions in cables and touch bars and wherever else these things invariably end up) is performed with the assistance of other processes (including the kernel). Communicating between them is accomplished by various ways, but for macOS, the underlying mechanism is a client/server IPC mechanism powered by Mach, and the underlying currency is the mach port (mach_port_t). [more...]

Mirror, Mirror, or, Don't fly off the Handle

Posted by cwright on 2019.08.13 @ 09:12

Filed under:

During my time at Apple, I dealt with a lot of rather low-level systems treachery. It’s poorly documented, even internally, and asking for help has roughly even odds on getting a passive aggressive non-answer.

The cool trick for today is creating a “memory object.” A memory object is one or more physical pages that are wrapped in a mach port. With this, you can pass the port to another process, who can map the pages, creating shared memory. Or you can map the pages again in your own address space, to create a mirror, or with different permissions so you can expose read-only pages at an interface boundary while still having the pages be writable at a different address. [more...]

Tweaking Synology’s DNS Server For Great Justice

Posted by cwright on 2016.06.23 @ 22:05

Filed under:

Years ago I purchased a Synology NAS (a DS1812+, if you must know). I also purchased some hard drives for it, and a 2GB stick of RAM (bringing its total up to 3GB). Under the hood it’s a dual-core Cedarview Atom x86 CPU, and it runs a Linux distro wherein the owner of the device also has root access (i.e., you own what you own, like in the good old days). It’s also got dual GB NICs, some USB ports, etc.

In addition to storing substantial slabs of data, you can install services on these devices, so in effect they’re more like mini servers than the NAS name might imply. It’s busybox-based though, so a lot of the normal Linux commands act weird or don’t have useful aliases (more, not less, only a subset of vi commands work, etc).

One of the services I opted to install was a DNS server, in the hopes that it would allow me to move some per-machine hosts file management stuff to it, and that our previously-rootless devices (read: iPads, iPhones, etc) would also be able to finally take advantage of a local caching name server with internal friendly names for devices that don’t participate in Bonjour. [more...]

memset() vs. bzero() — Ultimate Showdown

Posted by cwright on 2009.01.14 @ 21:58

Filed under:

There are a few functions used to zero out memory on most unix variants. memset(), bzero(), and calloc() are all a few such functions. calloc() isn’t very useful for clearing already allocated memory, so it won’t be appearing much more in this article. However, the other two are somewhat more interesting than meets the eye. [more...]

90% Easy, 10% Impossible

Posted by cwright on 2008.09.13 @ 19:19

Filed under:

90% Easy, 10% Impossible Pie ChartFrom time to time, I get these insatiable urges to read what other Cocoa developers blog about. Sometimes they’re informative, sometimes they’re funny, sometimes they read like college textbooks, and sometimes they’re just downright terrible, but I read them anyway. It comes and goes in waves, every 2 or 3 months. A couple weeks ago, one such binge happened, and I started reading Aaron Hillegass’ critique of NSController (since I was hating it at the time, and wanted to feel justified in hating it). In the critique, the following statement was made: [more...]

QTKit QCheatKit

Posted by cwright on 2008.08.26 @ 12:11

Filed under:

QuickTime LogoApple has been busily working to 64-bit-ify all of the frameworks they plan to continue supporting into the future (Snow Leopard and beyond). However, QuickTime is scheduled for some nice Cocoaification, so it didn’t get much 64-bit love. QTKit, the 64-bit impostor, pretends to be the 64-bit way forward, but unfortunately this is far from useful.

QuickTime is all C function stuff, rather verbose and boring. It’s also 32-bit only. The 64-bit front end on it is a framework called QTKit. However, 64-bit QTKit is little more than an impostor that secretly makes things messier during the 32-to-64-bit transition. [more...]

Silicon Dioxide (SiO₂)

Posted by cwright on 2008.07.30 @ 11:50

Filed under:

QuartzCrystal LogoIn the wee small hours of this morning, Kineme Interactive Media released its first commercial product, QuartzCrystal.

QuartzCrystal is an offline renderer that turns Quartz Compositions into portable QuickTime movies. It supports 3rd party plugins, as well as patches that do not work in safe-mode-only environments (such as QuickTime Pro). It also supports software scene antialiasing, so if you have a Mac with plenty of RAM and a hard-core video card, you can make spectacularly beautiful renderings of your plugins, effects, and compositions.

Beside QuartzCrystal, the only other product that renders and encodes compositions to movies is Apple’s own QuickTime Pro, which doesn’t support plugins, unsafe patches, or antialiasing.

QuartzCrystal Main Window Screenshot

Data Integrity a Posteriori

Posted by cwright on 2008.03.01 @ 19:03

Filed under:

 Corrosive Liquids.  Wear Protective Equipment.Data integrity is a hot topic these days. With data volumes on the rise and hard drive half-lives falling, protecting data has become important in many different fields.

Conventionally, a storage medium will report its life expectancy in terms of MTBF, or Mean Time Between Failures. This is often measured in hours. However, it’s not always this simple. Usage patterns and environmental characteristics take a heavy toll on how long our storage devices last. [more...]

Python's Flying Circus

Posted by cwright on 2008.02.22 @ 14:35

Filed under:

Python Logo

Lately I’ve been working on integrating (or, more accurately, attempting to integrate) the Python scripting language into some plugins for an application we develop plugins for. We’ve wrapped many libraries with varying levels of success, so this one wasn’t going to be much different. Or, so we thought. [more...]

Mac OS Xodus

Posted by cwright on 2007.12.27 @ 10:50

Filed under:

(First, yes I do realize the ‘X’ in ‘OS X’ is pronounced “ten” not “ecks.” I simply like the portmanteau.)

With the release of Leopard, I discovered the need to migrate my existing Tiger system onto an external drive. I needed it to be bootable, and I wanted to have a little discontinuity as possible. Apple generally makes this pretty easy, but it’s still a bit involved. I write this article from my migrated system, currently booting Tiger off of a USB drive. [more...]

mythical