<?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/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>Sune Trudslev's WebLog - Technical</title>
    <link>http://www.tanis.dk/blog/</link>
    <description>Advanced concepts -- Easy explainations</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4 - http://www.s9y.org/</generator>
    <pubDate>Tue, 06 Feb 2007 14:07:20 GMT</pubDate>

    <image>
        <url>http://www.tanis.dk/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Sune Trudslev's WebLog - Technical - Advanced concepts -- Easy explainations</title>
        <link>http://www.tanis.dk/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Disk Defragmentation -- Useful optimization turned hoax?</title>
    <link>http://www.tanis.dk/blog/archives/32-Disk-Defragmentation-Useful-optimization-turned-hoax.html</link>
            <category>Technical</category>
    
    <comments>http://www.tanis.dk/blog/archives/32-Disk-Defragmentation-Useful-optimization-turned-hoax.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=32</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=32</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;I LOOOOOVE &lt;a rel=&quot;thickbox&quot; href=&quot;http://www.tanis.dk/blog/exit.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZWZyYWdtZW50YXRpb24=&amp;amp;entry_id=32&quot; title=&quot;http://en.wikipedia.org/wiki/Defragmentation&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/Defragmentation&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;defragmentation&lt;/a&gt;. I love the thought of my files, my bytes, my bits, on my harddrive is laying in a nice and orderly stream; perfectly aligned and ready to be read right off the magnetic surface of my disks.&lt;/p&gt;&lt;p&gt;So, I was sitting there contemplating the concept of deframentation on a modern &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url=aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYXJkZHJpdmU=&amp;amp;entry_id=32&quot; title=&quot;http://en.wikipedia.org/wiki/Harddrive&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/Harddrive&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;harddrive&lt;/a&gt;. These days, the disks don&#039;t actually report the actual geometry of the disk, instead it maps the &amp;quot;virtual geometry&amp;quot;, which is exposed to the OS, to the actual geometry of the disk. This way the disk can easily detect bad sectors on the drive and move and map them to another position on the drive, in case a part of the disk goes bad (which is probably more often than we&#039;d like to know).&lt;/p&gt;&lt;p&gt;So, we power up our favorite defragmentation program and has it move all the files around so that they are ordred perfectly in the &amp;quot;virtual geometry&amp;quot;. The problem, as I see it, is that when the disk actually has to read the data, it will be read from the actual geometry of the disk, which could, at least in theory, be scattered all over the disk.&lt;/p&gt;&lt;p&gt;Does this mean that defragmentation is more useful when the disk is new (and has less bad sectors)? Does it even make sense to defragment your disk?&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 09 Aug 2006 19:36:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/32-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Momondo again..</title>
    <link>http://www.tanis.dk/blog/archives/27-Momondo-again...html</link>
            <category>Entertainment</category>
            <category>Technical</category>
    
    <comments>http://www.tanis.dk/blog/archives/27-Momondo-again...html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=27</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=27</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;So we are nearing a release of &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=97&amp;amp;entry_id=27&quot; title=&quot;http://www.momondo.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.momondo.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;www.momondo.com&lt;/a&gt;. I am really happy with the results. We have moved all the different services to different servers which has resulted in a serious improvement of performance on the site. Results are blazing out.&lt;/p&gt;&lt;p&gt;Also, the work we have done with ensuring the quality of the robots and adding many new robots, the data quality is excellent. I have no doubt that our site has the best coverage out of all the different sites that seem to be opening lately.&lt;/p&gt;&lt;p&gt;I hope you will all go check it out and book your next vacation through our links (which will in turn give us a small kickback from the airline), so that the site can become the success that, I believe, that it deserves.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 03 Jun 2006 08:28:50 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/27-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Travel cheap</title>
    <link>http://www.tanis.dk/blog/archives/22-Travel-cheap.html</link>
            <category>Entertainment</category>
            <category>Technical</category>
    
    <comments>http://www.tanis.dk/blog/archives/22-Travel-cheap.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=22</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=22</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;I mean, who cares what the flight is like, as long as you can trust the airline, not to crash the airplane. Okay, so it&#039;s not just me that thinks that, but people in general. The success of low-cost carriers like &lt;a title=&quot;easyJet - fly cheap in Europe&quot; href=&quot;http://www.tanis.dk/blog/exit.php?url_id=91&amp;amp;entry_id=22&quot;  onmouseover=&quot;window.status=&#039;http://www.easyjet.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;easyJet&lt;/a&gt; and &lt;a title=&quot;RyanAir - Fly cheap in Europe&quot; href=&quot;http://www.tanis.dk/blog/exit.php?url_id=92&amp;amp;entry_id=22&quot;  onmouseover=&quot;window.status=&#039;http://www.ryanair.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;RyanAir&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So, what I do for a living, is make a low-cost carrier search system. The system itself is called SpeedFares and is targeted at business travel agencies as a complimentary system to their GDS (Global Travel Distribution System) which mainly includes classical airlines, like, SAS, KLM, Lufthansa, and the likes.&lt;/p&gt;&lt;p&gt;So lately we&#039;ve been toying with the idea of taking our search engine to the web. I&#039;ve recenly finished a &amp;quot;to-the-bones&amp;quot; version of the search engine. Programmed with &lt;a title=&quot;Read what Ajax is..&quot; href=&quot;http://www.tanis.dk/blog/exit.php?url_id=93&amp;amp;entry_id=22&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/AJAX&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Ajax&lt;/a&gt; techniques. It has a spiffy dropdown for choosing the cities to travel from and to, and a very cool dynamically updating price comparrisson page. In short I&#039;m pretty proud of the result.&lt;/p&gt;&lt;p&gt;So, if I caught you interest you can go see how you can &lt;a title=&quot;Travel search engine&quot; href=&quot;http://www.tanis.dk/blog/exit.php?url_id=94&amp;amp;entry_id=22&quot;  onmouseover=&quot;window.status=&#039;http://www.momondo.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;travel cheap&lt;/a&gt; on Momondo for yourself. I hope you will like it, and that you will use it the next time you are going to go somewhere.&lt;/p&gt;&lt;p&gt;If you feel any routes or carriers are missing feel free to leave me a note here.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 30 Nov 2005 09:05:14 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/22-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Gallery: A giant among midgets</title>
    <link>http://www.tanis.dk/blog/archives/21-Gallery-A-giant-among-midgets.html</link>
            <category>Technical</category>
    
    <comments>http://www.tanis.dk/blog/archives/21-Gallery-A-giant-among-midgets.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=21</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;When picking out a web-based image gallery system, the choices are almost endless: &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=74&amp;amp;entry_id=21&quot; title=&quot;http://www.comdevweb.com/photogallery.php&quot;  onmouseover=&quot;window.status=&#039;http://www.comdevweb.com/photogallery.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Comdev Photo Gallery&lt;/a&gt;, &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=75&amp;amp;entry_id=21&quot; title=&quot;http://www.webligo.com/products_imspro.php&quot;  onmouseover=&quot;window.status=&#039;http://www.webligo.com/products_imspro.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;IMS Pro&lt;/a&gt;, &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=76&amp;amp;entry_id=21&quot; title=&quot;http://www.ktools.net/stock_photo_site.php&quot;  onmouseover=&quot;window.status=&#039;http://www.ktools.net/stock_photo_site.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PhotoStore&lt;/a&gt;, &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=77&amp;amp;entry_id=21&quot; title=&quot;http://www.photopost.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.photopost.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;PhotoPost PHP Pro&lt;/a&gt;, &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=78&amp;amp;entry_id=21&quot; title=&quot;http://coppermine-gallery.net/index.php&quot;  onmouseover=&quot;window.status=&#039;http://coppermine-gallery.net/index.php&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Coppermine Photo Gallery&lt;/a&gt;, and my personal favorite: &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=79&amp;amp;entry_id=21&quot; title=&quot;http://gallery.menalto.com/&quot;  onmouseover=&quot;window.status=&#039;http://gallery.menalto.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Gallery&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;I recently updated my &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=80&amp;amp;entry_id=21&quot; title=&quot;http://www.andrometa.dk/photos&quot;  onmouseover=&quot;window.status=&#039;http://www.andrometa.dk/photos&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;wifes web-based image gallery&lt;/a&gt; which was using Gallery 1.5.1. We had decided that it was looking a little bland, and might be in need of an update, so I went scouting for what was out there.&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;After taking the whole trip around, I ended up with Gallery again. They had recently released 2.0.0, so I decided to try it out.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;I have always felt that Gallery was well designed, inside and out, but I have to say that the installation process really blew me away. It was step based and each set would tell you of any problem. For example I &lt;span title=&quot;PHP: Hypertext Preprocessor (http://www.php.net)&quot; class=&quot;serendipity_glossaryMarkup&quot;&gt;php&lt;/span&gt;&#039;s maximum script memory set to 8M. The script told me it need to be updated to 16M to run it. It was a breeze to install and about 5 minutes later I had a running version of Gallery2.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;Fiddling around with the importer in about 5 more minutes. I got it to import the captions so they would work with Gallery2, and then it just had to run for about 45 minutes (importing, scaling and thumbnailing 1600 pictures).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;The look is excellent, the features are great, installation is as easy as it&#039;s humanly possible, and it doesn&#039;t cost 1 cent.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;You be the judge.&lt;/font&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 02 Oct 2005 17:18:37 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/21-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>SQL: SELECT by priority</title>
    <link>http://www.tanis.dk/blog/archives/20-SQL-SELECT-by-priority.html</link>
            <category>SQL</category>
    
    <comments>http://www.tanis.dk/blog/archives/20-SQL-SELECT-by-priority.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=20</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=20</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;I have been working on a project at work where it should be possible to set up what suppliers are available to our customers and their users. We also wanted to be able to be able to provide the customers with a standard setup (sort of a template) based on what type of product they are using. &lt;/p&gt;&lt;p&gt;Here is the solution I came up with.&lt;/p&gt;&lt;p /&gt;&lt;hr /&gt;&lt;p /&gt;&lt;p&gt;First the tables we already have available:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Column Name&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;CustomerId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Int (PK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CustomerName&lt;/td&gt;&lt;td&gt;Varchar(30)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Office&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Column Name&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;OfficeId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Int (PK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CustomerId&lt;/td&gt;&lt;td&gt;Int (FK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SupplierTemplateId&lt;/td&gt;&lt;td&gt;Int (FK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OfficeName&lt;/td&gt;&lt;td&gt;Varchar(30)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Supplier&lt;/strong&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Column Name&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Int (PK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SupplierName&lt;/td&gt;&lt;td&gt;Varchar(30)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;So then we will need to add a table to hold the templates:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SupplierTemplate&lt;/strong&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Column Name&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierTemplateId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Int (PK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SupplierTemplateName&lt;/td&gt;&lt;td&gt;Varchar(30)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Last but not least we will need a table to hold the actual supplier selection:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SupplierSetting&lt;/strong&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Column Name&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Value&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierSettingId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Int (PK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SupplierId&lt;/td&gt;&lt;td&gt;Int (FK)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SupplierTemplateId&lt;/td&gt;&lt;td&gt;Int (FK) NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CustomerId&lt;/td&gt;&lt;td&gt;Int (FK) NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;OfficeId&lt;/td&gt;&lt;td&gt;Int (FK) NULL&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Enabled&lt;/td&gt;&lt;td&gt;Bit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Priority&lt;/td&gt;&lt;td&gt;Int&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;A setting can either belong to a template, a customer, a registration number or none (which makes it a default setting).&lt;/p&gt;&lt;p&gt;The priority is assigned as follows:&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Condition&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Priority&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;No owner&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Owned by a template&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Owned by a customer&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Owned by a registration&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;So now we can fill in some data:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;CustomerId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;CustomerName&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Test Customer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SupplierTemplate&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierTemplateId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierTemplateName&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Template 1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Office&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;OfficeId&lt;/td&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;CustomerId&lt;/td&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;SupplierTemplateId&lt;/td&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;OfficeName&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 25%&quot;&gt;Test Office&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Supplier&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierId&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;SupplierName&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Test Supplier 1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;WIDTH: 50%&quot;&gt;Test Supplier 2&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Now all that is left is set up the suppliers:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SupplierSetting&lt;/strong&gt;&lt;br /&gt;&lt;table style=&quot;WIDTH: 100%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;1&quot; border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;SupplierSettingId&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;SupplierId&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;SupplierTemplateId&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;CustomerId&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;OfficeId&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;Enabled&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;Priority&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;true&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;false&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;3&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;2&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;true&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;4&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;1&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;NULL&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;false&lt;/td&gt;&lt;td style=&quot;WIDTH: 14%&quot;&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;Here is a textual representation of the above data:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On a global (default) level &#039;Test Supplier 1&#039; is turned on and &#039;Test Supplier 2&#039; is turned off.&lt;/li&gt;&lt;li&gt;On &#039;Test Customer&#039; level &#039;Test Supplier 2&#039; is turned on&#039;&lt;/li&gt;&lt;li&gt;On &#039;Test Office&#039; level &#039;Test Supplier 1&#039; is turned off.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So how do we get this data out so we only have one row per supplier with the correct status? Well, the answer is a SELECT statement with a sub-SELECT to find the highest priority for the current supplier. Enjoy!&lt;/p&gt;&lt;p&gt;Here it is:&lt;/p&gt;&lt;pre&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &quot;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &quot;&gt;DECLARE @OfficeId INT&lt;br /&gt;SELECT @OfficeId = 1&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &quot;&gt;DECLARE @CustomerId INT&lt;br /&gt;DECLARE @SupplierTemplateId INT&lt;br /&gt;SELECT&lt;br /&gt;  &lt;/span&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &quot;&gt;@CustomerId = CustomerId,&lt;br /&gt;  @SupplierTemplateId = SupplierTemplateId &lt;br /&gt;FROM &lt;br /&gt;  Office &lt;br /&gt;WHERE &lt;br /&gt;  OfficeId = @OfficeId&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span lang=&quot;EN-GB&quot; style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: &quot;&gt;SELECT &lt;br /&gt;  * &lt;br /&gt;FROM &lt;br /&gt;  SupplierSetting s1 &lt;br /&gt;WHERE &lt;br /&gt;  (CustomerId  = @CustomerId OR CustomerId IS NULL) AND&lt;br /&gt;  (SupplierTemplateId = @SupplierTemplateId OR SupplierTemplateId IS NULL) AND&lt;br /&gt;  (OfficeId = @OfficeId OR OfficeId IS NULL) AND&lt;br /&gt;  Priority = (&lt;br /&gt;    SELECT &lt;br /&gt;      MAX(Priority) &lt;br /&gt;    FROM &lt;br /&gt;      SupplierSetting s2 &lt;br /&gt;    WHERE &lt;br /&gt;      s1.SupplierId = s2.SupplierId AND&lt;br /&gt;      (CustomerId  = @CustomerId OR CustomerId IS NULL) AND&lt;br /&gt;      (SupplierTemplateId = @SupplierTemplateId OR SupplierTemplateId IS NULL) AND&lt;br /&gt;      (OfficeId = @OfficeId OR OfficeId IS NULL)&lt;br /&gt;  )&lt;/span&gt;&lt;/pre&gt;&lt;p /&gt; 
    </content:encoded>

    <pubDate>Fri, 30 Sep 2005 18:57:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/20-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Regular Expressions is the stuff</title>
    <link>http://www.tanis.dk/blog/archives/18-Regular-Expressions-is-the-stuff.html</link>
            <category>Technical</category>
    
    <comments>http://www.tanis.dk/blog/archives/18-Regular-Expressions-is-the-stuff.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=18</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=18</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;I just found this excellent beginner&#039;s tutorial to &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=55&amp;amp;entry_id=18&quot; title=&quot;http://www.codeproject.com/useritems/RegexTutorial.asp&quot;  onmouseover=&quot;window.status=&#039;http://www.codeproject.com/useritems/RegexTutorial.asp&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;Regular Expressions&lt;/a&gt;. If you don&#039;t know what Regular Expressions are, or know what they are, but not how to use them, I strongly urge you to read the article. Your life will never be the same, well, at least your programming life.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 20 Dec 2004 10:01:30 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/18-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Auto Lock MOD v1.0.0</title>
    <link>http://www.tanis.dk/blog/archives/17-Auto-Lock-MOD-v1.0.0.html</link>
            <category>phpBB</category>
    
    <comments>http://www.tanis.dk/blog/archives/17-Auto-Lock-MOD-v1.0.0.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=17</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=17</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;When running a forum over time, alot of topics become &amp;quot;outdated&amp;quot;. You want to keep them for historical reasons, but you are not really interested in people reviving them by replying to them.&lt;/p&gt;&lt;p&gt;The answer to this problem is the Auto Lock MOD which I have made to solve this exact problem.&lt;/p&gt;&lt;p&gt;After it is installed it is very easy to set up auto-locking. First you have to enable auto-locking on the board in general. This is done on the Configuration page:&lt;/p&gt;&lt;p /&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 654px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;571&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/AutoLock/auto-lock-ss1.png&quot; width=&quot;654&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;You have to enable Auto-locking in the configuration for posts to become automatically locked.&lt;/div&gt;&lt;/div&gt;&lt;p /&gt;&lt;p&gt;Then you have to set up auto-locking for each forum you want to automatically lock posts that have not been posted to in a certain time-frame:&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 654px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;571&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/AutoLock/auto-lock-ss2.png&quot; width=&quot;654&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Then you have to set up the parameters for locking on a per-forum basis. You find these settings when you edit a perticular forum.&lt;/div&gt;&lt;/div&gt;&lt;p /&gt;&lt;h2&gt;Download&lt;/h2&gt;&lt;p&gt;You can donwload the MOD &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=53&amp;amp;entry_id=17&quot; title=&quot;http://www.tanis.dk/distribution/auto-lock-1.0.0em.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.tanis.dk/distribution/auto-lock-1.0.0em.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;here&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;p&gt;You can follow the instructions in the &lt;font face=&quot;courier new,courier,monospace&quot;&gt;auto-lock-1.0.0em.txt&lt;/font&gt;&lt;font face=&quot;verdana,arial,helvetica,sans-serif&quot;&gt; file to install the MOD. The MOD is tested with EasyMOD so for your own convenience you should use that. Read how to use EasyMOD to install a MOD &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=54&amp;amp;entry_id=17&quot; title=&quot;http://www.tanis.dk/blog/exit.php?url_id=18&amp;amp;entry_id=6&quot;  onmouseover=&quot;window.status=&#039;http://www.tanis.dk/blog/exit.php?url_id=18&amp;amp;entry_id=6&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 01 Dec 2004 11:57:12 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/17-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Common Replies (Canned Messages) MOD v1.0.4</title>
    <link>http://www.tanis.dk/blog/archives/16-Common-Replies-Canned-Messages-MOD-v1.0.4.html</link>
            <category>phpBB</category>
    
    <comments>http://www.tanis.dk/blog/archives/16-Common-Replies-Canned-Messages-MOD-v1.0.4.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=16</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=16</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;I got a &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=49&amp;amp;entry_id=16&quot; title=&quot;http://www.phpbb.com/phpBB/viewtopic.php?p=1323405#1323405&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/phpBB/viewtopic.php?p=1323405#1323405&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;request&lt;/a&gt; from &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=50&amp;amp;entry_id=16&quot; title=&quot;http://www.phpbb.com/phpBB/profile.php?mode=viewprofile&amp;amp;u=5244&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/phpBB/profile.php?mode=viewprofile&amp;amp;u=5244&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;richey&lt;/a&gt; on the &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=51&amp;amp;entry_id=16&quot; title=&quot;http://www.phpbb.com/phpBB&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/phpBB&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;phpBB boards&lt;/a&gt; to add common replies to private messages as well as forum messages.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;Version 1.0.4 of my Common Replies MOD adds this functionality.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;You can download it &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=52&amp;amp;entry_id=16&quot; title=&quot;http://www.tanis.dk/distribution/common-replies-1.0.4em.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.tanis.dk/distribution/common-replies-1.0.4em.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 29 Nov 2004 10:09:18 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/16-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Common Replies (Canned Messages) MOD v1.0.3</title>
    <link>http://www.tanis.dk/blog/archives/15-Common-Replies-Canned-Messages-MOD-v1.0.3.html</link>
            <category>phpBB</category>
    
    <comments>http://www.tanis.dk/blog/archives/15-Common-Replies-Canned-Messages-MOD-v1.0.3.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=15</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=15</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    My Common Replies MOD finally (I was just being impatient) got validated. Here is the &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=48&amp;amp;entry_id=15&quot; title=&quot;http://www.phpbb.com/phpBB/viewtopic.php?t=238365&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/phpBB/viewtopic.php?t=238365&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;post&lt;/a&gt; to prove it. 
    </content:encoded>

    <pubDate>Fri, 19 Nov 2004 06:33:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/15-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>&quot;Code Signing&quot; using a personal digital signature</title>
    <link>http://www.tanis.dk/blog/archives/12-Code-Signing-using-a-personal-digital-signature.html</link>
            <category>Technical</category>
    
    <comments>http://www.tanis.dk/blog/archives/12-Code-Signing-using-a-personal-digital-signature.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=12</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=12</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;I have recently accquired a Digital Signature for accessing official Danish sites and for signing and encrypting e-mail.&lt;/p&gt;&lt;p&gt;Today at work I helped a coworker with signing an ActiveX control, that made me consider if my personal digital signature could be used to sign code as well. When I came home I checked the advanced options of my digital signature, and &lt;strong&gt;Code Signing&lt;/strong&gt; was among the certificate purposes:&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 384px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;386&quot; src=&quot;http://www.tanis.dk/blog/uploads/Technical/codesigning1.png&quot; width=&quot;384&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Checking out the advanced options of my digital signature reveals that it can also be used for signing code. Yay!&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Okay, that was really cool. So now onto the details of actually signing the code. &lt;/p&gt;&lt;p&gt;First I downloaded the &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=43&amp;amp;entry_id=12&quot; title=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=2B742795-D0F0-4A66-B27F-22A95FCD3425&amp;amp;displaylang=en&quot;  onmouseover=&quot;window.status=&#039;http://www.microsoft.com/downloads/details.aspx?FamilyID=2B742795-D0F0-4A66-B27F-22A95FCD3425&amp;amp;displaylang=en&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;Microsoft Authenticode Tools&lt;/a&gt; and extracted them to &lt;font face=&quot;courier new,courier,monospace&quot;&gt;C:\Program Files\CodeSign&lt;/font&gt;. To sign an executable I would just need to run signcode.exe. I would however, need the a .cer file containing the public key of my digital signature and a .pvk file containing my private key. The issuer had disabled export to .cer includining the private key, so I had to find a different solution. From the issuers page it was possible to export the key (both public and private) to .pkcs12.&lt;/p&gt;&lt;p&gt;Using the parts of the steps described on &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=44&amp;amp;entry_id=12&quot; title=&quot;http://www.matthew-jones.com/articles/codesigning.html&quot;  onmouseover=&quot;window.status=&#039;http://www.matthew-jones.com/articles/codesigning.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;Matthew Jones&#039; Page&lt;/a&gt; I got the .pkcs12 (which is the same as a .pfx file) converted to a .pem file and then finally to a .pvk file.&lt;/p&gt;&lt;p&gt;To perform these steps you need &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=45&amp;amp;entry_id=12&quot; title=&quot;http://www.slproweb.com/products/Win32OpenSSL.html&quot;  onmouseover=&quot;window.status=&#039;http://www.slproweb.com/products/Win32OpenSSL.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;OpenSSL for Windows&lt;/a&gt; and the &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=46&amp;amp;entry_id=12&quot; title=&quot;http://support.globalsign.net/en/objectsign/PVK.zip&quot;  onmouseover=&quot;window.status=&#039;http://support.globalsign.net/en/objectsign/PVK.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;PVK utility&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;To convert the .pfx file to .pem:&lt;/p&gt;&lt;p&gt;&lt;code&gt;openssl pkcs12 -in sune.pkcs12 -nocerts -nodes -out sune.pem&lt;/code&gt;&lt;/p&gt;&lt;p&gt;To convert the .pem file to .pvk:&lt;/p&gt;&lt;p&gt;&lt;code&gt;pvk -in sune.pem -topvk -out sune.pvk&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Using the cert2spc.exe executable from the authenticode tools I turned my .cer file into a .spc file.&lt;/p&gt;&lt;p&gt;Now I had everything to sign my first file (using Wise for Windows Installer):&lt;/p&gt;&lt;p /&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 837px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;361&quot; src=&quot;http://www.tanis.dk/blog/uploads/Technical/codesigning2.png&quot; width=&quot;837&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Typing in the details needed to digitally sign my installer package for my program Davina&#039;s GGS Timer.&lt;/div&gt;&lt;/div&gt;&lt;p /&gt;&lt;p&gt;or from the command line:&lt;/p&gt;&lt;p&gt;&lt;code&gt;C:\Program Files\CodeSign&amp;gt;signcode.exe -spc sune.spc -v sune.pvk -n &amp;quot;Davina&#039;s GGS Timer&amp;quot; -i http://www.tanis.dk/Products/DavinasGGSTimer -t http://timestamp.verisign.com/scripts/timestamp.dll DavinasGGSTimerInst.exe&lt;/code&gt;&lt;/p&gt;&lt;p&gt;A quick compile and running chktrust.exe from the authenticode tools on my installer exe now gives me this result:&lt;/p&gt;&lt;p /&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 464px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;217&quot; src=&quot;http://www.tanis.dk/blog/uploads/Technical/codesigning3.png&quot; width=&quot;464&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Verifying the digital signature on my signed installation program.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;I&#039;ll be signing my productions from now on.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Thu, 11 Nov 2004 19:45:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/12-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Web Service Interoperability Testing</title>
    <link>http://www.tanis.dk/blog/archives/7-Web-Service-Interoperability-Testing.html</link>
            <category>DotNet</category>
    
    <comments>http://www.tanis.dk/blog/archives/7-Web-Service-Interoperability-Testing.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=7</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=7</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;h3&gt;The Background&lt;/h3&gt;&lt;p&gt;When creating web service today, Web Service Interoperability is getting to be a bigger and bigger issue. There are a number of choices for the server platform, but the it is definately best if the client platform is not restricted in any way. We want everybody to be able to use our web service.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=39&amp;amp;entry_id=7&quot; title=&quot;http://www.ws-i.org/&quot;  onmouseover=&quot;window.status=&#039;http://www.ws-i.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;WS-I&lt;/a&gt; is an organization working towards Web Service Interoperability &amp;quot;across platforms, operating systems, and programming languages&amp;quot;. They have created some profiles that define a number of rules, that should ensure that your web service is interoperable. Ensuring that your web service complies to all these rules would, of course, be a monumental task, so there are ways to automate the actual testing, and that is what I am going to talk about today.&lt;/p&gt;&lt;h3&gt;Getting Started&lt;/h3&gt;&lt;p&gt;First you need to download the WS-I&#039;s Testing Tools which can be found on this &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=40&amp;amp;entry_id=7&quot; title=&quot;http://www.ws-i.org/implementation.aspx&quot;  onmouseover=&quot;window.status=&#039;http://www.ws-i.org/implementation.aspx&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;page&lt;/a&gt;. Since I am talking about Web Service Interoperability in the context of .NET you should get the C# version of the testing tools.&lt;/p&gt;&lt;p&gt;Extract the zip file in the directory where you have your web WSDL file or files of your web service. It should be extracted to a subdirectory called &lt;font face=&quot;courier new,courier,monospace&quot;&gt;wsi-test-tools&lt;/font&gt;.&lt;/p&gt;&lt;h3&gt;Configuration&lt;/h3&gt;&lt;p&gt;Now we need to create a configuration file for the testing tools, here is an example:&lt;/p&gt;&lt;p&gt;&lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt; &amp;lt;configuration xmlns=&amp;quot;http://www.ws-i.org/testing/2003/03/analyzerConfig/&amp;quot;&lt;br /&gt;  xmlns:wsi-common=&amp;quot;http://www.ws-i.org/testing/2003/03/common/&amp;quot;&lt;br /&gt;  xmlns:uddi=&amp;quot;urn://uddi-org/api_v2/&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;This file contains the WS-I testing &lt;br /&gt;   configuration for WebService.&amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;verbose&amp;gt;true&amp;lt;/verbose&amp;gt;&lt;br /&gt;  &amp;lt;assertionResults type=&amp;quot;all&amp;quot; messageEntry=&amp;quot;true&amp;quot; assertionDescription=&amp;quot;true&amp;quot;&lt;br /&gt;   failureMessage=&amp;quot;true&amp;quot; failureDetail=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;reportFile replace=&amp;quot;true&amp;quot; location=&amp;quot;..\..\..\REPORT_WebService.xml&amp;quot;&amp;gt;&lt;br /&gt;   &amp;lt;addStyleSheet href=&amp;quot;wsi-test-tools\common\xsl\report.xsl&amp;quot; type=&amp;quot;text/xsl&amp;quot; alternate=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;  &amp;lt;/reportFile&amp;gt;&lt;br /&gt; &amp;lt;testAssertionsFile&amp;gt;..\..\common\Profiles\BasicProfileTestAssertions.xml&amp;lt;/testAssertionsFile&amp;gt;&lt;br /&gt; &amp;lt;wsdlReference&amp;gt;&lt;br /&gt;  &amp;lt;wsdlElement type=&amp;quot;binding&amp;quot; namespace=&amp;quot;http://tanis.dk/2004/10/29/services.wsdl&amp;quot;&amp;gt;&amp;lt;/wsdlElement&amp;gt;&lt;br /&gt;  &amp;lt;wsdlURI&amp;gt;..\..\..\..\WebService.wsdl&amp;lt;/wsdlURI&amp;gt;&lt;br /&gt;  &amp;lt;serviceLocation&amp;gt;http://tanis.dk/blog&amp;lt;/serviceLocation&amp;gt;&lt;br /&gt; &amp;lt;/wsdlReference&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt; &lt;/p&gt;&lt;p&gt;We also need a batch file to run the tests. It could look like this:&lt;/p&gt;&lt;p&gt;&lt;code&gt;@echo off&lt;br /&gt;cd wsi-test-tools\cs\bin&lt;br /&gt;Analyzer.exe -config ..\..\..\WebServiceConfig.xml&lt;br /&gt;cd ..\..\..&lt;/code&gt;&lt;/p&gt;&lt;h3&gt;Running the tests&lt;/h3&gt;&lt;p&gt;And now we are ready to run our tests:&lt;/p&gt;&lt;p&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; PADDING-RIGHT: 5px; BORDER-TOP: 0px; PADDING-LEFT: 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;338&quot; src=&quot;http://www.tanis.dk/blog/uploads/DotNet/wsi_test_run.png&quot; width=&quot;669&quot; alt=&quot;&quot;  /&gt; &lt;/p&gt;&lt;h3&gt;The output&lt;/h3&gt;&lt;p&gt;After we have run the tests we have a nice viewable report that holds all the different test details, and what went wrong, if some of them failed.&lt;/p&gt;&lt;p&gt;If everything goes well, this is what you should be seeing:&lt;/p&gt;&lt;p&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; PADDING-RIGHT: 5px; BORDER-TOP: 0px; PADDING-LEFT: 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;421&quot; src=&quot;http://www.tanis.dk/blog/uploads/DotNet/wsi-test-1.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt; &lt;/p&gt;&lt;p&gt;If there are any problems with the wsdl, it will show you so:&lt;/p&gt;&lt;p&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; PADDING-RIGHT: 5px; BORDER-TOP: 0px; PADDING-LEFT: 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;421&quot; src=&quot;http://www.tanis.dk/blog/uploads/DotNet/wsi-test-2.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt;&lt;/p&gt;&lt;p&gt;The report contains a summary over all the different tests as defined, and it shows which ones passed or failed:&lt;/p&gt;&lt;p&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; PADDING-RIGHT: 5px; BORDER-TOP: 0px; PADDING-LEFT: 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;421&quot; src=&quot;http://www.tanis.dk/blog/uploads/DotNet/wsi-test-3.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt; &lt;/p&gt;&lt;p&gt;Further down in the report you can read a detailed description of each test. If they failed you will get an explanation why it failed:&lt;/p&gt;&lt;p&gt;&lt;img style=&quot;BORDER-RIGHT: 0px; PADDING-RIGHT: 5px; BORDER-TOP: 0px; PADDING-LEFT: 5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px&quot; height=&quot;421&quot; src=&quot;http://www.tanis.dk/blog/uploads/DotNet/wsi-test-4.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt; &lt;/p&gt;&lt;h3&gt;Conclusion&lt;/h3&gt;&lt;p&gt;Ensuring Web Service Interoperability is not an easy task. There are lots of things to be aware of, but if you align yourself with a few good tools, it might just become easier.&lt;/p&gt;&lt;p&gt;Just my two cents.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 01 Nov 2004 23:20:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/7-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Common Replies (Canned Messages) MOD v1.0.2</title>
    <link>http://www.tanis.dk/blog/archives/10-Common-Replies-Canned-Messages-MOD-v1.0.2.html</link>
            <category>phpBB</category>
    
    <comments>http://www.tanis.dk/blog/archives/10-Common-Replies-Canned-Messages-MOD-v1.0.2.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=10</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=10</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    I just fixed some more problems that were keeping the MOD from being approved at &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=24&amp;amp;entry_id=10&quot; title=&quot;http://www.phpbb.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;phpbb.com&lt;/a&gt;. Nothing too major, but a new released can be downloaded &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=25&amp;amp;entry_id=10&quot; title=&quot;http://www.tanis.dk/distribution/common-replies-1.0.2em.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.tanis.dk/distribution/common-replies-1.0.2em.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;here&lt;/a&gt;.  
    </content:encoded>

    <pubDate>Sun, 31 Oct 2004 07:36:58 +0100</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/10-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Common Replies (Canned Messages) MOD v1.0.1</title>
    <link>http://www.tanis.dk/blog/archives/9-Common-Replies-Canned-Messages-MOD-v1.0.1.html</link>
            <category>phpBB</category>
    
    <comments>http://www.tanis.dk/blog/archives/9-Common-Replies-Canned-Messages-MOD-v1.0.1.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=9</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    I just fixed a couple of problems that were keeping the MOD from being approved at &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=21&amp;amp;entry_id=9&quot; title=&quot;http://www.phpbb.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;phpbb.com&lt;/a&gt;. Nothing too major, but a new released can be downloaded &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=22&amp;amp;entry_id=9&quot; title=&quot;http://www.tanis.dk/distribution/common-replies-1.0.1em.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.tanis.dk/distribution/common-replies-1.0.1em.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;here&lt;/a&gt;.  
    </content:encoded>

    <pubDate>Sat, 30 Oct 2004 07:01:26 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/9-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>S/MIME support in Eudora (or the lack there of)</title>
    <link>http://www.tanis.dk/blog/archives/8-SMIME-support-in-Eudora-or-the-lack-there-of.html</link>
            <category>Software</category>
    
    <comments>http://www.tanis.dk/blog/archives/8-SMIME-support-in-Eudora-or-the-lack-there-of.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=8</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=8</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;I have been a happy user of &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=23&amp;amp;entry_id=8&quot; title=&quot;http://www.eudora.com/email/&quot;  onmouseover=&quot;window.status=&#039;http://www.eudora.com/email/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;Eudora mail&lt;/a&gt; for my home email for years. It has always been an easy program to use and their recent addition of a pretty good junk filter has made it a e-mail client worth mentioning.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font style=&quot;BACKGROUND-COLOR: #faffff&quot;&gt;I have recently acquired an X509 personal certificate for signing and encrypting mail and for authenticating myself with official Danish sites. So today I sat down thinking that it would be cool if I could sign my mails using this certificate. The system that is used to sign MIME based mail is called S/MIME (short for secure MIME), and to my utter surprise Eudora lacks any kind of support for using this.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;A little googling revealed that several plug-ins had existed for this, but they are all discontinued.&lt;/p&gt;&lt;p&gt;I guess it is time for me to find a different email client if I want to digitally sign my messages.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 30 Oct 2004 06:54:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/8-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>
