<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
  	<atom:link href="http://unflyingobject.com/blog/rss.php" rel="self" type="application/rss+xml" />
    <title>unflyingobject.com - for the thrill of understanding</title>
  	<link>http://unflyingobject.com/blog/</link>
		<description>mac geekery</description>
		<language>en-us</language>
		<ttl>500</ttl>


	  <item>
	    <title>
  	    <![CDATA[Keychain Access... Dancing?]]>
    	</title>
   		<pubDate>Wed, 16 Dec 2009 23:44:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1030</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1030</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>Keychain Access went into a weird "trance"-like state today when I tried to import a Cisco VPN certificate:</p>

<p style="text-align:center">
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="478" height="158"
   codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"
   align="middle" >
  <param name="src" value="/tmp/keychaindance.mov" />
  <param name="autoplay" value="true" />
  <embed src="/tmp/keychaindance.mov" width="478" height="158" 
    pluginspage=http://www.apple.com/quicktime/download/
    align="middle" autoplay="false" loop="true" bgcolor="#232323" > </embed>
</object>
</p>

<p>It's like it's afraid of the impending Force Quit that happened shortly after.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Deploying Final Cut Studio]]>
    	</title>
   		<pubDate>Tue, 15 Dec 2009 18:23:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1027</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1027</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>I (and every other sysadmin who's had to deal with this) often bash Adobe for creating "enterprise-unfriendly" installers but when you think about it, Apple is just as bad with Final Cut Studio (i.e. "their Creative Suite"). It may come as a pkg but that doesn't mean you can automate the installation any better. The main reason seams to be that FCS packages refer to each disc using a <a href="http://www.afp548.com/forum/viewtopic.php?showtopic=21949">x-disc URL scheme</a> which <em>installer</em> seems to ignore. The result is that even if you mount all the discs, running <em>installer</em> with the main .mpkg will only install the apps and none of the additional content.</p>

<p>You can modify the .dist files, but here's an alternative approach:</p>

<ul>
<li>Create a 50 GB sparse image, name the volume "Final Cut Studio 3"</li>
<li>Enable permissions on the "Final Cut Studio 3" volume</li>
<li><p>Mount all the FCS discs, install the main package using <em>installer</em>:</p>

<pre><code>installer -verbose -pkg /Volumes/Final\ Cut\ Studio\ Install/Installer/FinalCutStudio.mpkg -taret /Volumes/Final\ Cut\ Studio\ 3
</code></pre></li>
</ul>

<p>Running the first phase through <em>installer</em> allows us to skip entering the license info.</p>

<ul>
<li>Run all the remaining installers from the individual discs, i.e. "Audio Content 1", "DVD Studio Pro Content", "Motion Content 1". In the installer click "Change Install Location..." and select the "Final Cut Studio 3" volume.</li>
<li>Create a new compressed disk image from the "Final Cut Studio 3" volume, scan for restore (only necessary if you want to do a block restore, see below).</li>
</ul>

<p>Now you have a complete FCS install as a single disk image, ready to be restored with <em>asr</em>. I've only tested this with fresh systems so YMMV, but the idea is straigtforward - we just copy all the files that come with FCS to their correct locations.</p>

<p>Since a default FCS installation is about 14 times the size of a minimal Snow Leopard install (!) it might make sense (save time) to <em>first</em> lay down FCS with a block copy (i.e. erasing the target first) and <em>then</em> restore the OS with a file copy. I tried this and it actually worked! With this method, a complete install of Final Cut Studio 2 clocks in at just under 12 minutes.</p>

<p>On an unrelated note, a minimal 10.6 install restores in 80 seconds over 1Gb Ethernet (onto a Mac Pro, using RAID 6 on the server). Probably less time most Windows PC's take to boot up. :-P</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Validating Finnish Social Security Numbers]]>
    	</title>
   		<pubDate>Tue, 15 Dec 2009 15:48:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1029</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1029</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>Just in case someone else needs this - here's one, fairly elegant way to validate Finnish SSN's, in JavaScript:</p>

<pre><code>/**
 * Check Finnish social security number
 * @return true if correct, false if incorrect, -1 if malformed
 */
function checkSsn(ssn)
{
  ssn = ssn.toLowerCase();
  m = ssn.match(/(\d{6})-(\d{3})(\w){1}/);

  if (!m) {
    return -1;
  }

  c = Array(); base = 35;
  n = parseInt(m[1] + m[2], 10) % 31;

  for (i = 0; i &lt; base; i++)  {
    e = parseInt(i, 10).toString(base);
    if ('gioq'.indexOf(e) &lt; 0) {
      c.push(e);
    }
  }

  return (c[n] == m[3]);

}
</code></pre>

<p>The idea is the last character in the SSN is essentially a verification code derived from all the numbers in the SSN. The specs are from the Finnish <a href="http://www.vaestorekisterikeskus.fi/vrk/home.nsf/pages/2575C011A439C3ACC22571FB00248CA2">Population Register Center</a> but unfortunately they only seem to be available in Finnish.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Makes Sense?]]>
    	</title>
   		<pubDate>Tue, 15 Dec 2009 15:28:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1028</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1028</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p style="text-align:center">
