<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Tim Hentenaar's Blog - Programming</title>
    <link>http://xodian.net/serendipity/</link>
    <description></description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.2 - http://www.s9y.org/</generator>
    <pubDate>Sat, 21 Nov 2009 14:48:10 GMT</pubDate>

    <image>
        <url>http://xodian.net/serendipity/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Tim Hentenaar's Blog - Programming - </title>
        <link>http://xodian.net/serendipity/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>TI Basic Simulator</title>
    <link>http://xodian.net/serendipity/index.php?/archives/45-TI-Basic-Simulator.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/45-TI-Basic-Simulator.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=45</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=45</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    Recently I wrote a TI Basic (not Extended Basic) simulator as a proof of concept to determine whether or not such a simulator would be feasable in Javascript. Why TI Basic? Because it was the first programming language I ever learned. Yes, I still have a working TI-99/4A to this day. &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;PRINT&lt;/em&gt; is implemented enough to print simple values, and expressions. the &quot;;&quot; modifier isn&#039;t implemented. However, statements such as &lt;em&gt;LET&lt;/em&gt;, &lt;em&gt;IF-THEN-ELSE&lt;/em&gt;, &lt;em&gt;FOR-NEXT&lt;/em&gt;, &lt;em&gt;GOSUB-RETURN&lt;/em&gt;, &lt;em&gt;DIM&lt;/em&gt;, most math functions, &lt;em&gt;RANDOMIZE/RND&lt;/em&gt;, the &lt;em&gt;CHAR&lt;/em&gt; subroutines, and most other commands have been implemented.&lt;br /&gt;
&lt;br /&gt;
Timing in Javascript is often inexact. This is the primary problem when developing any sort of simulation in Javascript. I can&#039;t wait until HTML 5 becomes fully adopted and a worker thread can be utilized to separate the UI from the rest of the simulation. A concept like this (and even more complex concepts) would be much easier to implement. &lt;br /&gt;
&lt;br /&gt;
Below, you can try it out for yourself. I&#039;ve only tested this in Firefox 3.5, and lightly in Opera 10.01 (&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;It actually seems to execute faster in Opera, which is no surprise, but the cursor display is a little quirky at the end of a line.&lt;/em&gt;), so I&#039;m uncertain whether it will work in other browsers at the moment. I just wanted to put this out there, and share it with the world. Perhaps I&#039;ll optimize this eventually, and implement the other pieces. It&#039;d be interesting to see some of those old programs running right in the browser. &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
As far as I know, I&#039;m the first to ever create such a thing...&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://xodian.net/serendipity/index.php?/archives/45-TI-Basic-Simulator.html#extended&quot;&gt;Continue reading &quot;TI Basic Simulator&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 16 Nov 2009 08:08:42 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/45-guid.html</guid>
    
</item>
<item>
    <title>Reverse Engineering the TI BASIC PRNG</title>
    <link>http://xodian.net/serendipity/index.php?/archives/44-Reverse-Engineering-the-TI-BASIC-PRNG.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/44-Reverse-Engineering-the-TI-BASIC-PRNG.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=44</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=44</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    The other day, I decided to reverse engineer the TI BASIC pseudo-random number generator. I was curious to see what sort of algorithm it used, and I couldn&#039;t find such an analysis elsewhere on the internet.  I&#039;ve read the book &quot;TI 99/4A Intern&quot; by Heiner Martin (I&#039;d recommend it to any TI enthusiast), and it provides a ton of useful insight into the inner workings of the BASIC ROMs. However, I wanted to reverse engineer the algorithm myself, without the comments from the book.&lt;br /&gt;
&lt;br /&gt;
Source code of my C implementation of TI BASIC&#039;s PRNG with test data can be found: &lt;a href=&quot;http://hentenaar.com/security/ti-prng.c&quot;&gt;here&lt;/a&gt;. &lt;br /&gt;
&lt;br /&gt;
Below is an explanation of the exact routines:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://xodian.net/serendipity/index.php?/archives/44-Reverse-Engineering-the-TI-BASIC-PRNG.html#extended&quot;&gt;Continue reading &quot;Reverse Engineering the TI BASIC PRNG&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 13 Nov 2009 17:46:54 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/44-guid.html</guid>
    