<item>
    <title>Common Replies (Canned Messages) MOD v1.0.0</title>
    <link>http://www.tanis.dk/blog/archives/6-Common-Replies-Canned-Messages-MOD-v1.0.0.html</link>
            <category>phpBB</category>
    
    <comments>http://www.tanis.dk/blog/archives/6-Common-Replies-Canned-Messages-MOD-v1.0.0.html#comments</comments>
    <wfw:comment>http://www.tanis.dk/blog/wfwcomment.php?cid=6</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://www.tanis.dk/blog/rss.php?version=2.0&amp;type=comments&amp;cid=6</wfw:commentRss>
    

    <author>nospam@example.com (Sune Trudslev)</author>
    <content:encoded>
    &lt;p&gt;I have been customizing the excellent free forum system &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=16&amp;amp;entry_id=6&quot; title=&quot;http://www.phpbb.com/&quot;  onmouseover=&quot;window.status=&#039;http://www.phpbb.com/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;phpBB&lt;/a&gt; for almost two years. The modular design and the template system makes phpBB a very pleasent experience from a programming point of view.&lt;/p&gt;&lt;p&gt;Although I have been making many different customizations for phpBB, I had yet to make an officially released MOD. So a couple of weeks back I decided that I would rework one of my current customizations into an actual MOD. The result is this MOD.&lt;/p&gt;&lt;p /&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 621px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;480&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-ss1.png&quot; width=&quot;621&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;The list of the common replies that you have defined, will be available at the bottom of each page, when you are viewing a topic.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The background for making this MOD is that when a community grows with several indiviuals every day, there are bound to be silly questions, wrong behavior, and, misplaced posts. Instead of getting a cramp from writing the same replies over and over, I have made this customization for phpBB.&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 621px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;480&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-ss2.png&quot; width=&quot;621&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;This list of the common replies are also available from the posting page.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The basic idea is that you will have a list of common replies readily available when you are both reading posts and when you are replying to a post.&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 621px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;480&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-ss3.png&quot; width=&quot;621&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;It is possible for members of a group to set up their own customized common replies if it is set up by the administrator.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The common replies are tied to the phpBB group system. You can define a list of common replies that will be available to the members of the group (i.e. moderators) and you can also allow the group members to define their own custom common replies.&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 640px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;420&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-admin-ss1.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Common replies are tied to a phpBB group. You can make different lists of common replies for each group, and the different messages will be available only to the members of those groups. If they are members of more groups they will be able to use all the different lists.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Furthermore it is possible to set up footers for both BBCode-enabled messages and for plain text messages.&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 640px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;420&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-admin-ss2.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;You can define any number of common replies per group, and you can also decide what order they will appear in, so that the most common ones are at the top.&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Both the allowed number of custom common replies and the footers are set up under the group that you want this functionality available to. To set up the list of common replies tied to the group, click the Canned Messages link the administration interface.&lt;/p&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 640px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;420&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-admin-ss3.png&quot; width=&quot;640&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;For each common message you set up the title, the actual message, if BBCode should be enabled and what moderator action will be performed after the message is posted.&lt;/div&gt;&lt;/div&gt;&lt;p /&gt;&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;WIDTH: 754px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img height=&quot;524&quot; src=&quot;http://www.tanis.dk/blog/uploads/phpBB/CommonReplies/common-replies-admin-ss4.png&quot; width=&quot;754&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;For each group you can set up footers for both BBCode messages and for plain text message, and also the number of custom common replies that are allowed for the members of this group.&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;Download&lt;/h2&gt;&lt;p&gt;You can download the MOD &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=17&amp;amp;entry_id=6&quot; title=&quot;http://www.tanis.dk/distribution/common-replies-1.0.0em.zip&quot;  onmouseover=&quot;window.status=&#039;http://www.tanis.dk/distribution/common-replies-1.0.0em.zip&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;p&gt;You can follow the instructions in the &lt;font face=&quot;courier new,courier,monospace&quot;&gt;common-replies-1.0.0em.txt&lt;/font&gt;&lt;font face=&quot;verdana,arial,helvetica,sans-serif&quot;&gt; file to install the MOD. The MOD is tested with EasyMOD so for your own convenience you should use that. Read how to use EasyMOD to install a MOD &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=18&amp;amp;entry_id=6&quot; title=&quot;http://area51.phpbb.com/phpBB22/viewtopic.php?sid=&amp;amp;f=21&amp;amp;t=12140&quot;  onmouseover=&quot;window.status=&#039;http://area51.phpbb.com/phpBB22/viewtopic.php?sid=&amp;amp;f=21&amp;amp;t=12140&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;here&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;Demo&lt;/h2&gt;&lt;p&gt;If you would like to see a live demo of the system, it is available &lt;a href=&quot;http://www.tanis.dk/blog/exit.php?url_id=19&amp;amp;entry_id=6&quot; title=&quot;http://phpbb.tanis.dk/&quot;  onmouseover=&quot;window.status=&#039;http://phpbb.tanis.dk/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;. Username/password: demo/demo.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 23 Oct 2004 15:58:14 +0200</pubDate>
    <guid isPermaLink="false">http://www.tanis.dk/blog/archives/6-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.5/</creativeCommons:license>
</item>

</channel>
</rss>