<img src="/tmp/suibug.png" alt="System Image Utility Bug"/>
</p>

<p>Yeah, that's what I thought too. This happens every time I tried to create a NetRestore image using Apple's System Image Utility. Clicking "OK" just brings the same dialog back after some time.</p>

<p>This reminds me of how a customer brought me his PowerBook with the classic "Document was not saved" dialog in Excel 2004, with only one button - "OK". "No, it's not OK", he said. :-)</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Reinstalling Final Cut Server.app]]>
    	</title>
   		<pubDate>Thu, 10 Dec 2009 16:35:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1022</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1022</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>If you ever find yourself being unable to re-install Final Cut Server.app, then open/Applications/Utilities/Java Preferences > Network and click on the "Delete Files..."  button and re-download.</p>

<p style="text-align:center">
  <img src="/tmp/javaprefs.png" alt="Java Preferences" />
</p>

<p>I ran into this after deleting the 1.5.1 shortcut from the Desktop. Going to the .app download page just opened the .jnlp launching the app, but the shortcut was gone. Command-clicking the app in the dock just selected the java executable. This trick forces the client to re-download and also create the .app on the desktop.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Punk Widget Update]]>
    	</title>
   		<pubDate>Sat, 14 Nov 2009 22:13:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1020</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1020</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>I was cleaning up log files on our web server and noticed I was getting quite a few hits on the script that acts as the backend for the <a href="http://www.macupdate.com/info.php/id/22627/punk">IMDB widget</a> that me and <a href="http://personal.inet.fi/koti/mgimpl/">Martin</a> created. Then I tried using it and noticed there were some parse errors with weird numbered lists showing up after a search result. I guess IMDB had tweaked their layout again.</p>

<p>Anyways, the script's been fixed now. No need to update the actual widget since that acts simply as the UI. Enjoy! ;-)</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Relocating SUS on 10.6 server]]>
    	</title>
   		<pubDate>Wed, 11 Nov 2009 10:29:00 +0200</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1018</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1018</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>This might actually be in the new documentation, I haven't checked, but when you <em>rsync</em> your SUS catalog to another volume and set it to use it, you will see a similar error in the logs:</p>

<pre><code>Symbolic link not allowed or link target not accessible /Volumes/data/SoftwareUpdate/html/index.sucatalog
</code></pre>

<p>This will probably only happen if you remove the original <em>swupd</em> datastore. The fix is to clear out all the index files:</p>

<pre><code>serveradmin stop softwareupdate
rm -rf /Volumes/data/SoftwareUpdate/html/index*
serveradmin start softwareupdate
</code></pre>

<p>IIRC, this wasn't necessary in 10.5, but I might be wrong...</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[BatchDMG]]>
    	</title>
   		<pubDate>Thu, 22 Oct 2009 01:33:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1016</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1016</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p><a href="http://github.com/filipp/BatchDMG/">BatchDMG</a> is a handy utility for times when you have to image large collections of disks (like installation media etc). Just run it (as root, to avoid an authentication dialog) and start feeding your machine with media.</p>

<p>The imaging starts automatically when a volume is mounted. Should also work with multiple DVD drives. The images are bzip compressed (UDBZ, need 10.4 or later to open) and are named after the volume name. It ejects the media once the imaging has completed.</p>

<p>Should work with 10.5 or later (uses PyObjC).</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[MediaRelay]]>
    	</title>
   		<pubDate>Tue, 20 Oct 2009 17:56:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1015</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1015</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p><a href="http://github.com/filipp/MediaRelay">MediaRelay</a> is a little Python tool I wrote that transfers new items from one FTP server to another. It can be useful when combined with a timer or possibly a folder action.</p>

