<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Outshine</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/" />
   <link rel="self" type="application/atom+xml" href="http://www.outshine.com/atom.xml" />
   <id>tag:www.outshine.com,2008://1</id>
   <updated>2008-07-02T13:21:02Z</updated>
   
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.34</generator>

<entry>
   <title>Diablo: new saved game, druid</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/07/diablo-druid.php" />
   <id>tag:www.outshine.com,2008://1.119</id>
   
   <published>2008-07-02T13:21:02Z</published>
   <updated>2008-07-02T13:21:02Z</updated>
   
   <summary><![CDATA[I was excited about the new Diablo 3, and I found myself playing a round of Diablo 2 for nostalgia's sake.&nbsp; I played a druid, got him up to level 9 and finished the &quot;find Cain&quot; quest.&nbsp; Importantly, I never...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="49" label="diablo" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="50" label="games" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="86" label="gaming" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="38" label="nontech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>I was excited about the new <a href="http://www.blizzard.com/diablo3/">Diablo 3</a>, and I found myself playing a round of Diablo 2 for nostalgia's sake.&nbsp; I played a druid, got him up to level 9 and finished the &quot;find Cain&quot; quest.&nbsp; Importantly, <em>I never allocated any skill points.</em>&nbsp; Would you like to load him up and allocate the skill points as you wish?&nbsp; Feel free.&nbsp; His name is Mogrin, and he's available for download on my <a href="/saved-games/diablo-2/">Diablo 2 saved games</a> page.</p>]]>
      
   </content>
</entry>

<entry>
   <title>Open Source forum software that isn&apos;t phpBB?</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/open-source-forum-software.php" />
   <id>tag:www.outshine.com,2008://1.118</id>
   
   <published>2008-06-27T06:21:50Z</published>
   <updated>2008-06-27T06:22:08Z</updated>
   
   <summary><![CDATA[So while I was working on getting back into phpBB development and updating all my mods to phpBB 3, I got a few doors shut in my face.&nbsp; I was always a phpBB outsider, never submitting my mods to the...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="5" label="phpbb" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>So while I was working on getting back into phpBB development and updating all my mods to phpBB 3, I got a few doors shut in my face.&nbsp; I was always a phpBB outsider, never submitting my mods to the official database.&nbsp; However, I never felt closed out, until now.</p>
<p>So I've posted a story on Slashdot that hasn't hit the front page yet, and I could use your help getting it there.&nbsp; The story should open up discussion of the best Open Source alternatives to phpBB.&nbsp; Is it Phorum?&nbsp; Is it FluxBB?&nbsp; Is it something else?</p>
<p>Please, log into Slashdot and then <a href="http://slashdot.org/firehose.pl?op=view&amp;id=742877">view my story</a>.&nbsp; There is a +/- graphic embedded in the title, and if you hit that &quot;+&quot; icon you'll give my story a boost.&nbsp; I'd really appreciate opening a dialogue with all of Slashdot.&nbsp; It may give me insight into products I don't even know about yet.&nbsp; Thanks!</p>]]>
      
   </content>
</entry>

<entry>
   <title>The Blog Mod, version 1.0 (finally!)</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/the-blog-mod-version-1.php" />
   <id>tag:www.outshine.com,2008://1.117</id>
   
   <published>2008-06-23T14:26:43Z</published>
   <updated>2008-06-23T14:26:59Z</updated>
   
   <summary><![CDATA[I can't believe I did this.&nbsp; I have revised The Blog Mod for phpBB 2.&nbsp; It includes multiple bugfixes, new icons, and more.&nbsp; I gave it a big version number increase, up to 1.0.0.&nbsp; That's mostly due to the transfer...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="80" label="blogging" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="83" label="hardworking" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="81" label="hyperion" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="5" label="phpbb" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="61" label="the blog mod" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="85" label="theblogmod.com" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="82" label="willow" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>I can't believe I did this.&nbsp; I have revised The Blog Mod for phpBB 2.&nbsp; It includes multiple bugfixes, new icons, and more.&nbsp; I gave it a big version number increase, up to 1.0.0.&nbsp; That's mostly due to the transfer of ownership, not because of some big overhaul of the code (although lots of bugfixes is nothing to sneeze at).&nbsp; So, it only took six years to get to version 1!</p>
<p>I don't know why I revised it, as it is not for the new phpBB 3.&nbsp; But I don't care.&nbsp; It was fun.&nbsp; If you still use the phpBB 2 system, now is your chance to get a nice stable blogging system in place for your members.&nbsp; <a href="/software/the-blog-mod/">Check it out</a>.</p>]]>
      
   </content>
</entry>

<entry>
   <title>World Ambassador, Matt Harding</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/world-ambassador-matt-harding.php" />
   <id>tag:www.outshine.com,2008://1.116</id>
   
   <published>2008-06-23T05:31:00Z</published>
   <updated>2008-06-23T05:32:26Z</updated>
   
   <summary>Thanks Matt, for helping to chip away at the cynicism I feel toward the world. I&apos;ll offer a translation of the song&apos;s lyrics below the video....</summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="38" label="nontech" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="79" label="where the hell is matt" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>Thanks Matt, for helping to chip away at the cynicism I feel toward the world.</p>
<p>I'll offer a translation of the song's lyrics below the video.</p>
<p><object width="425" height="344">
<param value="http://www.youtube.com/v/zlfKdbWwruY&amp;hl=en&amp;fmt=18" name="movie" /><embed width="425" height="344" type="application/x-shockwave-flash" src="http://www.youtube.com/v/zlfKdbWwruY&amp;hl=en&amp;fmt=18"></embed></object></p>]]>
      <![CDATA[<p><em><font size="4">Stream of Life</font></em><br />
from Gitanjali, by Rabindranath Tagore<br />
<br />
<br />
The same stream of life that runs through my veins night and day<br />
runs through the world and dances in rhythmic measures.<br />
<br />
It is the same life that shoots in joy through the dust of the earth<br />
in numberless blades of grass<br />
and breaks into tumultuous waves of leaves and flowers.<br />
<br />
It is the same life that is rocked in the ocean-cradle of birth<br />
and of death, in ebb and in flow.<br />
<br />
I feel my limbs are made glorious by the touch of this world of life.<br />
<br />
And my pride is from the life-throb of ages dancing in my blood this moment.</p>]]>
   </content>
</entry>

<entry>
   <title>My son, the enigma</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/my-son-the-enigma.php" />
   <id>tag:www.outshine.com,2008://1.114</id>
   
   <published>2008-06-20T06:35:35Z</published>
   <updated>2008-06-20T06:36:23Z</updated>
   
   <summary><![CDATA[About a year ago, we started giving the kids chores.&nbsp; They were constantly complaining that they didn't have any money, and we were constantly unhappy with the state of our house, so we gave 'em lists of housework to do.&nbsp;...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>About a year ago, we started giving the kids chores.&nbsp; They were constantly complaining that they didn't have any money, and we were constantly unhappy with the state of our house, so we gave 'em lists of housework to do.&nbsp; My daughter took to it okay.&nbsp; She balked at some jobs which she felt were pretty gruesome and deserved more pay.&nbsp; But overall, she liked earning money and did most jobs.&nbsp; For my son, if it was family cleanup day he'd pitch in.&nbsp; But if mom &amp; dad were busy and he was left with a choice to play a video game or earn money cleaning the house, he'd play a video game.&nbsp; Money didn't motivate him at all.</p>
<p>For the most part, we let that stand.&nbsp; If he didn't want to earn money, he could miss out and that was fine.&nbsp; However, there were some things on the list that were not optional, such as keeping their rooms clean.&nbsp; When the rooms didn't get clean, I attached what I thought was a pretty serious consequence -- any toy not in its proper place gets thrown out.&nbsp; Again, for my daughter, this was fairly effective.&nbsp; Her room got mostly clean, and usually stayed that way.&nbsp; But for my son, this was a wonderful negotiation.&nbsp; &quot;If I don't clean up, you throw these things away?&quot;</p>
<p>I nodded somberly, &quot;Yep.&quot;</p>
<p>&quot;Okay,&quot; he replied.&nbsp; And then he left his room a complete mess and went outside to play with the neighborhood kids instead.&nbsp; Of course, I called his bluff.&nbsp; I put a ton of his toys in a garbage bag.&nbsp; Only it turns out he wasn't bluffing.&nbsp; He saw the bag and shrugged it off.&nbsp; It was almost as if this was a cost vs. benefit calculation for him -- the cost of a free afternoon was giving up some toys?&nbsp; Yeah, worth it.&nbsp; Done.&nbsp; As a bonus, he got me to clean his room for him.</p>
<p>I did not see that one coming.</p>]]>
      
   </content>
</entry>

<entry>
   <title>I&apos;m Voting Republican!</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/im-voting-republican.php" />
   <id>tag:www.outshine.com,2008://1.113</id>
   
   <published>2008-06-11T10:32:44Z</published>
   <updated>2008-06-11T10:33:00Z</updated>
   
   <summary></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="38" label="nontech" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="31" label="politics" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="77" label="video" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/FiQJ9Xp0xxU&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/FiQJ9Xp0xxU&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="344"></embed></object>]]>
      
   </content>
