<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>notes from /dev/null - computer</title><link href="http://yummymelon.com/devnull/" rel="alternate"/><link href="http://yummymelon.com/devnull/feeds/tags/computer.atom.xml" rel="self"/><id>http://yummymelon.com/devnull/</id><updated>2024-06-12T01:25:00-07:00</updated><entry><title>An accidental lock-in feature of the Apple ecosystem</title><link href="http://yummymelon.com/devnull/an-accidental-lock-in-feature-of-the-apple-ecosystem.html" rel="alternate"/><published>2024-06-12T01:25:00-07:00</published><updated>2024-06-12T01:25:00-07:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2024-06-12:/devnull/an-accidental-lock-in-feature-of-the-apple-ecosystem.html</id><summary type="html">&lt;p&gt;All the flowers to the developers who keep Emacs keybindings alive in Apple products.&lt;/p&gt;</summary><content type="html">&lt;p&gt;It’s &lt;a href="https://developer.apple.com/wwdc24/"&gt;WWDC&lt;/a&gt; week, when Apple shines their spotlight on its developer ecosystem every June. Given the moment, I’d like take this opportunity to give all the flowers to the unsung developers who have built and maintained a feature in Apple products that I hold quite dear: the Emacs keybindings in Apple UI frameworks.&lt;/p&gt;
&lt;p&gt;If you don’t know, when using a macOS native app like Notes, OmniGraffle, or Safari, you can use the following keybindings in any text field:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;C-a&lt;/code&gt; - move cursor to beginning of line&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-e&lt;/code&gt; - move cursor to end of line&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-f&lt;/code&gt; - move cursor forward one character&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-b&lt;/code&gt; - move cursor backward one character&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-k&lt;/code&gt; - kill text to end of line&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C-y&lt;/code&gt; - yank killed text (mostly, more on this later)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It can not be overstated how extraordinarily convenient this feature is to Emacs users.  Even more astonishing is how this set of bindings has continued to be maintained (since 2001!) across the different OS variants Apple ships (macOS, iOS, iPadOS, tvOS).&lt;/p&gt;
&lt;h1&gt;Backstory&lt;/h1&gt;
&lt;p&gt;My anecdotal understanding of this feature’s history is that it started with the NextStep OS back in 1988. The developers of NextStep used Emacs and so whenever they typed in the text widgets of the NextStep UI, they naturally wanted to use Emacs bindings. It was unlikely that this was ever an exec-level requirement. But the developers wanted it, &lt;em&gt;so they made it happen&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Fast forward in time, &lt;a href="http://yummymelon.com/devnull/next-is-the-reason-why-you-have-your-iphone.html"&gt;NeXT&lt;/a&gt; effectively acquires Apple and in doing so repackages the NextStep frameworks to ship Mac OS X (now called macOS). This decision fatefully keeps NextStep’s text system and its conventions intact in the UI framework called AppKit as part of family of frameworks called Cocoa. Fast-forward to 2007, the iPhone becomes a thing. Apple makes another fateful decision to build iPhone OS (now called iOS) off of Cocoa but create a new touch-based UI framework called UIKit. UIKit’s text system is heavily influenced by Cocoa where it too carries over the Emacs keybindings. Variants of iOS in the form of iPadOS and tvOS come to be, further propagating these keybindings. In 2019, a declarative UI framework called SwiftUI is created where its text system too adopts the Emacs keybindings.&lt;/p&gt;
&lt;h1&gt;Configuring Keybindings in macOS&lt;/h1&gt;
&lt;p&gt;Wonderfully enough, you can still configure the keybindings in AppKit-based apps on macOS using the NextStep style configuration as shown in the &lt;a href="https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/TextDefaultsBindings/TextDefaultsBindings.html#//apple_ref/doc/uid/20000468-611005"&gt;Text System Defaults and Key Bindings&lt;/a&gt; document. There it provides guidance on adding more Emacs-style keybindings.&lt;/p&gt;
&lt;p&gt;Of note is that macOS has always supported an alternate clipboard to emulate the Emacs kill-ring. This works independent of the system clipboard, and requires a bit of configuration to get working. There are two steps to this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redefine the keybinding &lt;code&gt;C-y&lt;/code&gt; to &lt;code&gt;yankAndSelect:&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the file &lt;code&gt;$HOME/Library/KeyBindings/DefaultKeyBinding.dict&lt;/code&gt; (for details see the link above), add the following line in the body between the braces.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="s2"&gt;&amp;quot;^y&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;yankAndSelect:&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Use the command line utility &lt;code&gt;defaults&lt;/code&gt; to set the variable &lt;code&gt;NSTextKillRingSize&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This variable controls the size of the kill ring. Here we will set it to 5.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;defaults&lt;span class="w"&gt; &lt;/span&gt;write&lt;span class="w"&gt; &lt;/span&gt;NSGlobalDomain&lt;span class="w"&gt; &lt;/span&gt;NSTextKillRingSize&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You can confirm the value in &lt;code&gt;NSTextKillRingSize&lt;/code&gt; as follows.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;defaults&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;read&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-g&lt;span class="w"&gt; &lt;/span&gt;NSTextKillRingSize
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Refer to &lt;code&gt;man defaults&lt;/code&gt; for more information on it.&lt;/p&gt;
&lt;p&gt;At this point, you will need to log out and back in for the new keybindings to take effect.&lt;/p&gt;
&lt;h1&gt;Caveats&lt;/h1&gt;
&lt;p&gt;You can’t have everything though as not all apps are built with AppKit. Focusing on only the default Emacs bindings, here’s a survey of the different levels of support for them from the different UI frameworks.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="text-align: center;"&gt;Binding&lt;/th&gt;
&lt;th style="text-align: center;"&gt;AppKit/SwiftUI (macOS)&lt;/th&gt;
&lt;th style="text-align: center;"&gt;UIKit/SwiftUI (iOS, iPadOS)&lt;/th&gt;
&lt;th style="text-align: center;"&gt;Mac Catalyst&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="text-align: center;"&gt;&lt;code&gt;C-a&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center;"&gt;&lt;code&gt;C-e&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center;"&gt;&lt;code&gt;C-f&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center;"&gt;&lt;code&gt;C-b&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center;"&gt;&lt;code&gt;C-k&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="text-align: center;"&gt;&lt;code&gt;C-y&lt;/code&gt;&lt;/td&gt;
&lt;td style="text-align: center;"&gt;Y&lt;/td&gt;
&lt;td style="text-align: center;"&gt;N&lt;/td&gt;
&lt;td style="text-align: center;"&gt;N&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Unsurprisingly, UIKit chose to not support a kill ring, so effectively &lt;code&gt;C-k&lt;/code&gt; is a delete function and yanking is not supported. The column for Mac Catalyst is a category of apps built to work for both iPadOS and macOS based largely on UIKit. Such apps include Messages and Stocks.&lt;/p&gt;
&lt;h1&gt;Closing Thoughts&lt;/h1&gt;
&lt;p&gt;I’ll never take for granted the repeated decision over the years by the Apple text system developers to keep supporting the Emacs keybindings. While perhaps not intended, this feature quite seriously is an ecosystem &lt;a href="https://en.wikipedia.org/wiki/Vendor_lock-in"&gt;lock-in&lt;/a&gt; factor for me. It is a gift and to some extent, a secret handshake, that I’ll always be grateful for. To whoever was, is, or will be involved with keeping this feature alive, thank you.&lt;/p&gt;</content><category term="misc"/><category term="emacs"/><category term="ios"/><category term="computer"/><category term="macos"/></entry><entry><title>Introducing regfmt</title><link href="http://yummymelon.com/devnull/introducing-regfmt.html" rel="alternate"/><published>2022-10-25T11:31:00-07:00</published><updated>2022-10-25T11:31:00-07:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2022-10-25:/devnull/introducing-regfmt.html</id><summary type="html">&lt;p&gt;Introducing regfmt - a command line utility to generate SVG diagrams for control register-style data formats&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="img" src="http://yummymelon.com/images/example_0001-github.svg"&gt;&lt;/p&gt;
&lt;p&gt;Sometimes a project you've had in the mental back burner for decades calls to you again, but this time you pay attention. So it is with &lt;strong&gt;regfmt&lt;/strong&gt;, a command line utility that I spent this past month working on.&lt;/p&gt;
&lt;h2&gt;Backstory&lt;/h2&gt;
&lt;p&gt;While I was in grad school back in the early 1990's the department had prescribed using the AT&amp;amp;T &lt;a href="https://www.troff.org"&gt;troff&lt;/a&gt; tools for writing papers. Among those tools was one called &lt;a href="https://github.com/arnoldrobbins/dformat"&gt;dformat&lt;/a&gt;, which enabled you to easily draw out control register-style data formats using a domain specific language (DSL).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;dformat&lt;/strong&gt; was a great tool for its time but over the years got consigned to bit rot and ultimately forgotten by many. Among the reasons for it being forgotten was that it only supported the &lt;strong&gt;troff&lt;/strong&gt; specific &lt;strong&gt;pic&lt;/strong&gt; drawing language and used a make-shift DSL for its input.&lt;/p&gt;
&lt;h2&gt;Today&lt;/h2&gt;
&lt;p&gt;The world moved on and settled on other tools for writing and drawing. That said, the fundamentals of computer design haven't changed and control registers are still a thing, so the need to draw them out is still a thing, and drawing them by hand is still painful.&lt;/p&gt;
&lt;p&gt;In the intervening time from the early '90s to 2022, I've run into times when I wished I had something like &lt;strong&gt;dformat&lt;/strong&gt; but &lt;em&gt;modern&lt;/em&gt; to use for writing technical documentation. What's modern you say? How about having:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a common vector graphics file format output such as &lt;code&gt;SVG&lt;/code&gt; which can then be easily converted to a raster format (&lt;code&gt;png&lt;/code&gt;, &lt;code&gt;jpg&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;an input specification that is based on a common data serialization language.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the early summer of 2022, I got to thinking about &lt;strong&gt;dformat&lt;/strong&gt; and how it could be re-imagined for today and realized wow, all the pieces I needed were there:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://en.wikipedia.org/wiki/Scalable_Vector_Graphics"&gt;SVG&lt;/a&gt; for the output format&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://en.wikipedia.org/wiki/YAML"&gt;YAML&lt;/a&gt; for the input format&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://en.wikipedia.org/wiki/CSS"&gt;CSS&lt;/a&gt; to style the output&lt;/li&gt;
&lt;li&gt;Implement in &lt;a href="https://www.python.org"&gt;Python&lt;/a&gt; which has support for all of the above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In October 2022, I found the cycles to go to work on this.&lt;/p&gt;
&lt;h2&gt;Announcing &lt;strong&gt;regfmt&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;regfmt&lt;/strong&gt; is a Python command line utility to generate SVG diagrams for control register-style data formats. It is inspired by the &lt;em&gt;dformat&lt;/em&gt; command from the &lt;em&gt;troff&lt;/em&gt; family of tools, however re-imagined using contemporary (circa 2022) file formats.&lt;/p&gt;
&lt;p&gt;Python installation:
PyPI:  &lt;a href="https://pypi.org/project/regfmt/"&gt;https://pypi.org/project/regfmt/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Source Repository:
GitHub: &lt;a href="https://github.com/kickingvegas/regfmt"&gt;https://github.com/kickingvegas/regfmt&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Example output of &lt;strong&gt;regfmt&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;img alt="img" src="http://yummymelon.com/images/register-stair-left.svg"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="img" src="http://yummymelon.com/images/register.svg"&gt;&lt;/p&gt;
&lt;h3&gt;Features&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;SVG output&lt;/li&gt;
&lt;li&gt;Modern configuration input file formats&lt;ul&gt;
&lt;li&gt;YAML for register configuration&lt;/li&gt;
&lt;li&gt;CSS for styling SVG output&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Try it out!&lt;/h2&gt;
&lt;p&gt;If you need a tool like this, please take the time to try it out. Any &lt;a href="https://github.com/kickingvegas/regfmt/issues" title="regfmt issue tracker"&gt;feedback&lt;/a&gt; would be appreciated!&lt;/p&gt;
&lt;h3&gt;Requirements&lt;/h3&gt;
&lt;p&gt;Python: ≧ 3.9 &lt;/p&gt;
&lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;regfmt&lt;/strong&gt; supports installation via &lt;a href="https://pypi.org/project/regfmt/"&gt;PyPI&lt;/a&gt;. Is is recommend that you do this in a Python virtual environment. &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;&lt;span class="normal"&gt;1&lt;/span&gt;
&lt;span class="normal"&gt;2&lt;/span&gt;
&lt;span class="normal"&gt;3&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;$&lt;span class="w"&gt; &lt;/span&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;.venv
$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;.venv/bin/activate
&lt;span class="o"&gt;(&lt;/span&gt;.venv&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;regfmt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</content><category term="misc"/><category term="dev"/><category term="regfmt"/><category term="writing"/><category term="software"/><category term="computer"/><category term="unix"/></entry><entry><title>NeXT is the reason why you have your iPhone.</title><link href="http://yummymelon.com/devnull/next-is-the-reason-why-you-have-your-iphone.html" rel="alternate"/><published>2011-09-01T02:23:00-07:00</published><updated>2011-09-01T02:23:00-07:00</updated><author><name>Charles Choi</name></author><id>tag:yummymelon.com,2011-09-01:/devnull/next-is-the-reason-why-you-have-your-iphone.html</id><summary type="html">&lt;p&gt;One of the things that I always marvel at in computing is how strong an idea can persist and if the idea is good enough, will find its moment in the Sun.&lt;/p&gt;</summary><content type="html">&lt;p&gt;One of the things that I always marvel at in computing is how strong an idea can persist and if the idea is good enough, will find its moment in the Sun.&lt;/p&gt;
&lt;p&gt;Back in late 80's, Steve Jobs with a superbly talented team of hardware and software engineers set out to make a computer that would offer a &amp;ldquo;new kind of computing and software development environment.&amp;rdquo; That computer would be called NeXT.&lt;/p&gt;
&lt;p&gt;NeXT made a point to market themselves to the higher education market and in late-1988 they started making rounds to colleges to pitch their yet-to-ship computer. At that time, I was a graduate student at the University of Virginia and as such got to attend an on-campus presentation of the first NeXT computer. It was gorgeous in all its greyscale beauty. It was also crazy expensive, with the base model listing at $6,500 with no hard drive. While the technology and pricing were competitive with the workstations of its time, NeXT was really priced in the realm of institutional purchasing and not for individuals.&lt;/p&gt;
&lt;p&gt;At the presentation there was of course product information, which I took, studied, and then shelved away. The years passed, and through circumstances well documented elsewhere, the operating system built for the NeXT computer would become the basis for OS X and then iOS: the OS driving Macs, iPhones, and iPads today. But it's not only a software story. NeXT and all the other workstation manufacturers of its time (Sun, SGI, Apollo, etc.,&amp;hellip;) were really pushing what could be achieved with microprocessor-based computers, shoe-horning in architectural concepts from mainframe and mini-computers to improve performance wherever possible within the economics of the early 1990's.&lt;/p&gt;
&lt;p&gt;With Moore's law, scaling has yielded system-on-chip (SoC) devices inheriting from workstation hardware architectures and system software, enabling the nascent ubiquitous computing world we see today.&lt;/p&gt;
&lt;p&gt;Back to that product information from 1988, I still have them on my bookshelf. With the recent announcement of Steve Jobs' resignation, it seems as good a time as any to share them with you. They are a fun read: it's marvelous to see how coherent the vision of that talented team building NeXT has held out over the years.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://drive.google.com/file/d/1vqSkO_2PmurhKvheMeRwHJ0GQSC_mQG-/view?usp=sharing" title="NeXT Product Information"&gt;NeXT Product Information (pdf)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://drive.google.com/file/d/122PuGkCr4RW8TLgtIQUU1KrblRwyVXR3/view?usp=sharing" title="NeXT IDC Bulletin"&gt;NeXT IDC Bulletin (pdf)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="misc"/><category term="Computer"/><category term="Software"/><category term="Mobile"/><category term="iOS"/></entry></feed>