<p>To use it, just modify <em>config.yaml</em>. Multiple sources and destinations can be defined under their own "name". Anonymous connections haven't been tested, but should be in the form ":@server/path".</p>

<pre><code>$ python relay.py 
-- checking default
&lt;- getting Untitled_2.wmv
-&gt; sending Untitled_2.wmv
</code></pre>

<p>The skiplist is stored in $CWD/.skiplist. Remove it to do a full transfer. The files are always relayed through the local machine (not sent from server to server) which is not terribly efficient but sometimes the only option. Folders are not trasfered - they throw an exception and are skipped on the next run.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Integrating a Forum with Your Wiki]]>
    	</title>
   		<pubDate>Sun, 18 Oct 2009 15:59:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1014</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1014</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>Some weeks ago <a href="http://www.thingamagic.net/jussi/">Jussi</a> asked about how to go about intagrating a forum with one's WikiServer. I thought this was a brilliant idea - a forum is actually much more useful for many environments than a blog or even a wiki. I think the concept of collaborative editing is quite foreign for the majority of existing companies and blogs are very often just silly. A discussion however is something that everyone is used to with email and group addresses yet everyone knows how painful it is to create "workgroups" - a group of people working on the same thing - which is exactly what a discussion group/forum is meant for.</p>

<p>There's obsiously no shortage of great free/open source forum applications out there. My first recommendation was <a href="http://vanillaforums.org/">Vanilla</a> due to it's very lightweight nature, but it quickly dawned that it's not really the right choice.</p>

<p>My next choice is <a href="http://punbb.informer.com/">PunBB</a> which we've run very successfully on the <a href="http://www.emug.ee/forum">Estonian Macintosh User Group</a>. It has all the important features, is fast and just "quick and dirty" enough to make your own modifications to it. It's also more secure than phpBB and gives excellent performance even with <a href="http://www.maclife.com/forums/">large installations</a>.</p>

<p>The next and biggest question in integration is of course authentication - we don't want to manually create all the wiki server accounts in the forum software. The ideal solution would be to have the forum share the same session with the wiki software - a kind of SSO solution. This would be awesome but not really feasable at this time. The next best thing would be to have PunBB authenticate against the same LDAP server as the wiki. This something that PunBB <a href="http://punbb.informer.com/forums/topic/22154/ldap-authentication/">doesn't yet do</a>.</p>

<p>So I threw together a little extension for PunBB that enables LDAP authentication. You can download it <a href="http://github.com/filipp/auth_ldap">from my Github page</a>. Once you have PunBB and the extension installed, it's simply a matter of editing the respective templates to include the links to both applications. </p>

<p>One thing to note - PunBB doesn't, AFAIK, have a notion of a completely "private" bulletin board. That means, as is, the solution is not appropriate if your wiki is publicly accessible.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Mail.app Attachments]]>
    	</title>
   		<pubDate>Mon, 12 Oct 2009 11:05:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1013</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1013</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>In my experience the thing that Mail users have the most problems with (even before the confusion about how IMAP folders are organized compared to Outlook) is how it handles attachments. Or rather how incompatible the default behaviour is with a lot of Outlook clients out there. A couple of preferences that I've found improve things quite a bit are:</p>

<pre><code>defaults write com.apple.com SendWindowsFriendlyAttachments -bool Yes
defaults write com.apple.com AttachAtEnd -bool Yes
</code></pre>

<p>It's the second one, disabling inline attachments, that really makes a difference. Now if only there was a way to always display attachments as icons...</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[10.6 Mail Migration Bug Workaround]]>
    	</title>
   		<pubDate>Sun, 11 Oct 2009 13:27:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1012</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1012</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>There's a small bug in the Mail migration script (/System/Library/ServerSetup/MigrationExtras/65_mail_migrator.pl) <strong>if your mail server also happens to be an OD replica</strong>. Namely it tries to set the correct ownership of mailboxes right after the upgrade but the binding has not been set up at that point yet. Come to think of it, this should happen to non-OD-master mail server, but I'm not sure.</p>

<p>The point is, <em>chown</em> will not be able to set the permissions since it won't have any idea of who those users actually are, so after upgrading and re-binding, one should do something like this (as root):</p>

