<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>PaulKroon.com</title>
    <link>https://a296b9b1.paulkroon.pages.dev/</link>
    <atom:link href="https://a296b9b1.paulkroon.pages.dev/feed.xml" rel="self" type="application/rss+xml" />
    <description>web AT paulkroon DOT com</description>
    <language>en-us</language>
    <lastBuildDate>Tue, 18 Oct 2011 00:00:00 +0000</lastBuildDate>
    <item>
      <title>Bizarre Font Distortion When Generating PDFs</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2011/10/18/bizarre-font-distortion-when-generating-pdfs/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2011/10/18/bizarre-font-distortion-when-generating-pdfs/</guid>
      <pubDate>Tue, 18 Oct 2011 00:00:00 +0000</pubDate>
      <category>Uncategorized</category>
      <description><![CDATA[<p>This was a very strange issue, so the title of this post is equally strange.  I don't really expect anyone else to ever see this problem, but just in case...</p>
<p>We use an older application to generate catalogs where I work, and there has been a long-standing issue that has come up from time to time for particular users (since before I even started there).  The problem was that specific users would find that the font did not render correctly when generating the PDF version of the catalog.  This was a non-standard font that was used, which had to be installed, but the font was installed correctly for these users (this was over remote desktop on one computer, and it worked for all other users).</p>
<p>Everything was the same for this user until the PDF was generated.  It was hard to describe (basically the letters seemed squished together), but the font was clearly not the same when compared to a correct version.  To make sure it wasn't just a display issue, it would be saved to be viewed on another computer, but it looked incorrect wherever else it was opened.  The temporary solution for this user was to run the application locally, which seemed to work.  Each time the problem came up again, I would spend some time troubleshooting, and I thought I got close with an Adobe Reader plugin for MS Word that seemed related, but I always came up short.</p>
<p>Fast forward 3 years later, and another instance of the issue arose, and I spent a little more time troubleshooting.  I can't remember what I did to cause the error, but playing around with things led me to a message about some &quot;ActiveReports&quot; VB6 control.  Not having anything else to go on, and thinking that anything saying &quot;reports&quot; might be related to generating this PDF, I started Googling.</p>
<p>I managed to come across this post: <a href="http://www.datadynamics.com/forums/135832/ShowPost.aspx">http://www.datadynamics.com/forums/135832/ShowPost.aspx</a>.  This page described my issue exactly, and even had example screenshots to prove it!  That post pointed me to another forum: <a href="http://www.techspot.com/vb/topic130132.html">http://www.techspot.com/vb/topic130132.html</a>.  It suggested changing the computer's (local computer, not the computer being connected to) screen resolution, which seemed strange, but I gave it a shot.</p>
<p>It actually worked!  I found that certain aspect ratios caused this problem.  For whatever reason, this control generated the PDFs and distorted fonts if run over RDP with a widescreen monitor (or at least having that aspect ratio for screen resolution).</p>
<p>So, in case anyone else out there ever sees distorted PDFs generated by some application they run over RDP, or any other bizarre font distortions, it might be worth checking out your screen resolution and aspect ratio.</p>
]]></description>
    </item>
    <item>
      <title>BackupExec CPS 2010 Snapshot Scheduling</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2011/06/30/backupexec-cps-2010-snapshot-scheduling/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2011/06/30/backupexec-cps-2010-snapshot-scheduling/</guid>
      <pubDate>Thu, 30 Jun 2011 00:00:00 +0000</pubDate>
      <category>System Administration</category>
      <description><![CDATA[<p>A while ago, I set up <a href="http://www.symantec.com/business/products/family.jsp?familyid=backupexec" title="BackupExec Continuous Protection Service 2010">BackupExec Continuous Protection Service 2010</a> (I'd get a direct link to CPS, but I can never find a product page for it).  To give a short summation, it provides quicker backups to disk than Symantec's BackupExec.  If you've used <a href="http://www.microsoft.com/en-us/server-cloud/system-center/data-protection-manager.aspx" title="Microsoft DPM">Microsoft DPM</a>, it's somewhat similar.  You can have schedules such as hourly restore points of servers, or even &quot;continuous&quot; protection, which pulls changes to files on a server as they happen.  The important aspect of this software that is relevant to this article, is that CPS pulls files from the various remote servers onto local disk, and, in order to gain retention points, it uses <a href="http://en.wikipedia.org/wiki/Shadow_Copy" title="shadow copies">shadow copies</a>.  These shadow copies are done with built-in Windows VSS, and are scheduled separately from the backups.</p>
<p>Now to the issue that I had to resolve, and could not find much help in searching online (even my question on <a href="http://serverfault.com/questions/190968/automatic-snapshots-wont-run-on-backupexec-cps-2010" title="ServerFault">ServerFault </a>came up empty).  After configuring these snapshots to run regularly, lets call it hourly, I noticed that they were never kicked off.  I verified the schedule several times, but they never ran when they were supposed to.  I was able to manually run the snapshots (through the CPS console), so it appeared as though the snapshot system was working, but scheduling was not.  I dug in deeper, and found that CPS relied on creating Windows Scheduled Tasks to perform these.  I looked in Scheduled Tasks, and I didn't find anything.</p>
<p>I dug through the event log, and anything else I could think of, and I finally realized that I could not create my own scheduled tasks (I got an Access Denied error!).  I looked at it from a Windows UAC angle (this was <a href="http://www.microsoft.com/en-us/server-cloud/windows-server/default.aspx" title="Windows Server 2008 R2">Server 2008 R2</a>), but that didn't seem to be it.  I finally checked the permissions on the folder where tasks are stored (<em>%windir%\Tasks</em>), and here was where I found my problem.  Write permissions were stripped from this folder.  I later found out this was due to some <a href="http://support.microsoft.com/kb/962007" title="Microsoft KB962007">preventative security measures </a>.  After restoring write access, CPS created the job successfully, and I was up and running.</p>
]]></description>
    </item>
    <item>
      <title>New Site!</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2011/04/30/new-site/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2011/04/30/new-site/</guid>
      <pubDate>Sat, 30 Apr 2011 00:00:00 +0000</pubDate>
      <category>Uncategorized</category>
      <description><![CDATA[<p>So I finally gave in with working on my own blogging site, and went with an install of <a href="http://wordpress.com">WordPress</a>.  I also moved off of my trusty home server onto a <a href="http://linode.com">Linode</a> VPS, to make it seem even more legit.  So far I have liked the ease of use for posting articles, so we'll see if this manages to make me put up more content.</p>
<p>I've also left my <a href="http://oldwww.paulkroon.com">old site</a> up for now while I decide how to integrate the rest of the miscellaneous pages I had.</p>
]]></description>
    </item>
    <item>
      <title>Remember The Milk Time Management</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2010/06/12/remember-the-milk-time-management/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2010/06/12/remember-the-milk-time-management/</guid>
      <pubDate>Sat, 12 Jun 2010 00:00:00 +0000</pubDate>
      <category>Applications</category>
      <description><![CDATA[<p>If you're a system administrator, chances are you're always pressed for time. Between supporting end users, working on new projects, and just maintaining all those systems you administrate, it's hard to find the time to get everything done. I know I've found time management to be a difficult thing to tackle, but there's a book I've read that addresses our particular situation. <a href="http://www.amazon.com/Management-System-Administrators-Thomas-Limoncelli/dp/0596007833"><em>Time Management for System Administrators</em> by Tom Limoncelli</a> is a great read for anyone who either needs help organizing their time, or could use some original and effective strategies for our line of work.  It says &quot;for System Administrators,&quot; but it is a great &quot;getting things done&quot; book for anyone who has a high volume of things to do and a lot of interruptions that create new tasks.</p>
<p>In the book, Limoncelli puts forth a method (called &quot;The Cycle&quot;) to tackle day-to-day tasks in a logical way that maintains task priority, even while being bombarded with more things to do.  I have taken this system and modified it to fit my own needs.  I have been using <a href="http://www.rememberthemilk.com">Remember the Milk (RTM)</a> as a way to implement the system, and I have found it to work perfectly with this method.</p>
<p>For this system, you'll need a single list to store everything you have to work on.  This can eventually be more than one list, such as one for personal, one for work, etc., but you'll want to group large portions of tasks together.  To start, enter all of the things you don't want to forget about, but don't plan on actively working on in the immediate future.  Enter these with no due date, and you can classify them further by priority if you desire.  Next, enter future due dates for any tasks that need to be set aside for a later date (such as following up with a vendor after a week).  Finally, enter a due date of today for everything else.  I should note that even though you're setting this due date of today, that does not necessarily mean you will be working on those tasks today.</p>
<p>For everything that you set due today, you'll need to assign priorities because these tasks will be your list of things that follow you day-to-day until they can be completed.  Limoncelli's system uses A, B, and C, which corresponds perfectly to Remember the Milk (1, 2, 3).  Priority 1 (P1) should be everything you actually plan to do today. Plan this seriously with how much you know you can do, and mark fewer tasks than what you think you'll actually accomplish. Priority 2 (P2) is everything that you need to do tomorrow.  You will change these to P1 tomorrow when you are planning out your day.  Priority 3 (P3) should be for everything else.  At this point, you're all set to begin the daily process of using this system.</p>
<p>According to the system, your day's work will come from all P1 tasks due today.  If you happen to finish those, you can move on to the next priority (tomorrow's work), although this is not expected.  The following day, your tasks jump up a priority, and you have what you're working on that day.  As you're interrupted during the day, you can quickly throw the tasks into P3 for today (for example, &quot;Fix Susan's e-mail configuration today !3&quot;), or at a higher priority as needed.  The key to the system is to document new tasks that come up, but forget about them until it's actually time to do them.  The less brain power you waste on keeping track of things, the more you can spend on actual work.</p>
<p>An added bonus you'll get from RTM is the search list. You can create a search for your daily tasks by searching your main list for everything P1 that's due today. After prepping for the day, you can switch to this search list so you can actually finish everything on your to-do list for the day!   It's very disheartening to look at your list of hundreds of things to do, with no hope of ever emptying it (if you did empty it, you might not have a job :)). This search list lets you complete everything on the list, and actually feel accomplished.</p>
<p>There are several other bonus features that are extremely convenient.  One feature is time estimates.  By filling this in for your tasks, your search list will give a nice total time estimate of how much work you have left for the day. You also will benefit from repeating tasks.  Have to swap a tape every Monday?  A P1 task due every week on Mondays will make sure it's always in your daily list when it's necessary.  Finally, you can have a great repository for all of your completed tasks with RTM.  It's great for job reviews, since you can see everything you've worked on over the year in one convenient location!</p>
<p>This system has definitely increased my productivity, and has helped me make sure nothing falls through the cracks.  Plus, it keeps me motivated by fighting back constant interruptions and letting me see the end of a list to know I accomplished something!</p>
]]></description>
    </item>
    <item>
      <title>Excel VBA Macro to Execute a Stored Procedure</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2009/09/20/excel-vba-macro-to-execute-a-stored-procedure/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2009/09/20/excel-vba-macro-to-execute-a-stored-procedure/</guid>
      <pubDate>Sun, 20 Sep 2009 00:00:00 +0000</pubDate>
      <category>Macros and VBA</category>
      <description><![CDATA[<p>The other day I came across a problem of running an MS SQL 2005 stored procedure in an Excel VBA macro.  I had set this up before with another stored proc, which worked just fine.  Copying this code (and later trying several other ways of doing it) always ended up with a closed recordset being returned.  My exact error was a run-time error 3704 with the message &quot;Operation is not allowed when the object is closed.&quot;  The code looked something like this:</p>
<p>' Create new recordset object
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset</p>
<p>' Get data to populate spreadsheet
' Assign the Connection object.
rs.ActiveConnection = cn</p>
<p>rs.Open &quot;exec database.dbo.storedProcName&quot;, , adOpenDynamic, adLockPessimistic</p>
<p>' The error came up here
Application.Workbooks(&quot;Spreadsheet.xls&quot;).Worksheets(&quot;InvAdj&quot;).Range(&quot;A2&quot;).CopyFromRecordset rs
' Clean up
rs.Close
Set rs = Nothing</p>
<p>There didn't seem to be anything wrong with the proc, which ran fine in the management studio, and the VBA code was identical to what I had used in another macro to do the exact same thing (just return data).  A lot of Googling didn't turn up much, but it sort of led me to believe it had something to do with the temp tables used in it.  Going off of this, I finally found my problem.  The proc was returning multiple recordsets, and the first one I get back after the .Open was empty.  I needed to add the following after the open:</p>
<p>Set rs = rs.NextRecordset()
Set rs = rs.NextRecordset()
Set rs = rs.NextRecordset()</p>
<p>Although ugly, this got me through the other recordsets I got back and let me get to the data I needed.  My hope is that I can get this p
ost crawled enough to show up sooner in some other poor soul's searches for this same problem.</p>
]]></description>
    </item>
    <item>
      <title>&quot;Networking is not installed or properly configured&quot; Error</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2009/07/24/networking-is-not-installed-or-properly-configured-error/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2009/07/24/networking-is-not-installed-or-properly-configured-error/</guid>
      <pubDate>Fri, 24 Jul 2009 00:00:00 +0000</pubDate>
      <category>Windows</category>
      <description><![CDATA[<p>I came across a strange Windows XP networking issue today, and the magic of Google led me towards the right answer.  The computer could not connect to anything on the network, and I noticed that I was not able to join it to an Active Directory domain.  I saw an error message there that said &quot;Networking is not installed or properly configured.&quot;</p>
<p>I found this post describing the same issues I was experiencing: <a href="http://blog.jonschneider.com/2007/04/fix-networking-is-not-installed-or.html">http://blog.jonschneider.com/2007/04/fix-networking-is-not-installed-or.html</a>.  Using this information, I discovered that I could just restart the &quot;Server&quot; service (and making sure it is set to automatic) fixed the issue.  I added this comment to the page on which I found a possible solution (which worked, but was a little more complicated), and others seem to have been able to solve this problem the same way as well.</p>
<p>It just goes to show how useful it is to post solutions to problems online when you don't find the exact answer right away.</p>
]]></description>
    </item>
    <item>
      <title>Sending a plain string to a MS Message Queue in SSIS</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2009/05/29/sending-a-plain-string-to-a-ms-message-queue-in-ssis/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2009/05/29/sending-a-plain-string-to-a-ms-message-queue-in-ssis/</guid>
      <pubDate>Fri, 29 May 2009 00:00:00 +0000</pubDate>
      <category>SSIS</category>
      <description><![CDATA[<p>When dealing with an application that will remain nameless, I needed to use <a title="SQL Server Integration Services" href="http://en.wikipedia.org/wiki/SQL_Server_Integration_Services">SQL Server Integration Services</a> to generate some data, and then put a string into a <a title="Microsoft Message Queue" href="http://en.wikipedia.org/wiki/Microsoft_Message_Queuing">MSMQ</a>.  While trying to get it to work, I went through the MSDN forums; the <a href="http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/0d9c1107-92bb-4ef1-9292-595b4941048f">thread is here</a>.  You can follow it along there, but the basic solution is to add &quot;MessageQueueTransactionType.Single&quot; as the transaction type parameter when sending the Message to the MessageQueue.</p>
<p>For reference, here's my code that worked, but didn't put anything in the queue until I added that transaction type parameter:</p>
<pre><code>Public Sub Main()
        Dim queueMessage As Message
        Dim theQueue As MessageQueue
        Dim messageStream As IO.StreamWriter

        Try
            theQueue = New MessageQueue(&quot;.\private$\queuename&quot;)
        Catch
            MsgBox(&quot;set up queue - &quot; + Err.Description)
            Dts.TaskResult() = Dts.Results.Failure
            Exit Sub
        End Try

        Try
            messageStream = New IO.StreamWriter(New IO.MemoryStream)
            messageStream.Write(Dts.Variables(&quot;XMLString&quot;).Value.ToString())
            messageStream.Flush()

            queueMessage = New Message()
            queueMessage.BodyStream = messageStream.BaseStream
        Catch
            MsgBox(&quot;set up message - &quot; + Err.Description)
            Dts.TaskResult() = Dts.Results.Failure
            Exit Sub
        End Try

        Try
            theQueue.Send(queueMessage)
        Catch
            MsgBox(&quot;send message - &quot; + Err.Description)
            Dts.TaskResult() = Dts.Results.Failure
            Exit Sub
        End Try

        Dts.TaskResult() = Dts.Results.Success

    End Sub
</code></pre>
]]></description>
    </item>
    <item>
      <title>AJAX and PHP WebMail Clients (and other ramblings about apt-get dist-upgrade)</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2009/03/15/ajax-and-php-webmail-clients-and-other-ramblings-about-apt-get-dist-upgrade/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2009/03/15/ajax-and-php-webmail-clients-and-other-ramblings-about-apt-get-dist-upgrade/</guid>
      <pubDate>Sun, 15 Mar 2009 00:00:00 +0000</pubDate>
      <category>Linux</category>
      <description><![CDATA[<p>There was recently an article I saw online (<a href="http://www.slashdot.org">Slashdot</a> or <a href="http://www.lifehacker.com">Lifehacker</a>, I can't remember) about 10 AJAX and PHP webmail clients.  The article is <a href="http://www.noupe.com/ajax/10-ajax-webmail-clients.html">here</a>.  I check them all out one night and I ended up liking <a href="http://roundcube.net/">RoundCube</a> the best.  Since I started trying out <a href="http://blog.ilohamail.org/">IlohaMail</a> for a webmail client with my IMAP server, which was very plain and not very user-friendly at the time, I figured it would be a good opportunity to give it a try.</p>
<p>I installed it on my laptop, just to test it out, and it worked great.  I immediately brought it to my server to set up and start using.  There is a good installer built-in to help with any initial configuring, but it's only really 2 config files and some permission setting, so I just copied it over from my laptop and edited the configs.  Unfortunately, I found that it uses a command (<a href="http://www.php.net/mb_check_encoding">mb_check_encoding</a>) that requires a higher version of PHP than what I was running.  Since I update every night, I found out that my installation of Ubuntu Dapper was getting pretty old.  I figured this would be as good a time as any to upgrade...</p>
<p>I ended up upgrading from Ubuntu Dapper to Ubuntu Hardy, which led to problems with php5-mysqli (it became a part of php5-mysql, but I hadn't done a complete upgrade yet).  After I finally got everything settled, I attempted a reboot to get the new kernel.  Of course, this led to more problems with <a href="https://wiki.ubuntu.com/Evms">Evms</a>.  My /etc/fstab was changed to include those stupid &quot;UUID&quot; entries instead of the actual devices (ie, /dev/hda1).  After booting into the old kernel, editing the fstab, and removing evms (I noticed the problem originally because it spit out a kernel message like &quot;dm-linear device lookup failed&quot; every half a second), I was back in business.  Plus, as a nice bonus, <a href="http://ivtvdriver.org/index.php/Main_Page">IVTV</a> is now built in to the kernel, so I don't have to worry about adding it as a module anymore.</p>
<p>So, to get back to my original topic, <a href="http://roundcube.net/">RoundCube</a> is a very nice webmail client, which I found out when writing this uses IlohaMail code for handling IMAP.  It uses AJAX in a way that makes it easier to use the application, but doesn't go overboard.  It very simply handles your IMAP mail and folders, and has an additional address book.  It's perfect for getting to your e-mail quickly when you're at someone else's computer.</p>
]]></description>
    </item>
    <item>
      <title>Installing Google Gears on Ubuntu 64-bit</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2009/03/15/installing-google-gears-on-ubuntu-64-bit/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2009/03/15/installing-google-gears-on-ubuntu-64-bit/</guid>
      <pubDate>Sun, 15 Mar 2009 00:00:00 +0000</pubDate>
      <category>Linux</category>
      <description><![CDATA[<p>As an avid user of <a href="http://www.rememberthemilk.com">Remember the Milk</a>, I recently noticed that my offline support wasn't installed on my Linux laptop (Ubuntu 8.04, 64-bit).  I went to install <a href="http://gears.google.com/">Google Gears</a> for this, but realized that it was only available for 32-bit at the time.  A little bit of Googling and I found <a href="http://www.jaduncan.com/2009/02/gears-on-64-bit-gnulinux.html">this site</a>.  This guy put together the .xpi files for a patched version, which I have found to work completely normally.</p>
<p>Just in case it becomes unavailable at that site, <a href="/files/gears-linux-opt-05110.xpi">here</a> is the latest version I downloaded from there.  Note that he says it is current as of February 2, 2009, so it could become outdated pretty soon, but at least it's here until there is an official version out for 64-bit.</p>
]]></description>
    </item>
    <item>
      <title>How to Use BGP++ for Simulations</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2007/04/29/how-to-use-bgp-for-simulations/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2007/04/29/how-to-use-bgp-for-simulations/</guid>
      <pubDate>Sun, 29 Apr 2007 00:00:00 +0000</pubDate>
      <category>Networking</category>
      <description><![CDATA[<p>Below is an old, partially complete tutorial I had up on my old site.  If I ever get around to it, I'll update this with the rest of the tutorial.</p>
<h2><span style="font-size: 15px;">Installing BGP++</span></h2>
The first step in doing some network simulations is to actually build and install the simulator. I chose to use a very common one called <a href="http://www.isi.edu/nsnam/ns/">ns2</a>. In order to do simulations of BGP, you'll need a patch called <a href="http://www.ece.gatech.edu/research/labs/MANIACS/BGP++/">BGP++</a>. BGP++ is basically a port of a program called <a href="http://www.zebra.org/">Zebra</a>, and is placed inside the ns2 code so that it can do BGP simulations. With that out of the way, you'll want to start downloading the source code. You can get the BGP++ code from <a href="http://www.ece.gatech.edu/research/labs/MANIACS/BGP++/">here</a>, and the ns2 code from <a href="http://www.isi.edu/nsnam/ns/ns-build.html">here</a>. You should be careful to make sure that the version of the patch is intended for the version of ns2 that you download.
<p>However, instead of downloading the code from the sites, which is very old by now, you may want to consider downloading <a href="/files/ns-allinone-2.26.tar.gz">my set of the code</a>. I have already gone through and made several changes to fix various compiling errors. Inside of the tarball, you'll find errorCorrections.txt that explains some of the fixes. You'll need to make sure that you have gcc-3.3 and gcc-4.1 installed, as both were needed during the compiling. You will only need to execute the &quot;install&quot; script with <code>./install</code>, but there is a good chance you'll come across some errors, which you'll have to figure out what to fix. With any luck, this will only be with dependency issues because I have already gone through most of the current problems. Note that my set of the code has been run as of April 9, 2008, so the longer it has been since then, the better the chances of issues developing. Feel free to send me an email if you have questions, and I can try to help you out some.</p>
]]></description>
    </item>
    <item>
      <title>A Measurement-Based Study of the Optimal Value of DNS Timeouts</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2007/03/06/a-measurement-based-study-of-the-optimal-value-of-dns-timeouts/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2007/03/06/a-measurement-based-study-of-the-optimal-value-of-dns-timeouts/</guid>
      <pubDate>Tue, 06 Mar 2007 00:00:00 +0000</pubDate>
      <category>Networking</category>
      <description><![CDATA[<p><span style="font-size: 15px; font-weight: bold;">A Measurement-Based Study of the Optimal Value of DNS Timeouts</span></p>
<p>While in college at <a href="http://www.ursinus.edu">Ursinus</a>, I did a research paper over a summer and a semester on DNS.  Below are links to my paper, the tools I used, and my abstract.</p>
<table border="0" cellspacing="7">
<tbody>
<tr>
<td><a href="/files/abstract.pdf">Abstract</a></td>
<td><a href="/files/paper.pdf">Paper</a></td>
<td><a href="/files/tools.tar.gz">Tools (tar.gz)</a></td>
<td><a href="/files/tools.zip">Tools (zip)</a></td>
</tr>
</tbody>
</table>
<p id="brief">The Domain Name System (DNS) is an Internet service that allows domain names, such as www.ursinus.edu, to be used in place of IP addresses, such as 198.17.40.106. DNS is consulted every time a host attempts to use a domain name for email, instant messaging, and many other Internet applications. Despite having been developed over 20 years ago, DNS is extremely robust. However, it is still possible for errors to occur. Since DNS queries and responses are sent via UDP, DNS implements its own reliability mechanism. When a system does not respond to a query, another request is sent after a timeout under the assumption that an error occurred. Our research explored the plausibility of reducing the default timeout for DNS queries.</p>
To examine this timeout we used several methods and scripts to compile a large list of remote nameservers. We then measured the round-trip times from a local DNS server to a sample of the remote nameservers. We found that the vast majority of round-trip times were less than 1 second. We noted that current implementations of nameservers use a default timeout starting at 5 seconds. We therefore propose that the default timeout can be significantly reduced, noticeably enhancing user-perceived performance while limiting the overall negative impact on the network.
]]></description>
    </item>
    <item>
      <title>Ubuntu Wireless Manual Setup on Dell D610 with Active Directory Authentication</title>
      <link>https://a296b9b1.paulkroon.pages.dev/2006/04/29/ubuntu-wireless-manual-setup-on-dell-d610-with-active-directory-authentication/</link>
      <guid isPermaLink="true">https://a296b9b1.paulkroon.pages.dev/2006/04/29/ubuntu-wireless-manual-setup-on-dell-d610-with-active-directory-authentication/</guid>
      <pubDate>Sat, 29 Apr 2006 00:00:00 +0000</pubDate>
      <category>Linux</category>
      <description><![CDATA[<h3>Setting Up Ursinus Wireless in Ubuntu Dapper on Latitude D610</h3>
In order to get the wireless working on the Ursinus Dell Latitude D610 laptops under Ubuntu Dapper, two mains steps are required. First, ndiswrapper must be installed to get the laptop to recognize the wireless card. Second, wpa_supplicant must be installed and configured to allow connection to the Ursinus wireless network.
<p> </p>
<h4>To install ndiswrapper:</h4>
<pre><code>&lt;em&gt;sudo apt-get install ndiswrapper-utils&lt;/em&gt;
</code></pre>
<p>*It is possible that ndiswrapper is already installed.</p>
<p><strong>Update:</strong> I have found that the version of ndiswrapper in the repositories (1.8 as of 3/6/07) does not work properly. The solution has been to install a newer version (1.31 is what I got to work) from the current version of the <a href="http://sourceforge.net/project/showfiles.php?group_id=93482">code</a>. Follow the INSTALL instructions found with the source code. If you encounter problems, an error with &quot;modpost&quot; or something similar, you probably need to install the kernel headers. This should be enough to install them:</p>
<pre><code>&lt;em&gt;sudo apt-get install linux-headers-`uname -r`&lt;/em&gt;
</code></pre>
<p>Next, we need to make sure that Ubuntu isn't trying to use a driver of its own:</p>
<pre><code>&lt;em&gt;sudo gedit /etc/modprobe.d/blacklist&lt;/em&gt;
</code></pre>
<p>Check this file to see if you can find &quot;blacklist bcm43xx&quot;. If you don't see it, add it to the bottom of that file, save it, then close gedit. Now make sure that the kernel isn't using any driver currently with:</p>
<pre><code>&lt;em&gt;
modprobe -r bcm43xx
modprobe -r ndiswrapper
&lt;/em&gt;
</code></pre>
<p>Now we need to set up ndiswrapper. You'll need to get the driver files for the card for Windows. You can try to find them in your Windows partition if it's mounted by <code>locate bcmwl5.inf</code>. Otherwise, you can just download it from <a href="http://ftp.us.dell.com/network/R115320.EXE">Dell</a>. Once you have this downloaded, you can extract the driver with <code>&lt;em&gt;unzip R115320.EXE&lt;/em&gt;</code>. Now you'll need to find bcmwl5.inf in the files that were just extracted. Once you find it, this will install it and set ndiswrapper up with it:</p>
<pre><code>&lt;em&gt;
ndiswrapper -i bcmwl5.inf
ndiswrapper -m
&lt;/em&gt;
</code></pre>
<p>You can use <code>ndiswrapper -l</code> to make sure it installed correctly.</p>
<p>Now restart your computer. When it starts back up do the following:</p>
<pre><code>&lt;em&gt;dmesg | grep ndiswrapper&lt;/em&gt;
</code></pre>
<p>You should see lines similar to:</p>
<pre><code>&lt;em&gt;
[89.36] ndiswrapper version 1.8 loaded (preempt=yes,smp=no)
[189.40] ndiswrapper: driver bcmwl5 (Broadcom,12/22/2004, 3.100.46.0) loaded
[19.46] ndiswrapper: using irq 209
[10.66] wlan0: ndiswrapper ethernet device 00:00:00:00:00:00 using driver
bcmwl5, 14E4:4318.5.conf
&lt;/em&gt;
</code></pre>
<p>If you don't, try <code>modprobe ndiswrapper</code> and then try the dmesg again. If this fixes the problem, you may need to add &quot;ndiswrapper&quot; to the bottom of /etc/modules.
<em>[4363141.967000] bcm43xx: Error: Microcode &quot;bcm43xx_microcode5.fw&quot; not available or load failed.</em> You can check to make sure that the card is working properly with the kernel with:</p>
<pre><code>&lt;em&gt;iwconfig&lt;/em&gt;
</code></pre>
<p>You should notice an interface possibly named &quot;wlan0,&quot; but it could also be an &quot;eth&quot; interface. Either way, it should be obvious that it is there, primarily from the top line that should be something like:</p>
<pre><code>&lt;em&gt;IEEE 802.11g  ESSID:off/any&lt;/em&gt;
</code></pre>
<p>If you have this, then you should now be ready to connect to a wireless signal. You can scan to see what is around with:</p>
<pre><code>&lt;em&gt;iwlist scan&lt;/em&gt;
</code></pre>
<p>If you have a router, or some other security-disabled network around, you can connect to it by doing:</p>
<pre><code>&lt;em&gt;
iwconfig wlan0 essid &quot;ssid&quot;
sudo ifup wlan0
&lt;/em&gt;
</code></pre>
<p>You'll need to replace wlan0 if your interface is different and ssid with the appropriate site ID.</p>
<p> </p>
<h4>To install wpa_supplicant</h4>
<pre><code>&lt;em&gt;sudo apt-get install wpa_supplicant&lt;/em&gt;
</code></pre>
<p>After this is installed, you'll need to configure it:</p>
<pre><code>&lt;em&gt;sudo gedit /etc/wpa_supplicant.conf&lt;/em&gt;
</code></pre>
<p>The setup for UC should be:</p>
<pre><code>&lt;em&gt;
network={
    ssid=&quot;ursinus&quot;
    key_mgmt=IEEE8021X
    scan_ssid=1
    eap=PEAP
    identity=&quot;URSINUS\username&quot;
    password=&quot;password&quot;
    phase1=&quot;peaplabel=0&quot;
    phase2=&quot;auth=MSCHAPV2&quot;
}
&lt;/em&gt;
</code></pre>
<p>Add this to the bottom of that file, substituting username and password for your Ursinus username and password. To make sure that your password is better protected, run:</p>
<pre><code>&lt;em&gt;
sudo chmod 700 /etc/wpa_supplicant.conf
sudo chown root:root /etc/wpa_supplicant.conf
&lt;/em&gt;
</code></pre>
<p>This will make sure that only root can read this file.</p>
<p>In order to start wpa_supplicant, run:</p>
<pre><code>&lt;em&gt;wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -D wext -B&lt;/em&gt;
</code></pre>
<p>Replace &quot;wlan0&quot; as necessary. You can set this up to run at boot by:</p>
<pre><code>&lt;em&gt;sudo gedit /etc/init.d/wpa_supplicant&lt;/em&gt;
</code></pre>
<p>Add:</p>
<pre><code>&lt;em&gt;
#!/bin/bash
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -D wext -B
&lt;/em&gt;
</code></pre>
<p>Then run:</p>
<pre><code>&lt;em&gt;
sudo chmod +x /etc/init.d/wpa_supplicant
sudo update-rc.d wpa_supplicant defaults
&lt;/em&gt;
</code></pre>
<p>Now you should be able to connect to the &quot;ursinus&quot; network in the same method as above:</p>
<pre><code>&lt;em&gt;
iwconfig wlan0 essid &quot;ursinus&quot;
sudo ifup wlan0
&lt;/em&gt;
</code></pre>
<p> </p>
<h3>Extra modifications:</h3>
<h4>Keeping the Interface Names the Same</h4>
If the interface name "wlan0", "eth0", etc., changes often after rebooting, causing problems with wpa_supplicant, you can change a few things to help make sure it stays the same.
<pre><code>&lt;em&gt;sudo gedit /etc/network/interfaces&lt;/em&gt;
</code></pre>
<p>Edit this file by removing the interfaces you don't want the wireless to use if it's there, and add the following lines using the interface name you want to use:</p>
<pre><code>&lt;em&gt;
auto wlan0
iface wlan0 inet dhcp
&lt;/em&gt;
</code></pre>
<p>Also, you can edit /etc/iftab and make sure that the interface name for the wireless is what you want it to be.</p>
<h4>Additional Configuring for wpa_supplicant</h4>
You can use `man wpa_supplicant` or search Google for more information about configuring wpa_supplicant to suit your needs, but a common one is using WPA-PSK, or WPA security with a passphrase. wpa_supplicant comes with a program to do this work for you. Run the following command to add the settings to the configuration file, replacing ssid and the passphrase:
<pre><code>&lt;em&gt;sudo wpa_passphrase ssid passphrase &gt;&gt; /etc/wpa_supplicant.conf&lt;/em&gt;
</code></pre>
<p> </p>
<h2>Updates</h2>
<h3>Tuesday, March 6, 2007</h3>
<ul>
	<li>Version of ndiswrapper doesn't seem to work, need to compile from source with newer version</li>
	<li>The "microcode" error message relates to the bcmwxx module, not a problem when using ndiswrapper. Taken out of howto because the driver is not ready to be used in place of ndiswrapper.</li>
	<li>There seems to be some error when running wpa_supplicant with the driver specified to be ndiswrapper. If wpa_supplicant gives you problems with ndiswrapper, use wext. If wext gives you problems, try ndiswrapper.</li>
</ul>
&nbsp;
]]></description>
    </item>
  </channel>
</rss>