</entry>

<entry>
   <title>Tony&apos;s Friendly Table Sorter</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/tonys-friendly-table-sorter.php" />
   <id>tag:www.outshine.com,2008://1.111</id>
   
   <published>2008-06-04T10:26:50Z</published>
   <updated>2008-06-09T09:42:48Z</updated>
   
   <summary><![CDATA[ This is &ndash; I think &ndash; my first cup of awesomesauce, ever.&nbsp; This code is beautiful.&nbsp; I've had a lot of Open Source projects, yes.&nbsp; But they were all done fast &ndash; in a weekend, when I could cram...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="76" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<script src="/scripts/friendly_table_sorter_min.js" type="text/javascript"></script>
<p>This is &ndash; I think &ndash; my first cup of awesomesauce, ever.&nbsp; This code is beautiful.&nbsp; I've had a lot of Open Source projects, yes.&nbsp; But they were all done fast &ndash; in a weekend, when I could cram it in.&nbsp; But this baby?&nbsp; She's all curves.&nbsp; Try clicking these table headers:</p>
<table class="balance sortable" id="sortabletable">
    <tbody>
        <tr>
            <th>Title</th>
            <th class="sortAlpha">Version</th>
            <th>Publisher</th>
            <th>Money</th>
            <th>Created</th>
        </tr>
        <tr>
            <td>Geeema</td>
            <td>1.0.1</td>
            <td>goop#5</td>
            <td>$5</td>
            <td>27 Feb 2008</td>
        </tr>
        <tr>
            <td>Hello World!</td>
            <td>1.0</td>
            <td>tisad</td>
            <td>$5,000</td>
            <td>21 Apr 2008</td>
        </tr>
        <tr>
            <td>when?</td>
            <td>1.0.3</td>
            <td>illinois</td>
            <td>$5000.01</td>
            <td>20 Feb 2008</td>
        </tr>
        <tr>
            <td>en-us</td>
            <td>1.0.1</td>
            <td>#du</td>
            <td>$500.00</td>
            <td>10 Apr 2008</td>
        </tr>
    </tbody>
</table>
<p style="margin-top: 1em;">Yeah.  Want a cup?  It's yours, for free.</p>]]>
      <![CDATA[<h2>The story</h2>
<p>I needed some quick table sorting code that didn't rely on an SQL backend.&nbsp; I found some promising Javascript code, but it was pretty broken.&nbsp; It seemed like it could be repaired, and this is the result.</p>
<h2>The players</h2>
<p>The script that I latched onto was <a href="http://www.joostdevalk.nl/code/sortable-table/">created by Joost de Valk</a>.&nbsp; His script is based upon <em>another script</em>, <a href="http://www.kryogenix.org/code/browser/sorttable/">created by Stuart Langridge</a>.&nbsp; Because Stuart put his script out under an MIT license, Joost could expand Stuart's work, and I am able to expand Joost's work.&nbsp; Thanks to Stuart for having the foresight to use the MIT license.</p>
<h2>The features</h2>
<p>This script contains all of the features of Joost's version (alternating colors for table rows, smart sorting based upon what it thinks the data is) along with the following improvements:</p>
<ol>
    <li>Doesn't accidentally use the table header to try to determine the sort type.</li>
    <li>Space is allowed as separator between date fields.</li>
    <li>Created a &quot;sort type override&quot; feature.</li>
    <li>Replaced broken arrow images with arrow glyph from standard font.</li>
    <li>Refactored into a namespace so that there are no name collisions.</li>
    <li>Better handling of US vs. non-US number formats.</li>
    <li>Better handling of currency.</li>
    <li>Faster trim function (imperceptible).</li>
    <li>Cleaner sorting code (not faster, just neater).</li>
    <li>Consistent naming convention for functions/methods.</li>
    <li>Very clear comments to walk you through the code.</li>
</ol>
<h3>The new &quot;Sort type override&quot; feature</h3>
<p>The sorting system can (rarely) make an incorrect guess as to how to sort a column.&nbsp; For example, version numbers are usually sorted as numbers.&nbsp; However, they are not actually numbers.&nbsp; They have multiple decimal points, which is not possible in a real number.&nbsp; Thus, you can see the sorting go wrong sometimes, and you need to override it.&nbsp; To do this, see the &quot;how-to&quot; section below.</p>
<h2>The Script</h2>
<p>This is version 1.0, release June 4th, 2008.&nbsp; It is available in a developer-friendly <a href="/code/friendly_table_sorter.js.txt">heavily commented version</a> (14k), as well as a quick-downloading <a href="/code/friendly_table_sorter_min.js.txt">minimized version</a> (7k).</p>
<h2>The how-to</h2>
<p>To get it working, download the minimized version, save it as a .js file (not .txt) onto your server, and then include this line in your HTML header:</p>
<p><code>&lt;script src=&quot;friendly_table_sorter_min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</code></p>
<p>You're not quite done.&nbsp; You also need to flag each table that you'd like to be sorted.&nbsp; You do this by adding the class &quot;sortable&quot; to the table(s).&nbsp; Like this:</p>
<p><code>&lt;table class=&quot;sortable&quot;&gt;</code></p>
<p>That's typically enough to get things working.&nbsp; But there is an optional step.&nbsp; If you need to override the way it sorts a particular column, you can add a class to your table header (the TH tag).&nbsp; It can be sortAlpha, sortNumeric, or sortDate.&nbsp; Like this:</p>
<p><code>&lt;th class=&quot;sortDate&quot;&gt;</code></p>
<h2>The License</h2>
<p>My script is under an <a href="http://www.kryogenix.org/code/browser/licence.html">MIT license</a>, just like Stuart's &amp; Joost's scripts.&nbsp; If you extend my script and release your version, you cannot remove the copyright, nor can you remove our names from the script.&nbsp; But you CAN use this script for your own personal site or even for a company.&nbsp; Just keep the copyright &amp; link to the license intact.</p>]]>
   </content>
</entry>

<entry>
   <title>How to tell if a Bondi iMac is Rev. A or Rev. B</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/06/how-to-differentiate-bondi-imacs.php" />
   <id>tag:www.outshine.com,2008://1.110</id>
   
   <published>2008-06-02T09:37:35Z</published>
   <updated>2008-06-04T10:45:46Z</updated>
   
   <summary><![CDATA[I was given an iMac recently, and decided to burn a little cash on upgrading it.&nbsp; However, I had a problem.&nbsp; I knew I had a Bondi iMac, but I couldn't tell if it was revision A or B.&nbsp; They're...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="75" label="apple" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="74" label="imac" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p><img vspace="3" hspace="3" align="left" src="/images/bondi_imac.jpg" alt="Image of Bondi iMac, courtesy of Apple Computer, Inc." />I was given an iMac recently, and decided to burn a little cash on upgrading it.&nbsp; However, I had a problem.&nbsp; I knew I had a Bondi iMac, but I couldn't tell if it was revision A or B.&nbsp; They're both teal, they have the same form factor, and there are no visible markings to differentiate them.</p>
<p>It does make a difference when upgrading.&nbsp; For example, the revision A iMac can only use up to 384 megs of RAM, while the revision B iMac can take 512 megs of RAM.</p>
<p>It has been nine years since the original iMac arrived on the scene, so my assumption was that this is a solved problem.&nbsp; I'd hop online, search for a hint, and discover an easy way to tell the difference between them.&nbsp; But no, it's not solved.&nbsp; However, it turns out that it can be solved, pretty easily.</p>]]>
      <![CDATA[<h2>The Hard Way</h2>
<p>There are Web pages that discuss this issue.&nbsp; Apple's official page, &quot;<a href="http://docs.info.apple.com/article.html?artnum=58669">iMac: How to differentiate between models</a>,&quot; mentions some <em>characteristics</em> of each model, but fails to tell you how to <em>find </em>those things on your computer.&nbsp; For example, it mentions that revision A uses a Rage IIC video chip, while revision B uses a Rage Pro video chip.&nbsp; Umm... does that mean I have to disassemble the computer to inspect the video chip on the motherboard?&nbsp; If so, I'm not interested, and you probably aren't interested either.&nbsp; Another site suggests <a href="http://lowendmac.com/macdan/05/0202.html">looking at the part number</a>, but I couldn't find that number anywhere on my iMac, and they don't give you hints.</p>
<h2><img vspace="2" hspace="1" align="right" src="/images/bondi_fcc_sticker.jpg" alt="photo of the FCC sticker" />The Easy Way</h2>
<p>With some work I boiled all the reading I did down to two simple, obvious ways to tell if you have a revision A or B iMac.&nbsp; Here's the first way: flip it over and examine the FCC sticker.&nbsp; If you see the text &quot;Rage Pro/6MB&quot; then you have a Rev. B Bondi iMac.</p>
<p>The second way is probably more useful if you're reading this with your iMac right now and don't want to flip it.&nbsp; Using OS 8 or 9, select the Apple menu in the upper left corner of your iMac's screen.&nbsp; Then select &quot;Apple System Profiler.&quot;&nbsp; In the window that appears, select the &quot;Devices and Volumes&quot; tab.&nbsp; Down near the bottom of the window will be the PCI device listing &ndash; in particular, &quot;Slot $ATI.&quot;&nbsp; Click the little disclosure triangle to show the details of the display card.&nbsp; If the card name is &quot;ATY,RagePro_C&quot; then you have a Revision B Bondi iMac.&nbsp; If the card name is &quot;ATY,RageIIC_C&quot; then you have a Revision A.&nbsp; If you see something else, then you probably don't even have a Bondi iMac.&nbsp; You might have a blueberry iMac, which is a later and better model.&nbsp; Lucky you.</p>
<p>&nbsp;</p>
<hr width="100%" size="1" />
<p style="font-size: small;">Bondi iMac photo by Terry Hefferman.&nbsp; Courtesy of Apple Computer, Inc.</p>]]>
   </content>
</entry>

<entry>
   <title>Dungeons &amp; Dragons: 4th edition review</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/05/dungeons-dragons-4th-edition-review.php" />
   <id>tag:www.outshine.com,2008://1.109</id>
   
   <published>2008-05-31T02:08:36Z</published>
   <updated>2008-06-04T10:45:46Z</updated>
   
   <summary><![CDATA[Over at Enworld, I posted a quick review of the 4th edition D&amp;D Player's Handbook.&nbsp; I wanted to put that here, as my &quot;stake in the ground&quot; about my feeling regarding 4th edition Dungeons and Dragons.&nbsp; Here's my review. The...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="73" label="d&amp;d" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="71" label="dungeons and dragons" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="38" label="nontech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>Over at Enworld, I posted a quick review of the 4th edition D&amp;D Player's Handbook.&nbsp; I wanted to put that here, as my &quot;stake in the ground&quot; about my feeling regarding 4th edition Dungeons and Dragons.&nbsp; Here's my review.</p>
<p>The Player's Handbook is much better organized than the 3.5 edition book.&nbsp; Everything makes sense.&nbsp; Gameplay is better (as in, I can see how you could hustle it along with fewer pauses to consult the rules).&nbsp; Having said that, wizards, warlocks, and even clerics are booooooorrrring. Fewer spells, and at least for clerics, their role as healer is much less interesting considering that everyone has healing surges (and yes, I did read that a cleric can trigger healing surges even after the other players hit their cap &ndash; I'm not suggesting that clerics are useless, merely that they no longer feel as special or interesting as before).</p>]]>
      <![CDATA[<p>Now, playing a 4th edition elven ranger... <em>that</em> sounds interesting.&nbsp; The class gets many combat &amp; movement abilities.&nbsp; Or maybe even an eladrin ranger, so you get teleportation abilities (at first level!) so you can hop all over the battlefield and wreak havoc.&nbsp; The stat bonuses for eladrin &amp; ranger don't quite align, so it's not an optimal build, but it is interesting.<br />
<br />
In fact, most warrior classes are awesome, with tons of abilities that rival the spells of spellcasters (I don't mean to imply that a fighter does magical stuff, but his martial attacks vary widely and have many different combat effects).&nbsp; I wouldn't be surprised to see groups consisting of 1 paladin, 1 ranger, 1 cleric, and 1 rogue as the norm now.<br />
<br />
Overall, I can tell that playing D&amp;D 4th edition will do just what WotC hoped &ndash; keep gameplay moving (although you're still juggling a hell of a lot of stuff, some of it newly added).&nbsp; I think it also accomplishes some of the other criticisms that have been lobbed at it &ndash; it does appear to cater to newbies, and it does appear to be modeled after computer games like WoW.&nbsp; Some 4th edition apologists might chafe against such accusations, although I suspect the authors of the 4th edition will think, &quot;Exactly what we wanted, tell your friends!&quot;&nbsp; Whatever the case, that's the impression I get when I read things like &quot;The roles embodied by the [characters] are controller, defender, leader, and striker.&quot;<br />
<br />
I find such breakdowns to be uninteresting and too MMORPG-ish.&nbsp; Oh well.<br />
<br />
In comparing with 3.5 edition, well, I have to say that playing a cleric or sorcerer in 3.5 with the Spell Compendium or PHB 2 still seems to have a near-magnetic pull on me. I can admire 4th edition as having done what was needed, and I can praise it as being &quot;better than my terribly low expectations.&quot;&nbsp; I can't call it compelling, though.&nbsp; I'll buy it, but mostly because it's good enough that people will use it and I'll want to join those games.&nbsp; Contrast that with D&amp;D 3.5 &ndash; I was so hung up on creating great builds (or finding a new nuance of a character or trying a new spell) that I seriously would have bought &amp; played the game even if I was the only person on earth doing it.&nbsp; In fact, I did do a few solo adventures and &quot;what if&quot; character builds simply because 3.5 was so interesting to me.<br />
<br />
4th edition is &quot;good.&quot; 3.5 edition is &quot;flawed but damn interesting.&quot;<br />
<br />
Just my opinion.</p>]]>
   </content>
</entry>

<entry>
   <title>How to do photos for a MemoryFrame (model MF-8000)</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/05/tips-for-a-memoryframe.php" />
   <id>tag:www.outshine.com,2008://1.108</id>
   
   <published>2008-05-28T11:18:21Z</published>
   <updated>2008-06-04T10:45:46Z</updated>
   
   <summary><![CDATA[This blog entry really isn't for most of the world.&nbsp; But I have some family members that have started uploading digital photos to&nbsp;a MemoryFrame, and so I'd like to outline some tips. 1. The MemoryFrame skews yellow and bright The...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="69" label="Digital Spectrum" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="67" label="memoryframe" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>This blog entry really isn't for most of the world.&nbsp; But I have some family members that have started uploading digital photos to&nbsp;a MemoryFrame, and so I'd like to outline some tips.</p>
<h2>1. The MemoryFrame skews yellow and bright</h2>
<p>The MemoryFrame doesn't have color fidelity on par with a typical computer monitor.&nbsp; I've had two copies of the MF-8000, and both&nbsp;tend to add a touch of yellow.&nbsp; Check it out:</p>
<p><img alt="shot 1 of MemoryFrame image versus laptop display of same image" src="/images/memoryframe_8000_comparison1.jpg" /></p>]]>
      <![CDATA[<p>You might look at that and think, &quot;It's just washed out.&quot;&nbsp; And it is.&nbsp; But also look at the yellow in the shirt on the right (kinda orangey) and then compare that with the left (pure yellow).&nbsp; Look at the apples in the bucket.&nbsp; On the left they're very pale green, on the right they're a little more true green.</p>
<p>And yes, I know I caught the MemoryFrame right in a transition to another photo, so there's a photo embedded in the main photo.&nbsp; Sorry.&nbsp; And yes, I know that my computer's blue&nbsp;taskbar is on&nbsp;the left side of the screen.&nbsp; I like it that way.</p>
<p>Let's look at another example, shall we?</p>
<p><img alt="second photo comparing MemoryFrame to laptop screen" src="/images/memoryframe_8000_comparison2.jpg" /></p>
<p>There are 3 things to notice in the photos.&nbsp; First, on the left there is bright yellow in his hair.&nbsp; On the right, it's hard to see.&nbsp; That's the MemoryFrame skewing toward yellow again.&nbsp; You can also see it in the shadow behind his hair &ndash; the MemoryFrame shows a yellowish shadow, while the computer laptop shows a redder, darker shadow.&nbsp; Finally, look at the face &ndash; very washed out.&nbsp; The washing out actually isn't that awful when you see it live.&nbsp; The brightness was obviously increased to help the MemoryFrame look vivid during bright daylight.</p>
<h3>So what can you do about the mis-coloring?</h3>
<p>Simple answer: don't worry about it.&nbsp; It's better to upload photos that are imperfect than to sit around obsessing and failing to get things done.&nbsp; However, if you're a geek or artist who can manage to bang out some good quick changes, I'll walk you through an easy one.&nbsp; What you want to do is to lower the saturation of yellow, and raise the saturation of red.&nbsp; Your photography program will probably do it differently from mine, but at least&nbsp;I can give you a screenshot to point you in the right direction:</p>
<p><img alt="screenshot of the Hue/Saturation/Lightness dialog box in Corel Photo-Paint" src="/images/memoryframe_8000_recoloring.jpg" /></p>
<p>In Corel Photo-Paint, I went to the &quot;Image&quot; menu, selected &quot;Adjust&quot; and then clicked the &quot;Hue/Saturation/Lightness&quot; option.&nbsp; In the window that popped up (as pictured) I clicked the yellow channel and set the saturation to -20.&nbsp; I also clicked the red and set it to +20.&nbsp; In doing this, I ended up with a photo that looks slightly &quot;warm&quot; on my laptop (a bit red).&nbsp; That kind of photo ends up looking pretty close to normal on a MemoryFrame.</p>
<p>If you're a real geek or artist, drop the white level by 5% and lower the brightness by 5%.&nbsp; I won't bother to go into how to do that.&nbsp; It's getting nit-picky.&nbsp; But if you can do it, your photos will be slightly more accurate than everyone else's.</p>
<h2>2. 800x600 is king</h2>
<p>The MemoryFrame has a resolution of 800 pixels wide and 600 pixels tall.&nbsp; You can upload any size photo, and the MemoryFrame will resize it for you.&nbsp; However, bigger photos take up a lot of room in memory (the computer chips that store the information).&nbsp; These days, most digital cameras take photos that are very very detailed &ndash; 6000 pixels wide by 4000 pixels tall, or more.&nbsp; Uploading images like that not only takes a long while (because there is so much data to transfer) but it also uses up lots of room on the MemoryFrame's storage.&nbsp; So to conserve space, and since the frame cannot display better than 800x600 anyway, make a copy of your high-quality original file, and then resize&nbsp;that before uploading.</p>
<h2>3. Small faces pixellate</h2>
<p>If you have a photo of&nbsp;some people posing together, your temptation might be to stay zoomed out to get the whole shot, maybe even with establishing features such as houses in the background or whatever.&nbsp; While that's OK with shots of a landscape, don't do this with photos of people.&nbsp; Come in close.&nbsp; You don't have to be so up-close that everyone feels claustrophobic when they look at the photo, but you should be willing to crop out some of the background to zoom in on the subjects.</p>
<p>To be technical, I've found that if the head(s) in your photo are smaller than 85 pixels tall, the faces visibly lose detail, eyes become indistinct, expressions&nbsp;lose some of their personality,&nbsp;etc.&nbsp; A face of 120 pixels or taller seems to be very nice.</p>
<h2>Conclusion</h2>
<p>Remember, as you're doing this if you start to feel that adjusting the photos is too time-consuming, stop worrying and get the photos posted.&nbsp; If you've heard the saying, &quot;Don't let the perfect be the enemy of the good,&quot; then you should know that it applies here.&nbsp; Don't bother with color correction if it's troublesome.&nbsp; Don't worry about the size of the faces.&nbsp; The only real, tangible issue to worry about is the file size.&nbsp; One huge photo from a powerful digital camera will take the space of 50 appropriately-sized photos.&nbsp; So pay attention to item #2 and get started!</p>]]>
   </content>
</entry>

<entry>
   <title>Movable Type Plugin: MTAgain</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/05/movable-type-plugin-mtagain.php" />
   <id>tag:www.outshine.com,2008://1.107</id>
   
   <published>2008-05-17T21:26:39Z</published>
   <updated>2008-06-04T10:45:46Z</updated>
   
   <summary><![CDATA[What is MTAgain?&nbsp; Why do we need it? MTAgain provides looping to Movable Type.&nbsp; For example, say you want to list not only the previous blog entry, but the one before that and the one before that.&nbsp; MTAgain lets you...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="22" label="movable type" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>What is MTAgain?&nbsp; Why do we need it?</p>
<p>MTAgain provides looping to Movable Type.&nbsp; For example, say you want to list not only the previous blog entry, but the one before that and the one before that.&nbsp; MTAgain lets you do that.&nbsp; Essentially, what it can do is put a tag like MTEntryPrevious inside itself, and it can do that thousands of times if you're crazy enough to try it.</p>
<p>The MTAgain plugin for Movable Type is not my own creation.&nbsp; Someone named Lummox JR wrote it years ago, and then disappeared.&nbsp; In fact, I couldn't find his original plugin anywhere &ndash; even the Web Archive didn't have copies of his long-gone Web site!</p>
<p>What I did find was an article that mentioned the plugin and, when readers complained that the plugin didn't exist anymore, offered the code.&nbsp; However, they never offered an instruction manual.&nbsp; With the author's site gone and the manual missing, I had to do some sleuthing.&nbsp; In particular, I couldn't really guess what the &quot;any&quot; feature did.&nbsp; But I found <a href="http://forums.sixapart.com/index.php?showtopic=23599&amp;st=32">an old forum post</a>, learned the code, revised and expanded it, and now I offer it to you with a useful new feature.</p>]]>
      <![CDATA[<p>If you just want to just skip the tutorial here, you can go ahead and download <a href="/software/movable-type-plugins/again_1.2.zip">MTAgain 1.2 for Movable Type</a> now.&nbsp; But if you want a quick overview of what this thing can do, read on.</p>
<p>The MTAgain plugin has been updated for Movable Type 3.x.&nbsp; It probably runs in 4.x but I wouldn't know.&nbsp; I revised it so that when you install it, it appears on the plugin page.&nbsp; And I gave it a new tag.&nbsp; Here is a review of what each tag offers:</p>
<h2>&lt;MTAgain limit=&quot;100&quot;&gt;</h2>
<p>This a container tag that you wrap around the code you want to repeat.&nbsp; The limit attribute is optional, but I suggest you include it.&nbsp; The old MTAgain plugin had a hard-coded limit of 50, so it was impossible to lock up a server with endless looping.&nbsp; That's great for safety, but it also makes it impossible to loop through thousands of blog entries.&nbsp; Since I wanted to do exactly that, <em>this</em> version of MTAgain has a limit of 1000.&nbsp;  If you don't need it looping that deeply, you should set a limit.</p>
<h2>&lt;MTAgainHere&gt;</h2>
<p>This a token that you place in the spot where you want the code to repeat.&nbsp; This needs to be inside the MTAgain tags.&nbsp; This is a difficult concept for some.&nbsp; You are putting the code inside of itself.&nbsp; But it isn't that hard.&nbsp; Consider this code:</p>
<blockquote>&lt;MTAgain limit=&quot;3&quot;&gt;<br />
&lt;MTEntryPrevious&gt;&lt;$MTEntryTitle$&gt;<strong>&lt;MTAgainHere&gt;</strong>&lt;/MTEntryPrevious&gt;<br />
&lt;/MTAgain&gt;</blockquote>
<p>You've put the MTEntryPrevious tags inside the MTAgain tags, so the MTEntryPrevious tags are going to repeat. Where will they repeat? Where the MTAgainHere tag is &ndash; <em>inside</em> the MTEntryPrevious tag.  This means it shows the name of the previous entry, then shows the name of the entry previous to <em>that</em> and so on.  See?</p>
<h2>&lt;MTAgainStop any=&quot;1&quot;&gt;</h2>
<p>This is a container tag that you wrap around the code you want to appear when the loop ends.&nbsp; The &quot;any&quot; attribute is optional.&nbsp; Since there are two ways to end the loop, the any attribute determines which ending it responds to.&nbsp; The first way a loop can end is that it peters out, never hitting your hard limit.&nbsp; For example, if you limit the loop to running 5 times but there are only 3 items to loop through, you never hit the hard limit of 5.&nbsp; In such a case, &lt;MTAgainStop any=&quot;1&quot;&gt; will display your &quot;it petered out&quot; markup.&nbsp; However, if you need to display something when the hard limit IS reached, then you want a plain &lt;MTAgainStop&gt;.&nbsp; That will <em>not</em> run if it peters out, but it will run if the hard limit is reached and the loop is forced to stop.</p>
<h2>&lt;MTAgainBreak&gt;</h2>
<p>This a new token tag that I've added.&nbsp; It's not a wrapper.&nbsp; You just place it somewhere and it kills the loop, even if the limit hasn't been reached.&nbsp; Used with normal MT tags it almost doesn't make sense &ndash; wherever you put it, it'll kill the looping immediately, so what's the point?&nbsp; Well, if you're using conditional tags, it gets much more interesting.&nbsp; Consider what happens when you couple this with the &lt;MTIfEqual&gt; tag from the <a href="http://www.staggernation.com/mtplugins/Compare/">Compare plugin</a>:</p>
<blockquote>&lt;MTAgain&gt;<br />
&lt;MTEntryPrevious&gt;<br />
&lt;MTEntryTags&gt;<br />
<strong>&lt;MTIfEqual a=&quot;[MTTagName]&quot; b=&quot;rocknroll&quot;&gt;</strong><br />
&lt;a href=&quot;&lt;$MTEntryPermalink$&gt;&quot;&gt;&lt;$MTEntryTitle$&gt;&lt;/a&gt;<strong>&lt;MTAgainBreak&gt;</strong><br />
&lt;/MTIfEqual&gt;<br />
&lt;/MTEntryTags&gt;<br />
&lt;MTAgainHere&gt;<br />
&lt;/MTEntryPrevious&gt;<br />
&lt;/MTAgain&gt;</blockquote>
<p>What does that do?&nbsp; To start, it keeps going backwards through previous entries &ndash; that's what MTAgain &amp; MTAgainHere gets you.&nbsp; But notice the MTIfEqual tag &ndash; it's watching for a specific tagged entry.&nbsp; When it finds it, it prints out a link, followed by MTAgainBreak, which ends the loop.&nbsp; Thus, you can have a link to the &quot;previous entry tagged as rocknroll.&quot;&nbsp; I'm sure you'll think up cooler applications.</p>
<p>Ready?&nbsp; Download <a href="/software/movable-type-plugins/again_1.2.zip">MTAgain 1.2 for Movable Type 3.x</a>.&nbsp; Have fun!</p>]]>
   </content>
</entry>

<entry>
   <title>Movable Type plugin: Gravatars</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/05/movable-type-plugin-gravatars.php" />
   <id>tag:www.outshine.com,2008://1.106</id>
   
   <published>2008-05-11T02:10:15Z</published>
   <updated>2008-06-04T10:45:46Z</updated>
   
   <summary><![CDATA[ I recently saw a few blogs that had photos by the author of each comment.&nbsp; I thought, &quot;Wow, those blogs must be very popular if people are willing to upload photos!&quot;&nbsp; But then I saw the same dude with...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="22" label="movable type" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p><img src="http://www.gravatar.com/avatar.php?gravatar_id=3b3be63a4c2a439b013787725dfce802&amp;rating=x&amp;size=80&amp;default=identicon" alt="Gravatar, identicon" title="Gravatar, identicon" /> <img src="http://www.gravatar.com/avatar.php?gravatar_id=3b3be63a4c2a439b013787725dfce802&amp;rating=x&amp;size=80&amp;default=monsterid" alt="Gravatar, monsterid" title="Gravatar, monsterid" /> <img src="http://www.gravatar.com/avatar.php?gravatar_id=3b3be63a4c2a439b013787725dfce802&amp;rating=x&amp;size=80&amp;default=wavatar" alt="Gravatar, wavatar" title="Gravatar, wavatar" /></p>
<p>I recently saw a few blogs that had photos by the author of each comment.&nbsp; I thought, &quot;Wow, those blogs must be very popular if people are willing to upload photos!&quot;&nbsp; But then I saw the same dude with the same photo on a couple different blogs, and the blogs were smaller than mine.&nbsp; So I started looking into it, and I learned about <a href="http://www.gravatar.com/">gravatar.com</a>.&nbsp; That Web site allows you to associate a photo or icon with your email address, so that no matter where you post, your photo goes with you.</p>
<p>Of course, you wouldn't sign up if you want privacy.&nbsp; But lots of people are signing up, and I want to show the icons they're using.&nbsp; So I found an old Movable Type plugin from 2003 that does the job.&nbsp; But it does it badly &ndash; it has a feature that no longer works (the border option), and it doesn't use any of the newer plugin features.&nbsp; So I've revised it to use the newer Gravatar URL format as well as use the MT plugin interface.&nbsp; However, I haven't revised it to work with MT 4.&nbsp; No.&nbsp; Instead, I've revised it for MT 3.</p>
<p>Why revise for MT 3?&nbsp; Well, there are a lot of us still using it.&nbsp; I won't be onto MT 4 for another 6 months or so.&nbsp; But I want Gravatars now.&nbsp; So here we go.</p>]]>
      <![CDATA[<p>To get started, you need to have a Movable Type 3 blog.&nbsp; As of this writing, <a href="http://www.movabletype.org/mt-archives/">the latest is 3.36</a>.&nbsp; You should try to get up to that version, but it's not required.</p>
<p>Next, download my new <a href="/software/movable-type-plugins/gravatar_1.2.zip">Gravatar plugin for Movable Type</a>.&nbsp; Unzip it and upload the .pl file into your plugins directory.</p>
<p>Finally, go to the Web-based control panel for your Movable Type blog.&nbsp; Select Settings -&gt; Plugins -&gt; Gravatar -&gt; Show Settings.&nbsp; There you will find explanatory text showing how to use the MTGravatar tag.</p>
<p>For this blog, I've set it up so that if you have a Gravatar and you make a comment, it will show it... but also, if you do NOT have a Gravatar set up, it will auto-generate a small image of a monster (the middle icon near the beginning of this article).&nbsp; The monster is based upon your email address, so it should be unique to you.&nbsp; Have fun!</p>]]>
   </content>
</entry>

<entry>
   <title>You&apos;re a great man, Joseph Richardson</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/05/youre-a-great-man-joseph-richardson.php" />
   <id>tag:www.outshine.com,2008://1.105</id>
   
   <published>2008-05-08T09:57:47Z</published>
   <updated>2008-05-08T09:58:01Z</updated>
   
   <summary> I hope that when my time comes, I can be half the man you were....</summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="65" label="kaniyah" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="38" label="nontech" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="66" label="sacrifice" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p><a href="http://www.suntimes.com/news/24-7/935688,CST-NWS-dad07.article"><img alt="Joseph Richardson's photo" src="/images/joseph_richardson.jpg" /></a></p>
<p>I hope that when my time comes, I can be half the man you were.</p>]]>
      
   </content>
</entry>

<entry>
   <title>New Greasemonkey script: Slashdot nuzak CSS</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/05/greasemonkey-script-for-slashdot.php" />
   <id>tag:www.outshine.com,2008://1.104</id>
   
   <published>2008-05-04T09:24:17Z</published>
   <updated>2008-05-07T10:55:08Z</updated>
   
   <summary><![CDATA[I created a script that is hosted over at userscripts.org.&nbsp; It's called Slashdot nuzak CSS.&nbsp; It modifies the appearance of slashdot.org so that it doesn't look as clunky.&nbsp; It thins out the big fat box drawn around each comment, it...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="17" label="greasemonkey" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="64" label="slashdot" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>I created a script that is hosted over at <a href="http://userscripts.org/scripts/show/25809">userscripts.org</a>.&nbsp; It's called <a href="http://userscripts.org/scripts/show/25809">Slashdot nuzak CSS</a>.&nbsp; It modifies the appearance of <a href="http://slashdot.org/">slashdot.org</a> so that it doesn't look as clunky.&nbsp; It thins out the big fat box drawn around each comment, it makes the &quot;reply&quot; buttons look a little more stylish, and so on.&nbsp; It's not a big overhaul, but it's a nice little cleanup project.</p>
<p>Thanks to Slashdot member nuzak for coming up with most of the CSS that is used.</p>
<p>-Tony</p>]]>
      
   </content>
</entry>

<entry>
   <title>Greasemonkey: PHP multi-byte string warnings</title>
   <link rel="alternate" type="text/html" href="http://www.outshine.com/blog/2008/04/greasemonkey-php-multi-byte-functions.php" />
   <id>tag:www.outshine.com,2008://1.103</id>
   
   <published>2008-04-30T06:20:39Z</published>
   <updated>2008-05-07T10:53:57Z</updated>
   
   <summary><![CDATA[Just a quick note to say that I released a new Greasemonkey script.&nbsp; It adds a warning box of text to any php.net manual page that features a function that is dangerous to multi-byte strings.&nbsp; I'm sorry, you want that...]]></summary>
   <author>
      <name>Tony</name>
      
   </author>
         <category term="Blog" scheme="http://www.sixapart.com/ns/types#category" />
   
   <category term="17" label="greasemonkey" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="63" label="multibyte" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="10" label="php" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="40" label="tech" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="62" label="utf8" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://www.outshine.com/">
      <![CDATA[<p>Just a quick note to say that I released a new Greasemonkey script.&nbsp; It adds a warning box of text to any php.net manual page that features a function that is dangerous to multi-byte strings.&nbsp; I'm sorry, you want that in English?&nbsp;&nbsp;OK.&nbsp; Have you&nbsp;ever posted something to a Web site and found that characters were missing or truncated or there were lots of question marks or boxes where letters should have been?&nbsp; Usually that's because the person running the site doesn't understand how letters work at a programming-language level.&nbsp; They think everyone on Earth is using an English keyboard with the letters A-Z.&nbsp; When they get data that isn't A-Z, their Web site programs don't know what to do with the data, and they mangle it.</p>
<p>It turns out most people don't use just the A-Z characters, even people who write in English.&nbsp; Lots of people want to use the Euro symbol, for example.&nbsp; That isn't a &quot;normal&quot;&nbsp;letter, and so lots of Web sites just mangle it.&nbsp; Part of the problem is the programming language used on these Web sites.&nbsp; In particular, the PHP language has two main &quot;modes&quot; for handling characters.&nbsp; The first, and the default, is basically to treat everything like ASCII.&nbsp; ASCII is the A-Z standard.&nbsp; Unfortunately, that severely damages the text that people type nowadays.&nbsp; So PHP has a second major mode of operation, and that is to set itself to UTF-8.&nbsp; UTF-8 includes lots and lots of characters, and it's backwards compatible with ASCII.&nbsp; So pretty much every Web geek should use it.&nbsp;</p>
<p>The problem?&nbsp; The online PHP manual doesn't offer much of a warning any time you look up one of the old, bad ASCII functions.&nbsp; I personally replaced some old, bad code with... you guessed it... more old bad code.&nbsp; Why?&nbsp; Because I looked up replacement functions and found what I thought would work, only to realize that the replacement functions were also bad and came with NO disclaimer!&nbsp; And <em>that</em> leads us to my Greasemonkey script.&nbsp; This script will add disclaimers to php.net, on any page containing a bad old function.&nbsp; If possible it will also tell you a better way to do what you want to do.&nbsp; It's basically code help for&nbsp;PHP developers.</p>
<p>You can get the script on <a href="http://userscripts.org/scripts/show/25763">userscripts.org</a>.&nbsp; Please install it and then view some of these pages to see the disclaimers it adds:</p>
<p><a href="http://www.php.net/ucwords">http://www.php.net/ucwords</a><br />
<a href="http://www.php.net/strstr">http://www.php.net/strstr</a></p>]]>
      
   </content>
</entry>


</feed>