<pre><code>maildir=$(serveradmin settings mail:imap:partition-default | cut -d = -f 2 | sed 's/[ "]//g')
for u in $maildir/*; do
  chown -R $(basename $u):mail $u
done
/usr/bin/cvt_mail_data -r "$maildir"
</code></pre>

<p>The last line renames the user folders to their corresponding GUIDs, which also isn't possible without a working OD master.</p>

<p>On a lighter note, It's clear that Apple has indeed put a lot of effort into 10.6 server and into making upgrading and migrating as smooth as possible. Quite frankly I don't remember the last time I've been able to read an OS X server manual and find helpful and working instructions which is exactly what has happened more than once installing 10.6. Even working around this bug was a joy thanks to the clear scripts and logs. My faith in OS X as a great server platform is slowly being restored. :-)</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[DIY IO Benchmarking]]>
    	</title>
   		<pubDate>Sun, 11 Oct 2009 12:49:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1011</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1011</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>Here's a totally unscientific and potentially extremely flawed tool for measuring IO performance. It grew out of the frustration of not being able to at least <em>roughly</em> estimate and compare the performance of different disks when dealing with different file sizes. Most benchmarking tools out there seem to focus on large files, but for mail and iCal servers this information is basically useless.</p>

<p>So I hacked together this thing in like 10 minutes. A basic usage example would be:</p>

<pre><code>$ ./smalltest.sh 1000 20 /tmp
#### WRITE TEST ####

real    0m2.452s
user    0m0.530s
sys 0m1.649s
#### READ TEST ####

real    0m1.799s
user    0m0.461s
sys 0m1.302s
</code></pre>

<p>That created 1000 ten kilobyte (twenty 512 byte blocks) files into a folder under /tmp on my MacBook Pro. The scrips itself would make a great "Bash 101" example for first graders:</p>

<pre><code>  #!/usr/bin/env bash
  # smalltest.sh

  USAGE="$(basename $0) HowManyFiles BlockSize Destination"

  if [[ $# -lt 3 ]]; then
    echo $USAGE 2&gt;&amp;1
    exit 1
  fi

  tmpdir="/$3/$(date +%s)"
  mkdir $tmpdir

  echo "#### WRITE TEST ####"

  time (
    for (( i = 0; i &lt; $1; i++ )); do
      dd if=/dev/zero of="$tmpdir/$i" count=$2 bs=512 &gt; /dev/null 2&gt;&amp;1
    done
  )


  echo "#### READ TEST ####"

  time (
    for f in $tmpdir/*; do
      cat $f &gt; /dev/null
    done
  )

  rm -r $tmpdir
</code></pre>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[That Newline Thing]]>
    	</title>
   		<pubDate>Thu, 08 Oct 2009 16:34:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1010</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1010</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>I finally figured out why I was never able to create matching encrypted passwords for my PHP apps from the command line. For instance:</p>

<pre><code>$ echo abc | shasum
03cfd743661f07975fa2f1220c5194cbaff48451  -
$ php -r 'echo sha1("abc");'
a9993e364706816aba3e25717850c26c9cd0d89d
</code></pre>

<p>Not quite the same. The reason is of course totally obvious, just not visible - <em>echo</em> puts a newline after everything by default, so instead of the previous, one should use:</p>

<pre><code>$ echo -n abc | shasum
a9993e364706816aba3e25717850c26c9cd0d89d  -
</code></pre>

<p>Duh. The same thing with md5(). I think I might have figured this out before but then forgot about it so hopefully it'll stick better after posting this.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Accessing Keychain from PyObjC]]>
    	</title>
   		<pubDate>Sun, 20 Sep 2009 13:42:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1008</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1008</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>10.5 came bundled with <a href="http://pyobjc.sourceforge.net/">PyObjC</a>, but in 10.6 it's actually usable since we now have Python 2.6.1 (with <a href="http://en.wikipedia.org/wiki/Python_(programming_language)">"batteries included"</a>). This makes Python more and more the language of choice for your everyday Cocoa hacking needs.</p>

<p>One of the problems you'll run into quite early on is accessing the Keychain which <a href="http://developer.apple.com/mac/library/documentation/Security/Conceptual/keychainServConcepts/03tasks/tasks.html#//apple_ref/doc/uid/TP30000897-CH205-TP9">is still firmly in Carbon</a> aka procedural C land. Maybe the PyObjC bridge also allows calling C stuff, I don't know, but lucky for us, we don't have to. There's been <a href="http://tommorris.org/blog/2007/10/02">posts about this elsewhere</a> but I think I've found a more simple solution. One that doesn't involve ancient frameworks or changes to your Python imports.</p>

<p>So, to access the Keychain from your PyObjC app:</p>

<ul>
<li>Download Extendmac's <a href="http://extendmac.com/EMKeychain/">EMKeychain classes</a> and add them to your PyObjC project</li>
<li>Add the Carbon and Security frameworks</li>
<li><p>Edit "main.m" and add these import statements:</p>

<pre><code>#import "EMKeychainProxy.h"
#import "EMKeychainItem.h"
</code></pre></li>
<li><p>Test it. For instance, to add a password to the keychain from your Python code:</p>

<pre><code>kp = EMKeychainProxy.sharedProxy()
kp.addGenericKeychainItemForService_withUsername_password_("someservice", "filipp", "test")
</code></pre></li>
</ul>

<p>which should result in this in Keychain Access:</p>

<p style="text-align:center">
  <img src="/tmp/keychainaccess.png" alt="Keychain Access" />
</p>

<p>And reading a password is just as simple:</p>

<pre><code>ki = kp.genericKeychainItemForService_withUsername_("someservice", "filipp")
pw = ki.password()
</code></pre>

<p>And that's it! All kudos and many thanks to Brian Amerige of <a href="http://extendmac.com/">Extendmac</a> for sharing his Keychain code!</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[SOUP Kitchen]]>
    	</title>
   		<pubDate>Tue, 15 Sep 2009 11:50:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1007</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1007</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>SOUP (SOftware UPdate) Kitchen is a little web front end I wrote for Software Update Server (SUS). It allows you to download individual packages from the server which can be really handy in some situations. The obligatory screenshot:</p>

<p style="text-align:center">
   <img src="/tmp/soup.png" alt="SOUP Kitchen"/>
</p>

<p>There's a number of things I would like to do with it, like have proper version strings displayed for starters. All the metadata on the SUS could also be linked to the packages so that one could get pretty detailed information on what a package actually installs. It would also be nice to support distributions (right now it can only list individual packages). But with work stuff taking up pretty much all my time right now I thought I'd just throw it out there before I completely forget about this project.</p>

<p>Downloadable through <a href="http://github.com/filipp/SOUP_Kitchen">GitHub</a>. To install, just copy the folder someplace your web server can reach it. The web service has to be running on the same machine as the SUS.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Wikid Problems]]>
    	</title>
   		<pubDate>Mon, 14 Sep 2009 21:15:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1006</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1006</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>I saw a server (build 9L34) with an odd TeamsServer (wikid) problem. Users could log in correctly, but every time they tried to write to the wiki a login dialog would pop up and the popup would only accept an admin's credentials. This entry would just show up in /Library/Logs/wikid/error_log:</p>

<pre><code>[WebDAVProtocol,client] "[Failure instance: Traceback: &lt;class 'zanshin.http.HTTPError'&gt;: 
&lt;&lt;class 'zanshin.http.HTTPError'&gt; (404) Not Found&gt;\n/usr/share/caldavd/lib/python/twisted/internet/defer.py:304:_s
tartRunCallbacks\n/usr/share/caldavd/lib/python/twisted/internet/defer.py:317:_runCallbacks\n/usr/share/caldavd/li
b/python/twisted/internet/defer.py:239:callback\n/usr/share/caldavd/lib/python/twisted/internet/defer.py:304:_star
tRunCallbacks\n--- &lt;exception caught here&gt; ---\n/usr/share/caldavd/lib/python/twisted/internet/defer.py:317:_runCa
llbacks\n/usr/share/wikid/lib/python/apple_calendar/CalendarReportUtilities.py:135:handleReportResponse\n]"
</code></pre>

<p>with a sprinkle of these here and there:</p>

<pre><code>[HTTPChannel,17,127.0.0.1] 127.0.0.1 - - [14/Sep/2009:15:17:45 +0000] "POST / HTTP/1.1" 200 730    
"http://example.com/groups/cityportal/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; fi-fi) App
File "/usr/share/caldavd/lib/python/twisted/python/log.py", line 34, in callWithContext
        return context.call({ILogContext: newCtx}, func, *args, **kw)
      File "/usr/share/caldavd/lib/python/twisted/python/context.py", line 59, in callWithContext
        return self.currentContext().callWithContext(ctx, func, *args, **kw)
      File "/usr/share/caldavd/lib/python/twisted/python/context.py", line 37, in callWithContext
        return func(*args,**kw)
      File "/usr/share/caldavd/lib/python/twisted/internet/selectreactor.py", line 139, in _doReadOrWrite
        why = getattr(selectable, method)()
    --- &lt;exception caught here&gt; ---
      File "/usr/share/caldavd/lib/python/twisted/internet/tcp.py", line 805, in doRead
        protocol = self.factory.buildProtocol(self._buildAddr(addr))
      File "/usr/share/caldavd/lib/python/twisted/internet/tcp.py", line 752, in _buildAddr
        def _buildAddr(self, (host, port)):
    exceptions.TypeError: 'NoneType' object is not iterable
</code></pre>

<p>Created a fresh group and wiki - same problem. Having gone through all the basic places - group settings in WG, SACL's, Apache settings etc I just stared at the error_log and then noticed this every time I restarted the web service:</p>

<pre><code>[-] Unable to write to our repository path: /Volumes/Data/Wiki
</code></pre>

<p>Looks like the permissions were screwed up when the wikid docroot was moved to a different volume. Indeed:</p>

<pre><code>$ sudo chown _teamsserver:_teamsserver /Volumes/Data/Wiki
</code></pre>

<p>... fixed the issue. This looks to me like a wikid or Server Admin bug - why wouldn't they check the permissions of the "Data Store" path when it's set in Server Admin? Anyway, put this up here in case someone else runs into this.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Passgen Update]]>
    	</title>
   		<pubDate>Sat, 29 Aug 2009 15:32:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1004</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1004</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>I've updated my little <a href="/blog/story/684">password generator</a> with a <a href="/passgen/">web interface</a>. I think this makes this thing much more useful and usable.</p>

<p>Other improvements include defaulting the wordlist to <em>/usr/share/dict/web2</em> which means you can run your scripts against it without any arguments and still get something out of it:</p>

<pre><code>&gt; curl http://unflyingobject.com/passgen/passgen.php
Prop3ll4
Ph4rm4Co
HydroPlu
Th4Lth4n
Supr4oRb
Sc4bB3D
M3roG3n1
!ROQUO1S
HYPOTH3C
</code></pre>

<p>If you want to use Webster's from the web interface, just leave the URL field blank.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Desklabel]]>
    	</title>
   		<pubDate>Sat, 29 Aug 2009 15:10:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1003</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1003</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>Just a little something I needed for work - a simple and consistent way to set the desktop backround of a server. Specs were simple - should be a solid color, with the same resolution as my display and should have some way to help me identify the host in question (like the DNS name or any arbitrary text).</p>

<p>So I wrote <a href="/desklabel">Desklabel</a>. The interface is so straight-forward that it doesn't make any sense to waste time explaining it. And for the scripters, here's an AppleScript to use this automagically:</p>

<pre><code>set png to "/tmp/" &amp; (do shell script "uuidgen") &amp; ".png"
do shell script "curl -o " &amp; png &amp; "  http://unflyingobject.com/desklabel/index.php -d w=1280 -d h=800 -d t=$(hostname)"
tell application "Finder"
set the desktop picture to POSIX file png
end tell
do shell script "rm " &amp; png
</code></pre>

<p>If you leave out the "t" variable it'll just return your public DNS name. You should get a different color every time you run it. Set the r, g and b variables if you want something specific (my favorite is 60/60/60).</p>

<p>And yes, the font is awesome. It's called <a href="http://www.dafont.com/bebas.font">Bebas</a>.</p>
]]>
			</description>
		</item>


	  <item>
	    <title>
  	    <![CDATA[Weird Spam]]>
    	</title>
   		<pubDate>Fri, 17 Jul 2009 22:13:00 +0300</pubDate>
	   	<link>http://unflyingobject.com/blog/posts/1000</link>
  	 	<guid>http://unflyingobject.com/blog/posts/1000</guid>
			<author>filipp@lepalaan.org (Filipp Lepalaan)</author>
			<description>
				<![CDATA[<p>Just recieved one of the weirdest/cutest spam messages ever:</p>

<p style="text-align:center">
<a href="/images/20091707_1-full.png" title="Awww... spam">
  <img src="/images/20091707_1-thumb.png"/>
</a>
</p>

<p>The text says something like "I need spam right away!" in Russian.</p>

<p>Oh, and that fancy zoom effect is <a href="http://www.cabel.name/2008/02/fancyzoom-10.html">FancyZoom</a></p>
]]>
			</description>
		</item>


  </channel>
</rss>
