<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Trausch’s Little Home &#187; random thoughts</title>
	<atom:link href="http://mike.trausch.us/blog/category/random-thoughts/feed/" rel="self" type="application/rss+xml" />
	<link>http://mike.trausch.us/blog</link>
	<description>My writing on life, computers, and technology</description>
	<lastBuildDate>Wed, 09 Feb 2011 18:16:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Let&#8217;s remember: This is not a &#8220;P.C.&#8221; zone.</title>
		<link>http://mike.trausch.us/blog/2010/09/02/lets-remember-this-is-not-a-p-c-zone/</link>
		<comments>http://mike.trausch.us/blog/2010/09/02/lets-remember-this-is-not-a-p-c-zone/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 17:51:42 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=625</guid>
		<description><![CDATA[Someone recently brought to my attention that I&#8217;ve offended/hurt someone by the (by now, months old) words on my blog. That is perfectly fine. I&#8217;m not here to be a politically correct person. This is my space on the Internet—and I&#8217;ll say what I like here. You know how I believe in freedom and its [...]]]></description>
			<content:encoded><![CDATA[<p>Someone recently brought to my attention that I&#8217;ve offended/hurt someone by the (by now, months old) words on my blog.</p>
<p>That is perfectly fine. I&#8217;m not here to be a politically correct person. This is my space on the Internet—and I&#8217;ll say what I like here. You know how I believe in freedom and its natural limitations? No? Well, I&#8217;ll say this until the day that I die: one person&#8217;s freedom ends where another person&#8217;s freedom begins. I&#8217;m free to say what I like, and you&#8217;re free to read it in any way you like or even not at all. Now, I won&#8217;t talk about other people by name on my blog unless I have permission to do so—especially if I&#8217;ve nothing positive to say, so don&#8217;t say that I&#8217;m not being at least a bit nice to you—but if I write a post here and it&#8217;s about you and you know that from nothing other than reading that post, maybe that is saying something more than what I have said here. If that has ever been the case in the past, or if it ever becomes the case in the future, then know this: it&#8217;s better you read what I have to say about you here, than wish that I were willing to spew my unfettered anger in your direction in person. And shoot, if you&#8217;re doing things that are illegal (such as running unlicensed proprietary software) and I haven&#8217;t turned your ass into law enforcement, you should be thanking whatever deity you believe in. Honestly.</p>
<p>Anyone who knows me—even if they do not know me well—knows that there is <em>absolutely nothing</em> that will make me angry like willful ignorance.  “Ignorance is bliss,” as the saying goes, but ignorance when combined with the lack of desire to fix it in what you claim to be a domain of specialized knowledge which you possess is just plain inexcusable. If you manage a network, you should know the basics of how it all works. There are people that I know that manage Windows networks and know nothing—not even the high level overview—of how Windows networking actually works beyond the painted pixels on the screen. Guess what? That means that you really do not know what you&#8217;re doing.</p>
<p>And lest anyone get offended or butt-hurt over being called ignorant, don&#8217;t. Let&#8217;s remember what ignorance actually means, and remember that it&#8217;s not an insult or a sleight against anyone—everyone is ignorant about many things, even in their own fields of work and expertise. However, <strong>willful ignorance in one&#8217;s own field</strong>—that is, ignorance that you&#8217;re not willing to fix all on your own like a big boy or girl—is absolutely something that you should be offended at! <strong><span style="font-weight: normal;">It is simply not possible for a single human being to know everything, even in his or her own specialty.  We have reference works, documentation, and vast seas of information in every field that I can think of, more than can fit in a human brain. But what matters is that you know what you know, and know what you don&#8217;t, and know how to find it out quickly and efficiently. And that means having a sort of self-initiative. </span><span style="font-weight: normal;"><em>And for that matter, I&#8217;ll even point people in the right direction</em></span><span style="font-weight: normal;">, if they&#8217;re willing to do the legwork themselves to decipher the information once I&#8217;ve pointed them at it. I certainly don&#8217;t spoon-feed though, and if you expect that (in your own field, no less!) then I will stand by my assertion that you should not work in that field at all. And I will stand by that assertion whole-heartedly, no matter how much that gives a person pain.</span></strong></p>
<p><strong><span style="font-weight: normal;">If you&#8217;re ignorant about something that you never do nor have a desire to do—say, you&#8217;re an auto mechanic and you don&#8217;t care to know how to sew or crochet—then that&#8217;s fine; that&#8217;s your choice! But if you work in a field, and you learn that there is something that you don&#8217;t know, <em>then learn it</em>. Or at least learn where you can learn it when you need to, and get a friggin&#8217; overview in your head. Read any single RFC and you&#8217;ll realize that there is no way that any of us can memory every single detail of every single specification for every single type of system that we manage. It&#8217;s just not possible without spending so much time studying that as to make it impossible to get anything useful actually accomplished. But if you manage a mail server and you don&#8217;t know the first thing about SMTP or POP3 or IMAP or whatever-else protocols your mail clients and servers are using, yes, that&#8217;s a problem. You certainly do not need to be able to have a conversation with your SMTP server, but you should know how to look up just how to do to that should you ever have to do any really low-level troubleshooting or log capturing. You shouldn&#8217;t need to know how to speak any application layer network protocol directly for that matter (though a lot of the text based ones are simple enough that you can learn them as needed over time). But you absolutely should know how to find the information that tells you how to speak those protocols if ever you have a need. And you should know enough to be able to make intelligent decisions on things like physical network infrastructure, management of your client and server operating systems, and so forth.</span></strong></p>
<p><strong><span style="font-weight: normal;">As an example: I am <em>nowhere close</em> to an expert on Windows—and I <em>know this</em>. (I will say that I know an awful lot about the way Windows bootstraps itself, as I have had to fix systems with multiple infections <em>by hand</em> because there were no automatic tools available to fix the system… but that does not make me an expert on the whole system, and probably not even the bootstrapping process of the system.) But I will research any issues that I encounter while supporting Windows users and find out—empirically, if I must—how to fix the problem. It&#8217;s what I do. And there are many, many places where I can find that sort of information, including booting up a copy of Windows itself and trying to figure it out that way. It does probably take me a lot longer than it would take someone who knows the system in and out, and I&#8217;ll grant that. I am absolutely the strongest on POSIX/UNIX-family systems. But that doesn&#8217;t stop me from being able to learn it and handle it. Even if it does take longer.</span></strong></p>
<p><strong><span style="font-weight: normal;">The difference between me and the unidentified person in my last post? I&#8217;ll spend any resources necessary—time, money, effort—to learn what I need to learn to get the job done. I don&#8217;t cut corners. My goal isn&#8217;t to get everything done sloppy and fast. Even if it takes me longer, I&#8217;d rather know and understand the problem—and its solution!—completely before moving forward with doing anything about it. Especially if I can find a short-term workaround that will enable me to come up with a quality solution. I eschew willful ignorance in my field. Do you?</span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/09/02/lets-remember-this-is-not-a-p-c-zone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On small offices and computer configurations</title>
		<link>http://mike.trausch.us/blog/2010/03/07/on-small-offices-and-computer-configurations/</link>
		<comments>http://mike.trausch.us/blog/2010/03/07/on-small-offices-and-computer-configurations/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 12:14:11 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=597</guid>
		<description><![CDATA[So for the past couple of weeks I have been doing work at a client’s place of business. This client—like many other small and medium-sized businesses—uses Windows on all of their desktop systems. They have a couple of server boxes that are running GNU/Linux servers, but they are not running GNU/Linux on the desktop at [...]]]></description>
			<content:encoded><![CDATA[<p>So for the past couple of weeks I have been doing work at a client’s place of business. This client—like many other small and medium-sized businesses—uses Windows on all of their desktop systems. They have a couple of server boxes that are running GNU/Linux servers, but they are not running GNU/Linux on the desktop at this point in time.</p>
<p>So, this is a pretty simple-sounding network, yes? It should be—it is just a handful of computer systems. However, there is a problem—a pretty large one, I think. There is very little in the way of either policy or convention on the network. Some users use their documents directory for storing their documents, others store their documents on their desktop, others somewhere differently altogether on the C drive, others on a network share in a public storage space. There are different versions of software on the various machines, more-or-less updated when someone thinks about it, I think.</p>
<p>This is a perfect scenario which shows why a business network should be centrally managed in some form. Note that I am <em>not</em> saying that each machine should be a bit-for-bit mirror image of the one next to it, though that is certainly a possibility. I think that people should be able to use their own choice of things like email client or Web browser software, because everyone is different. But when you have different client applications fulfilling a role on the individual workstations, you have to take a centralized approach to ensuring that things like the email is all backed up.</p>
<p>Furthermore, if you <em>don’t</em> take a centralized approach to backing up such data, it is <em>very</em> difficult to centralize the network storage. Think about adding a domain controller (that is Windows speak for a central server which handles authentication and authorization, as well as file and printer sharing and things like roaming profiles) to such a network. I expect that with multi-gigabyte mail files, things will be <em>very</em> slow at first—and that likely the only fix for them that is going to be viable in the long term is to centralize more infrastructure.</p>
<p>I am too tired to expand more on my thoughts on what I have learned and where it is heading, but the <em>Reader’s Digest</em> version of the point reads something like this: If you are a small to medium sized business, make sure that you have someone who is competent in both system and network administration, and <em>make sure that they are a part of your business from day one</em>. Like writing software, building up a technical infrastructure without careful thought and design is hazardous and comes with many hidden and unpredictable costs. It is best to head those things off right from the start; to delay only amplifies the cost of fixing the underlying problems and puts oneself in the position where fixing one issue can have a domino-like effect and create more new problems.</p>
<p>For my current situation, I think I am going to have to seriously re-think how this whole setup is done. What I do not yet know is how to quickly and efficiently bring things into shape. A bit of training and education may be required, and certainly the removal of a lot of unnecessarily-granted privileges on the workstations. That, too, should be something caught early-on: do not let every person in a business run with administrator privilege, unless they <em>are</em> an administrator (and even they should only run with administrator privilege when they are actually doing something that requires that privilege). If everyone is an administrator, there is little to no control on how things are done in a network, and it can get messy.</p>
<p>I have a lot more reading to do, as well.</p>
<p>Well, anyway, it is <em>way</em> past my bedtime.  Time for sleep.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/03/07/on-small-offices-and-computer-configurations/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Uniform Driver Interface—why wasn&#8217;t it adopted?</title>
		<link>http://mike.trausch.us/blog/2010/03/03/the-uniform-driver-interface%e2%80%94why-wasnt-it-adopted/</link>
		<comments>http://mike.trausch.us/blog/2010/03/03/the-uniform-driver-interface%e2%80%94why-wasnt-it-adopted/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 23:31:53 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=592</guid>
		<description><![CDATA[Every now and again, I come back to looking at device drivers and driver-writing, and I wonder why there is not some common interface for device drivers. What would the world be like if we could write a device driver for Linux, and be able to use it on FreeBSD without modification? There was a [...]]]></description>
			<content:encoded><![CDATA[<p>Every now and again, I come back to looking at <a href="http://en.wikipedia.org/wiki/Device_driver">device drivers</a> and driver-writing, and I wonder why there is not some common interface for device drivers. What would the world be like if we could write a device driver for Linux, and be able to use it on FreeBSD without modification? There was a project called the <a href="http://www.projectudi.org/">Uniform Driver Interface</a>, which aimed to create a common specification (both <a href="http://en.wikipedia.org/wiki/API">API</a> and <a href="http://en.wikipedia.org/wiki/Application_binary_interface">ABI</a>) for drivers such that they could be used portably between operating systems. In other words, a device manufacturer could create a device (say, a <a href="http://en.wikipedia.org/wiki/SATA">SATA</a> chipset) once, and it could then be used by <a href="http://en.wikipedia.org/wiki/Linux">Linux</a>, <a href="http://en.wikipedia.org/wiki/FreeBSD">FreeBSD</a>, <a href="http://en.wikipedia.org/wiki/NetBSD">NetBSD</a>, <a href="http://en.wikipedia.org/wiki/OpenBSD">OpenBSD</a>, <a href="http://en.wikipedia.org/wiki/Haiku_(operating_system)">Haiku</a>, <a href="http://en.wikipedia.org/wiki/Microsoft_Windows">Windows</a>, <a href="http://en.wikipedia.org/wiki/Mac_OS_X">OS X</a>, or any other <a href="http://en.wikipedia.org/wiki/Operating_system">operating system</a> that chose to implement the UDI specification (or, honestly, <em>any</em> generic, OS-independent driver specification).</p>
<p>The <a href="http://en.wikipedia.org/en/Free_Software_Foundation">Free Software Foundation</a> <a href="http://www.gnu.org/philosophy/udi.html">objected to UDI</a> for various reasons. Mostly, I think, it was because they were afraid that people who are not them would choose to use drivers that were non-free. As I&#8217;ve written about before here, there are people who think that forcing people to use <a href="http://en.wikipedia.org/wiki/Free_software">free software</a> is somehow freedom—and I will not go into it in any great depth here, because I have done that in the past. Suffice it to say that forcing <em>anything</em> is not freedom; it cannot be freedom. So, the Free Software Foundation, I think, was really afraid that they would have to do more work to be able to stick to their own requirement of using 100% free software on their own computer systems. (And hey, Roy, if you&#8217;re reading—I&#8217;m not saying that the FSF is wrong, and I&#8217;m not putting myself in a position opposite of that of the FSF. I suspect you think so anyway, but hey, I just figured I would point that out.)</p>
<p>Even if the free software operating systems did not adopt the UDI specification, why didn&#8217;t proprietary operating systems? This is perhaps the most puzzling thing to me. It seems that in this event, <em>none</em> of the operating systems—free or proprietary—did what would have made sense. After all, even if <em>only</em> <a href="http://en.wikipedia.org/wiki/Apple_Inc.">Apple</a> and <a href="http://en.wikipedia.org/wiki/Microsoft_Corporation">Microsoft</a> adopted a common device driver specification, that would save a lot of time, effort, and improve user experience all the way around. Apple users would be able to use all the hardware that Microsoft users could use—and the inverse would also be true. The amount of time that device driver authors would have to spend writing and debugging driver code would go <em>way</em> down—free software driver authors would be able to write a driver <em>once</em>, for example, and all systems (including free software systems that chose to support the specification) would benefit.</p>
<p>I could see an objection of a driver specification that was binary-only. However, UDI was not—it mandated an ABI so that drivers that are built for a particular platform were binary-compatible with operating systems on the same platform, but it also mandated an API, so that drivers would be source compatible to <em>any</em> operating system that implemented the specification, on any platform. That by itself would seem to me to be positive motivation to hardware manufacturers to release the source code to drivers so that they can support operating systems that are on platforms that do not exist yet, or have not been considered (or have been considered to be nonviable or unsupported platforms).</p>
<p>So, I have to wonder why a common device driver specification was never implemented in various operating systems. It would seem to be a common sense thing, especially given that there are so many operating systems. It would make the coexistence of operating systems a lot easier, and it would promote choice. It might encourage bits of proprietary code on free software operating systems, but it would also enable people to drop the excuse that “free operating system <em>x</em> does not support device <em>y</em>”, and would as a result potentially increase the number of free software programs and operating systems in use, even if there is a minor cost in terms of certain drivers. And those drivers could always be replaced—a common driver specification would make it easier to understand the structure of drivers generally, and make it easier for lawful, clean-room reverse engineering to be done on those drivers.</p>
<p>Imagine, for example, if drivers for graphics cards, TV tuner cards, video and audio encoding/decoding cards, modems, storage chipsets, motherboard chipsets, <a href="http://en.wikipedia.org/wiki/USB">USB</a> chipsets, <a href="http://en.wikipedia.org/wiki/IEEE-1394">IEEE-1394</a> chipsets, graphics tablet devices, touch screens, debugging interfaces, network devices, and so forth were all written to a common specification, it would reduce the amount of code which needed testing. It would increase user choice in both hardware and operating systems—something which I still hold is quite likely the most valuable freedom we have. It would increase reliability, since the users of Windows, OS X, Linux, the various BSD systems, and other, not-so-mainstream operating systems would be able to run the same driver code and collectively supply debugging information and perform testing in a multitude of environments. It would increase security, because then common code that is well-known could be used on all platforms and not just the one it was written for. It would do for device drivers what <a href="http://en.wikipedia.org/wiki/POSIX">POSIX</a> has done for user-mode application software. I do not believe that I could be convinced that this would be anything other than a good thing.</p>
<p>Also, it could bring back old operating systems.  Imagine what life could be like, for example, if <a href="http://en.wikipedia.org/wiki/OS/2">OS/2</a> had a “UDI driver” written for it, and it could then take advantage of newer drivers never intended for it. Or any other very old operating system which is no longer supported and could still be useful, for any of a number of reasons…</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2010/03/03/the-uniform-driver-interface%e2%80%94why-wasnt-it-adopted/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>What a week.</title>
		<link>http://mike.trausch.us/blog/2009/09/21/what-a-week/</link>
		<comments>http://mike.trausch.us/blog/2009/09/21/what-a-week/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 03:55:37 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Ben]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[sick]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=564</guid>
		<description><![CDATA[This past week, we were all sick, and I&#160;was able to do very little in the way of work.&#160; The kid was rather well off, or so I&#160;thought, because he wasn&#8217;t sick sick, just came down with a bit of a cough.&#160; Well, now, he&#8217;s rather sick.&#160; He is complaining that his ear is hurting, [...]]]></description>
			<content:encoded><![CDATA[<p>This past week, we were all sick, and I&nbsp;was able to do very little in the way of work.&nbsp; The kid was rather well off, or so I&nbsp;thought, because he wasn&#8217;t <em>sick</em> sick, just came down with a bit of a cough.&nbsp; Well, now, he&#8217;s rather sick.&nbsp; He is complaining that his ear is hurting, and he is throwing up.&nbsp; Of course, that&#8217;s not good.&nbsp; The good part, though, is that when his stomach is upset, he gets rather attached to the idea of having a bucket handy, so that he can be prepared for whatever comes out.</p>
<p>I was still feeling rather off this weekend, and so I didn&#8217;t make it to this year&#8217;s Atlanta Linux Fest.&nbsp; That made me quite sad.&nbsp; Come hell or high water, I&#8217;m going next year, seriously.&nbsp; Well, unless I&#8217;m sick again, of course, but what are the chances of that happening two years in a row?&nbsp;&nbsp;Maybe I&nbsp;oughtn&#8217;t tempt fate by asking that question.&nbsp; Oh, well, I&nbsp;did.</p>
<p>Also:&nbsp; <em>the weather here is fscking crazy</em>.&nbsp; I don&#8217;t know <strong>what</strong> is up with all of this weather, but we&#8217;ve had more rain in the past couple of weeks than we have had in a year or so, in some (if not most)&nbsp;areas.&nbsp; Lots of things are closed, including schools, businesses, government offices, and roads.&nbsp; And many people aren&#8217;t staying in their homes, and given the nature of the regular climate here, probably did not have insurance against flooding, so they probably are out most everything.&nbsp; I&nbsp;can only imagine what that must be like, and I&nbsp;don&#8217;t envy those that are looking at that situation.</p>
<p>As far as other things go, I&nbsp;should be able to start working on things again relatively soon, after things return to something that somewhat resembles normalcy.&nbsp; We&#8217;ll see about that.&nbsp; For now, though, I need to go sit with Mr. Benjamin and hope that he drinks something soon and falls asleep soon after that&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2009/09/21/what-a-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On communicating with software authors</title>
		<link>http://mike.trausch.us/blog/2009/09/09/on-communicating-with-software-authors/</link>
		<comments>http://mike.trausch.us/blog/2009/09/09/on-communicating-with-software-authors/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:09:11 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[AllTray]]></category>
		<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[tips & tricks]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://mike.trausch.us/blog/?p=559</guid>
		<description><![CDATA[AllTray is a rather small project&#8212;for the moment, there is a single developer working on it (myself), and there aren&#8217;t a terribly great number of users, though the users that it does have are most excellent.&#160; For a long time, the users didn&#8217;t have the ability to observe the development processes for AllTray, nor did [...]]]></description>
			<content:encoded><![CDATA[<p>AllTray is a rather small project&mdash;for the moment, there is a single developer working on it (myself), and there aren&#8217;t a terribly great number of users, though the users that it does have are most excellent.&nbsp; For a long time, the users didn&#8217;t have the ability to observe the development processes for AllTray, nor did they have a bug tracker or any point of contact to the author/maintainer other than email.&nbsp; Things have gotten better there, since AllTray development takes place in the open on Launchpad (though I&nbsp;do have to get better about publishing feature branches that last longer than a day or two so that people can see them as well while they are in progress).</p>
<p>Many projects that are all about being open and transparent provide mechanisms for their users to get in touch with the developers.&nbsp; Launchpad has become an excellent place to do these things; Launchpad&#8217;s Answers and Bugs components are <em>truly excellent</em> ways to get in touch with people that manage software there.&nbsp; The system is so good that I&#8217;d advocate that every project try to move to it.&nbsp; Launchpad <em>does</em> have its issues, though they are often quickly fixed (and can be fixed even quicker now that it is free software).&nbsp; But between Bazaar (a truly amazing and flexible distributed version control system) for code hosting and the other components of Launchpad such as the Answers, Bugs, and Translations components, Launchpad provides virtually everything that a project needs to communicate effectively with its users aside from the project&#8217;s Web site.&nbsp; And users seem to naturally be able to reach out using it.</p>
<p>In the nearly one year that I&#8217;ve been working with AllTray, I&#8217;ve talked&mdash;well, written to&mdash;several people who have asked questions and acted in their own ways to work to improve the software.&nbsp; Development on AllTray has been made much easier just because people are willing to speak up.&nbsp; Everything from the random &ldquo;thank you&rdquo; to &ldquo;hey, are you going to do this?&rdquo; or &ldquo;I&#8217;d like to see feature <em>x</em> in the new version&rdquo; or whatever.&nbsp; It&#8217;s truly great.&nbsp; I can&#8217;t say that every project has users quite like AllTray&#8217;s, because AllTray is something of a niche application, but AllTray&#8217;s users are a great model for other projects.&nbsp; There has been virtually no negativity from users and everything has been constructive.</p>
<p>To anyone who manages a project that <em>doesn&#8217;t</em> use Launchpad, I&#8217;d <strong>strongly</strong> encourage them to do so.&nbsp; Its users are great, and as far as management of the overall project goes, it&#8217;s <em>very</em> easy for project people to communicate back and manage communications in a single spot.&nbsp; It&#8217;s also great that users can ask a question and that the project can do things like go, &ldquo;oh, hey, this is really a bug,&rdquo; or vice versa with bugs&rarr;questions.&nbsp; And if you don&#8217;t use Launchpad because you don&#8217;t want to use Bazaar&nbsp;(I&nbsp;hear that users of git are pretty dedicated to it; I&nbsp;can understand that, but it&#8217;s just not for me&mdash;it&#8217;s too complex, and I&nbsp;like that Bazaar just stays out of my way), consider using LP&nbsp;for everything <em>but</em> code hosting.&nbsp; Or consider using Launchpad&#8217;s code hosting to mirror your project from git, it does this quite nicely.&nbsp; Or, find some way to do what Launchpad does wherever you do project management.&nbsp; It works really well, and it&#8217;s a big help.</p>
<p>And to AllTray&#8217;s users. A big <span style="font-size: x-large;">Thank You</span>.&nbsp; You guys and gals are great.&nbsp; Keep communicating!</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2009/09/09/on-communicating-with-software-authors/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>On Comcast&#8217;s 250 GB transfer limit.</title>
		<link>http://mike.trausch.us/blog/2008/08/30/on-comcasts-250-gb-transfer-limit/</link>
		<comments>http://mike.trausch.us/blog/2008/08/30/on-comcasts-250-gb-transfer-limit/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 19:16:02 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[Rant]]></category>
		<category><![CDATA[The Internet]]></category>
		<category><![CDATA[Your Rights]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[wtf‽]]></category>
		<category><![CDATA[comcast]]></category>
		<category><![CDATA[net neutrality]]></category>

		<guid isPermaLink="false">http://www.trausch.us/?p=387</guid>
		<description><![CDATA[So, as has already been reported elsewhere on the Internets, Comcast (of which I am a current customer) is going to assess a 250 GB limitation on transfer for its residential customers. This is more than a little disturbing, being that I signed up for unlimited use Internet. Disclaimer: The math in this post is [...]]]></description>
			<content:encoded><![CDATA[<p>So, <a href="http://tech.slashdot.org/article.pl?sid=08/08/28/2339207" title="Slashdot | Comcast to Cap Data Transfers at 250 GB in October">as has already been reported elsewhere on the Internets</a>, Comcast (of which I am a current customer) is going to assess a 250 GB limitation on transfer for its residential customers.  This is more than a little disturbing, being that I signed up for unlimited use Internet.</p>
<p><em>Disclaimer:  The math in this post is quick, back-of-a-paper math.  It may contain errors; if so, please let me know.  Also, bear in mind that I am not talking about net data transfers here, I am also including protocol overhead for TCP/IP and PPP where relevant, which is part of the reason why the numbers will seem so large in a few situations.  Feel free to verify the math, though.</em></p>
<p>I decided to take a look at what kind of transfers I have effected since the last time my router was rebooted.  Here&#8217;s the raw data (I am pretty sure that the numbers reported by <code>ifconfig</code> count things like retries and the like as well as protocol overhead for TCP/IP, but I am not 100% positive on that—I’ll go ahead and make that assumption for the moment):</p>
<pre>Saturday, 2008-Aug-30 at 13:55:01 - mbt@zest - Linux v2.6.24
Ubuntu Hardy:[0-16/698-0]:~> ssh allspice 'uptime &#038;&#038; /sbin/ifconfig inet0|grep "RX bytes"'
 13:58:34 up 44 days,  4:52,  5 users,  load average: 0.00, 0.00, 0.00
          RX bytes:91387801756 (85.1 GB)  TX bytes:51854749824 (48.2 GB)</pre>
<p>This shows that my box has been up for 63,652 minutes, and has transferred in that time a whopping 143,242,551,580 bytes in that time.  This is an average of 2,250,401.43 bytes (2,197.66 KiB, 2.15 MiB) <em>per minute</em> that the connection is up.  For a 30-day month with no leap seconds or minutes, this means that in 30 days, the average transfer would be somewhere in the area of 97,217,341,611.51 bytes (94938810.17 KiB, 92,713.68 MiB, 90.54 GiB).  In other words, about 36.21% of the threshold that Comcast is talking about.  And this has actually been a rather light period of Internet usage for us—I have taken no snapshots of large projects on the Internet during this period, nor have I mirrored the Hardy repositories yet (I like to keep a local mirror on my server, and keep it up-to-date, when I can, so that I can install new systems without running out for updates), nor have I downloaded any other large data this month.  This is just regular, every-day usage for us.</p>
<p>Out of all of that, most of the transfer is probably mine.  I sit in several IRC channels all the time, I occasionally play <em>Guild Wars</em> (and even that, well, that&#8217;s not factored into this, because I&#8217;ve only played it once and I haven&#8217;t downloaded the entire world yet, because I haven&#8217;t been into it for a long time and didn&#8217;t have a local copy when I installed it again), I pull source code for packages when I am working on them, and so forth.  I use a lot of bandwidth, and it&#8217;s not for commercial purposes.</p>
<p>Now, something else to think about before going further:  Comcast claims that the limit will be 250 GB, not 250 GiB.  In other words, 250×1000^3, not 250×1024^3, which is the series of measurements that I use.  Converting my 97,217,341,611.51 estimated monthly usage, this results in a figure of 97.21 GB out of an allowed 250 GB (38.89%, not 36.21% as computed above).  This assumes that they&#8217;re being accurate in the first place.  Since I can&#8217;t be 100% sure either way, being that there is so much confusion of computer size measurements out there these days, I&#8217;ll assume that they&#8217;re using powers of 10 instead of powers of 2 for size computation, since this means that I will err on the side of safety.</p>
<p>So, I estimate that we chew through approximately 40% of their quota per month.  What do I run on my home network?  I have an Asterisk server, which routes all of my calls to multiple extensions (everyone should have their own PBX, it makes life really easy!), which uses VoIP.  It doesn&#8217;t see that much in the way of usage, so it&#8217;s a small player.  I do a lot of file transfers between the Internet and here, both over IPv4 and IPv6.  Some of the overhead in our network usage is actually that from using an IPv6 tunnel to Hurricane Electric, though I am not sure just how much overhead there is compared to IPv4 directly over the existing Internet infrastructure.</p>
<p>These numbers are pretty awesome to me, given that once upon a time, I had a link to the Internet that was easily measured in bits per second.</p>
<p>In any event, if Comcast wants to limit everyone residentially to 250 GB per month of transfers, why don&#8217;t they have their accounts set that way?  The account that I have currently has 8 Mbps downstream and 1 Mbps upstream; 9Mbps total.  Assuming a 30-day, zero-leap minute/second month (IOW, each day is 86,400 seconds, and there are 30 of those, for a total of 2,592,000 seconds per month), this means that I <em>can</em> transfer up to 23,328,000 Mbits in a single month—which works out to 186,624,000 MB, or 182,250 GB.  In order to bring that number down to 250 GB per month, I would have to be limited to transferring 32,000 Mbit per month, or 0.0123456790 Mbps aggregate in both directions—a whopping total of 12.64 Kbps.  Yes, you could transfer more data than that on a dial-up connection in a one month span.  In comparison, a half-duplex 28,800 kbps modem can transfer up to 37324800000 Kbits, 37324800 Mbits, or about 4,665.6 GB per month, assuming steady, synchronous, error-free data transfer and a damn good phone line.</p>
<p>In effect, Comcast wants for its users to have less impact on its network than a dialup user would have, to say nothing of 38,400 kbps modems or better.  Now, the reality of a 28,800 kbps modem is slightly different, being that connections over phone lines tend to suck, and so there are errors introduced in the bitstream between the modems, which lowers the effective bitrate of the connection while retries are made at the link layer.  However, to bring that 4,665.6 GB down to 250 GB, 94.64% would be the approximate rate of error—way more than I think anyone would tolerate unless they absolutely had to.</p>
<p>Now, that having been said, the <em>real</em> data transfer is always less.  These numbers are assuming that the underlying protocols&#8217; overhead (e.g., TCP/IP on Ethernet, PPP and TCP/IP on dialup) are factored into the data transfer rates.  But, those would be considered to be measured as part of the link anyway, since that <em>is</em> data that is being transferred.  I am not saying that you can download a 9,331 MB file on a dialup connection in a month, just that that much data would be transferred if the link were constantly saturated.</p>
<p>Is this a reasonable limitation?  Hell, no it&#8217;s not.</p>
<p>We&#8217;re moving into times where <em>everything</em> takes place online.  Computers aren&#8217;t really used as standalone machines anymore—a lot of online communication is tied to services, and those services communicate a lot of data.  Email, Usenet, and IM are all technologies which permit people to communicate with each other, but for some time now, we&#8217;ve had systems that communicate with each other, as well.  if you want the weather, you get that from an online service.  If you want news, you can get that from an online service.  Presence notification, and other things, are not things that humans directly communicate to each other; these are types of communications that are computer-to-computer, on a human&#8217;s behalf.  When I go away, everyone gets a notification of that event when they are signed on to an instant messaging service that I use and they have me on their roster/buddy list.  That&#8217;s a sizeable chunk of data if a lot of people are watching you.</p>
<p>Add to this the fact that we watch video streams online—and video streams are <em>not</em> lightweight things—and listen to things like Internet Radio, and other types of data transfer which weren&#8217;t possible even 15 years ago on a wide scale, and you can begin to see the problem.  I don&#8217;t listen to Internet Radio all the time; I only listen about 10 hours a week.  The stream is 128Kbps MP3, and for one 128Kbps MP3 I have which is 5 minutes 56 seconds, the file size is 5,707,152 bytes.  MP3 is a frame-based format, and is easily streamed from any point in the file, making it not dependent on having to read a header.  This particular file has no metadata in it, so it should be a decent sample to use.  The file size if it were a 10 hour file, then, would be in the ballpark of 577,127,730 bytes, or 0.577 GB.  For a month which averages 4¼ weeks, that means 2.446 GB just for the stream.  Make that stream last the entire month, and it will be 41,553,196,584 bytes, or 41.553 GB.  Add in TCP/IP overhead, which is 40 bytes for every 1460 bytes in the stream (and there are 28,461,094 such chunks in a month-long MP3) and you have 1,138,443,742 bytes of protocol overhead, for a total of approximately 42,691,640,326 bytes transferred for each person that listens to an Internet Radio stream for the entire month.  3 of us makes that potentially 128,074,920,978 bytes, about 128.07 GB.  With a 250 GB cap, that&#8217;s over 50% of it, <em>right there</em>.  Add that to our 97.21 GB figure from earlier, and that&#8217;s a total of 225.28 GB.  Damn close to the limit.  And if Comcast were to use “creative math” in determining the figures, that could be over the limit.  Depends on what they include, if they include data overhead from the CPE, and so forth that I cannot possibly begin to account for.</p>
<p>In short, 250 GB is NOT a reasonable limit.  Even less so, if you are a household with more than one person in it.  So, what do I have to do?  Program my routing, NATting server so that it notifies me when/if we do get close, because it is <strong>entirely</strong> within the realm of possibility, and force us to be disconnected if we get too close to the limit.  They should cut our bill by 75% for this, and even that wouldn&#8217;t be enough—250 GB of transfer, in 2008?  That&#8217;s just cheap.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2008/08/30/on-comcasts-250-gb-transfer-limit/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Oy, the stupidity hurts me.</title>
		<link>http://mike.trausch.us/blog/2008/08/26/oy-the-stupidity-hurts-me/</link>
		<comments>http://mike.trausch.us/blog/2008/08/26/oy-the-stupidity-hurts-me/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 18:45:28 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[wtf‽]]></category>
		<category><![CDATA[“security”]]></category>
		<category><![CDATA[stupid people]]></category>

		<guid isPermaLink="false">http://www.trausch.us/?p=383</guid>
		<description><![CDATA[It&#8217;d appear that people think you are faking your birth certificate when it is worn and the toner that is on it wears off. Stupid idiots. (Even when you can see that it&#8217;s worn toner, and you can see that the letter hasn&#8217;t been altered. Surely, technical types cannot be the only people that can [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;d appear that people think you are faking your birth certificate when it is worn and the toner that is on it wears off.  Stupid idiots.</p>
<p>(Even when you can see that it&#8217;s worn toner, and you can see that the letter hasn&#8217;t been altered.  Surely, technical types cannot be the only people that can see that.)</p>
<p>Oh, well, whatever.  Anything in the name of national security, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2008/08/26/oy-the-stupidity-hurts-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;open-source [fundamentalists]&#8220;</title>
		<link>http://mike.trausch.us/blog/2008/06/08/open-source-fundamentalists/</link>
		<comments>http://mike.trausch.us/blog/2008/06/08/open-source-fundamentalists/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 15:30:14 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Stuff I Read]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[freedom]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[random thoughts]]></category>

		<guid isPermaLink="false">http://www.trausch.us/2008/06/08/open-source-fundamentalists/</guid>
		<description><![CDATA[It seems that Nelson over at the OSI’s Web site is confused about how “fundamentalist” can be applied to an Open Source advocate. It can be done; one just has to remember that a “fundie” (the variant of the word which makes the malicious connotation clear) is someone that exists at a special place called [...]]]></description>
			<content:encoded><![CDATA[<p>It seems that <a href="http://www.opensource.org/blog/6" title="nelson’s blog">Nelson</a> over at the OSI’s Web site is <a href="http://www.opensource.org/node/338" title="open-source fundamentalist??">confused about how “fundamentalist” can be applied to an Open Source advocate</a>.</p>
<p>It can be done; one just has to remember that a “fundie” (the variant of the word which makes the malicious connotation clear) is someone that exists at a special place called the <em>end of the spectrum</em>.  You can have a fundie of religion, or a fundie of operating systems, or a fundie of text editors.  (Hey, we get all of those and more in the <span style="font-variant: small-caps;">Unix</span> world!  Then again, you get them in the real world, and the Microsoft world, and just about everywhere you can go—online or in the <a href="http://en.wikipedia.org/wiki/Meatspace" title="Wikipedia: Meatspace">meatspace</a>.)</p>
<p>&#8220;Fundies&#8221; are all about being on one end of the spectrum or the other.  You can&#8217;t argue that fundies have to be <em>Christian</em> fundies, because that makes just as much sense as it would make to call <a href="http://schestowitz.com/roy" title="Roy Schestowitz’s Home Page">Roy Schestowitz</a> an anti-Novell &#8220;fundie&#8221;.  There is nothing <em>fundamentalist</em> about an operating system or a religion, no matter how many people believe that <em>$RELIGION</em> was the first around, the longest lasting, the One True Thing.  We all have a tendency to have biased thoughts like that about our favorite deities, religions, operating systems, or text editors.  And the term &#8220;fundie&#8221; applies to those who have <em>such</em> a bias, that they cannot see anything else in the domain of the conversation.</p>
<p>Think about <a href="http://www.jameshartforcongress.com/prometheus/socvsjes.htm" title="Socrates Meets Jesus">Socrates Meets Jesus</a>, wherein Socrates and Jesus Christ have a dialog which goes in circles in avoidance of anything concrete.  Much the same can be found in any religion:  there simply isn&#8217;t much that is concrete about it.  (People will argue that <em>spirituality</em> is the thing that religion tries to access, though I&#8217;d tend to disagree, since most people that try to sell &#8220;spirituality&#8221; are also selling &#8220;religion&#8221;.)</p>
<p>That having been said, each member of each religion can <em>all</em> claim that <em>their</em> religion is the one that is fundamental to the existence of the world and all of creation, and so it is necessary to get that <em>none</em> of it is fundamental (because all of them cannot be fundamental, for they are all different things).  Furthermore, it&#8217;s <em>obvious</em> that an operating system, a text editor, and a programming language which exist today cannot be considered to be fundamental; even the &#8220;fundamental language&#8221; of computing (the binary number system) can be considered to not be fundamental, since the world existed way before we figured out different based numbering systems.</p>
<p>Much like Asimov’s first usage of the word &#8220;fundie&#8221;, at which point the word did not yet have a definition.  It is adaptable, too, though the dictionaries (and even Wikipedia) are a bit behind on the usage of the word &#8220;fundie&#8221; to refer to anything other than Christians.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2008/06/08/open-source-fundamentalists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Bloat and Linux?</title>
		<link>http://mike.trausch.us/blog/2008/05/10/software-bloat-and-linux/</link>
		<comments>http://mike.trausch.us/blog/2008/05/10/software-bloat-and-linux/#comments</comments>
		<pubDate>Sat, 10 May 2008 19:18:06 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[computing]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[random thoughts]]></category>

		<guid isPermaLink="false">http://www.trausch.us/2008/05/10/software-bloat-and-linux/</guid>
		<description><![CDATA[You know, I have been reading a lot of interesting things lately. Just read another post that was interesting to me. This article was about how Linux is bloated. “Bloated? Linux?” Yeah, well, most modern software is bloated, and it is rather sad. Now, that having been said, he was talking about a distribution, but [...]]]></description>
			<content:encoded><![CDATA[<p>You know, I have been reading a lot of interesting things lately.  <img src='http://mike.trausch.us/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Just read <a href="http://blogs.gnome.org/zucchi/2008/05/10/linux-is-bloated/" title="Not Zed » Linux is bloated">another post that was interesting to me</a>.  This article was about how Linux is bloated.</p>
<p>“Bloated?  Linux?”  Yeah, well, most modern software <em>is</em> bloated, and it is rather sad.  Now, that having been said, he was talking about a distribution, but his point is extremely valid:  Today&#8217;s programming “environment” is very much so bloated.  Part of this is that we use languages that are expressive, duck-typed, and perform a lot of things behind the scenes for us.  An example of that—as mentioned in the linked-to post—is Python.  Python makes writing scripts and converters and other things very quick and easy, at the cost of increased memory and processor usage.</p>
<p>This isn&#8217;t a <em>bad</em> thing, per sé, but Python is used heavily in a lot of systems today for application software and system configuration utilities and things where it probably shouldn&#8217;t be used.  It could be worse, but that&#8217;s no reason for things to be the way that they are presently.  It seems that Python&#8217;s place in the system really ought to be to prototype nice ideas, and <em>then</em>, after the prototype is complete and accepted, re-written in a language such as C++ or even C#.  (“C#‽  Isn&#8217;t that bloated, too?”  Well, yes, but in a different way.  C++ is good, though, if you need object-oriented things.)</p>
<p>There is a definite trend of moving away from compiled software, though.  I am not sure if this is a good thing, or a bad thing.  Of course, processors and the available memory of systems will increase as time moves forward, but why should base software be so hungry and depend on that?  I remember when I was using a desktop that had 8 MB of RAM, a 66 MHz processor, and only 200 MB for storage, and I could do a great deal with it, and it was pretty snappy.  Today, of course, I&#8217;d not be able to install a basic system into that space, and I shudder to think how (non!) responsive today&#8217;s GNOME would be on such a system.</p>
<p>What should the answer to this be?  Is there a way that we can use software that is easy to develop, <em>and</em> not have the massive amounts of overhead that are often attributed to interpreted and byte-compiled software?  How could we take advantage of that?  After all, we have things like shared libraries that let us load an often-used library only once in system RAM, which should mean that we have <em>decreased</em> memory usage and increased performance, right?  Well, sort of.  But today lots of applications distribute their own, private copies of shared libraries for one reason or another, and so it makes it hard to determine how much an application’s <strong>real</strong> footprint in memory is.</p>
<p>So, the real question is this:  With the availability of a runtime that can host (nearly) any language, and apparently is even able to host an operating system (anyone read about/tried <a href="http://research.microsoft.com/os/singularity/" title="Microsoft Research Singularity Project">Microsoft Singularity</a> or <a href="http://www.sharpos.org/redmine/wiki/3" title="SharpOS - Main - The SharpOS Project">SharpOS</a>?), what about creating a Unix-like system using this technology, and making even more aggressive use of memory pooling between applications?  Would this maybe be enough to combat the bloat that comes with extremely flexible and feature-rich programming languages and class libraries, maybe?</p>
<p>Or are we stuck moving forward into a world where the hardware and the software are both bigger than they used to be yesteryear?</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2008/05/10/software-bloat-and-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some thoughts on Web programming&#8230;</title>
		<link>http://mike.trausch.us/blog/2008/05/02/some-thoughts-on-web-programming/</link>
		<comments>http://mike.trausch.us/blog/2008/05/02/some-thoughts-on-web-programming/#comments</comments>
		<pubDate>Fri, 02 May 2008 19:36:37 +0000</pubDate>
		<dc:creator>Michael Trausch</dc:creator>
				<category><![CDATA[computing]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[random thoughts]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web programming]]></category>

		<guid isPermaLink="false">http://www.trausch.us/2008/05/02/some-thoughts-on-web-programming/</guid>
		<description><![CDATA[I used to write a lot of projects in PHP when I was working for creating a Web interface to something. However, I recently have spent some time learning other languages—C# and Java being two of them—and am beginning to realize that I think I would rather use one of them for creating anything larger [...]]]></description>
			<content:encoded><![CDATA[<p>I used to write a lot of projects in <a href="http://en.wikipedia.org/wiki/PHP" title="Wikipedia: PHP">PHP</a> when I was working for creating a Web interface to something.  However, I recently have spent some time learning other languages—<a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)" title="Wikipedia: C Sharp (programming language)">C#</a> and <a href="http://en.wikipedia.org/wiki/Java_(programming_language)" title="Wikipedia: Java (programming language)">Java</a> being two of them—and am beginning to realize that I think I would rather use one of them for creating anything larger than the smallest of projects anymore.  Of course, their hosting environments differ widely, but I am finding that while I don&#8217;t know how the languages compare with the Apache PHP module in terms of performance, I would find the way that I think in terms of programming to be more easily expressed in either of those two languages, compared to PHP.</p>
<p>I used to think that language features found in the C family—notably, strongly typed variables—were nothing but a painful nuisance.  At least, I thought that way until probably a few weeks ago, when I started work on a PHP project after spending a lot of time working in Java for a class and C# out of my own interests.  And I realized something about languages that use strong variable types:  <strong>Languages that require strong typing of variables might be inconvenient sometimes, but they build a <em>lot</em> more documentation into the program, simply by requiring strong typing.</strong>  In a language such as PHP, you simply cannot tell what the variable&#8217;s type is by looking at the variable name.  If you follow conventions (and not all people do) for naming your variables, you might be able to create little “hints” to their types, like <code>$isAuthenticated</code> for a boolean value or <code>$startedWhen</code> for a timestamp, date, time, or other similar type.  The <a href="http://en.wikipedia.org/wiki/Hungarian_notation" title="Wikipedia: Hungarian Notation">Hungarian notation</a> might work for PHP, too, but I have always found that rather hard to read, particularly in certain situations.  Instead, properly written code in a strongly typed language makes it very clear what the variable is, does, and may contain.  Very fascinating at least to me, simply because I have always disliked what I perceived to be inflexibility in strong data types for variables.</p>
<p>Of course, this isn&#8217;t the only reason that I am finding I would want to work with one of those two languages.  I absolutely <em>love</em> the idea of <a href="http://en.wikipedia.org/wiki/Generic_programming" title="Wikipedia: Generic programming">generics</a> (yes, I know that they&#8217;re in C++&#8230; I never did play with <em>that</em> language enough to “get it,” apparently).  I like the simple power of the languages (and their associated class libraries)—you can do things like create a dynamically sized array in a way that feels natural and non-hackish, using a type of generic called a “collection”, which goes a long way towards readability (and as strange as it sounds, that power partly comes from the extra documentation provided by the strong types used with them).  Given that <a href="http://www.python.org/dev/peps/pep-0008/" title="Python: PEP 8">“code is read much more often than it is written”</a>, it makes sense that features that reduce the amount of programmer time like this—and are readable—are things that I find useful.</p>
<p>There is only one <em>real</em> downside to both C# and Java, when compared to a language like C:  They are far, <em>far</em> slower.  What they essentially do is transfer programmer time to system processing time—depending on an application’s lifecycle combined with many applications running at the same time on a system, the system processing time could indeed be more than the time a programmer saved writing the program to begin with.  C# tries to mitigate this by compiling the program&#8217;s <a href="http://en.wikipedia.org/wiki/Bytecode" title="Wikipedia: Bytecode">bytecode</a> <a href="http://en.wikipedia.org/wiki/Just-in-time_compilation" title="Wikipedia: Just-in-time compilation">“just-in-time”</a> so that native code runs, and code that executes repeatedly gets a benefit from this.  Java does the same thing with <a href="http://en.wikipedia.org/wiki/HotSpot" title="Wikipedia: HotSpot">HotSpot</a>, though only in certain areas of a program as the Java VM figures is necessary while analyzing the program during its execution.  Still, they are slower and use more memory.  PHP probably is, compared to C, as well.  I think it <em>would</em> be interesting to compare PHP against C# and Java in a Web environment, though I have not done that just yet since there is no really easy way to do it equitably that I am aware of.</p>
<p>Anyway, how does this pertain to Web programming?  I am beginning to think that I should use PHP for only small things that are not required to be very powerful or have long maintenance lifecycles.  Why?  There&#8217;s a <em>ton</em> of PHP programmers out there, to be sure, and PHP runs “out of the box” on a lot of services, such as <a href="https://www.nearlyfreespeech.net/" title="NearlyFreeSpeech.NET Web Hosting">NearlyFreeSpeech.NET</a>, whereas something like <code>mod_mono</code> or Tomcat do not.  You might be required to manage more of an application server with the latter choices, while the former ones are more flexible in most installations and you can manage just the application and leave the server management to a crew of people that want to do that.  Where, then, is the benefit?</p>
<p>It would appear—at least to me—that the increased investment in initially setting up a Web application server (and maintaining it) with an environment for either C# or Java would be paid off in that wonderfully limited resource known as programmer time—as well as frustration.  Personally, I <em>hate</em> re-inventing the wheel.  And while there are resources for PHP that will let you do that, sometimes they require extensions to be installed or—often—the use of ad-hoc class libraries written for PHP, such as those found at the <a href="http://www.phpclasses.org/" title="phpclasses.org">PHP Classes Web site</a> (which, <acronym ="In My Humble Opinion">IMHO</acronym>, is a poorly designed site to begin with).  Unlike PHP, C# and Java both come with very large, powerful, and more importantly, <em>standard</em> class libraries, which is something that greatly helps programmers with both reading and writing code.  There is a lot of support out there for using third-party class libraries (which you can find all over the place), and they are supported by a lot of third-party programs with interfaces, too (such as <a href="http://mysql.com/" title="MySQL’s Web site">MySQL</a> and <a href="http://www.postgresql.org/" title="PostgreSQL’s Web site">PostgreSQL</a>, and others).</p>
<p>All told, learning these languages has got me wondering if I shouldn&#8217;t use one of these languages instead.  While I&#8217;ve really only scratched the surface of learning about many of the other things (such as the details about creating Web applications in these languages and hosting them), it seems that overall, there are less headaches to be had and code can be written faster, debugged faster and more efficiently, and there is more convention built into the language to govern how things are read and written by other people.</p>
]]></content:encoded>
			<wfw:commentRss>http://mike.trausch.us/blog/2008/05/02/some-thoughts-on-web-programming/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

