<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fazal Majid&#039;s low intensity weblog &#187; Mylos longer articles</title>
	<atom:link href="http://majid.info/blog/tag/stories/feed/" rel="self" type="application/rss+xml" />
	<link>http://majid.info/blog</link>
	<description>Sporadic pontification</description>
	<lastBuildDate>Thu, 05 Jan 2012 07:15:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Aperture: first impressions</title>
		<link>http://majid.info/blog/aperture-first-impressions/</link>
		<comments>http://majid.info/blog/aperture-first-impressions/#comments</comments>
		<pubDate>Thu, 01 Dec 2005 08:37:01 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2005/12/01/apertureFirstImpressions.html</guid>
		<description><![CDATA[First in a series: First impressions Asset management Under the hood: file format internals Cost and hardware requirements The first thing you notice about Aperture, even before you buy it, is its hefty hardware requirements. I had to upgrade the &#8230; <a href="http://majid.info/blog/aperture-first-impressions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>First in a series:</p>
<ol>
<li><b>First impressions</b></li>
<li>Asset management</li>
<li>Under the hood: <a href="/blog/aperture-internals/">file format internals</a></li>
</ol>
<h2>Cost and hardware requirements</h2>
<p>The first thing you notice about Aperture, even before you buy it, is its hefty hardware requirements. I had to upgrade the video card on my PowerMac G5 (dual 2GHz, 5.5GB RAM) to an ATI X800XT, as the stock nVidia 5200FX simply doesn&#8217;t make the cut.</p>
<p>Aperture costs $500, not far from the price of the full Photoshop CS2. Clearly, this product is meant for professionals, just like Final Cut Pro. The pricing is not out of line with similar programs like <a href="http://www.phaseone.com/Content/Software/PROSoftware.aspx">Capture One PRO</a>, but it is rather steep for the advanced amateurs who have flocked to DSLRs and the RAW format. Hopefully, Apple will release a more reasonably priced &#8220;Express&#8221; version much as they did with Final Cut Express.</p>
<h2>File management</h2>
<p>Like its sibling iPhoto, Aperture makes the annoying assumption that it will manage your photo collection under its own file hierarchy. It does not play nice and share with other applications, apart from the built-in Photoshop integration, which merely turns Photoshop into an editor, with Aperture calling all the shots and keeping both image files and metadata databases firmly to itself. Photoshop integration does not seem to extend to <a href="http://www.adobe.com/products/xmp/main.html">XMP</a> interoperability, for instance.</p>
<p>This is a major design flaw that will need to be addressed in future versions &mdash; most pros use a battery of tools in their workflow, and expect their tools to cooperate using the photographer&#8217;s directory structure, not one imposed by the tool. Assuming one Aperture to rule them all is likely going to be too confining, and the roach-motel like nature of Aperture libraries is going to cause major problems down the road. Copying huge picture files around is very inefficient &mdash; HFS supports symbolic and hard links, there is no reason to physically copy files. This scheme also renders Aperture close to useless in a networked environment like a magazine or advertising agency, where media files are typically stored on a shared SAN, e.g. on XServe RAID boxes using Fibre Channel.</p>
<p>Fortunately, the file layout is relatively easy to <a href="http://www.majid.info/mylos/stories/2005/12/01/apertureInternals.html">reverse-engineer</a> and it is probably just a question of time until third-party scripts become available to synchronize an Aperture library with regular Pictures folders and XMP sidecar metadata files, or other asset management and metadata databases like Extensis Portfolio or even (shudder) Canto Cumulus. Apple should not make us jump through these hoops &#8211; the purpose of workflow is to boost productivity, not hinder it. In any case, Apple is apparently hinting Aperture can output sidecar files, at least according to <a href="http://www.pdnonline.com/pdn/prodtech/reviews/article_display.jsp?vnu_content_id=1001435191">PDN&#8217;s first look article</a></p>
<h2>Performance</h2>
<p>Aperture is not the lightning-fast RAW converter we have been dreaming of. Importing RAW files is quite a sluggish affair, taking 2 minutes 15 seconds to import a 665MB folder with 86 Canon Rebel XT CR2 RAW files. In comparison, Bridge takes about a minute to generate thumbnails and previews for the same images. The comparison is not entirely fair, as Aperture&#8217;s import process yields high-resolution previews that allow you to magnify the image to see actual pixels with the loupe tool, whereas Bridge&#8217;s previews are medium resolution at best. The CPU utilization on my dual G5 is far from pegged however, which suggests the import process was not particularly tuned for SMP or multi-core systems, nor that it even leverages OS X&#8217;s multithreading. Aperture will work with other formats like scanned TIFFs as well (import times are even slower, though).</p>
<p>Once import is complete, viewing the files is very smooth and fast. The built-in loupe tool is particularly addictive, and very natural for anyone who has worked with a <a href="/blog/going-all-loopy-about-loupes/">real loupe on a real light table</a>. A <a href="http://majid.info/blog/wp-content/uploads/2005/12/aperture_loupe.mov">cute visual effect</a> (Quicktime, 6MB) has the loupe flip over as you reach the edges of the screen. The loupe will also magnify the thumbnails, although that will pause execution for the time it takes to read the thumbnail&#8217;s preview data into memory.</p>
<h2>Workflow innovations</h2>
<p>Aperture has two very interesting concept: stacks and versions. Stacks group together multiple images as one. It is very common for a photographer to take several very similar photos. Think of bracketed exposures, or a sports photographer shooting a fast action sequence at 8 frames per second, or a VR photographer making a series of 360-degree shots for use in an immersive panorama. Aperture&#8217;s stacks allow you to manage these related images as a single unit, the stack. It is even capable of identifying candidates for a stack automatically using timestamps.</p>
<h2>Stacks</h2>
<p style="background-color: yellow"><em>This article is work-in-progress, and this section has to be fleshed out</em></p>
<h2>Versions</h2>
<p>Versions is a concept clearly drawn from the world of software configuration control systems like CVS or Visual SourceSafe. Aperture does not touch the original image, adjustments like changing the color balance simply record the series of operations to achieve the new version of the image in the metadata database, just like CVS only stores diffs between versions of a file, to save space. This suggests Apple plans future versions of Aperture with shared image repositories, as most modern systems work that way, with a shared central repository, and individual copies for each user, with a check-in/check-out mechanism with conflict resolution.</p>
<p>The parameters for a transform take a trifling amount of memory, and the photographer can experiment to his heart&#8217;s content with multiple variants. Photoshop now has equivalent functionality with the introduction of <a href="http://www.creativepro.com/story/feature/20872.html">layers comps</a> in CS, but they still feel like bolted-on features rather than integral to the product.</p>
<p>In the early nineties, French firm FITS introduced a groundbreaking program named <a href="http://www.byte.com/art/9501/sec12/art2.htm">Live Picture</a> to compete with Photoshop. Its chief claim to fame was that it could deal with huge images very efficiently, because it recorded the operations as a sequence of mathematical transforms rather than the result, in a way eerily reminiscent of PostScript. The transforms were only applied as needed at the display resolution, thus avoiding the need to apply them to the full-resolution image until the final output was required, while still managing to deal with zooming adequately. The software was promising, but the transformation logging technique limited the types of operations that could be performed on images, and due in part to its high price and specialized scope, the product died a slow and painful death. In its current incarnation, it lives on, after a fashion, in the moribund <a href="http://www.i3a.org/i_flashpix.html">Flashpix</a> image format and a web graphics server program imaginatively named <a href="http://www.iseemedia.com/main/products/imageserver5/technology">ImageServer</a>.
<p>Chained transforms is a very elegant approach when compared to the brute-force of Photoshop &mdash; in Aperture a finished image is represented as a master image and a series of transformations to be applied to it to achieve each version, much like Photoshop keeps a history of changes made to the image in memory (but not in the final disk file). Since Aperture&#8217;s transforms are fairly simple, they can be executed in real time by modern graphics cards that support <a href="http://www.apple.com/macosx/features/coreimage/">Core Image</a>.</p>
<h2>Target market</h2>
<p>Keep in mind there are two types of pro photographers: those who divide photographers in two groups, and the others&#8230; More seriously:</p>
<ol>
<li>Those who try to build up a portfolio of images over their career, where royalties and residual rights will provide them with financial support when they retire. Most fine art, landscape or nature photographers are in this category, and photojournalists could be assimilated (except their employer owns the rights to the archive in the latter case).</li>
<li>Those who do work-for-hire. Wedding photographers, event photographers, product, catalog, advertising and industrial photographers fit in this category.</li>
</ol>
<p>The first type need a digital asset management database to retrieve and market their images more effectively, and a distribution channel. Most farm out that representation work to the likes of Corbis or Getty Images.</p>
<p>The second type will work intensely on a project, take a lot of frames and show many variants to a client for approval. Once the project is done, it is archived, probably never to be used again, and they move on to the next one. In most cases, the rights to the images remain with those who commissioned them, not the photographer, and thus there is no incentive to spend much effort in organizing them with extensive metadata beyond what is required for the project. These users need a production workflow tool that will streamline the editing and client approval process, the latter mostly performed via email or password-protected websites nowadays.
<p>Aperture&#8217;s projects (flat, not nested hierarchically, and thus not all that scalable) and vaults (archives where projects go when they are no longer needed or finished) are a clear indication it is intended mostly for the second type of photographer. Apple did not convey the specialized focus of the product forcefully enough, but the blogosphere&#8217;s buzz machine bears much of the blame for raising unwarranted expectations about what the product is about.
<p>Aperture is good for one thing: let wedding photographers and the like go through the editing (as in sorting through slides on a light table, not retouching an individual image) as efficiently as possible. Most wedding pros simply cannot afford the time to individually edit a single picture beyond white balance, tonal adjustments, cropping and sharpening, and Aperture&#8217;s built-in tools are perfectly adequate for them.</p>
<p>That is also why there is such a slow import process &mdash; this prep work is required to make the actual viewing, side by side comparison, sorting and manipulation as smooth, interactive and responsive as possible to avoid disrupting the photographer&#8217;s &#8220;flow&#8221;. The goal is to have a very smooth virtual light table, not a filing cabinet, where you can move slides around, group them in stacks, toy around with versions, and compare them side by side on dual 30 inch Cinema Displays. The user experience was clearly designed around what the average art director (with his or her loupe almost surgically implanted) is familiar and comfortable with.
<p>The positioning as &#8220;iPhoto Pro&#8221; obscures the fact that Aperture is sub-optimal for managing or indexing large archives with rich metadata. For the first type of pro photographer (which is also what the average advanced amateur will relate to), a digital asset management database like the excellent <a href="http://www.kavasoft.com/Shoebox/">Kavasoft Shoebox</a> or the more pedestrian but cross-platform and workgroup-oriented Extensis Portfolio and Canto Cumulus will better fit their needs, with Adobe Bridge being probably sufficient for browsing and reviewing/editing freshly imported photos (when it is not keeling over and crashing, that is).<br />
<h2>Conclusion</h2>
<p>Aperture is clearly a 1.0 product. It shows promise, but is likely to disappoint as the reality cannot match the hype that developed in the month or so between the announcement and the release. The problem is that there is a Cult of the Mac that raises unrealistic expectations of anything coming out of Cupertino.</p>
<p>The hype around Aperture was certainly immense, I am sure Apple was as surprised as any by how positive the response was (after all, they released Aperture at a relatively obscure pro photo show). They are probably furiously revising plans for the next release right now. I consider Aperture 1.0 more a statement of direction than a finished product.<br />
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/aperture-first-impressions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://majid.info/blog/wp-content/uploads/2005/12/aperture_loupe.mov" length="6330094" type="video/quicktime" />
		</item>
		<item>
		<title>Aperture internals</title>
		<link>http://majid.info/blog/aperture-internals/</link>
		<comments>http://majid.info/blog/aperture-internals/#comments</comments>
		<pubDate>Thu, 01 Dec 2005 08:15:46 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2005/12/01/apertureInternals.html</guid>
		<description><![CDATA[Last in a series: First impressions Asset management Under the hood: file format internals This article was never completed because I switched to Lightroom and lost interest. What was done may be of interest to Aperture users, although the data &#8230; <a href="http://majid.info/blog/aperture-internals/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last in a series:</p>
<ol>
<li><a href="/blog/aperture-first-impressions/">First impressions</a></li>
<li>Asset management</li>
<li><b>Under the hood: file format internals</b></li>
</ol>
<p style="background-color: yellow"><em>This article was never completed because I switched to Lightroom and lost interest. What was done may be of interest to Aperture users, although the data model probably changed since 1.0</em></p>
<p>Aperture stores its library as a <a href="http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFBundles/index.html">bundle</a> with the extension <tt>.aplibrary</tt>. This is a concept inherited from NeXTstep, where an entire directory that has the bundle bit set is handled as if it were a single file. A much more elegant system than Mac OS Classic&#8217;s data and resource forks.</p>
<p>Inside the bundle, there is a directory <tt>Aperture.aplib</tt> which contains the metadata for the library in a file <tt>Library.apdb</tt>. This file is actually a <a href="http://www.sqlite.org/">SQLite3</a> database. SQLite is an excellent, lightweight open-source embedded relational database engine. Sun uses SQLite 2 as the <a href="http://blogs.sun.com/roller/page/lianep/20050208#smf_repository_design_choices">central repository for SMF</a>, the next-generation service management facility that controls booting the Solaris operating system and its automatic fault recovery, a strong vote of confidence by Sun in SQLite&#8217;s suitability for mission-critical use. SQLite is also one of the underlying data storage mechanisms used by Apple&#8217;s over-engineered <a href="http://developer.apple.com/macosx/coredata.html">Core Data</a> framework.</p>
<p>You don&#8217;t have to use Core Data to go through the database, the <tt>/usr/bin/sqlite3</tt> command-line utility is perfectly fine for this purpose. Warning: using <tt>sqlite3</tt> to access Aperture&#8217;s data directly is obviously unsupported by Apple, and should not be done on a mission-critical library. At the very least, make sure Aperture is not running.</p>
<pre>
ormag ~/Pictures/Aperture Library.aplibrary/Aperture.aplib>sqlite3 Library.apdb
SQLite version 3.1.3
Enter ".help" for instructions
sqlite> .tables
ZRKARCHIVE             ZRKIMAGEADJUSTMENT     ZRKVERSION
ZRKARCHIVERECORD       ZRKMASTER              Z_10VERSIONS
ZRKARCHIVEVOLUME       ZRKPERSISTENTALBUM     Z_METADATA
ZRKFILE                ZRKPROPERTYIDENTIFIER  Z_PRIMARYKEY
ZRKFOLDER              ZRKSEARCHABLEPROPERTY
sqlite> .schema z_metadata
ormag ~/Pictures/Aperture Library.aplibrary/Aperture.aplib>sqlite3 Library.apdb
SQLite version 3.3.7
Enter ".help" for instructions
sqlite> .tables
ZRKARCHIVE             ZRKKEYWORD             ZRKVOLUME
ZRKARCHIVERECORD       ZRKMASTER              Z_11VERSIONS
ZRKARCHIVEVOLUME       ZRKPERSISTENTALBUM     Z_9VERSIONS
ZRKFILE                ZRKPROPERTYIDENTIFIER  Z_METADATA
ZRKFOLDER              ZRKSEARCHABLEPROPERTY  Z_PRIMARYKEY
ZRKIMAGEADJUSTMENT     ZRKVERSION
sqlite> .schema zrkfile
CREATE TABLE ZRKFILE ( Z_ENT INTEGER, Z_PK INTEGER PRIMARY KEY, Z_OPT INTEGER, ZASSHOTNEUTRALY FLOAT, ZFILECREATIONDATE TIMESTAMP, ZIMAGEPATH VARCHAR, ZFILESIZE INTEGER, ZUUID VARCHAR, ZPERMISSIONS INTEGER, ZNAME VARCHAR, ZFILEISREFERENCE INTEGER, ZTYPE VARCHAR, ZFILEMODIFICATIONDATE TIMESTAMP, ZASSHOTNEUTRALX FLOAT, ZFILEALIASDATA BLOB, ZSUBTYPE VARCHAR, ZCHECKSUM VARCHAR, ZPROJECTUUIDCHANGEDATE TIMESTAMP, ZCREATEDATE TIMESTAMP, ZISFILEPROXY INTEGER, ZDATELASTSAVEDINDATABASE TIMESTAMP, ZISMISSING INTEGER, ZVERSIONNAME VARCHAR, ZISTRULYRAW INTEGER, ZPROJECTUUID VARCHAR, ZEXTENSION VARCHAR, ZISORIGINALFILE INTEGER, ZISEXTERNALLYEDITABLE INTEGER, ZFILEVOLUME INTEGER, ZMASTER INTEGER );
CREATE INDEX ZRKFILE_ZCHECKSUM_INDEX ON ZRKFILE (ZCHECKSUM);
CREATE INDEX ZRKFILE_ZCREATEDATE_INDEX ON ZRKFILE (ZCREATEDATE);
CREATE INDEX ZRKFILE_ZFILECREATIONDATE_INDEX ON ZRKFILE (ZFILECREATIONDATE);
CREATE INDEX ZRKFILE_ZFILEMODIFICATIONDATE_INDEX ON ZRKFILE (ZFILEMODIFICATIONDATE);
CREATE INDEX ZRKFILE_ZFILESIZE_INDEX ON ZRKFILE (ZFILESIZE);
CREATE INDEX ZRKFILE_ZFILEVOLUME_INDEX ON ZRKFILE (ZFILEVOLUME);
CREATE INDEX ZRKFILE_ZISEXTERNALLYEDITABLE_INDEX ON ZRKFILE (ZISEXTERNALLYEDITABLE);
CREATE INDEX ZRKFILE_ZMASTER_INDEX ON ZRKFILE (ZMASTER);
CREATE INDEX ZRKFILE_ZNAME_INDEX ON ZRKFILE (ZNAME);
CREATE INDEX ZRKFILE_ZPROJECTUUIDCHANGEDATE_INDEX ON ZRKFILE (ZPROJECTUUIDCHANGEDATE);
CREATE INDEX ZRKFILE_ZUUID_INDEX ON ZRKFILE (ZUUID);
sqlite> .schema z_metadata
CREATE TABLE Z_METADATA (Z_VERSION INTEGER PRIMARY KEY, Z_UUID VARCHAR(255), Z_PLIST BLOB);
sqlite> .schema z_primarykey
CREATE TABLE Z_PRIMARYKEY (Z_ENT INTEGER PRIMARY KEY, Z_NAME VARCHAR, Z_SUPER INTEGER, Z_MAX INTEGER);
sqlite> select * from z_primarykey;
1|RKArchive|0|1
2|RKArchiveRecord|0|0
3|RKArchiveVolume|0|1
4|RKFile|0|2604
5|RKFolder|0|23
6|RKProject|5|0
7|RKProjectSubfolder|5|0
8|RKImageAdjustment|0|1086
9|RKKeyword|0|758
10|RKMaster|0|2604
11|RKPersistentAlbum|0|99
12|RKPropertyIdentifier|0|119
13|RKSearchableProperty|0|84191
14|RKVersion|0|2606
15|RKVolume|0|0
sqlite>
</pre>
<p>One useful command is <tt>.dump</tt>, which will dump the entire database in the form of the SQL commands required to recreate it. Even with a single-photo library, this generates many pages of output.</p>
<p>Here is my attempt to reverse engineer the Aperture 1.5.2 data model. CoreData, like all object-relational mappers (ORMs) leaves much to be desired from the relational perspective. The fact SQLite foreign keys constraints are not enforced (and not even set by CoreData) doesn&#8217;t help. Click on the diagram below to expand it.</p>
<p> <center><a href="http://majid.info/blog/wp-content/uploads/2005/12/aperture.png"><img alt="Aperture 1.5.1. data model" src="http://majid.info/blog/wp-content/uploads/2005/12/aperture.png" width="500" height="419"></a></center>
<p> All tables are linked to <tt>Z_PRIMARYKEY</tt> which implements a form of inheritance using the column <tt>Z_ENT</tt> to identify classes. The only table that seems to use this today is <tt>ZRKFOLDER</tt>, where the rows can have a <tt>Z_ENT</tt> of 5 (Folder), 6 (Project) or 7 (ProjectSubfolder). For clarity, I have omitted the links between all tables and <tt>Z_PRIMARYKEY</tt>.</p>
<p><tt>ZRKIMAGEADJUSTMENT</tt> looks like the table that records the transformations that turn a master image into a version, Live Image style.</p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/aperture-internals/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Going all loopy about loupes</title>
		<link>http://majid.info/blog/going-all-loopy-about-loupes/</link>
		<comments>http://majid.info/blog/going-all-loopy-about-loupes/#comments</comments>
		<pubDate>Sun, 18 Jul 2004 04:09:59 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2004/07/17/loupes.html</guid>
		<description><![CDATA[Harking back to Kodachrome My father took most of my childhood photos (like these) on Kodachrome slide film. Kodachrome was the only color game in town for a long time, but was eventually superseded in the marketplace by C41 color &#8230; <a href="http://majid.info/blog/going-all-loopy-about-loupes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Harking back to Kodachrome</h2>
<p>My father took most of my childhood photos (like <a href="http://www.majid.info/galleries/baby_fazal/">these</a>) on Kodachrome slide film. Kodachrome was the only color game in town for a long time, but was eventually superseded in the marketplace by C41 color print films and finer grained E6 slide film.</p>
<p>Kodachrome has a distinctive sharpness (acutance, not resolution), and excellent durability when stored in the dark. Many photographers still shoot Kodachrome for its special &#8220;look&#8221;, even though processing options are diminishing and Kodak jacked up the price. Kodak recently announced it is closing its Fair Lawn, NJ processing lab, the last Kodak-owned plant in the US for Kodachrome, and there are now only three labs left worldwide that can run the complicated process (<a href="http://www.dwaynesphoto.com/">Dwayne&#8217;s</a> in Kansas, <a href="http://www.photo.net/bboard/q-and-a-fetch-msg?msg_id=008cbB">Kodak in Lausanne, Switzerland</a>, and a lab in Japan). Kodachrome was actually discontinued for a while, and brought back after strident protests, but the writing is on the wall.</p>
<h2>Projectors and light tables</h2>
<p>Every now and then, we would dust off the slide projector and have a slide show. I even remember building a surprisingly effective slide projector when I was 9 using Legos, a flashlight and a jar of peanut butter filled with water as the lens. Slide projectors are hard to find, a pain to setup and most people groan instinctively when one comes up, associated as they are with dreary slide show of other people&#8217;s vacation pictures. The LCD computer monitor is the successor to the projector, and many people no longer have prints made at all, perhaps because they subconsciously realize that the 500:1 contrast ratio of a LCD monitor yields significantly livelier images than prints can achieve.</p>
<p><img usemap="loupes_map" src="http://majid.info/blog/wp-content/uploads/2004/07/loupes.jpg" border="0" alt="light table and loupes" width="520" height="331" /></p>
<map name="loupes_map"> <a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#rodenstock"> </a><a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#schneider"> </a><a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#hastings"> </a><a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#peak"> </a><a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#zeiss"> </a><a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#scope"> </a></map>
<p><a href="http://www.majid.info/mylos/stories/2004/07/17/loupes.html#scope">For those of us who still shoot slide film, there is a better alternative, </a><a href="http://www.photo.net/photo/evaluation">light tables and loupes</a>. A light table is just what the name implies &#8211; a piece of frosted plastic illuminated by daylight-balanced fluorescent tubes. Basic models like my <a href="http://www.gagneinc.com/lighttables.html">Porta-trace</a> shown above are inexpensive. Loupes, on the other hand, are a different story.</p>
<h2>Loupe basics</h2>
<p>Loupes (French for &#8220;magnifying glass&#8221;) are high-quality magnifiers, originally used to help focus images on a ground glass, and later to view slides or negatives on a light table. You can find them in all shapes and sizes, at prices from $15 for a cheap plastic model, all the way to over $300 for a Zeiss loupe for viewing 6&#215;6 medium format slides. Slides viewed on a light table with a high-quality loupe are a treat for the eyes, because of the high contrast (1000:1) that you cannot get with prints (more like 100:1).</p>
<p>There are two ways you can use a loupe: use a high-power (10x or higher) to check slides or negatives for critical focus), or a medium-power loupe to evaluate an entire frame (usually 5x-6x for 35mm, 3x-3.5x for medium format). Viewing an entire frame is more challenging than just checking for focus in the center, because the loupe must provide excellent optical quality across the entire field of view. There are variable magnification (zoom) loupes available, but their optical quality is far below that of fixed magnification loupes, and they should be avoided for critical examination of slides or negatives.</p>
<p>I have accumulated quite a few loupes over time. The most famous brand in loupes is Schneider-Kreuznach, a German company noted for its enlarger, medium format and large format lenses.  Many other brands make high-quality loupes, including Rodenstock, Pentax, Nikon, Canon, NPC, Leica and Zeiss. I do not live in New York, and have thus not had the opportunity to compare them side by side at a place like B&amp;H Photo, so I pretty much had to take a leap of faith based on recommendations on the Internet at sites like Photo.net.</p>
<ul>
<li><a href="http://www.peak.co.jp/OUR%20PRODUCT/2032.htm">Peak 10x Plalupe</a></li>
<li><a href="http://www.rdrop.com/~dbp/equipment/loupes.html">Contax Carl Zeiss Triotar T* 5x</a> (<a href="http://www.majid.info/galleries/d100/dsc_0003_std.jpg">larger photo</a>)</li>
<li><a href="http://www.edmundoptics.com/onlinecatalog/displayproduct.cfm?productID=1639">Edmund Optics 50x direct view measuring microscope</a></li>
<li><a href="http://www.calumetphoto.com/ctl?PAGE=Controller&amp;ac.item.itemNo=CC1005">Calumet-branded Rodenstock 3x Aspherical loupe for 6&#215;6</a></li>
<li><a href="http://www.edmundoptics.com/onlinecatalog/displayproduct.cfm?productID=1730">Edmund Optics 10x Hastings Triplet</a></li>
<li><a href="http://www.schneideroptics.com/ecommerce/CatalogItemDetail.aspx?CID=1110&amp;IID=2052">Schneider 10x magnifier</a></li>
</ul>
<h2><a id="peak" name="peak"></a>Peak</h2>
<p>The Peak was my first loupe. Dirt cheap, and reasonably good for the price, but that&#8217;s pretty much all it has going for it (more on that below).</p>
<h2><a id="zeiss" name="zeiss"></a>Zeiss</h2>
<p>I was put off by reports on the plastic construction of the new line of Schneider loupes, and opted for a Zeiss loupe instead, based on the reputation of Zeiss lenses (my first camera was a Zeiss, and I also have a Zeiss lens on my Hasselblad).</p>
<p>The Zeiss Triotar 5x loupe (the box does not mention Contax, but as it is made in Japan, it is presumably made in the same factory) comes in a cardboard box that can be turned into a protective case by cutting off the tabs on both ends. It does not include a carrying pouch or protective box, which is regrettable, specially for a product as expensive ($160), but apparently most high-end loupe manufacturers do not bother to include one. It does not include a neck strap either, which could be more of an issue for some. How can you look like a glamorous New York art director without a loupe around your neck? More seriously, the strap is particularly useful if you are going to use the loupe for focusing medium or large format cameras against a ground screen.</p>
<p>The loupe is shipped with two acrylic bases that screw into the loupe&#8217;s base. One is frosted, and is used as a magnifier to view prints or other objects, with ambient light filtering through the base to illuminate the object. The black base is used to shield out extraneous light when concentrating on a slide or negative on a light table or a ground glass. Some loupes have a design with a clear base and a removable metal light shield. Which design you prefer is mostly a matter of personal taste. The loupe has a pleasant heft to it, and impeccable build quality. The main body of the loupe itself is solidly built of black anodized metal, with a knurled rubber focusing ring.</p>
<p>The optical quality is what you would expect form Zeiss. Crystal clear, sharp across the field of view, and no trace of chromatic aberration in the corners. You can easily view an entire 35mm frame and then some, although I suspect eyeglass wearers might find the eye relief a little bit short.</p>
<h2><a id="scope" name="scope"></a>Edmunds pocket microscope</h2>
<p>The Edmunds direct view microscope is a versatile instrument, available in many magnifications, with or without an acrylic base (highly recommended) and with or without a measurement reticle (metric or imperial). Due to the high magnification, the image has a very narrow field of view (only 3mm), and is quite dim. Unlike the others, the image is reversed, which requires some adaptation time. The level of detail you can observe on slides taken with a good film like Fuji Provia 100F, using a good lens and a tripod, is absolutely stunning. This is a rather specialized instrument, but well worth having in your toolkit.</p>
<h2><a id="rodenstock" name="rodenstock"></a>Rodenstock</h2>
<p>The <a href="http://www.linos.com/pages/home/shop-optik/rodenstock-foto-objektive/asphaerische-lupen/">Rodenstock</a> 3x 6&#215;6 aspheric loupe has a list price of $350 and usually retails for $250. Calumet Photo sells the <a href="http://www.calumetphoto.com/ctl?PAGE=Controller&amp;ac.item.itemNo=CC1005">exact same loupe</a> under their own brand for a mere $149 (I actually got mine for $109 during a promotion), which is not that much more than a cheap (in more ways than price) Russian-made Horizon.</p>
<p>There are naturally fewer loupes available to view medium format slides or negatives than for 35mm. Schneider, Mamiya/Cabin, Contax/Zeiss and Rodenstock make high-grade loupes for this demanding market. If you have a &#8220;chimney&#8221; viewfinder on your MF camera, you can actually use that as a loupe.</p>
<p>Rodenstock is famous for its large-format and enlarging lenses, and this loupe is very highly rated. The construction is plastic, but still well-balanced and not too top-heavy. It does not carry the feel of opulence that the Zeiss has, or even the very nicely designed Mamiya/Cabin loupes (more on that below), but is still clearly a professional instrument. It has a two-element aspherical design for sharpness across the entire field of view, and coated optics. It comes with a red neck cord, and the base has a removable plastic skirt that slides in place and can be reversed between its clear and dark positions. The eyepiece has a rubber eyecup and a knurled rubber grip for the focusing ring.</p>
<p>I compared it side by side at Calumet San Francisco with the Cabin 3.5x loupe for 6&#215;4.5 or 6&#215;6. The Cabin had a solid metal constuction (somewhat top-heavy), but its screw-in skirts are less convenient than the slide-in one used in the Rodenstock, and the image circle is too tight for my Hasselblad 6&#215;6 slides. I think that loupe was really designed for 645 format and opportunistically marketed for 6&#215;6, when the 6&#215;7 loupe would actually be more appropriate for that usage. The optical quality is very similar and both are excellent loupes. I did not try the Mamiya/Cabin 6&#215;7, unfortunately, as it was not available in the store, but in any case the Rodenstock was a steal.</p>
<p>The optics are excellent, as could be expected, with crisp resolution all the way into the corners and no trace of chromatic aberrations. There is a smidgen of pincushion distortion, however, but not enough to be objectionable (I took the slightly convex curved square skirt out to make sure this was not just an optical illusion).</p>
<p>One thing to watch out for: even though the optics are coated, they are very wide and you have to be careful to keep your eye flush with the eyecup to obscure any overhead light sources like lightbulbs or fluorescent panels and avoid seeing their reflections in the loupe&#8217;s glass.</p>
<p>The most comprehensive resource for medium format loupes on the Web is <a href="http://medfmt.8k.com/mf/loupe.html">Robert Monaghan&#8217;s page</a> on the subject.</p>
<h2><a id="hastings" name="hastings"></a>Edmunds Hastings triplet</h2>
<p>This isn&#8217;t really a competitor to the other loupes, as it has a very narrow field of view of only 10mm in diameter. It is also tiny, and I carry mine in my gadget bag. It has a folding jeweler&#8217;s loupe design with a folding metallic shield to protect it. Optical quality is of the highest order.</p>
<h2><a id="schneider" name="schneider"></a>Schneider</h2>
<p>Despite its plastic construction, this loupe exudes quality. Unfortunately, the strap is really flimsy &#8211; the rubber cord is merely glued into the metal clip, and will easily pull out. I glued mine back, and crimped it with needle-nose pliers for good measure, but I don&#8217;t know how robust this arrangement will be.</p>
<p>The optics are excellent, without any trace of chromatic aberration. The usable field of view is surprisingly wide for a loupe with this magnifying power, although your eye has to be perfectly positioned to see it. I estimate the FOV diameter at 20mm, as you can almost see the full height of a 35mm mounted slide. I have an Edmund Optics <a href="http://www.edmundoptics.com/onlinecatalog/displayproduct.cfm?productID=1852">magnifier resolution chart</a> (it came with the Hastings triplet), and the Schneider outresolves it across the field of view . This means the Schneider exceeds 114 line pairs per millimeter across the frame, quite remarkable performance.</p>
<h2>The importance of a good loupe</h2>
<p><img style="margin-bottom: 10px; margin-right: 10px;" src="http://majid.info/blog/wp-content/uploads/2004/07/gg_detail.jpg" alt="Golden Gate cable detail" width="265" height="259" align="left" />For a real-world test, I took my <a href="http://www.photo.net/photodb/photo.tcl?photo_id=2470191">6&#215;17 format Velvia 100F slides of the Golden Gate Bridge</a>, and looked at the suspension cables. The picture to the left shows the details I was looking at (but the fuzzy 1200dpi scan on an Epson 3170 does not remotely do justice to the original). Each bundle of 4 cables (4 line pairs) takes 0.04mm on the slide (I used the 50x Edmunds inspection microscope to measure this), hence you need 100lp/mm to resolve it. The Schneider 10x, Edmunds 10x and Zeiss 5x loupes all resolve the four cables clearly. My old el cheapo Peak 10x loupe did not, nor the Epson scanner, which led me until recently to believe my slides were slightly blurry because I had forgotten my cable release that day. So much for the theory you do not need an expensive 10x loupe to assess critical focus because only the center counts&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/going-all-loopy-about-loupes/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Threadframe: multithreaded stack frame extraction for Python</title>
		<link>http://majid.info/blog/threadframe-multithreaded-stack-frame-extraction-for-python/</link>
		<comments>http://majid.info/blog/threadframe-multithreaded-stack-frame-extraction-for-python/#comments</comments>
		<pubDate>Fri, 11 Jun 2004 00:47:47 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2004/06/10/threadframe.html</guid>
		<description><![CDATA[Note: threadframe is obsolete. Python 2.5 and later include a function sys._current_frames() that does the same thing. Threadframe is only useful for Python 2.2 through 2.4. Rationale I was encountering deadlocks in a multi-threaded CORBA server (implemented using omniORB). Debugging &#8230; <a href="http://majid.info/blog/threadframe-multithreaded-stack-frame-extraction-for-python/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="background-color: yellow">Note: threadframe is obsolete. Python 2.5 and later include a function <tt>sys._current_frames()</tt> that does the same thing. Threadframe is only useful for Python 2.2 through 2.4.</p>
<h2>Rationale</h2>
<p>I was encountering deadlocks in a multi-threaded CORBA server (implemented using omniORB). Debugging using GDB gave me too low-level information, and what I needed was an equivalent of the GDB command &#8220;info threads&#8221;. There was no such facility available from within Python&#8217;s standard library, so I rolled my own.</p>
<p>David Beazley added <a href="http://sourceforge.net/tracker/?func=detail&amp;atid=305470&amp;aid=436376&amp;group_id=5470"> advanced debugging functions</a> to the Python interpreter, and they have been folded into the 2.2 release.</p>
<p>I used these hooks to build a debugging module that is useful when you are looking for deadlocks in a multithreaded application. It basically has a single function that will return a list of the stack frames for all Python interpreter threads in the process.</p>
<p>Guido van Rossum <a href="http://cvs.sourceforge.net/viewcvs.py/python/python/dist/src/Include/pystate.h?r1=2.24&amp;r2=2.25">added in Python 2.3</a> the thread ID to the interpreter state structure, and this allows us to produce a dictionary mapping thread IDs to frames.</p>
<p>This functionality is now integrated in Python 2.5&#8242;s batteries-included <tt>sys._current_frames()</tt> function.</p>
<p>Of course, I disclaim any liability if this code should crash your system, erase your homework, eat your dog (who also ate your homework) or otherwise have any undesirable effect.</p>
<h2>Building and installing</h2>
<p>Python 2.2 or later is required. Thread ID to frame dictionary extraction is only available in Python 2.3 and later, and will generate a NotImplementedError if used from 2.2.</p>
<p> Download the source tarball <a href="http://www.majid.info/python/threadframe/threadframe-0.2.tar.gz">threadframe-0.2.tar.gz</a>. You can use the <a href="http://www.majid.info/python/threadframe/threadframe-0.2/Makefile">Makefile</a> or directly with the setup.py script.  I have built and tested this only on Solaris 8/x86 and Windows 2000, but the code should be pretty portable. There is a small test program <a href="http://www.majid.info/python/threadframe/threadframe-0.2/test.py">test.py</a> that illustrates how to use this module to dump stack frames of all the Python interpreter threads. A <a href="http://www.majid.info/python/threadframe/threadframe-0.2/sample.txt">sample run</a> is available for your perusal.</p>
<p>For Windows users, I have available pre-compiled binaries, built using <a href="http://www.mingw.org/">Mingw32</a> and GCC 2.95.2. Just copy the file threadframe.pyd in any location in your Python path and you should be able to run the test script <a href="http://www.majid.info/python/threadframe/threadframe-0.2/test.py">test.py</a>.</p>
<div align="center">
<table class="figure" summary="Windows binaries">
<caption>Windows binaries</caption>
<tr>
<th>Python version</th>
<th>Download</th>
</tr>
<tr>
<td>2.2.1</td>
<td><a href="http://www.majid.info/python/threadframe/win32/2.2/threadframe.pyd">threadframe.pyd</a></td>
</tr>
<tr>
<td>2.3.4</td>
<td><a href="http://www.majid.info/python/threadframe/win32/2.3/threadframe.pyd">threadframe.pyd</a></td>
</tr>
<tr>
<td>2.4.x</td>
<td><a href="http://www.majid.info/python/threadframe/win32/2.4/threadframe.pyd">threadframe.pyd</a></td>
</tr>
</table></div>
<h2>License</h2>
<p>This code is licensed under the <a href="http://www.python.org/psf/license/">same terms</a> as Python itself.</p>
<h2>Change history</h2>
<h3>Release 0.2 (2004-06-10)</h3>
<p>Distutils based setup.py contributed by <a href="http://bob.pycs.net/">Bob Ippolito</a>. Bob also noticed that thread_id was added to the Python interpreter state, and contributed a patch to get a dictionary mapping thread_ids to frames instead of a list.</p>
<h3>Release 0.1 (2002-10-11)</h3>
<p>Initial release for Python 2.2: <a href="http://www.majid.info/python/threadframe/threadframe-0.1.tar.gz">threadframe-0.1.tar.gz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/threadframe-multithreaded-stack-frame-extraction-for-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Temboz RSS aggregator</title>
		<link>http://majid.info/blog/the-temboz-rss-aggregator/</link>
		<comments>http://majid.info/blog/the-temboz-rss-aggregator/#comments</comments>
		<pubDate>Mon, 29 Mar 2004 07:42:02 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Temboz]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2004/03/29/temboz.html</guid>
		<description><![CDATA[Contents Introduction Features History Screen shots Known bugs Credits Download Updates Post scriptum Introduction Temboz is a RSS aggregator. It is inspired by FeedOnFeeds (web-based personal aggregator), Google News (two column layout) and TiVo (thumbs up and down). I have &#8230; <a href="http://majid.info/blog/the-temboz-rss-aggregator/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Contents</h2>
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#features">Features</a></li>
<li><a href="#history">History</a></li>
<li><a href="#screenshots">Screen shots</a></li>
<li><a href="#bugs">Known bugs</a></li>
<li><a href="#credits">Credits</a></li>
<li><a href="#download">Download</a></li>
<li><a href="#updates">Updates</a></li>
<li><a href="#ps">Post scriptum</a></li>
</ul>
<h2><a id="intro" name="intro"></a>Introduction</h2>
<p>Temboz is a RSS aggregator. It is inspired by <a href="http://minutillo.com/steve/feedonfeeds/">FeedOnFeeds</a> (web-based personal aggregator), <a href="http://news.google.com/">Google News</a> (two column layout) and <a href="http://www.tivo.com/">TiVo</a> (thumbs up and down). I have been using FeedOnFeeds for some time now, but that software seems to have stopped evolving, and I had a number of optimizations to the user experience I wanted to make.</p>
<h2><a id="features" name="features"></a>Features</h2>
<p>Already implemented:</p>
<ul>
<li>Multithreaded, download feeds in parallel.</li>
<li>Built-in web server.</li>
<li>Two-column user interface for better readability and information density. Automatic reflow using CSS.</li>
<li>Ratings system for articles</li>
<li>Real-time hunter-gatherer user interface: items flagged with a &#8220;Thumbs down&#8221; disappear immediately off the screen (using Dynamic HTML), making room for new articles. No laborious flagging of items as in FeedOnFeeds.</li>
<li>Filtering entries (using Python syntax, e.g. <tt>'Salon' in feed_title and title == "King Kaufman's Sports Daily"</tt>, or simply by selecting keywords/phrases and hitting &#8220;Thumbs down&#8221;).</li>
<li>Ability to generate a RSS feeds from &#8220;Thumbs Up&#8221; articles, which is why Temboz would be a true aggregator, not just a reader.</li>
<li>Ad filtering</li>
<li>Automatic garbage collection: every day between 3AM and 4AM, uninteresting articles (by default those older than 7 days) are purged of their contents (but not metadata such as titles, permalinks or timestamps) to keep the database size manageable. After 6 months (by default), they are deleted altogether</li>
<li>Automatic database backups daily (immediately after garbage collection)</li>
</ul>
<p>On the to do list:</p>
<ul>
<li>Write better documentation</li>
<li>Handle permanent HTTP redirects for feed XML URLs</li>
<li>Automatic pacing of feed polling intervals using the average and standard deviation of observed feed item inter-arrival times, to reduce bandwidth usage and load for both client and server. Most feeds should be polled on a daily rather than hourly interval (e.g. my own, since I update once a week on average), but the mechanisms for a feed to indicate its polling rate preferences are quite inconsistent from one flavor of RSS/Atom to another.</li>
<li>&#8220;Survivor mode&#8221; &#8211; vote feeds that no longer perform off the aggregator based on relevance statistics.</li>
<li>Ability to cluster together articles (I tried a heuristic of looking for common URLs they are all pointing to, but this didn&#8217;t work well in practice).</li>
<li>Portability to Windows, distribution as a standalone package.</li>
</ul>
<h2><a id="history" name="history"></a>History</h2>
<p>I have been using it successfully for well over a year. It still has rough edges, with some administration functions only doable using the SQLite command-line utility. Here is a screen shot showing the reader user interface. The article highlighted in yellow was given a &#8220;Thumbs Up&#8221;. You can also see the user interface at work in a view of the <a href="http://www.majid.info/mylos/temboz.html">last 50 articles</a> I flagged as &#8220;thumbs up&#8221; among the feeds I read.</p>
<h2><a id="screenshots" name="screenshots"></a>Screen shots</h2>
<p><em>Click on a screen shot thumbnail for a full-sized version</em></p>
<p>The first screen shot shows the article reading interface, using a two-column layout. Clicking on the &#8220;Thumbs down&#8221; icon makes the article disappear, bringing a new one in its place (if available). Clicking on the &#8220;Thumbs up&#8221; icon highlights it in yello and flags it as interesting in the database.</p>
<p><a href="http://majid.info/blog/wp-content/uploads/2004/03/t1full.gif" target="_blank"><img src="http://majid.info/blog/wp-content/uploads/2004/03/t1.gif" border="0" alt="view items" width="450" height="432" /></a>The feed summary page shows statistics on feeds, starting with feeds with unread articles, then by alphabetical order. Feeds can be sorted based on other metrics. You have the option of &#8220;catching up&#8221; with a feed (marking all the articles as read). Feeds with errors are highlighted in red (not shown).</p>
<p><a href="http://majid.info/blog/wp-content/uploads/2004/03/t2full.gif" target="_blank"><img src="http://majid.info/blog/wp-content/uploads/2004/03/t2.gif" border="0" alt="view feeds" width="450" height="432" /></a>Clicking on the &#8220;details&#8221; link for a feed brings this page, which allows you to change title or feed URL, and shows the RSS or Atom fields accessible for filtering.</p>
<p><a href="http://majid.info/blog/wp-content/uploads/2004/03/t4full.gif" target="_blank"><img src="http://majid.info/blog/wp-content/uploads/2004/03/t4.gif" border="0" alt="feed details" width="450" height="432" /></a>Feeds can be filtered using Python expressions.</p>
<p><a href="http://majid.info/blog/wp-content/uploads/2004/03/t3full.gif" target="_blank"><img src="http://majid.info/blog/wp-content/uploads/2004/03/t3.gif" border="0" alt="filtering rules" width="450" height="432" /></a></p>
<h2><a id="bugs" name="bugs"></a>Known bugs</h2>
<p>You can check outstanding bug reports, change requests and more at the <a href="http://www.temboz.com/temboz/">public CVStrac</a> site.</p>
<h2><a id="credits" name="credits"></a>Credits</h2>
<p>Temboz is written in Python, and leverages Mark Pilgrim&#8217;s <a href="http://diveintomark.org/projects/feed_parser/">Ultra-liberal feed parser</a>, <a href="http://www.sqlite.org/">SQLite 2.x</a>, <a href="http://www.cheetahtemplate.org/">Cheetah</a>.</p>
<h2><a id="download" name="download"></a>Download</h2>
<p>You can download the current version: <a href="http://majid.info/temboz/temboz-0.8.tar.gz">temboz-0.8.tar.gz</a> I welcome any feedback you may have, specially as concerns improving installation.</p>
<p>The CVS version is far ahead of 0.8 in features. I have not yet had the time to test and document the migration procedure from 0.8 to 1.0, but if you are a new Temboz user I strongly advise you to get a nightly CVS snapshot instead (they are what I run on my own server): <a href="http://majid.info/temboz/temboz-CVS.tar.gz">temboz-CVS.tar.gz</a> or <a href="http://www.majid.info/temboz/temboz-CVS.zip">temboz-CVS.zip</a>.</p>
<h2><a id="updates" name="updates"></a>Updates</h2>
<p>For news on Temboz, please subscribe to the <a href="http://www.majid.info/mylos/weblog/categories/temboz/rss.xml">RSS feed</a>.</p>
<p>Temboz has a <a href="http://www.temboz.com/temboz/">CVStrac</a> where you can submit bug reports or change requests, and a Wiki, where all future documentation will ultimately reside.</p>
<h2><a id="ps" name="ps"></a>Post scriptum</h2>
<p>The name &#8220;Temboz&#8221; is a reference to Malima Temboz, &#8220;The mountain that walks&#8221;, an elephant whose tormented spirit is the object of Mike Resnick&#8217;s excellent SF novel, <a href="http://www.fictionwise.com/ebooks/eBook474.htm">Ivory</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/the-temboz-rss-aggregator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The megapixel myth &#8211; a pixel too far?</title>
		<link>http://majid.info/blog/the-megapixel-myth-a-pixel-too-far/</link>
		<comments>http://majid.info/blog/the-megapixel-myth-a-pixel-too-far/#comments</comments>
		<pubDate>Sat, 14 Feb 2004 04:15:02 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2004/02/13/megapixel.html</guid>
		<description><![CDATA[Revised introduction This article remains popular thanks to Google and the like, but it was written 7 years ago and the models described are ancient history. The general principles remain, you are often better off with a camera that has &#8230; <a href="http://majid.info/blog/the-megapixel-myth-a-pixel-too-far/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Revised introduction</h2>
<p>This article remains popular thanks to Google and the like, but it was written 7 years ago and the models described are ancient history. The general principles remain, you are often better off with a camera that has fewer but better quality pixels, though the sweet spot shifts with each successive generation. The more reputable camera makers have started to step back from the counterproductive megapixel race, and the buying public is starting to wise up, but this article remains largely valid.</p>
<p>My current recommendations are:</p>
<ul>
<li>Dispense with entry-level point and shoot cameras. They are barely better than your cameraphone</li>
<li>If you must have a pocketable camera with a zoom lens, get the Canon S95, Panasonic LX5, Samsung TL500 or Olympus XZ-1. Be prepared to pay about $400 for the privilege.</li>
<li>Upping the budget to about $650 and accepting non-zoom lenses gives you significantly better optical and image quality, in cameras that are still pocketable like the <a href="http://www.dpreview.com/reviews/PanasonicDMCGF2/">Panasonic GF2</a>, Olympus E-PL2, Samsung NX100, <a href="http://www.dpreview.com/reviews/ricohgxra12/">Ricoh GXR</a> and Sony NEX-5.</li>
<li>The Sigma DP1x and <a href="http://www.dpreview.com/reviews/sigmadp2/">DP2x</a> offer stunning optics and image quality in a compact package, but are excruciatingly slow to autofocus. If you can deal with that, they are very rewarding.</li>
<li>The fixed-lens <a href="http://www.dpreview.com/previews/fujifilmx100/">Fuji X100</a> (pretty much impossible to get for love or money these days, no thanks to the Sendai earthquake) and <a href="http://www.dpreview.com/reviews/LeicaX1/">Leica X1</a> offer superlative optics, image and build quality in a still pocketable format. The X1 is my everyday-carry camera, and I have a X100 on order.</li>
<li>If size and weight is not an issue, DSLRs are the way to go in terms of flexibility and image quality, and are available for every budget. Models I recommend by increasing price range are the Pentax K-x, Canon Rebel T3i, Nikon D7000, Canon 5DmkII, Nikon D700 and Nikon D3S.</li>
<li>A special mention for the Leica M9. It is priced out of most people&#8217;s reach, and has poor low-light performance, but delivers outstanding results thanks to Leica lenses and its sensor devoid of anti-alias filters.</li>
</ul>
<h2>Introduction</h2>
<p>As my family&#8217;s resident photo geek, I often get asked what camera to buy, specially now that most people are upgrading to digital. Almost invariably, the first question is &#8220;how many megapixels should I get?&#8221;. Unfortunately, it is not as simple as that, megapixels have become the photo industry&#8217;s equivalent of the personal computer industry&#8217;s <a href="http://www.guardian.co.uk/technology/2002/feb/28/onlinesupplement3">megahertz myth</a>, and in some cases this leads to counterproductive design decisions.</p>
<p>A digital photo is the output of a complex chain involving the lens, various filters and microlenses in front of the sensor, and the electronics and software that post-process the signals from the sensor to produce the image. The image quality is only as good as the weakest link in the chain. High quality lenses are expensive to manufacture, for instance, and often manufacturers skimp on them.</p>
<p>The problem with megapixels as a measure of camera performance is that not all pixels are born equal. No amount of pixels will compensate for a fuzzy lens, but even with a perfect lens, there are two factors that make the difference: noise and interpolation.</p>
<h2>Noise</h2>
<p>All electronic sensors introduce some measure of electronic noise, among others due to the random thermal motion of electrons. This shows itself as little colored flecks that give a grainy appearance to images (although the effect is quite different from film grain). The less noise, the better, obviously, and there are only so many ways to improve the signal to noise ratio:</p>
<ul>
<li>Reduce noise by improving the process technology. Improvements in this area occur slowly, typically each process generation takes 12 to 18 months to appear.</li>
<li>Increase the signal by increasing the amount of light that strikes each sensor photosite. This can be done by using faster lenses or larger sensors with larger photosites. Or by only shooting photos in broad daylight where there are plenty of photons to go around.</li>
</ul>
<p>Fast lenses are expensive to manufacture, specially fast zoom lenses (a Canon or Nikon 28-70mm f/2.8 zoom lens costs over $1000). Large sensors are more expensive to manufacture than small ones because you can fit fewer on a wafer of silicon, and as the likelihood of one being ruined by an errant grain of dust is higher, large sensors have lower yields. A sensor twice the die area might cost four times as much. A &#8220;full-frame&#8221; 36mm x 24mm sensor (the same size as 35mm film) stresses the limits of current technology (it has nearly 8 times the die size of the latest-generation &#8220;Prescott&#8221; Intel Pentium IV), which is why the full-frame Canon EOS 1Ds costs $8,000, and professional medium-format digital backs can easily reach $25,000 and higher.</p>
<p>This <a href="http://www.photo.net/equipment/digital/sensorsize/">page</a> illustrates the difference in size of the sensors on various consumer digital cameras compared to those on some high-end digital SLRs. Most compact digital cameras have tiny 1/1.8&#8243; or 2/3&#8243; sensors at best (these numbers are a legacy of TV camera tube ratings and do not have a relationship with sensor dimensions, see DPReview&#8217;s <a href="http://www.dpreview.com/learn/?/Glossary/Camera_System/sensor_sizes_01.htm">glossary entry on sensor sizes</a> for an explanation).</p>
<p>For any given generation of cameras, the conclusion is clear &#8211; bigger pixels are better, they yield sharper, smoother images with more latitude for creative manipulation of depth of field. This is not true across generations, however, Canon&#8217;s EOS-10D has twice as many pixels as the two generations older EOS-D30 for a sensor of the same size, but it still manages to have lower noise thanks to improvements in Canon&#8217;s CMOS process.</p>
<p>The problem is, as most consumers fixate on megapixels, many camera manufacturers are deliberately cramming too many pixels in too little silicon real estate just to have megapixel ratings that look good on paper. Sony has introduced a 8 megapixel camera, the DSC-F828, that has a tiny 2/3&#8243; sensor. The resulting photosites are 1/8 the size of those on the similarly priced 6 megapixel Canon Digital Rebel (EOS-D300), and 1/10 the size of those on the more expensive 8 megapixel DSLR Canon EOS-1D Mark II.</p>
<p>Predictably, the <a href="http://www.dpreview.com/reviews/sonydscf828/page14.asp">noise levels</a> of the 828 are abysmal in anything but bright sunlight, just as a &#8220;150 Watts&#8221; ghetto blaster is incapable of reproducing the fine nuances of classical music. The lens also has its issues, for more details see the review. The Digital Rebel will yield far superior images in most circumstances, but naive purchasers could easily be swayed by the 2 extra megapixels into buying the inferior yet overpriced Sony product. Unfortunately, there is a Gresham&#8217;s law at work and manufacturers are racing to the bottom: Nikon and Canon have also introduced 8 megapixel cameras with tiny sensors pushed too far. You will notice that for some reason camera makers seldom show sample images taken in low available light&#8230;</p>
<h2>Interpolation</h2>
<p>Interpolation (along with its cousin, &#8220;digital zoom&#8221;) is the other way unscrupulous marketers lie about their cameras&#8217; real performance. Fuji is the most egregious example with its &#8220;SuperCCD&#8221; sensor, that is arranged in diagonal lines of octagons rather than horizontal rows of rectangles. Fuji apparently feel this somehow gives them the right to double the pixel rating (i.e. a sensor with 6 million individual photosites is marketed as yielding 12 megapixel images). You can&#8217;t get something for nothing, this is done by guessing the values for the missing pixels using a mathematical technique named interpolation. This makes the the image look larger, but does not add any real detail. You are just wasting disk space storing redundant information. My first digital camera was from Fuji, but I refuse to have anything to do with their current line due to shenanigans like these.</p>
<p>Most cameras use so-called <a href="http://en.wikipedia.org/wiki/Bayer_filter">Bayer interpolation</a>, where each sensor pixel has a red, green or blue filter in front of it (the exact proportions are actually 25%, 50% and 25% as the human eye is more sensitive to green). An interpolation algorithm reconstructs the three color values from adjoining pixels, thus invariably leading to a loss of sharpness and sometimes to color artifacts like moiré patterns. Thus, a &#8220;6 megapixel sensor&#8221; has in reality only 1.5-2 million true color pixels.</p>
<p>A company called <a href="http://www.foveon.com/">Foveon</a> makes a distinctive sensor that has three photosites stacked vertically in the same location, yielding more accurate colors and sharper images. Foveon originally took the high road and called their sensor with 3&#215;3 million photosites a 3MP sensor, but unfortunately they were forced to align themselves with the misleading megapixel ratings used by Bayer sensors.</p>
<h2>Zooms</h2>
<p>A final factor to consider is the zoom range on the camera. Many midrange cameras come with a 10x zoom, which seems mighty attractive in terms of versatility, until you pause to consider the compromises inherent in a superzoom design. The wider the zoom range, the more aberrations and distortion there will be that degrade image quality, such as chromatic aberration (a.k.a. purple fringing), barrel or pincushion distortion, and generally lower resolution and sharpness, specially in the corners of the frame.</p>
<p>In addition, most superzooms have smaller apertures (two exceptions being the remarkable constant f/2.8 aperture 12x Leica zoom on the Panasonic DMC-FZ10 and the 28-200mm equivalent f/2.0-f/2.8 Carl Zeiss zoom on the Sony DSC-F828), which means less light hitting the sensor, and a lower signal to noise ratio.</p>
<p>A reader was asking me about the Canon G2 and the Minolta A1. The G2 is 2 years older than the A1, and has 4 million 9 square micron pixels, as opposed to 5 million 11 square micron sensors, and should thus yield lower image quality, but the G2&#8242;s 3x zoom lens is fully one stop faster than the A1&#8242;s 7x zoom (i.e. it lets twice as much light in), and that more than compensates for the smaller pixels and older sensor generation.</p>
<h2>Recommendations</h2>
<p>If there is a lesson in all this, it&#8217;s that unscrupulous marketers will always find a way to twist any simple metric of performance in misleading and sometimes even counterproductive ways.</p>
<p>My recommendation? As of this writing, get either:</p>
<ul>
<li>An inexpensive (under $400, everything is relative) small sensor camera rated at 2 or 3 megapixels (any more will just increase noise levels to yield extra resolution that cannot in any case be exploited by the cheap lenses usually found on such cameras). Preferably, get one with a 2/3&#8243; sensor (although it is becoming harder to find 3 megapixel cameras nowadays, most will be leftover stock using an older, noisier sensor manufacturing process).</li>
<li>Or save up for the $1000 or so that entry-level large-sensor DSLRs like the Canon EOS-300D or Nikon D70 will cost. The DSLRs will yield much better pictures including low-light situations at ISO 800.</li>
<li>Film is your only option today for decent low-light performance in a compact camera. Fuji Neopan 1600 in an Olympus Stylus Epic or a Contax T3 will allow you to take shots in available light without a flash, and spare you the &#8220;red-eyed deer caught in headlights&#8221; look most on-camera flashes yield.</li>
</ul>
<h2>Conclusion</h2>
<p>Hopefully, as the technology matures, large sensors will migrate into the midrange and make it worthwhile. I for one would love to see a digital Contax T3 with a fast prime lens and a low-noise APS-size sensor. Until then, there is no point in getting anything in between &#8211; midrange digicams do not offer better image quality than the cheaper models, while at the same time being significantly costlier, bulkier and more complex to use. In fact, the megapixel rat race and the wide-ranging but slow zoom lenses that find their way on these cameras actually degrade their image quality over their cheaper brethren. Sometimes, more is less.</p>
<h2>Updates</h2>
<p>Update (2005-09-08):</p>
<p>It seems Sony has finally seen the light and is <a href="http://www.dpreview.com/articles/sonydscr1/">including a large sensor in the DSC-R1</a>, the successor to the DSC-F828. Hopefully, this is the beginning of a trend.</p>
<p>Update (2006-07-25):</p>
<p>Large-sensor pocket digicams haven&#8217;t arrived yet, but if you want a compact camera that can take acceptable photos in relatively low-light situations, there is currently only one game in town, the <a href="http://www.dpreview.com/reviews/fujifilmf30/">Fuji F30</a>, which actually has decent performance up to ISO 800. That is in large part because Fuji uses a 1/1.7&#8243; sensor, instead of the nasty 1/2.5&#8243; sensors that are now the rule.</p>
<p>Update (2007-03-22):</p>
<p>The Fuji F30 has been superseded since by the mostly identical <a href="http://www.dpreview.com/news/0609/06092501fujif31fd.asp">F31fd</a> and now the <a href="http://www.dpreview.com/news/0701/07010402fujifilmfinepixf40fd.asp">F40fd</a>. I doubt the F40fd will match the F30/F31fd in high-ISO performance because it has two million unnecessary pixels crammed in the sensor, and indeed the maximum ISO rating was lowered, so the F31fd is probably the way to go, even though the F40 uses standard SD cards instead of the incredibly annoying proprietary Olympus-Fuji xD format.</p>
<p>Sigma has announced the <a href="http://www.sigma-dp1.com">DP-1</a>, a compact camera with an APS-C size sensor and a fixed 28mm (equivalent) f/4 lens (wider and slower than I would like, but since it is a fixed focal lens, it should be sharper and have less distortion than a zoom). This is the first (relatively) compact digital camera with a decent sensor, which is also a true three-color Foveon sensor as cherry on the icing. I lost my Fuji F30 in a taxi, and this will be its replacement.</p>
<p>Update (2010-01-12):</p>
<p>We are now facing an embarrassment of riches.</p>
<ul>
<li> Sigma built on the DP1 with the excellent <a href="http://www.sigma-dp.com/DP2/index.html">DP2</a>, a camera with superlative optics and sensor (albeit limited in high-ISO situations, but not worse than film) but hamstrung by excruciatingly slow autofocus and generally not very responsive. In other words, best used for static subjects.</li>
<li>Panasonic and Olympus were unable to make a significant dent in the Canon-Nikon duopoly in digital SLRs with their Four-Thirds system (with one third less surface than an APS-C sensor, they really should be called &#8220;Two-Thirds&#8221;). After that false start, they redesigned the system to eliminate the clearance required for a SLR mirror, leading to the Micro Four Thirds system. Olympus launched the <a href="http://www.dpreview.com/reviews/olympusep1/">retro-styled E-P1</a>, followed by the <a href="http://www.dpreview.com/news/0911/09110501olympusep2.asp">E-P2</a>, and Panasonic struck gold with its <a href="http://www.dpreview.com/reviews/PanasonicGF1/">GF1</a>, accompanied by a stellar <a href="http://www.dpreview.com/lensreviews/panasonic_20_1p7_o20/">20mm f/1.7</a> lens (equivalent to 40mm f/1.7 in 35mm terms).</li>
<li>A resurgent Leica introduced the<a href="http://us.leica-camera.com/photography/compact_cameras/x1/"> X1</a>, the first pocket digicam with an APS-C sized sensor, essentially the same Sony sensor used in the Nikon D300. Extremely pricey, as usual with Leica. The relatively slow f/2.8 aperture means the advantage from its superior sensor compared to the Panasonic GF1 is negated by the GF1&#8242;s faster lens. The GF1 also has faster AF.</li>
<li>Ricoh introduced its curious interchangeable-camera camera, the <a href="http://www.dpreview.com/previews/RicohGXR/">GXR</a>, one option being the A12 APS-C module with a 50mm f/2.5 equivalent lens. Unfortunately, it is not pocketable</li>
</ul>
<p>According to <a href="http://bythom.com/2009%20Nikon%20News.htm">Thom Hogan</a>, Micro Four Thirds grabbed in a few months 11.5% of the market for interchangeable-lens cameras in Japan, something Pentax, Samsung and Sony have not managed despite years of trying. It&#8217;s probably just a matter of time before Canon and Nikon join the fray, after too long turning a deaf ear to the chorus of photographers like myself demanding a high-quality compact camera. As for myself, I have already voted with my feet, successively getting a Sigma DP1, Sigma DP2 and now a Panasonic GF1 with the 20mm f/1.7 pancake lens.</p>
<p>Update (2010-08-21):</p>
<p>I managed to score a <a href="http://us.leica-camera.com/photography/compact_cameras/x1/">Leica X1</a> last week from <a href="http://www.camerawest.com/">Camera West</a> in Walnut Creek. Supplies are scarce and they usually cannot be found for love or money—many unscrupulous merchants are selling their limited stock on Amazon or eBay, at ridiculous (25%) markups over MSRP.</p>
<p>So far, I like it. It may not appear much smaller than the GF1 on paper, but in practice those few millimeters make a world of difference. The GF1 is a briefcase camera, not really a pocketable one, and I was subconsciously leaving at home most of the time. The X1 fits easily in any jacket pocket. It is also significantly lighter.</p>
<p>High ISO performance is significantly better than the GF1 &#8211; 1 to 1.5 stops. The lens is better than reported in technical reviews like <a href="http://www.dpreview.com/reviews/LeicaX1/page15.asp">DPReview&#8217;s</a>—it exhibits curvature of field, which penalizes it in MTF tests.</p>
<p>The weak point in the X1 is its relatively mediocre AF performance. The GF1 uses a special sensor that reads out at 60fps, vs. 30fps for most conventional sensors (and probably even less for the Sony APS-C sensor used in the X1, possibly the same as in the Nikon D300). This doubles the AF speed of its contrast-detection algorithm over its competitors. Fuji recently introduced a special sensor that features <a href="http://www.dpreview.com/news/1008/10080505fujifilmpd.asp">on-chip phase-detection AF</a> (the same kind used in DSLRs), let&#8217;s hope the technology spreads to other manufacturers.</p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/the-megapixel-myth-a-pixel-too-far/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Ghola asset management program</title>
		<link>http://majid.info/blog/the-ghola-asset-management-program/</link>
		<comments>http://majid.info/blog/the-ghola-asset-management-program/#comments</comments>
		<pubDate>Thu, 28 Aug 2003 01:48:07 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2003/08/27/ghola.html</guid>
		<description><![CDATA[I am now using Kavasoft Shoebox and thus this whole entry is obsolete and kept only for historical purposes. It is interesting to see one of my requirements anticipated Aperture&#8217;s stacks. Introduction I am in the process of migrating from &#8230; <a href="http://majid.info/blog/the-ghola-asset-management-program/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="background-color: yellow">I am now using <a href="/blog/shoebox-review/">Kavasoft Shoebox</a> and thus this whole entry is obsolete and kept only for historical purposes. It is interesting to see one of my requirements anticipated Aperture&#8217;s stacks.</p>
<h2>Introduction</h2>
<p>I am in the process of migrating from Windows to Mac OS X as my primary home computing environment. <a href="http://www.photools.com/">IMatch</a> is one of the key applications I need to migrate, but it is not available on the Mac. Ghola is an attempt to reproduce the key functionality of IMatch, and possibly go beyond. It is also a good way to learn Cocoa programming (my last programming experience on the Mac goes back to Think C 4.0 accessing raw QuickDraw calls).</p>
<h2>Use cases</h2>
<ol>
<li>Assign categories to images or a folder of images.</li>
<li>Search for images matchin an expression of categories.</li>
<li>Restructure a category (e.g. splitting a category grown too large into multiple, more manageable subcategories).</li>
</ol>
<h2>Requirements (incomplete)</h2>
<p>The following are the key features from IMatch that need to be carried over:</p>
<ul>
<li>
<p>The flexible set-oriented <a href="/blog/image-category-management-with-imatch/">category system</a>.</p>
</li>
<li>
<p>Support for RAW images (CRW and NEF).</p>
</li>
<li>
<p>Fast retrieval performance.</p>
</li>
<li>
<p>Extensible metadata.</p>
</li>
<li>
<p>Offline media support.</p>
</li>
</ul>
<p>The following are the requirements for Ghola beyond IMatch:</p>
<ul>
<li>
<p>Ability to group very similar variants of an image together. This would allow to group an image original, retouched versions, cropped and resized versions, or multiple very similar images taken in succession, yet manage them as a single logical unit. The role of each image in the group would be identified as well as part of its group membership, and each group would have a leader used by default.</p>
</li>
<li>
<p>Manage assets beyond images, such as PDF files.</p>
</li>
<li>
<p>Highly efficient categorization user interface.</p>
</li>
<li>
<p>Scriptable in Python.</p>
</li>
<li>
<p>HTML gallery generation, integrated with <a href="/blog/mylos/">Mylos</a>.</p>
</li>
</ul>
<h2>Implementation directions</h2>
<p>The system core will be implemented in Python, and C if necessary. It should be as portable as possible. Possibly even multi-user and remotable.</p>
<p><a href="http://www.sqlite.org/">SQLite</a> will be used as the core database. Fast, simple, easy to manage.</p>
<p>GUI front-ends will use the native toolkits (PyObjC) whenever possible for optimal user experience and Aqua compliance.</p>
<p>A command-line UI could be more efficient for category assignment, if it is augmented with features like completion.</p>
<p>We may have to use bitmap indexes for efficient category indexing. Boolean operations on Python long integers are surprisingly fast, and C might not be needed at this point.</p>
<h2>Colophon</h2>
<p>The System name is a reference to Frank Herbert&#8217;s <a href="http://www.dunenovels.com/">Dune</a> (the original series, of course, not the opportunistic add-ons by Brian Herbert. It has the nice side benefit of not being already used by another open-source program.</p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/the-ghola-asset-management-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mylos</title>
		<link>http://majid.info/blog/mylos/</link>
		<comments>http://majid.info/blog/mylos/#comments</comments>
		<pubDate>Wed, 18 Jun 2003 09:00:00 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2003/06/18/mylos.html</guid>
		<description><![CDATA[I switched to WordPress at the end of 2009 for the reasons expressed elsewhere and this entry is here for historical purposes only. Mylos is my home-grown weblog management software. I wrote my first web pages by hand in Emacs &#8230; <a href="http://majid.info/blog/mylos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="background-color: yellow;">I switched to WordPress at the end of 2009 for the <a href="/blog/the-importance-of-short-iteration-feedback-cycles/">reasons expressed elsewhere</a> and this entry is here for historical purposes only.</p>
<p>Mylos is my home-grown weblog management software. I wrote my first web pages by hand in Emacs and RCS in 1993, but stopped maintaining them in 1996 or so. I only restarted one with <a href="http://radio.userland.com/">Radio</a> last year. After a year of weblogging, however, I find I am frustrated by the limitations of Radio as well as its web-based user interface (I am one of those rare people who prefer command-line user interfaces and non-WYSIWYG HTML editors). I guess I could have extended Radio using UserLand&#8217;s Frontier language it is implemented in, but I have no interest in learning yet another oddball scripting language.</p>
<p>I decided in April 2003 to roll my own system, implemented in Python. In my career at various ISPs, I had to kill home-grown content-management system (CMS) projects gone awry, and I was certainly aware that these projects have a tendency to go overboard. Still, it has taken me three months of (very) part-time work to get the system to a point where it generates usable pages and imports my legacy pages from Radio without a hitch.</p>
<p>The implemented requirements for Mylos are:</p>
<ul>
<li>Migration of my existing Radio weblog entries and stories (done, but not in an entirely generic fashion, is theme-dependent)</li>
<li>All pages are static HTML, no requirements for CGI scripts, PHP, databases or the like</li>
<li>Implemented and extensible in <a href="http://www.python.org/">Python</a></li>
<li>Separation of content and presentation using themes (based on <a href="http://webware.sourceforge.net/">Webware</a> <a href="http://webware.sourceforge.net/Webware-0.8/PSP/Docs/UsersGuide.html"> Python Server Pages</a> and <a href="http://www.w3.org/Style/CSS/">CSS</a>)</li>
<li>Support for navigational hierarchy</li>
<li>Articles are stored as regular files on the filesystem where they can be edited using conventional tools if necessary, no need for proprietary databases</li>
<li>Extensible article metadata</li>
<li>Atom 1.0 syndication, with separate feeds for subcategories</li>
<li>Use only relative URLs in hyperlinks to allow easy relocation</li>
<li>Automatic entry HTML cleanup for XHTML compliance</li>
<li>A CSS-based layout where the blogroll doesn&#8217;t wrap around short bodies (e.g. on permalink pages for short articles).</li>
<li>reasonable defaults, e.g. don&#8217;t try to create a weblog entry for an image that is colocated with an article, just copy it</li>
<li>Built-in multithreaded external link validation.</li>
<li>Automatic URL remapping (/mylos/ becomes relative to the Mylos root, relative URLs in an entry are automatically prefixed in containers like home pages).</li>
<li>Ability to review an article before publishing</li>
<li>Lynx compliance</li>
<li>Automatically cache external images in weblog entries in case they disappear (but do not use them as such due to potential copyright issues)</li>
<li>Set robots meta tag so only permalinks are indexed and cached by search engines, for better relevance to search engine users (albeit at the cost of lower rankings for the home page).</li>
<li>Sophisticated image galleries fully integrated with the navigation</li>
<li>Automatic code fragment colorization using <a href="http://pygments.pocoo.org/">Pygments</a></li>
</ul>
<p>These features are planned but not yet implemented:</p>
<ul>
<li>Keyword index.</li>
<li>Enhanced support for books via Allconsuming and Amazon.</li>
<li>Automated dependency tracking to re-render only the pages affected by a change (via SCons)</li>
<li>Multi-threaded rendering (via SCons)</li>
<li>Automatically add height, width and alt tags to img tags</li>
<li>Auto abbreviation glossary as tooltip help using &lt;acronym&gt; tags</li>
<li>Typographically clean results, as done by <a href="http://daringfireball.net/projects/smartypants/">SmartyPants</a></li>
<li>Feedback loop via on-page comments</li>
<li>Notification of new comments by email</li>
<li>Ability to promote a weblog entry to a story if it reaches critical mass</li>
</ul>
<p>These features are &#8220;blue-sky&#8221;, don&#8217;t hold your breath for them:</p>
<ul>
<li>Updates by email</li>
<li>User-submitted ratings for articles</li>
<li>Support for multilingual weblogs</li>
</ul>
<p>Features thet are not planned at all (anti-requirements) include:</p>
<ul>
<li>Synchronization or upload to server &#8211; <a href="http://samba.anu.edu.au/rsync/">rsync</a> does this far better</li>
<li>Text editor &#8211; use $VISUAL or $EDITOR, whether Emacs, vi, or whatever</li>
<li>Web user interface &#8211; Radio&#8217;s web interface has very poor usability in my personal opinion, and this is due to the fact it is web-based, not any fault of Userland&#8217;s</li>
<li>RSS 1.0 &#8211; RDF seems like an exercise in intellectual masturbation</li>
<li>Blogger API or similar &#8211; although someone else could certainly write a bridge in Python if needed</li>
</ul>
<p>The software is currently not in a state where it can be used by anyone else. I am not sure if there is any demand for such a tool in any case, if so, I would certainly consider documenting it better and making a SourceForge project out of it.</p>
<p>By the way, the system is named &#8220;<a href="http://dictionary.ebbs.net/english/em2.htm#Mylos">Mylos</a>&#8221; after a city in the magnificent illustrated series &#8220;<a href="http://www.urbicande.be/">Les Cités Obscures</a>&#8221; by Belgian architects and writers Schuiten and Peeters, more specifically <a href="http://bd.casterman.com/isbn/2-203-34311-7">L&#8217;Enfant Penchéee</a></p>
<p><img src="http://data.magicsquare.be/ouvrages/2203/343/2203343117_0g.jpg" alt="Cover for L'Enfant Penchée" width="600" height="845" /></p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/mylos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Louvre Panorama</title>
		<link>http://majid.info/blog/louvre-panorama/</link>
		<comments>http://majid.info/blog/louvre-panorama/#comments</comments>
		<pubDate>Fri, 15 Nov 2002 08:00:00 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[Photo]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2002/11/15/louvrePanorama.html</guid>
		<description><![CDATA[For your enjoyment, a 360° immersive panorama I took of the Louvre courtyard in 1998. Java-enabled browser required (I tested this with Mozilla 1.1 and IE 6 with the Sun JRE 1.4.0 plug-in).]]></description>
			<content:encoded><![CDATA[<p>For your enjoyment, a 360° immersive panorama I took of the Louvre courtyard in 1998. Java-enabled browser required (I tested this with Mozilla 1.1 and IE 6 with the Sun JRE 1.4.0 plug-in).</p>
<p><applet code="panoapplet" language="JavaScript" codebase="http://www.majid.info/images/" height="266" name="FPViewer1" width="400" archive="panoapplet.jar">
<param name="file" value="http://www.majid.info/images/louvre.ivr" />
<param name="autoSpin" value="-50" />
</applet></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/louvre-panorama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows configuration management</title>
		<link>http://majid.info/blog/windows-configuration-management/</link>
		<comments>http://majid.info/blog/windows-configuration-management/#comments</comments>
		<pubDate>Fri, 06 Sep 2002 09:00:00 +0000</pubDate>
		<dc:creator>majid</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Mylos]]></category>
		<category><![CDATA[Mylos longer articles]]></category>

		<guid isPermaLink="false">http://www.majid.info/mylos/stories/2002/09/06/windowsConfigurationManagement.html</guid>
		<description><![CDATA[The key to running a reasonably reliable Windows system is configuration management. A typical Windows will have tens of thousand of files and hundreds of software components installed. It&#8217;s a numbers game: the more components interacting on the system, the &#8230; <a href="http://majid.info/blog/windows-configuration-management/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The key to running a reasonably reliable Windows system is configuration management. A typical Windows will have tens of thousand of files and hundreds of software components installed. It&#8217;s a numbers game: the more components interacting on the system, the greater the probability that two of them will conflict.</p>
<p>Windows gets a lot of heat from Unix zealots (I am one myself) for being unreliable, but any operating system that attempts to comprehensively support all the wide variety of oddball peripherals and software out there is going to experience the same integration problems; certainly, Linux is converging towards Windows in terms of the number of security advisories released. Of course, using an obsolete version like 98 or ME without modern protected memory is a prescription for disaster, but the NT-based versions, i.e. 2000 and XP can have reasonable reliability, at least for desktop usage.</p>
<p>The rest of this article describes my strategy minimizing entropy in my Windows systems.</p>
<h2>Separation</h2>
<p>The way I approach my Windows configuration is to establish a clear separation between Operating System/Applications and Data.</p>
<p>The OS and Applications do not mean anything special to me other than the amount of work required to reinstall. Data represent actual productive work on my part and must be protected. I separate OS/Applications from data clearly, and make regular checkpoints of OS/Apps after installation and every now and then before I make major changes like installing an application or OS service packs. If my system becomes unstable at some point in time, I can easily revert to a known stable configuration.</p>
<p>The specific tools used to provide this backup of system configuration are a question of personal choice. A number of commercial software like Roxio GoBack or Powerquest SecondChance (since discontinued) purport to do this, as does Windows XP.</p>
<p>I personally don&#8217;t trust these programs all that much, and prefer to make a total backup of my system using Norton Ghost. To ensure my data is not erased when I restore from a Ghost image, I have at least two partitions on each of my systems:</p>
<ol>
<li>C: for Windows and applications (NTFS)</li>
<li>D: for my personal data (NTFS on desktops, FAT32 on laptops)</li>
<li>I: for my Ghost images on desktops (FAT32), on a different drive than C: so I can survive a drive failure</li>
</ol>
<p>That way I can destroy C: at my leisure, in the worst case I will have to reinstall a couple of applications and reapply some settings that were lost since the last release. My data sits safely on the D: partition (and backups).</p>
<h2>Backup strategy</h2>
<p>I don&#8217;t trust CD-R media or removable drive cartridges for backup purposes, and tape is either too slow or too expensive in the case of DLT. I keep full duplicates of my data partition and some Ghost images on a pair of 100GB external FireWire drives, one I keep at home and one at work. I rotate them weekly so even if my house burns down I will have lost in the worst case only a week of work or photos.</p>
<h2>Limitations of this method</h2>
<p>This technique doesn&#8217;t work very well if the underlying hardware configuration changes too often, and assumes a linear install history. If I install software A, then B, then C, I can go back from A+B+C to A+B or A but not to A+C.</p>
<h2>How-to</h2>
<p>This section shows how to extricate the data from OS/Apps which Windows and most apps usually try and commingle. The TweakUI utility from Microsoft is an absolute must-have. It is a control panel that allows you to change the behavior of the OS in vital ways that are not accessible otherwise short of editing the Registry directly.</p>
<h3>Outlook</h3>
<p>Outlook files are the single largest data files on my system (Ghost images do not count). By default, Outlook will create its PST file in the Documents and Settings directory. You can either relocate this directory to the D: partition, or create a new PST file in a location of your choice and use Advanced properties in the properties dialog for the PST in Outlook to make it the default location for POP delivery, after which you can close the old one and delete it.</p>
<h3>My Documents</h3>
<p>And derivatives like &#8220;My Pictures&#8221;, can be relocated to D: using TweakUI.</p>
<h3>Favorites</h3>
<p>For IE users, TweakUI allows you to relocate the Favorites directory to another place than the default. This way, you will not lose your favorites when you have to restore your system.</p>
<p>For Netscape/Mozilla users, the Profile manager utility allows you to set up a new profile with files that are stored where you want, e.g. on the D: partition.</p>
]]></content:encoded>
			<wfw:commentRss>http://majid.info/blog/windows-configuration-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

