Code 'n Stuff2009-07-02T22:30:51-07:00http://eglaysher.github.com/Elliot Glaysherglaysher@umich.eduGTK+ themes in Chromium2009-07-02T00:00:00-07:00http://eglaysher.github.com/2009/07/02/gtk-themes-in-chromium<p>I don’t usually talk about Chromium, but I have something really cool I want to share:</p>
<p>Earlier today I committed <a href='http://src.chromium.org/viewvc/chrome?view=rev&revision=19868'>the first</a> of several patches to the Chromium tree that address <a href='http://crbug.com/13967'>Bug #13967</a>, “theme base colors should be picked from system colors.” We’ve gotten a lot of requests to try to visually match Linux user’s GTK themes. A good option to have, as much as I might like the default blue theme.</p>
<p>As of <a href='http://src.chromium.org/viewvc/chrome?view=rev&revision=19868'>r19868</a>, there is now a “GTK Theme” button on the Personal Stuff tab of the Option dialog. Clicking it will switch to GTK theme mode, while “Reset to default theme” will switch you back.</p>
<p>Here’s Chromium running with the “Clearlooks” theme and system title bars and borders:</p>
<p><img src='/images/2009-07-02-gtk-themes/with_clearlooks.png' alt='Chromium with Clearlooks' /></p>
<p>Here’s Chromium running with the Ubuntu Human theme and using the skyline:</p>
<p><img src='/images/2009-07-02-gtk-themes/with_human.png' alt='Chromium with Human' /></p>
<p>This is obviously not a polished final work. Just from the screenshots above, I can count four big graphical problems, and Chromium’s interpretation of dark themes like HighContrastInverse can only be described as unusable. There are the ongoing problems with 32-bit/64-bit *.so libraries (this time: theme engines). The fonts are wrong. There’s a lot of work to be done before this is acceptable for day to day use.</p>
<p>But I’m excited because some progress is being made.</p>rlvm 0.06.22009-06-21T00:00:00-07:00http://eglaysher.github.com/2009/06/21/rlvm-062-released<p>Bugfix release.</p>
<ul>
<li>Fixes regression where G00 animations weren’t being played (Seen in Planetarian.)</li>
<li>Fixes regression where Yumemi’s face in the final scene in Planetarian was being drawn twice because of poor clip rect handling.</li>
<li>Support for English patches compiled with debugging symbols stripped.</li>
<li>Temporarily disables scrollback due to crash that will be invasive to fix.</li>
</ul>
<h3>Download</h3><p>
<a href='http://www.elliotglaysher.org/Releases/rlvm_0.6.2_i386.deb'>Ubuntu (Jaunty) package for x86 machines (version 0.06.2)</a><br />
<a href='http://www.elliotglaysher.org/Releases/rlvm_0.6.2_amd64.deb'>Ubuntu (Jaunty) package for amd64 machines (version 0.06.2)</a><br />
<a href='http://www.elliotglaysher.org/Releases/rlvm_0.6.2.dmg'>Mac OSX Application (Universal) (version 0.06.2)</a><br />
<a href='http://github.com/eglaysher/rlvm/tarball/release-0.06.2'>Source code (0.06.2)</a>
</p>rlvm 0.6.1 released!2009-05-24T00:00:00-07:00http://eglaysher.github.com/2009/05/24/rlvm-061-released<p>Contains initial support for the CLANNAD English patch, available at the CLANNAD translation wiki’s Assembla page. This is a minor update and only fixes obvious problems early in the game (i.e. crashing at startup). Despite this disclaimer, I haven’t gotten a crash with the SEENr28_FV.TXT currently up on Assembla (though I have only played about half an hour in). Note: The recently posted SEENr30_FV.TXT doesn’t work; I am not sure why.</p>
<p>In addition, this version fixes reported issues with CLANNAD_FV.</p>
<p>rlvm compiles on Ubuntu Jaunty Jackalope (and most likely any modern Linux distribution) and Mac OSX 10.5 Leopard / 10.4 Tiger.</p>
<h3><em>Old links removed.</em></h3>rlvm 0.6 released!2009-04-19T00:00:00-07:00http://eglaysher.github.com/2009/04/19/rlvm-06-released<p>Supports the Full Voice edition of CLANNAD, with several general improvements to all versions of CLANNAD. Most notably, rlvm 0.6 supports the Ogg Vorbis voice archives used in CLANNAD Full Voice edition. (Older KOE and NWK archives are not yet supported).</p>
<p>Currently, English patches to CLANNAD are known to not work. (And I suspect that they never did.) Specifically, I’ve tested with the SEEN.TXT files on Assembla and things aren’t working. More investigation is needed. rlvm still works properly with the NDT Kanon patches.</p>
<p>By popular demand, the OSX application is now a universal binary again. (I am not sure how many more releases will have universal binaries because my old G4 laptop is dying.)</p>
<p>rlvm compiles on Ubuntu Intrepid Ibex (and most likely any modern Linux distribution) and Mac OSX 10.5 Leopard / 10.4 Tiger.</p>
<h3><em>Old links removed.</em></h3>On Writing for Android2009-03-15T00:00:00-07:00http://eglaysher.github.com/2009/03/15/on-writing-for-android<p>Android is Google’s operating system for phones. Now that I’ve released <a href='http://eglaysher.github.com/lifecounter'>Life Counter</a> on the Android Marketplace, I’d like to write a bit about the platform and learning it.</p>
<ul>
<li>
<p>The <a href='http://d.android.com/guide/index.html'>documentation</a> isn’t great, which is a shame since most of the classes are pretty easy to use. The tutorials don’t teach you enough to bootstrap and the Framework Topics section, while interesting, doesn’t give a good overview of the system. Framework Topics will also usually cover the way you do things with imperative statements, instead of the declarative XML, which is what you should usually use.</p>
<p>The <a href='http://d.android.com/reference/packages.html'>javadoc</a> is generally OK, but sometimes it shines. <a href='http://developer.android.com/reference/android/app/Activity.html'>Activity</a>, for example.</p>
<p>I was only really able to “get” the Android API because of a separate book I bought. <a href='http://www.amazon.com/Hello-Android-Introducing-Development-Platform/dp/1934356174/ref=pd_bbs_sr_1'>Hello, Android</a> by Ed Burnette walked through multiple non-trivial Android programs and showed off various things I wouldn’t have encountered otherwise. Also, 3rd party tutorials tend to help quite a bit.</p>
</li>
<li>
<p>Android shipped with nowhere near enough widgets in the standard library. There are a lot more widgets in the <code>com.android.internal.widget</code> namespace. While you won’t want to use those directly in your project, all the android code is thankfully released under the <a href='http://www.apache.org/licenses/LICENSE-2.0.html'>Apache License, Version 2.0</a>. Check out the code for the <a href='http://android.git.kernel.org/?p=platform/frameworks/base.git'>base framework</a> and copy classes and resources you want into your project’s namespace. For example, Life Counter’s spin button is copied from <code>com/android/internal/widget/NumberPicker.java</code>.</p>
</li>
<li>
<p>XML layouts can be confusing, especially figuring out how to properly space different elements. Like <code>overflow:hidden;</code> solves most problems with IE in CSS, the magic XML attribute that your layouts are missing is <code>android:layout_weight="1"</code>. Good luck finding out what that actually means, since the <a href='http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#attr_android:layout_weight'>javadoc for android:layout_weight</a> is empty. The only place I’ve found a reasonable description of that property is, oddly, in <a href='http://developer.android.com/guide/tutorials/notepad/notepad-ex2.html'>a section of the Notepad tutorial</a>. I learned this more by trial and error than anything else.</p>
</li>
<li>
<p>Total time to make <a href='http://eglaysher.github.com/lifecounter'>Life Counter</a>: 2 weekends (with small, scattered chunks of freetime during the week) from start to finish, including most of the time spent learning various parts of the android API.</p>
</li>
</ul>VitaminSEE 0.7.22009-01-24T00:00:00-08:00http://eglaysher.github.com/2009/01/24/vitaminsee-072<p>With version 0.7.2, I’m abandoning VitaminSEE. The code is available on <a href='http://github.com/eglaysher/vitaminsee'>github</a> and there’s now a <a href='http://eglaysher.github.com/vitaminsee'>site for VitaminSEE</a>. I hope that someone forks the code and continues it.</p>
<p>VitaminSEE 0.7.2 is an odd assortment of bug fixes that I’ve accumulated over the years of my own use. The only new user visible feature (that I remember!) is proper unicode sorting on the file list.</p>
<p>
<a href='http://elliotglaysher.org/Releases/VitaminSEE 0.7.2.dmg'>VitaminSEE v0.7.2 (Universal Binary)</a><br />
<a href='http://github.com/eglaysher/vitaminsee/tarball/VitaminSEE-0.7.2'>VitaminSEE v0.7.2 Source</a><br />
</p>Importing from SVN2009-01-21T00:00:00-08:00http://eglaysher.github.com/2009/01/21/importing-from-svn<p>Importing a SVN repository into git is a utter pain if you have anything nonstandard. This is an utter pain and there should be some way of specifying</p>
<p>A note to everyone out there in the world who came here through google: In git-svn, there is a function called <code>sub do_git_commit</code>. If you have an svn branch that isn’t getting merged in correctly, make a local copy of <code>git-svn</code> and hack that function. There’s a <code>foreach</code> loop where you’re adding ‘-p’ options. Immediately afterwards, hack it to add more parent commits on certain revisions.</p>
<p>So in my case, <code>r149</code> was supposed to be a merge point. I found the hash of the commit that should have been one of the parents and wrote:</p>
<div class='highlight'><pre><span class='k'>if</span> <span class='p'>(</span><span class='nv'>$lr</span> <span class='o'>==</span> <span class='mi'>148</span><span class='p'>)</span> <span class='p'>{</span>
<span class='nb'>push</span> <span class='nv'>@exec</span><span class='p'>,</span> <span class='s'>'-p'</span><span class='p'>,</span> <span class='s'>"a8ef9cf2314224558fe205baca770d2a8df556b9"</span><span class='p'>;</span>
<span class='p'>}</span>
</pre>
</div>
<p>This worked for me. This probably would have been amazingly harder if I had more than one of these broken merges since it would probably change a lot of the commit hashes. YMMV.</p>rlvm 0.5 released!2009-01-17T00:00:00-08:00http://eglaysher.github.com/2009/01/17/rlvm-05-released<p>The big new feature is rlBabel support! NDT’s Kanon teaser patch is now playable to the end of the translated text. Western text is now word wrapped correctly and translation notes work (though there is a minor bug that they can only be read once). However, italicized text is not supported and italicized words will be displayed with the normal font. The text is also not kerned.</p>
<p>There appears to be some broken unofficial CLANNAD patches floating around. English patches that were <em>not</em> compiled with rlBabel will, obviously, not line break correctly. You can check to see if rlBabel is enabled by hitting <span>F1</span> at any time. “rlBabel” should be set to “Enabled” and “Text Encoding” should be set to “Western”. rlvm can not, and will never, support these broken patches.</p>
<p>rlvm now has a <a href='http://eglaysher.github.com/rlvm'>site on github</a> with <a href='http://eglaysher.github.com/rlvm/screenshots.html'>screenshots</a> and <a href='http://eglaysher.github.com/rlvm/guide_kanon_eng.html'>a guide to installing NDT's English patch</a> under Linux.</p>
<p>rlvm compiles on Ubuntu Intrepid Ibex (and most likely any modern Linux distribution) and Mac OSX 10.5 Leopard.</p>
<h3><em>Old links removed.</em></h3>Look what I found in the rlBabel code…2008-12-20T00:00:00-08:00http://eglaysher.github.com/2008/12/20/look-what-i-found-in-the-rlbabel-code<div class='highlight'><pre><span class='k'>template</span> <span class='o'><</span><span class='k'>typename</span> <span class='n'>T</span><span class='o'>></span>
<span class='k'>class</span> <span class='nc'>test_p</span><span class='o'>:</span> <span class='k'>public</span> <span class='n'>std</span><span class='o'>::</span><span class='n'>unary_function</span><span class='o'><</span><span class='n'>t</span> <span class='p'>,</span> <span class='kt'>bool</span><span class='o'>></span> <span class='p'>{</span>
<span class='c'>// Come quick! come quick! thou happy hour</span>
<span class='c'>// When C++ doth closures get,</span>
<span class='c'>// And gain thereby some modern power,</span>
<span class='c'>// And all this clumsiness forget</span>
<span class='c'>// (Though that may take a lifetime yet,</span>
<span class='c'>// Since standards are so hit-and-miss) --</span>
<span class='c'>// Till then, we're stuck with crap like this.</span>
<span class='kt'>int</span> <span class='n'>x_</span><span class='p'>,</span> <span class='n'>y_</span><span class='p'>;</span>
<span class='k'>public</span><span class='o'>:</span>
<span class='n'>test_p</span><span class='p'>(</span><span class='kt'>int</span> <span class='n'>x</span><span class='p'>,</span> <span class='kt'>int</span> <span class='n'>y</span><span class='p'>)</span> <span class='o'>:</span> <span class='n'>x_</span><span class='p'>(</span><span class='n'>x</span><span class='p'>),</span> <span class='n'>y_</span><span class='p'>(</span><span class='n'>y</span><span class='p'>)</span> <span class='p'>{}</span>
<span class='kt'>bool</span> <span class='k'>operator</span><span class='p'>()(</span><span class='k'>const</span> <span class='n'>T</span><span class='o'>&</span> <span class='n'>t</span><span class='p'>)</span> <span class='k'>const</span> <span class='p'>{</span> <span class='k'>return</span> <span class='n'>t</span><span class='p'>.</span><span class='n'>test</span><span class='p'>(</span><span class='n'>x_</span><span class='p'>,</span> <span class='n'>y_</span><span class='p'>);</span> <span class='p'>}</span>
<span class='p'>};</span>
</pre>
</div>
<p>– Haeleth, in <a href='http://svn.haeleth.net/pub/rlBabel/gloss.cpp'>rlBabel's gloss.cpp</a></p>
<p>Writing that class out made Haeleth curse,<br /> So annoyed, he composed a whole verse!<br /> And though Haeleth is vexed,<br /> There’s no joy in Oh X.<br /> The new syntax for lambdas is worse!<br /></p>rlvm 0.4 released!2008-12-17T00:00:00-08:00http://eglaysher.github.com/2008/12/17/rlvm-04-released<p>CLANNAD is now playable to the True End of the After Story. All routes in Kanon SE are playable, and there’s a minimal default interface for Kanon and other games that don’t provide a custom one.</p>
<p>rlvm still does not handle rlBabel translation patches very well. This is the major planned feature for 0.5, now that there appears to be an incoming Kanon translation patch, along with the ongoing CLANNAD translation work.</p>
<h3><em>Old links removed</em></h3><h3>Source Code</h3>
<p>I thought I should also mention that the whole project history, in addition to being hosted locally, is now also <a href='http://github.com/eglaysher/rlvm/tree/master'>on github</a>, for those interested in following development or contributing.</p>rlvm 0.3 released!2008-10-04T00:00:00-07:00http://eglaysher.github.com/2008/10/04/rlvm-03-released<p>Work has been started on getting CLANNAD playable under rlvm. Nagisa’s route is playable to the end, minus the MPEG video. rlvm now remembers the CG viewed. User selections are now usable and don’t lock up the interpreter. Despite all this, CLANNAD support is far from complete. There are still several graphical glitches and unimplemented opcodes.</p>
<p>In addition, there are several stability fixes. The race condition in the BGM system has been fixed. Scrolling through Planetarian’s backlog no longer crashes.</p>
<h3><em>Old links removed</em></h3><div id='comments'>
<h4 id='comment-header'>2 Comments</h4>
<ol class='commentlist'>
<li class='alt' id='comment-17391'>
<p class='comment-metadata'><strong>Mitchell Ferguson</strong> | 19-Oct-08 at 11:53 pm | <a href='#comment-17391' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Wow, this is looking awesome. I tried it with Clannad and an unoffical english patch, and it’s working mostly as you said it would. It may be a bit early to start making requests, but just some things to note:</p>
<p>Allow use of the “enter” key to advance dialog. Currently, only return works.</p>
<p>When english text is displayed, it is too big for the line height and looks bad, also the letters are too far apart. All together, it’s readable but looks *bad*. It would be awesome if there was some way to switch fonts, next release.</p>
<p>When viewing Clannad backlog, the only way to get back to the present is by clicking. Normally, you can at least use return, if not enter.</p>
<p>All in all, thanks a tonne for your hard work on this!</p>
<p>(Oh yeah, any chance of save compatibility? ^^ I don’t know how far-fetched this is, please ignore my if it’s unreasonable)</p>
</li>
<li class='' id='comment-17596'>
<p class='comment-metadata'><strong>glaysher</strong> | 24-Oct-08 at 10:04 pm | <a href='#comment-17596' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<blockquote><p>
When english text is displayed, it is too big for the line height and looks bad, also the letters are too far apart. All together, it’s readable but looks *bad*.
</p></blockquote>
<p>I am not surprised; I’ve hard coded the Japanese text model into rlvm,<br />
much like RealLive does. I don’t have short term plans to support<br />
English/Korean/Chinese fan patches. Obviously, this is one of the big<br />
long term goals on the agenda once unmodified Clannad is rock solid.<br />
The problem is that rldev will generate bytecode that requires<br />
Haeleth’s rlBabel DLL to work correctly. I am not entirely sure what<br />
to do about this and therefore have been putting it off. The easiest<br />
option is to make a compatibility rlbabel-rlvm.kh file and require<br />
everyone who wants to make a patch to compile it in, much as people<br />
use Haeleth’s rlbabel.kh. It’s not a convenient solution, but it may<br />
be the only way. I’ve only done preliminary work on this, though, as I<br />
think there’s still more important work to be done (i.e. stop crashing<br />
on Kotomi’s route).</p>
<blockquote><p>
(Oh yeah, any chance of save compatibility? ^^ I don’t know how far-fetched this is, please ignore my if it’s unreasonable)
</p></blockquote>
<p>This will never happen. The official RealLive.exe appears to simply<br />
dump its in memory structures into a binary file and no one (to my<br />
knowledge) has seriously tried to reverse engineer it. Even if someone<br />
did the prerequisite reverse engineering work, both creating and<br />
maintaining the mapping between RealLive.exe and rlvm’s in memory data<br />
structures would take significant effort for little benefit. I’d<br />
rather spend that time on getting voice files working, reverse<br />
engineering the tonecurve files or HIK animations, et cetera.</p>
</li>
</ol>
</div>rlvm 0.2 released!2008-07-24T00:00:00-07:00http://eglaysher.github.com/2008/07/24/rlvm-02-released<p>rlvm 0.2 adds music and sound effect support, along with custom mouse cursors included in RealLive games.</p>
<p>While rlvm plays music and sounds, rlvm still does not support voices. nwatowav does not support the voice format used on the Planetarian CD edition. If anyone knows anything about the voice file format used in Planetarian, please contact me at <em>glaysher at umich dot edu</em>.</p>
<p>This version is not backwards compatible with rlvm 0.1’s save files. I’ve added versioning information to the save files so hopefully future versions of rlvm will be compatible with the save game files produced by version 0.2. No user action is required to upgrade; save files are written in a different location and are now compressed with zlib.</p>
<p>rlvm compiles on Ubuntu Hardy Heron (and most likely any modern Linux distribution), Mac OSX 10.4 Tiger, and Mac OSX 10.5 Leopard.</p>
<h3><em>Old links removed</em></h3>rlvm 0.1 released!2008-04-16T00:00:00-07:00http://eglaysher.github.com/2008/04/16/rlvm-01-released<p>After a year and a half of hard work, I’m pleased to announce the first release of <a href='/rlvm'>rlvm</a>. rlvm is a Free Software reimplementation of the VisualArt’s KK’s RealLive interpreter. It is meant to provide Linux and Apple users with a compatible, portable interpreter to play VisualArts games, specifically those released by Key.</p>
<p>As this is the first publicly released version, there are bound to be bugs. The machine is missing major features. (See KNOWN ISSUES in README.TXT.) Right now, only Planetarian is playable through the end.</p>
<p>rlvm compiles on Ubuntu Gutsy Gibbon (and most likely any modern Linux distribution), Mac OSX 10.4 Tiger, and Mac OSX 10.5 Leopard.</p>
<h3><em>Old links removed</em></h3>VitaminSEE 0.7.1.22006-03-30T00:00:00-08:00http://eglaysher.github.com/2006/03/30/vitaminsee-0712<p>This build fixes a number of memory leaks in VitaminSEE, where memory wasn’t being freed when a window was closed, thus causing VitaminSEE to consume a large amount of memory over a long session.</p>
<p><a href='/Releases/VitaminSEE 0.7.1.2.dmg'>VitaminSEE v0.7.1.2 (Universal Binary)</a><br />
<a href='/Releases/VitaminSEE 0.7.1.2-Panther.dmg'>VitaminSEE v0.7.1.2 (for 10.3.x)</a><br />
<a href='/Releases/VitaminSEE 0.7.1.2 Source.tar.bz2'>VitaminSEE v0.7.1.2 Source</a></p><div id='comments'>
<h4 id='comment-header'>7 Comments</h4>
<ol class='commentlist'>
<li class='alt' id='comment-5'>
<p class='comment-metadata'><strong>Sergiu Partenie</strong> | 01-Apr-06 at 1:31 am | <a href='#comment-5' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Full screen interface.<br />
Very nice - but a Aperture-type gray pallete for the menus would look much better imho.</p>
<p>And another request - an option that will only display 64×64 thimbnails in the thumbnail pane - the default ones are too big for smaller (800×600) displays</p>
</li>
<li class='' id='comment-6'>
<p class='comment-metadata'><strong>Kerry</strong> | 18-Apr-06 at 5:04 am | <a href='#comment-6' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Tried it out. But wish I could have the option of displaying PDFs as thumbnails.</p>
</li>
<li class='alt' id='comment-20'>
<p class='comment-metadata'><strong><a href='http://www.debphoto.com' rel='external nofollow'>Deb</a></strong> | 01-May-06 at 9:15 am | <a href='#comment-20' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Love your application but how do I view my portrait (vertical) shots? They are rotated in the thumbnail and they are rotated images but VitaminSEE doesn’t recognize or display verticals in the viewer. Is there something I’m missing here? Thank you! Deb</p>
</li>
<li class='' id='comment-21'>
<p class='comment-metadata'><strong>glaysher</strong> | 02-May-06 at 4:47 am | <a href='#comment-21' title='Permalink to this comment' rel='permalink'>Permalink</a> | <a href='http://www.elliotglaysher.org/wp-admin/comment.php?action=editcomment&c=21' title='Edit comment'>Edit</a></p>
<p>Deb, this sounds like a bug. Could you please email me (one) of these images, so I can figure out what’s going on for the next version?</p>
</li>
<li class='alt' id='comment-91'>
<p class='comment-metadata'><strong>Matt</strong> | 01-Aug-06 at 1:14 am | <a href='#comment-91' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Hi, great software. One observation: there doesn’t seem to be any way to control the default window size: every time I open an image it defaults to a (relatively) small window, and the image shrunk to fit it. Even if I enlarge the window, the next time I launch VitaminSEE it’s small again.</p>
<p>I’d love to see 1) an option to “remember this window size” for future launches, and 2) an option for “view at Actual Size” by default, which is usually what I want (unless the image is larger than my screen).</p>
<p>Thanks!</p>
</li>
<li class='' id='comment-304'>
<p class='comment-metadata'><strong><a href='http://buddi.sourceforge.net' rel='external nofollow'>Wyatt</a></strong> | 24-Dec-06 at 8:12 pm | <a href='#comment-304' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Excellent program! It looks to be exactly what I was looking for - a graphical interface which allows tagging of images, before I run my archiving scripts on them. A couple of comments:</p>
<p>1) I notice the same problem as Deb: vertical images are not properly rotated. My camera includes the rotation information in the metadata. Most applications recognise this (Finder, Preview, iPhoto, etc) this and flip the photo accordingly, but VitaminSee does not seem to do so.</p>
<p>2) Keyword tagging only seems to work for .jpg; it does not seem to work for .raw (specifically, Olympus RAW: .orf), and .png. I don’t know if this is a limitation with the Exif2 library or the interface. This is not a huge problem, but it would be nice.</p>
<p>3) I can consistently crash the program by doing the following:<br />
a) Open preferences, and edit Keywords<br />
b) Click on a tag (to edit the name)<br />
c) Click on Remove</p>
<p>Regardless, this is a very nice program which does exactly what I need. Thank you very much!</p>
</li>
<li class='alt' id='comment-555'>
<p class='comment-metadata'><strong>Kado</strong> | 27-Mar-07 at 6:00 am | <a href='#comment-555' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Great: simple and efficient!</p>
<p>Do you (or someone else) work on VitaminSEE? Please tell me Yes ;-)</p>
</li>
</ol>
</div>Memory Usage2006-03-30T00:00:00-08:00http://eglaysher.github.com/2006/03/30/memory-usage<p>So, later tonight, I’ll be making a release of VitaminSEE that should fix most of the current memory leaks, so I can go off and make new ones for the next version.</p>
<p>But right now, I want to talk about the conditions under which VitaminSEE consumes ridiculous amounts of memory (which won’t be fixed in this release). You may have noticed that on folders with a large number of image files, VitaminSEE will consume really large amounts of memory.</p>
<p>For example, I have an “Unsorted” folder with 1,666 images in it. VitaminSEE starts from a resting memory position of 8 megabytes. After giving VitaminSEE a few moments to load all the thumbnails, Activity Monitor tells me that VitaminSEE is using 25 megs of real memory. Not optimal, but more then acceptable. After scrolling from the first file in the folder to the last file, VitaminSEE’s memory consumption jumps all the way up to 122 megabytes. Note that it already had the thumbnails in memory before the jump.</p>
<p>From what I can make out from MallocDebug, it appears that the implementation of either <tt>NSBrowser</tt> or <tt>NSMatrix</tt> in Cocoa render their contents into an <tt>NSImage</tt> offscreen, and then copy that cached version onto the screen.</p>
<p>Solving this will require me to do one of the two things:</p>
<ul>
<li>Find a magic way to tell whatever class is at fault to not cache things this way (Quick, unlikely)</li>
<li>Look at other controls and see if I can coerce them to do what I want to do.</li>
<li>Write my own control that doesn't do things this way. (Hard, would take a long time)</li>
</ul>VitaminSEE 0.7.1.2 Beta2006-03-28T00:00:00-08:00http://eglaysher.github.com/2006/03/28/vitaminsee-0712-beta<p>The entire 0.7 series of VitaminSEE has had a string of severe memory leaks. This build hopes to address most of them. It contains no new features; it is purely a bugfix build.</p>
<p>This is a beta build; the final version will be released in two days if no serious problems are found with it. Please leave a comment if you find a defect (that isn’t present in previous builds). Please do <b>NOT</b> submit this build to the release announcement sites.</p>
<h3><em>Old links removed.</em></h3>VitaminSEE 0.7.1.12006-03-22T00:00:00-08:00http://eglaysher.github.com/2006/03/22/vitaminsee-0711<p>VitaminSEE 0.7.1.1 is a bugfix release that fixes two issues with VitaminSEE 0.7.1:</p>
<ul>
<li>When I upgraded to IconFamily 0.9.1, I forgot to port my changes that would restore a file’s modification date. Fix this so building a thumbnail of a file does set the modification date.</li>
<li>Back/Forward will now focus on the file/folder you were on previously, instead of always starting at the beginning of the list.</li>
</ul><h3><em>Old links removed.</em></h3>VitaminSEE 0.7.12006-03-21T00:00:00-08:00http://eglaysher.github.com/2006/03/21/vitaminsee-071<p>I have just released VitaminSEE 0.7.1, after three betas and a lot of testing. The <a href='/vitaminsee'>product page</a> has been updated. As always, thanks go to B. Star for testing and <a href='http://www.fan.gr.jp/~sakai/'>Hiroto Sakai</a> for the updated translation.</p><h4>What's new:</h4><ul>
<li>Upgrade IconFamily to 0.9.1</li>
<li>Make rename sheet handle extensions like the Save... dialogs do</li>
<li>Add a fullscreen mode</li>
<li>Don't display document types that OSX treats as images, such as postscript
files, and PDFs.</li>
</ul><h3><em>Old links removed.</em></h3><div id='comments'>
<h4 id='comment-header'>3 Comments</h4>
<ol class='commentlist'>
<li class='alt' id='comment-2'>
<p class='comment-metadata'><strong><a href='http://hefixedmymac.com' rel='external nofollow'>Paul Russo</a></strong> | 21-Mar-06 at 8:41 pm | <a href='#comment-2' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Hi Elliot,</p>
<p>I’m sorry to give negative feedback about something that you have apparently given so much thought and work to, but here it is.</p>
<p>VitaminSEE 0.7.1 destroys data. </p>
<p>When VitaminSEE automatically creates the thumbnail, it also automatically changes the file modification date. This is a big problem, because the date when I last modified a picture is important data about that picture. </p>
<p>I knew this might happen, so right after I launched VitaminSEE I went straight to the preferences to turn the thumbnailing off. Of course, I was too slow. By then VitaminSEE had already started thumbnailing and changing the modification dates. Luckily I backed up yesterday. Others might not be so lucky.</p>
<p>This is a common problem in early versions of other thumbnailing programs. It’s not just you. </p>
<p>This didn’t have to happen. It is possible for VitaminSEE to change the modification date back to what it was originally after it creates the thumbnail. Resetting the modification date back to what it was originally is standard behavior in thumbnailing programs because of this issue.</p>
<p>Thanks for listening.</p>
<p>Paul</p>
</li>
<li class='' id='comment-3'>
<p class='comment-metadata'><strong>glaysher</strong> | 21-Mar-06 at 9:39 pm | <a href='#comment-3' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Actually, this is the second time I’ve fixed this bug. </p>
<p>VitaminSEE uses a third party library called IconFamily to do the thumbnailing. I had to fix it in the previous version IconFamily, and I completely forgot to port my changes up IconFamily 0.9.1 when I updated. I just submitted a patch upstream this time, so hopefully something like this won’t happen a third time.</p>
<p>In any case, could you please try the following build? I believe I’ve fixed the problem:</p>
<p><em>(Beta links removed, since 0.7.1.1 final is out.)</em></p>
<p>As for negative feedback? Don’t worry about it. Unlike quite a bit of criticism I get, yours was at least constructive.</p>
</li>
<li class='alt' id='comment-4'>
<p class='comment-metadata'><strong><a href='http://hefixedmymac.com' rel='external nofollow'>Paul Russo</a></strong> | 22-Mar-06 at 1:32 am | <a href='#comment-4' title='Permalink to this comment' rel='permalink'>Permalink</a></p>
<p>Hi Elliot,</p>
<p>VitaminSEE 0.7.1.1-beta.dmg does the trick. The date/time is now preserved when the thumbnails are added. </p>
<p>Thanks for the quick response :)</p>
<p>Paul</p>
</li>
</ol>
</div>Duplicate Image Algorithms2006-03-19T00:00:00-08:00http://eglaysher.github.com/2006/03/19/duplicate-image-algorithms<p>GQView was my favorite image viewer on Linux, and a high quality image duplicate finder is the only feature that VitaminSEE lacks that I miss from GQView. I’ve already started thinking beyond 0.7.2 to the big feature of 0.8: Duplicate image search, like in <a href='http://gqview.sourceforge.net/'>GQview</a>. I wasn’t sure what the algorithm in gqview was, so I finally stumbled upon <a href='http://www.cit.gu.edu.au/~anthony/info/graphics/image_comparing'>this</a> page which outlines a few image comparison implementations.</p>
<p>GQView looks like the simplest algorithm: It subdivides the image into a 32 x 32 grid, and then takes the average pixel color of each block. The difference is simply the sum of the difference between each block in the two images, normalized to a value between 0 and 1. The <a href='http://cvs.sourceforge.net/viewcvs.py/gqview/gqview/src/similar.c?rev=1.1&view=markup'>similar.c</a> code in GQView is really that simple. I’m surprised that I got such good results back when I used it. Unless I find something better, I’m guessing that this is going to be the base algorithm, after I figure out how GQView scales with it to deal with hundreds (thousands?) of files.</p>
<p>And after 0.7.2 is released, of course.</p>Mission Statement2006-03-11T00:00:00-08:00http://eglaysher.github.com/2006/03/11/mission-statement<p>I’ve broken down and started a real website. My previous “website” was a ten minute job that I created as an afterthought to comply with the one rule of the UM Cocoa Codeoff ‘05 that stated that I had to have a website.</p>
<p>This is going to be different. This website is going to be functional, usable, and something I’ll be proud to associate my name with.</p>
<p>This domain will be used for/will contain:</p><ul>
<li>Random thoughts on programming</li>
<li>Hosting of the VitaminSEE page, its <a href='http://subversion.tigris.org/'>Subversion</a> repository, and the Trac that does wiki and bug management.</li>
<li>Random life things</li>
<li>Everything else I think of</li>
</ul>