</item>
<item>
    <title>The smallest Winblows program I ever wrote</title>
    <link>http://xodian.net/serendipity/index.php?/archives/43-The-smallest-Winblows-program-I-ever-wrote.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/43-The-smallest-Winblows-program-I-ever-wrote.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=43</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=43</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    Tonight, while being bored, I actually wrote a Winblows program. I might be losing my mind, but I can say one good thing about it. The size of the code + data is well under 100 bytes. I believe this would qualify as one of the smallest Win32 programs in existence. At least no one can ever say I &lt;em&gt;never&lt;/em&gt; wrote a Winblows program. &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Download it &lt;a href=&quot;http://hentenaar.com/security/program.zip&quot;&gt;here&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Tue, 11 Aug 2009 03:53:57 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/43-guid.html</guid>
    
</item>
<item>
    <title>Control Software for the Inland USB LED Badge</title>
    <link>http://xodian.net/serendipity/index.php?/archives/41-Control-Software-for-the-Inland-USB-LED-Badge.html</link>
            <category>Linux</category>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/41-Control-Software-for-the-Inland-USB-LED-Badge.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=41</wfw:comment>

    <slash:comments>11</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=41</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    &lt;div class=&quot;serendipity_image&quot;&gt;&lt;!-- s9ymdb:49 --&gt;&lt;img width=&quot;390&quot; height=&quot;321&quot; border=&quot;0&quot; src=&quot;http://xodian.net/serendipity/uploads/badge_pic.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update 12/14/09:&lt;/strong&gt; I&#039;ve moved the code for this program to &lt;a href=&quot;http://github.com/thentenaar&quot;&gt;GitHub&lt;/a&gt; and now provide binary packages. See the &lt;a href=&quot;http://github.com/thentenaar/usb-badge/blob/master/README&quot;&gt;README&lt;/a&gt; for details.&lt;br /&gt;
&lt;br /&gt;
I bought one of these at Micro Center a couple of weeks ago (I just now got around to posting the code -- I&#039;ve been busy with a few other things) because I wanted to flex my reverse engineering muscles, and work with &lt;a href=&quot;http://libhid.alioth.debian.org/&quot;&gt;libhid.&lt;/a&gt; I knew there was no way in hell it would come with control software for Linux, and at $14.99 it was quite affordable.&lt;br /&gt;
&lt;br /&gt;
0x04d9:0xe002&lt;br /&gt;
USB Vendor  ID: 0x04d9 Holtek Semiconductor, Inc.&lt;br /&gt;
USB Product ID: 0xe002 FURI KEYSHINE USB LED Badge&lt;br /&gt;
&lt;br /&gt;
You can download the source &lt;a href=&quot;http://github.com/thentenaar/usb-badge&quot;&gt;here.&lt;/a&gt; The program is written in C, and licensed under the &lt;a href=&quot;http://www.gnu.org/licenses/gpl-3.0.txt&quot;&gt;GNU GPLv3&lt;/a&gt;. Instructions for how to compile the program are included in the &lt;em&gt;README&lt;/em&gt;. You&#039;ll find the original documentation (converted to PDF) in the &lt;em&gt;doc&lt;/em&gt; directory. Please make sure the badge is connected before running the program.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Requirements&lt;/strong&gt;:&lt;br /&gt;
    - GTK+ &gt;= 2.14&lt;br /&gt;
    - libusb &gt;= 0.1 (Legacy version - libusb 1.x has a much different API)&lt;br /&gt;
    - libhid  &gt;= 0.2.16&lt;br /&gt;
    - pkg-config, GLib/GDK/GTK+ headers, libusb headers, libhid headers, etc.&lt;br /&gt;
&lt;br /&gt;
Upon starting the program, you&#039;ll see the following window:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;width: 423px; border: 0px;&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;!-- s9ymdb:51 --&gt;&lt;img width=&quot;423&quot; height=&quot;301&quot;  src=&quot;http://xodian.net/serendipity/uploads/Screenshot-USBLEDBadge.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used the manufacturer-supplied Delphi progam, then this should seem fairly familiar. If not, it should be fairly obvious what each field is for. The first four fields are text input fields corresponding to the first four messages that can be stored on the device. You simply enter the text you want, choose a speed (the higher the number, the faster the action happens), and an action (e.g. &quot;Move.&quot;)&lt;br /&gt;
&lt;br /&gt;
The final two fields are for the two bitmap messages available on the device. If you click on the image, a bitmap editor dialog will appear:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;width: 605px; border: 0px;&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;!-- s9ymdb:50 --&gt;&lt;img width=&quot;605&quot; height=&quot;206&quot;  src=&quot;http://xodian.net/serendipity/uploads/Screenshot-BitmapEditor.png&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
By clicking in the grid, you can set or unset the pixels that comprise the image displayed. If you right click on the grid, you&#039;ll get an option to clear the bitmap. When you&#039;re done with a bitmap, close the dialog.&lt;br /&gt;
&lt;br /&gt;
The last input item is the &quot;Luminance&quot; spin button. This will set the luminance (intensity) for the LEDs. The default is usually sufficient.&lt;br /&gt;
&lt;br /&gt;
When you click &quot;Send,&quot; the data will be sent to the device, and you&#039;ll be ready to disconnect the device and use it.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 24 Mar 2009 02:33:36 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/41-guid.html</guid>
    
</item>
<item>
    <title>On Paltalk and Gaim-PT</title>
    <link>http://xodian.net/serendipity/index.php?/archives/37-On-Paltalk-and-Gaim-PT.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/37-On-Paltalk-and-Gaim-PT.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=37</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=37</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    Just the other day, I was contacted by Mohammad Ebrahim Mohammadi Panah who setup a wiki and has been attempting to document the Paltalk protocol. Upon his request, I contributed the gaim-pt source code for use in his documentation efforts.&lt;br /&gt;
&lt;br /&gt;
You can find the gaim-pt related info (including the source code): &lt;a href=&quot;http://paltalk.wikidot.com/gaim-pt&quot;&gt;here&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Sat, 11 Oct 2008 03:59:28 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/37-guid.html</guid>
    
</item>
<item>
    <title>Card Trick '13' Explained</title>
    <link>http://xodian.net/serendipity/index.php?/archives/29-Card-Trick-13-Explained.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/29-Card-Trick-13-Explained.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=29</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=29</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    I saw a &lt;em&gt;card trick&lt;/em&gt; on &lt;a href=&quot;http://www.youtube.com/watch?v=DBpqg_k2Sys&quot;&gt;YouTube&lt;/a&gt; amongst my late night YouTube surfing, and thought to take a moment to give an explanation as to how it works. It&#039;s not an illusion of any sort, no slight of hand is involved. It&#039;s simple mathematics.&lt;br /&gt;
&lt;br /&gt;
The &lt;em&gt;trick&lt;/em&gt; relies on one thing: &lt;strong&gt;The cards for each suit are ordered, thus the &lt;em&gt;n+13&lt;/em&gt; th card in the deck is the card &lt;em&gt;n&lt;/em&gt; of the next suit.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Cutting the deck doesn&#039;t change the order of the cards. If I have an array of ( 1,2,3,4,5,6,7,8 ) and I &#039;cut&#039; the array at 4, my array is ( 5,6,7,8,1,2,3,4 ) thus the elements are still ordered. Flipping the deck over only affects the order in which the suits present. It also does not matter that the cards are ordered king-to-ace, ace-to-king, or 10-to-ace-jack-to-king, etc. as long as they are in the same order for each suit.&lt;br /&gt;
&lt;br /&gt;
I wrote a &lt;a href=&quot;http://hentenaar.com/security/13.txt&quot;&gt;perl script&lt;/a&gt; to illustrate this, exactly as the feller does it in the video. I posted a &lt;a href=&quot;http://www.youtube.com/watch?v=zzOm3wGXuJE&quot;&gt;video response&lt;/a&gt; on YouTube.&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://xodian.net/serendipity/index.php?/archives/29-Card-Trick-13-Explained.html#extended&quot;&gt;Continue reading &quot;Card Trick &#039;13&#039; Explained&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sat, 12 Apr 2008 15:24:46 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/29-guid.html</guid>
    
</item>
<item>
    <title>Benchmark: PHP vs. Python vs. Perl vs. Ruby</title>
    <link>http://xodian.net/serendipity/index.php?/archives/27-Benchmark-PHP-vs.-Python-vs.-Perl-vs.-Ruby.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/27-Benchmark-PHP-vs.-Python-vs.-Perl-vs.-Ruby.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=27</wfw:comment>

    <slash:comments>22</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=27</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    Today, I was looking at a couple of PHP benchmarks (the one &lt;a href=&quot;http://www.webmasterstop.com/56.html&quot;&gt;here&lt;/a&gt; for example), and they compared OOP benchmarks to Procedural benchmarks for the most part. I decided to write my own set of benchmarks using four of the most well-known web development languages that were ready-at-hand: PHP, Python, Perl, and Ruby. My benchmark also tests OOP vs. Procedural on a few terms: Execution speed and Raw lines of code written. I compare a visual estimate of memory usage between all four languages as well.&lt;br /&gt;
&lt;br /&gt;
Now, one cannot draw very many conclusions from my benchmarks here, because the programs used don&#039;t really do anything useful, nor do they simulate &quot;real-world&quot; conditions, or practical use-cases. Remember, we learn multiple programming languages, not because of fads, but because it expands our own knowledge, and because some languages are better than others for some things; and it&#039;s helpful to be able to choose the right tool for the job.&lt;br /&gt;
&lt;br /&gt;
Keep in mind the golden rule of benchmarking: &lt;em&gt;All benchmarks are flawed benchmarks.&lt;/em&gt;&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://xodian.net/serendipity/index.php?/archives/27-Benchmark-PHP-vs.-Python-vs.-Perl-vs.-Ruby.html#extended&quot;&gt;Continue reading &quot;Benchmark: PHP vs. Python vs. Perl vs. Ruby&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 30 Mar 2008 18:18:18 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/27-guid.html</guid>
    
</item>
<item>
    <title>PSX-GS 1.0 Released</title>
    <link>http://xodian.net/serendipity/index.php?/archives/19-PSX-GS-1.0-Released.html</link>
            <category>Linux</category>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/19-PSX-GS-1.0-Released.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=19</wfw:comment>

    <slash:comments>36</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=19</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    Today, I&#039;m releasing PSX-GS -- a plugin for epsxe and other PSEmu-compatible emulators on Linux to allow the use of Game Shark / Pro Action Replay codes. Winblows users have had this functionality long enough! &lt;br /&gt;
&lt;br /&gt;
PSX-GS is licensed under the &lt;a href=&quot;http://www.gnu.org/licenses/old-licenses/gpl-2.0.html&quot;&gt;GNU General Public License (version 2)&lt;/a&gt; (or later), and has been tested with epsxe 1.6.0. You&#039;ll need a fairly recent GTK 2 build in order for the UI portion to work properly. Note that codes with correct formatting and improper addresses may crash the emulator. &lt;strong&gt;Be sure&lt;/strong&gt; to read the &lt;em&gt;README&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
You can download it here: &lt;a href=&quot;http://github.com/thentenaar/psx-gs&quot; title=&quot;Source Code&quot;&gt;Source Code&lt;/a&gt;, &lt;a href=&quot;http://github.com/downloads/thentenaar/psx-gs/psx-gs-1.0b1.tar.bz2&quot; title=&quot;Binary&quot;&gt;32-bit x86 Binary&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Here&#039;s a brief walk-through of how to use it. You can watch the YouTube video I made about this plugin &lt;a href=&quot;http://www.youtube.com/watch?v=BHlany3gLCc&quot; title=&quot;Video&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://xodian.net/serendipity/index.php?/archives/19-PSX-GS-1.0-Released.html#extended&quot;&gt;Continue reading &quot;PSX-GS 1.0 Released&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Tue, 29 Jan 2008 03:11:54 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/19-guid.html</guid>
    
</item>
<item>
    <title>TI-Basic Syntax for Vim</title>
    <link>http://xodian.net/serendipity/index.php?/archives/15-TI-Basic-Syntax-for-Vim.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/15-TI-Basic-Syntax-for-Vim.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=15</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    &lt;a class=&#039;serendipity_image_link&#039; href=&#039;http://xodian.net/serendipity/uploads/ti-vim.png&#039;&gt;&lt;!-- s9ymdb:11 --&gt;&lt;img width=&quot;110&quot; height=&quot;110&quot; style=&quot;float: left; border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://xodian.net/serendipity/uploads/ti-vim.serendipityThumb.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Recently I wrote a syntax file for TI-Basic and Extended Basic for &lt;a href=&quot;http://vim.org&quot; title=&quot;VI Improved&quot;&gt;Vim&lt;/a&gt;. It can be downloaded &lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=2085&quot;&gt;here&lt;/a&gt;. Click on the thumbnail above to see a screenshot of the syntax highlighting in action. 
    </content:encoded>

    <pubDate>Sat, 01 Dec 2007 13:03:41 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/15-guid.html</guid>
    
</item>
<item>
    <title>Dynamic Content in both Firefox and IE</title>
    <link>http://xodian.net/serendipity/index.php?/archives/13-Dynamic-Content-in-both-Firefox-and-IE.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/13-Dynamic-Content-in-both-Firefox-and-IE.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=13</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=13</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    &lt;strong&gt;The Problem&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
As we all know, the HTTP standard defines a &lt;em&gt;&lt;strong&gt;multipart/x-mixed-replace&lt;/strong&gt;&lt;/em&gt; MIME type, which is supported in all Mozilla-based browsers, but &lt;strong&gt;not&lt;/strong&gt; in IE. &lt;br /&gt;
&lt;br /&gt;
This mime-type allows a content generator to dynamically replace the current content with different content. Each part of the stream can have its own MIME type, so you could use this feature to stream images, HTML pages, or anything else supported by the browser. With the need to generate such content, I set about to solve this task, for which there seems to be no solution. &lt;br /&gt;
&lt;br /&gt;
My requirements to fix this are as follows:&lt;br /&gt;
&lt;br /&gt;
1. Has to be simple yet elegant&lt;br /&gt;
2. Has to support both Mozilla-based browsers and IE&lt;br /&gt;
3. Has to practically duplicate the effect of using x-mixed-replace.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;The Solution&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
First, we have to flush the content regularly. In PHP, we use &lt;a href=&quot;http://php.net/flush&quot;&gt;flush()&lt;/a&gt;, and in perl setting the auto-flush flag is sufficient (&lt;em&gt;$| = 1;&lt;/em&gt;).&lt;br /&gt;
&lt;br /&gt;
Second, we need to instruct the browser not to cache content on the page, as it would be pointless, and could possibly interfere. We do that by setting the &lt;strong&gt;Cache-Control&lt;/strong&gt; HTTP header to &lt;em&gt;no-cache&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
Third, your script should do whatever it needs to do, but send updates back to the client within the &lt;em&gt;Keep-Alive&lt;/em&gt; interval, even if it just sends a carriage return.&lt;br /&gt;
&lt;br /&gt;
Fourth, Your script completes, and sends one final update to the client to change the content.&lt;br /&gt;
&lt;br /&gt;
The fourth step really is the key to it all, so I&#039;ll elaborate in detail:&lt;br /&gt;
&lt;br /&gt;
Mozilla-based browsers (e.g. Firefox, Safari) and IE allow for the &lt;strong&gt;document.body.innerHTML&lt;/strong&gt; property to be changed (naturally). Both also will allow you to send more than one body element, and will execute the &lt;em&gt;onload&lt;/em&gt; handler upon parsing that element. Note, however, that it will not allow you to do:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;xml&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;document.body.innerHTML = this.innerHTML&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;lt;!-- content here --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
So naturally, you can get around this by:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;xml&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;document.body.innerHTML = document.getElementById(&#039;gitrdone&#039;).innerHTML&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;gitrdone&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;lt;!-- Content Here --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/div&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/body&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
In most cases, this will work just fine. If you want to say, change the title, or modify the head, you won&#039;t be able to do anything like:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;xml&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;document.firstChild.firstChild.innerHTML = document.getElementById(&#039;gitrdone&#039;).innerHTML&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;gitrdone&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;title&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;New Title&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/title&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/div&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/body&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;OR&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;xml&quot; style=&quot;text-align: left&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;onload&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;document.firstChild.innerHTML = document.getElementById(&#039;gitrdone&#039;).innerHTML&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;gitrdone&quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;head&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;title&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;New Title&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/title&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/head&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;body&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;&amp;lt;!-- Content Here --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; &amp;#160; &amp;#160;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/body&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/div&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;/body&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Niether update as expected in Firefox, and neither will work in IE (because the first two nodes(html and head) are read-only.) &lt;br /&gt;
&lt;br /&gt;
You can see an working example of this &lt;a href=&quot;http://hentenaar.com/code/nuke.cgi&quot;&gt;here&lt;/a&gt;. With the source &lt;a href=&quot;http://hentenaar.com/code/nuke.txt&quot;&gt;here&lt;/a&gt;. 
    </content:encoded>

    <pubDate>Sun, 18 Nov 2007 04:05:14 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/13-guid.html</guid>
    
</item>
<item>
    <title>New Dinovo patch for Bluez-Utils</title>
    <link>http://xodian.net/serendipity/index.php?/archives/9-New-Dinovo-patch-for-Bluez-Utils.html</link>
            <category>Linux</category>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/9-New-Dinovo-patch-for-Bluez-Utils.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=9</wfw:comment>

    <slash:comments>26</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    &lt;div class=&quot;serendipity_imageComment_right&quot; style=&quot;width: 110px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;a class=&#039;serendipity_image_link&#039; href=&#039;http://xodian.net/serendipity/uploads/dinovo-key-settings.png&#039; target=&quot;_blank&quot;&gt;&lt;!-- s9ymdb:4 --&gt;&lt;img width=&quot;110&quot; height=&quot;110&quot;  src=&quot;http://xodian.net/serendipity/uploads/dinovo-key-settings.serendipityThumb.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Dinovo Key Settings (Gnome)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Tonight, I completed testing of my latest patch for Dinovo support in &lt;a href=&quot;http://www.bluez.org&quot; title=&quot;BlueZ Homepage&quot;&gt;bluez-utils&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For: &lt;br /&gt;
&lt;a href=&quot;http://hentenaar.com/security/bluez-utils-3.18-dinovo.patch&quot;&gt;3.18&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://hentenaar.com/security/bluez-utils-3.19-dinovo.patch&quot;&gt;3.19&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Changes&lt;/b&gt;:&lt;br /&gt;
	1. Moved the dinovo_mediapad() call to make connecting the media pad essentially hassle-free.&lt;br /&gt;
	2. Added an implicit --search to hidd&#039;s --server handling. &lt;br /&gt;
	3. The patch no-longer necessitates calling automake after patching (however it is good practice.)&lt;br /&gt;
	&lt;br /&gt;
&lt;b&gt;Notes&lt;/b&gt;:&lt;br /&gt;
	1. Be sure to configure with --enable-hidd!&lt;br /&gt;
	2. Be sure to restart dbus after installing.&lt;br /&gt;
	3. Be sure to either compile in uinput support within the kernel, or &#039;modprobe uinput&#039; before using.&lt;br /&gt;
	4. You may need to tune your system&#039;s init scripts to call hidd. I noticed that the gentoo init scripts do not call or reference hidd at all.&lt;br /&gt;
	5. I added an implicit --search when the --server switch to hidd is specified. Note that there is a search timeout - so unless the mediapad is connected before the timeout you&#039;ll have to manually run either hidd --search, or hidd --connect.&lt;br /&gt;
        6. Make sure you have your Keyboard Shortcuts setup as in the screenshot!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Edit 9/26&lt;/b&gt;: &lt;a href=&quot;http://hentenaar.com/security/bluez-utils-3.19-dinovo-input.patch&quot;&gt;Updated patch for 3.19&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This new patch moves the mediapad code from the old hidd to the bluetooth-input-service daemon. 
    </content:encoded>

    <pubDate>Fri, 21 Sep 2007 22:29:07 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/9-guid.html</guid>
    
</item>
<item>
    <title>Why Internet Exploiter is Detrimental to the Internet</title>
    <link>http://xodian.net/serendipity/index.php?/archives/6-Why-Internet-Exploiter-is-Detrimental-to-the-Internet.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/6-Why-Internet-Exploiter-is-Detrimental-to-the-Internet.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=6</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=6</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    If you&#039;re viewing this site in Internet Exploiter, good for you. You&#039;re one of Microsoft&#039;s horde of sheep. Blind to everything else around you, let alone the fact that IE isn&#039;t standards compliant (no matter how bad one may want to believe it.) You&#039;ve been duped my friends.&lt;br /&gt;
&lt;br /&gt;
Whilst at work, I made a layout for a client, using fixed-positioned divs. While it works flawlessly in Firefox- it&#039;s obviously broken in IE. And why is that? Because IE dosen&#039;t comply with CSS standards. Although it&#039;s rumored that IE 7 beta 2 and up are compliant, I can&#039;t help but doubt it, given the obvious laziness of Microsoft&#039;s IE developers, and their unwillingness to comply with standards that have been established for more than 5 years.&lt;br /&gt;
&lt;br /&gt;
Granted I&#039;ve spent something around 4 hours trying to find a workaround, scouring the net like a hawk in a forest, I&#039;ve been unsuccessful thus far. Even if all the divs have a static width, height, and position (fixed or absolute) - IE still tacks on extra vertical space, and even with &lt;i&gt;overflow-y: hidden;&lt;/i&gt; the page still dosen&#039;t render correctly (though &lt;i&gt;overflow-y&lt;/i&gt; gets rid of the extra space.)&lt;br /&gt;
&lt;br /&gt;
The real problem isn&#039;t that IE isn&#039;t compliant, but that roughly 90% of the computer users in the world use Microsoft&#039;s Windows OS, and most of that 90% use IE simply because it&#039;s bundled with the OS. Granted that a lot of Winblows users don&#039;t know about the existence of free, standards-compliant browsers such as &lt;a href=&quot;http://mozilla.com/firefox&quot;&gt;Mozilla Firefox&lt;/a&gt;, ignorance is no excuse. As long as such a trend remains in affect, we web developers will continue to be slapped in the face by IE&#039;s mishandling of even the most basic things. &lt;br /&gt;
&lt;br /&gt;
Granted that it&#039;s a known fact that over 60% of all Windows remote exploits are exploited through security holes in IE - most users of the Windows OS aren&#039;t security savvy, thus they don&#039;t read up on these things. That&#039;s the whole damn reason we have so many spam-sending zombies out on the net. &lt;br /&gt;
&lt;br /&gt;
A good number of spyware, malware, and trojans install themselves via security holes in IE. Can you guess why?&lt;br /&gt;
&lt;br /&gt;
The same reason as they do from Winblows filesharing programs, or watching Windows Media Video: It&#039;s a common, routine task; and because IE makes it a laughably easy vector of attack.&lt;br /&gt;
&lt;br /&gt;
Above all, I abhor having to keep two separate codebases, one for IE, and one for the rest of the world. It&#039;s the explicit catering to IE that really infuriates me. Why the hell should I have to rewrite my work just for the Microsoft sheep out there? Seems kind of pointless to have standards when most of the world ignores them...&lt;br /&gt;
&lt;br /&gt;
Fellow web developers, I urge you to cease support for the quirks in IE. Hopefully if enough people write purely standards-compliant work, Microsoft will be forced to finally bring IE into compliance - though I doubt we&#039;ll see that happen any time soon.&lt;br /&gt;
&lt;br /&gt;
Web users - I urge you to download Firefox. It&#039;s 100% free, 100% standards compliant, and 100% free of IE&#039;s security holes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&#039;ve been  free of the chains of Microsoft bondage for nearly 10 years - and damn proud!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Edit:&lt;/strong&gt; I fixed the problem today at work. A combination of z-ordering, absolute positioning vs. fixed, overflow: hidden, and a containing div fixed the problem. 
    </content:encoded>

    <pubDate>Fri, 31 Aug 2007 02:15:00 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/6-guid.html</guid>
    
</item>
<item>
    <title>Video Implemented in Second Life for Linux</title>
    <link>http://xodian.net/serendipity/index.php?/archives/2-Video-Implemented-in-Second-Life-for-Linux.html</link>
            <category>Linux</category>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/2-Video-Implemented-in-Second-Life-for-Linux.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=2</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=2</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    &lt;!-- s9ymdb:2 --&gt;&lt;img width=&quot;110&quot; height=&quot;85&quot; style=&quot;float: right; border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://hentenaar.com/code/Snapshot_010.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;!-- s9ymdb:1 --&gt;&lt;img width=&quot;110&quot; height=&quot;86&quot; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://hentenaar.com/code/Snapshot_003.png&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
I was recently involved (and disinvolved) with the online community of &lt;a href=&quot;http://secondlife.com&quot;&gt;Second Life&lt;/a&gt;. As I started pouring over the code, I became disenchanted with the idea of Winblows and Mac users being the only ones who could watch in-game videos. So I dusted off my bottle of ass-whoop, and went to work at the code. The result can be seen in the two screenshots above. 		&lt;br /&gt;
&lt;br /&gt;
See the code section for a source code patch against 1.14.0.0 / 1.14.0.1 (should also work with the latest versions - just need to be careful with modifying the SConstruct file. The only drawback is that it&#039;s not as fast as one would like. This can be worked around. FFMPEG is also under constant development, so with these promising results, it&#039;s only a matter of time, right? If I don&#039;t ever finish this, hopefully 	someone else will pick up the torch. Remember, It&#039;s up to you now, to ensure that we Linux users aren&#039;t simply ignored! As always, the download is in the &lt;a href=&quot;/code.php&quot; target=&quot;_blank&quot;&gt;Code&lt;/a&gt; section.&lt;br /&gt;
				 
    </content:encoded>

    <pubDate>Sun, 06 May 2007 15:30:00 -0400</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/2-guid.html</guid>
    
</item>
<item>
    <title>New Keyboard Set</title>
    <link>http://xodian.net/serendipity/index.php?/archives/3-New-Keyboard-Set.html</link>
            <category>Linux</category>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/3-New-Keyboard-Set.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=3</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=3</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
    &lt;!-- s9ymdb:3 --&gt;&lt;img width=&quot;320&quot; height=&quot;240&quot; style=&quot;border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://hentenaar.com/Logitech_LCD1.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
				&lt;br /&gt;
     For christmas, I got a Logitech DiNovo Media Desktop Keyboard/Mouse/MediaPad set (~$200 USD) and promptly installed the &lt;a href=&quot;http://bluez.org&quot;&gt;Bluez&lt;/a&gt; tools and updated kernel drivers. The keyboard, mouse, and media pad, all work fine as standard HID devices (in USB mode), with the exception of the mediapad&#039;s LCD.&lt;br /&gt;
&lt;br /&gt;
     Whilst googling around, I came across &lt;a href=&quot;http://linux.yes.nu/diNovo/&quot;&gt;Patrick&#039;s&lt;/a&gt; diNovo Media Desktop page. He&#039;s got a ton of useful info about the key mappings, and various configuration details that make things much more livable. I nearly tore my hair out with the initial setup and the transition into bluetooth mode. I wish I&#039;d found his page right off.&lt;br /&gt;
&lt;br /&gt;
     One thing to note, is that he was told by Logitech:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
	I understand from your email that you want to know the specifications for managing the LCD display on the Medipad.&lt;br /&gt;
	Unfortunately, the information you are requesting is proprietary in nature and therefore not publicly available. &lt;br /&gt;
	I am sorry for the inconvenience caused...&lt;br /&gt;
&lt;br /&gt;
	Unfortunately, Logitech does have any plans on developing a closed-source library for Mediapad LCD/Bluetooth/Logitech &lt;br /&gt;
	diNovo Desktop. I am sorry for the inconvenience caused.&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
     So enraged was I, to see that they hadn&#039;t even the notion of Linux support, that I went into my dark chambers, and began to figure out what was really going on. After a few hours of clean-room reversing, I wrote a few test programs, and hacked away at the HID daemon in Bluez. Following the lead of the bluez developers, I implemented a driver for the mediapad in &quot;fakehid&quot; mode. &lt;br /&gt;
&lt;br /&gt;
     After all, someone had to Git-R-Done! &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
     I invite anyone who may benefit from it to download my &lt;a href=&quot;/security/bluez-dinovo.tar.bz2&quot;&gt;patch&lt;/a&gt; for bluez-utils 3.8 to implement the driver. One interesting thing about my implementation, is that the driver uses &lt;a href=&quot;http://dbus.freedesktop.org&quot;&gt;DBUS&lt;/a&gt; so that other programs can interact with the mediapad as well. There&#039;s also a small python script included with the patch that shows how to use it via DBUS. &lt;br /&gt;
&lt;br /&gt;
     &lt;b&gt;Update:&lt;/b&gt; 2007-01-08 23:39:15 EST: Glen Rolle sent me some suggestions which I have implemented in this &lt;a href=&quot;/security/bluez-dinovo-update.tar.bz2&quot;&gt;update&lt;/a&gt;. Thanks Glen! Note: This patch must be applied after the previous patch has been applied.&lt;br /&gt;
				&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 28 Dec 2006 18:58:00 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/3-guid.html</guid>
    
</item>
<item>
    <title>Gitting-R-Done!</title>
    <link>http://xodian.net/serendipity/index.php?/archives/5-Gitting-R-Done!.html</link>
            <category>Programming</category>
    
    <comments>http://xodian.net/serendipity/index.php?/archives/5-Gitting-R-Done!.html#comments</comments>
    <wfw:comment>http://xodian.net/serendipity/wfwcomment.php?cid=5</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://xodian.net/serendipity/rss.php?version=2.0&amp;type=comments&amp;cid=5</wfw:commentRss>
    

    <author>nospam@example.com (Tim Hentenaar)</author>
    <content:encoded>
         I&#039;ve been Gitting-R-Done quite a bit lately. I&#039;ve resumed working on K&#039;Tan for some time now (using a new code base, completely from scratch. &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
     In other news, I fixed a &lt;a href=&quot;http://www.osvdb.org/displayvuln.php?osvdb_id=30056&quot;&gt;gaping security hole&lt;/a&gt; in a certain web forum software that even the manufacturer has yet to rectify. Specifically, it&#039;s called &lt;a href=&quot;http://www.minihttpserver.net/&quot;&gt;MiniHTTP Web Forum &amp;amp; Filesharing Server &lt;/a&gt; (4.x).&lt;br /&gt;
&lt;br /&gt;
     &quot;Have I gone mad&quot;, you ask? &quot;What am I doing fixing Winblows programs, etc.?&quot;; Well, call it a musing to keep me occupied all night, or perhaps it&#039;s just simply me being benevolent to people who might use that software, however unfortunate that may be... Either way, I&#039;d say it&#039;s a nice gesture on my part. &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
     What&#039;s worse is that the vendor dosen&#039;t really seem to care about the vulnerability. No wonder Google dosen&#039;t turn up too many. &lt;img src=&quot;http://xodian.net/serendipity/templates/default/img/emoticons/tongue.png&quot; alt=&quot;:-P&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; &lt;a href=&quot;/security/minihttpd_patch.tar.bz2&quot;&gt;Get the patch!&lt;/a&gt; &lt;br /&gt;
				 
    </content:encoded>

    <pubDate>Fri, 01 Dec 2006 12:50:00 -0500</pubDate>
    <guid isPermaLink="false">http://xodian.net/serendipity/index.php?/archives/5-guid.html</guid>
    
</item>

</channel>
</rss>