Tuesday, November 8, 2011

Property Tax Bitching

Dear Certain Travis County, TX Voters:

Please don't gripe any more about your damn property taxes being too high.  Please, just STFU.

Let me explain to you what it means when you vote to approve the issuance of a municipal bond:  It means your taxes go up.  That's right.  The municipal bond fairy doesn't somehow wave her magic wand and suddenly money comes out of thin air to pay for the project the bonds were proposed to fund.  No, those bonds are issued and our property taxes go up to pay for them.

I'm sick of you people constantly voting to approve spending more money and then bitching about how your property taxes are going up.  If you keep voting to issue bonds and approve tax increases to pay for them, then your taxes will go up.  How many different ways can I convey this concept to you?

For those of you who had the good sense to realize that this isn't a good time to start projects that require an increase in property taxes:  Please join with me in telling the rest of the people to stop the griping and just pay their damn taxes.  They got what they wanted.  Now shut up.

Love,

CPU

PS:  Oh, may I also direct the other 90% of the registered voters in Travis County who didn't even bother to come out and vote to shut their mouths as well.

Monday, November 7, 2011

R.I.P. Andy Rooney

I just found out that Andy Rooney - a person who was an inspiration to me in some subtle ways - died on November 4 at 92 years old.  I suppose, in a way, I could see it coming.  When Andy stopped appearing regularly at the end of 60 Minutes, I knew something had to be going wrong.  It was always clear to me that the grumpy old guy really did love being able to dispense his form of wisdom every week.  I say "grumpy old guy" truly in the most admirable way, since I really think that's exactly how Andy Rooney wanted to be remembered.  As grumpy as he was, though, I think he did so with the best of intention.  He always seemed to be able to cut through the sentimental crap and get right to the point on things.  This is what I admired about him and, in many ways, I think how he inspired me.  If Andy didn't truly care, deep inside, about the stuff he spoke about, he wouldn't have said it.  The people who didn't like Andy were probably those who expected the normal sugar-coated commentary they had come to expect from the usual news droids.

There were times I wanted to jump through the TV set and say, "Hey, Andy, the reason why they put cotton in pill bottles is to prevent the pills from banging against each other and breaking!"  Then I thought about it for a second and realized that was his way of saying, "Then why in heck didn't the idiots make the bottle the correct size for the pills?"

There is not a whole lot more to say except that I will miss Andy Rooney's commentary on 60 Minutes.  If  he were here right now, he'd probably be really pissed off that everyone (including me) was making such a big deal about his work after he died.  Well, that's okay.  We all grieve in our own ways.

Sunday, October 30, 2011

I'm Eating A Ham and Swiss Cheese Sandwich

  • I'm currently eating a ham and swiss cheese sandwich for lunch.  I bet you want to see a picture of it!
  • I urinated in a white commode in the master bathroom 4 hours ago.  I need to go again.  Hey, do you want to see a picture?
  • I played Quake III Arena a few weeks ago.  You should too!  Hey, let me show you a video of me playing the game!
These things are all true.  "Why," you ask, "are you telling us all this?"  That is an excellent question.

The real question is why someone would want to ram this information down anyone's throat.  This is my gripe with facebook and Google+.  There comes a point where I need to say, "Enough!"  Google+ is about to be the first fatality of this feeling, for me.

I've been thinking about this a lot and trying to decide at what point a status update becomes too much information.  It's really a hard question.  I'm sure that some people want to hear, several times a day, how the rich are screwing-over the less rich, from all different sources.  "Here - this proves it!"  I'm sure people want to hear a play-by-play (practically) of every single event that happened at the high school ball game where their kid is playing in the band (hey, and here's a picture!).  I'm sure that there are some people who want to know every single location that a person stops at every single day.  I'm also sure that these are things that the people who post these things really do find important.  Unfortunately, there is no way for me to say, "Y'know, these things aren't important to me."

This is where I stumble all over my own words.  On the one hand, here is my blog.  I'm sure that there are things here that you all agree with, and some things that leave you shaking your head saying, "I can't believe he feels that way."  Probably even more likely, "What in the world is he talking about?"  Some of this is kind of timely.  Some of it is topical.  Some of it is stream-of-consciousness-based.  Perhaps some people would question why I don't put this into facebook or Google+ and share it with everyone I know.  To me, while I think this is important, or I wouldn't write about it, I also don't think it is something I want to share with everyone I know in real-time.  Even more importantly, I think because it isn't just a few lines with a link to something someone else said, it means I have to spend a bit of time thinking about it myself before I share it with the rest of the world. I also like the semi-anonymity that takes place by having this separate from what I write on social networks.

The bigger problem is volume.  If one person is a fire hose of information about his every activity, that's probably tolerable.  However, that one person is not the only person who is my "friend" on facebook or in a circle of mine on Google+.  If you're on both social networks, well, that crap gets really messed up.  The same fire hoses post the same stuff on both networks.  At what point does this just get way out of hand?

On facebook, I have simply made a decision to hide status updates from anyone who starts to grate on my nerves.  Unfortunately I believe this list is more than half the number of people who I am actually friends with.  On Google+ no such mechanism exists - they are either in one of your circles or they aren't.  You can see the status updates from a single circle.  That doesn't really help much, though.  So what should I call all my Google+ circles?  Instead of "friends...family...acquaintances...coworkers...former classmates" do I now have "blabbermouths I'll look at someday when I'm really bored ... TMI but I may look at them sometime ... really smart people I would like to hear from often ... people who I need to hear something from even if I don't want to" ???  This is why I don't like Google+.  I have no idea how people who follow the constant ramblings of more than one or two other people have the time to do so.  At least in facebook, I can still remain friends with someone who I just wish would STFU for a while ("a while" too often meaning "from now until one and one are three").

This brings up more fundamental questions:  Should I actually be friends with people who virtually grate on my nerves?  Is facebook and Google+ trying to tell me something?   Do the status updates people put in facebook and Google+ say something about their character and personality in real life?  There are people I care about in some form but avoid as much as possible because they're toxic to me.  In my case these are people who basically interrupt everything I have to say, or belittle me, or choose topics that are sure to push me further and further away from the conversation, that violate my moral compass, or are just plain rude.  You probably know some of these kinds of people.  They don't think they're doing anything wrong - and maybe they even think they are helping me in some convoluted way.  In any case, I can't handle this in the real world, and in some ways this is what is happening in the virtual world on social networks.  As I typed this paragraph, I started wondering why I should care about anyone who would treat me in a toxic way, regardless of the reason.  Why should anyone subject themselves to this kind of treatment under the guise of "friend?"  In the case of facebook, I am allegedly friends with people who wanted nothing to do with me in high school, simply because they recognized me during the planning of the reunion online.  I doubt that these people would think any better of me now, and frankly, I would go as far as to say they don't have any idea who I am or what I even stand for.  They didn't know then, they didn't care then, and they probably don't care or want to know now.  Yes, I realize this is a negative thing to say and a generalization at best, but I bet you that this is really the case.

The ironic thing about this is that by my own lack of interest in a person's political beliefs or in their kids' activities or in their movement to various places, there is a part of me that feels I am not being a friend either.  After all, here is someone laying out there those things that mean something to them, but I'm sitting here bitching about it to all of you.  What kind of friend does that make me?  I'm trying to resolve this in my own mind and I can't.  I could simply conclude I'm just a thoughtless person, but I know other people who feel the same.  The very fact I'm discussing it here and that it bothers me says that I am absolutely not thoughtless.

Perhaps what's really the problem here is that in a real-life conversation, I would most definitely be interested in someone's political beliefs, their kids' achievements, and where they were.  The difference is that in a conversation those are time-limited and kept relevant to the conversation at hand.  While I know of people who want to captivate the conversation by recalling every detail of every single event that has happened to them since we last got together, those kinds of people end up being pushed aside pretty quickly as they monopolize the conversation.  In facebook, there is no natural throttle.  There is no context to the stuff the "fire hoses" of conversation spew out in their facebook updates.  In some circles, the conversation is entirely relevant.  In others, it is meaningless banter.  Because context is absent in social networks (absent of just knowing someone), there is no natural filter as there is in real life conversation.  That's what's wrong with social networks.

Anyhow, thanks for listening and sharing my thoughts about this.  Now, I need to use the rest room.  Pardon me.

Saturday, October 8, 2011

The One Percent

There's a war brewing out there and it isn't taking place in the Middle East...

Lately I've seen nothing but repeated jabs at the so-called "one percent" of Americans who hold a majority of the wealth but not paying their "fair share" of taxes.  Carried one step further are the Wall Street protests that are taking place.  I understand why this is happening.  With a 9+% unemployment rate and countless people forced to cut back spending due to the depressed economy it doesn't surprise me that people are fed-up with the income disparity.  On the other hand, what is being spouted by those protesting makes almost no sense, and is only serving to fuel a class war that is not going to end well for both parties.

I have repeatedly said in this forum and I will say it here again that the solution to the economic problems is for people to get back to work (ie. we need jobs for them with a living wage).  I also think it is time for people to start accepting responsibility for their own personal economic condition and stop behavior that is expensive and unsustainable.  What do I mean by that?  Well, when I see a homeless person on a street corner with a cigarette hanging out of their mouth asking for money for food, they are not making their case for poverty.  If you are making the decision to forgo food or health care for cigarettes, then you're not getting my sympathy - homeless or not.  If you're already having trouble making ends meet and you decide to have kids, then you don't have my sympathy.  If you've decided to have more than 2 kids, even if you do have the means to support them at home, then you don't have my sympathy when you complain about the lack of funding for schools.  While I'm not in the "one percent" that people speak of, I think it is safe to say that if I'm not garnering your sympathy, then it is likely you're not garnering others' sympathy either.  Why should someone who has worked hard to get ahead be penalized for doing so, provided they did so ethically?  They don't have any obligation - moral or otherwise - to support your unsustainable lifestyle.  To ask government to steal money from these people in the name of helping those who have fallen on hard times because of their own lack of forethought is not really fair, just as it isn't fair that the banks and many of the Wall Street financial institutions effectively stole money from the American people to support their unsustainable business/lifestyle.  Seriously, I have a problem with both sides of this equation.

What pisses me off is that what is generally done by the 99% side is that they pick the worst, most unfair, most heart-wrenching case to present as evidence for what is happening to everyone.  I am not denying that these cases exist, but to say that this represents even a sizable minority of the population is just plain bogus.  I don't think there's anyone out there who wouldn't want to help out someone who genuinely fell on hard times - including those 1% that everyone seems to feel are ripping them off.  The problem I see is that there is a vocal group of people who are trying to assert that a majority of the 99% are in the same category as the worst, most unfair, most heart-wrenching case, and they're clearly not.

I was thinking about this whole thing and came up with an interesting idea:  Let's get the government out of the "wealth redistribution" business entirely.  That's right, no more federal subsidies for social programs, education, etc.  Establish a relatively small program that is only there to sustain someone who is truly in need - the heart-wrenching cases we all see - and only to the extent that they are able to afford food, reasonable shelter, and health care to treat their life-threatening condition.  Likewise, eliminate every loophole that would allow for individuals and corporations to avoid paying their taxes.  Now, for everyone else in need, the government would only serve as a conduit by which people or educational institutions who are in need of assistance could contact the 1% of the population.  A simple, standard, form is filled-out with the basics of the reason for the need, how much money is necessary to correct the situation, and the length of time that money will be needed.  A written statement of need would be attached to the form, indicating the details of the circumstances and reasons for the need (in the case of education institutions, a balance sheet would be helpful, for individuals a budget).  At that point, these forms would be made available to anyone who wished to contribute to the cause, especially the 1%.  Any money that was given to these programs would be entirely tax-exempt to the giver, as bona fide charitable contributions should be.  The recipient would only need to pay those income taxes as they would be normally eligible to pay (which, at a poverty level or if an educational institution, should be little to none).  The government's responsibility would be to assure that the monies are directed to the correct places, and to investigate fraud in the process (anyone misrepresenting material facts on their forms would be subject to a felony prosecution, be required to pay back whatever they received, and could never participate in the program again).

This accomplishes the following:
  1. It takes away the entitlement mentality that people have and calls public assistance what it really is:  charity
  2. It creates a conduit for those truly in need to state their case to those who have the ability to provide assistance
  3. It provides an incentive for those who have funds for assistance to help those in need.  Instead of the wealthy being taxed and giving it to the government to do with it what they want (and inefficiently as well), the money goes directly to those who need it, and wealthy individuals can obtain tax breaks through acts of kindness rather than through crafty accountants and tax loopholes.
  4. The public as a whole becomes more aware of shortcomings in various areas, and can spend more time and money addressing those shortcomings directly rather than to almost randomly throw money at a problem and hope it gets fixed.
  5. A sense of community is created, even among people who are potentially hundreds of miles away.
  6. People who consistently maintain risky or unsustainable lifestyles will not receive funding to reinforce their bad choices
One final thing that should be part of this program is that the individuals or organizations receiving assistance must be required to write a thank-you note to those who have helped them.  It cannot be a form letter and cannot be written by an outside agency.  It must be written by the recipient(s).  In the case of a school, for example, have a class project writing a note thanking the people who have helped their school.  Individuals or familes could write their sponsor indicating how the contribution has helped resolve an issue in their life.  The idea here is that the recipient(s) recognize that they are being helped by someone else, and that they have the opportunity to express their gratitude for the assistance.  It isn't a sterile, faceless government program that blindly gives money out to people who think they need it.

I imagine if a school or person was being directly helped by a gazillionaire and all of a sudden a group of people started accusing that person of being greedy, there would be someone around to say, "Well, they're not so bad -- they're helping me!"

I know this isn't perfect.  Heck, I don't think it would ever happen.  It's far easier to bitch and complain that the rich people caused all these problems instead of accepting some of the responsibility for it.  I'm with you all who say that the banks who got federal assistance so they could stay afloat (then gave their CEOs a bonus) should never have been given any assistance (in fact, they should pay it all back immediately).  I have always thought (and still think) that businesses (in particular, larger corporations) that outsource jobs should have a stiff penalty for doing so, since they take good jobs from people here in the United States.  I also think that tax loopholes that allow businesses and corporations to shelter their money from taxes by placing their headquarters in another country should be kicked right the hell out of this country.  I think that "blue collar" workers and teachers should be paid a better salary for what they do.  But...  As much as the wealthy are at fault, it is up to all of us to accept responsibility for our own personal finances and our lives.  I know (and you do too) that you are not entitled to have the same lifestyle as someone who makes a million dollars a year.  They have more than you, and most of them probably worked long, difficult, and potentially risky jobs to get there.  If you want to live like a rich person, then come up with an idea for a business, set aside plans for a family while you build the business, and work the long hours that come with running a business.  For those who just want to support a family (or even themselves), it's up to you to take a job when it's available.  So you're not in your dream job?  A lot of people aren't, but they show-up for work and do the best job they can every day.  You should too.

We're not going to get out of these bad economic times by griping to the people on Wall Street.  Sure, feel free to protest.  Actually, I would really enjoy hearing some people providing real solutions that doesn't turn the United States into a communist country.  So far, I haven't heard anything being said that isn't simply a Robin Hood mentality.  If that's the best you have, then I'd say that you didn't really pay much attention during the publicly-funded education that we all paid for.

Friday, September 16, 2011

fit-PC2i Initial Impressions

Note:  I like to write these "initial impression" postings in order to share what I've learned about a product.  All too often, I've discovered something a lot cooler or quite disappointing after having owned the product for a while.  Check back here for updates.

This review is of the CompuLab fit-PC2i Value:
  • 1.10 GHz Intel Atom Z510 CPU (single core, no hyperthreading)
  • 1 GB memory (DDR2-533)
  • Intel US15W SCH ("Poulsbo") Chipset
  • Dual Gigabit Ethernet ports (Realtek RTL8111-based)
  • Slot for a single 2.5" form-factor SATA hard disk
  • Mini-SD socket (note that this is related, but not the same as, the SD or MicroSD)
  • Intel GMA500 graphics chipset (video output via DVI adapter)
  • Realtek ALC662 audio chipset (not tested)
  • 4 USB 2.0 ports (two normal-size, two micro-size ports)
  • RS232 Serial port (micro port with adapter)
I equipped my unit with a  32GB OCZ Onyx SSD.

In Short

The good:
  • Small size 4" x 4.5" x 1.05" (per specifications)
  • Very low power consumption (5 Watts idle, 7 Watts under load measured using the Kill-a-Watt)
  • Made of metal (durable)
  • Power cord has a retaining screw to keep it from pulling out ("that's what she said")
  • Comes complete with necessary adapter cables
The not-so-good:
  • Cost (price tag for the "value" version is US$279.00)
  • Gets very warm (an add-on heat-sink is available)
  • Intel SCH chipset presents the SATA drive to the OS as a PATA drive
  • BIOS doesn't have a "serial console" mode
  • Documentation (particularly for some of the BIOS options) is somewhat lacking
My Goals

I was trying to find a small, very low power consumption system based on Intel architecture with two Ethernet ports that could be used as a sophisticated router/firewall and Asterisk PBX.  I was doing these functions on my server system, but as I added more functionality to the server, I got nervous about the idea of applications binding to the "outside" interface.  While this problem is mitigated by the use of a firewall, applications like NFS (RPC) that use unpredictable port numbers made me feel increasingly more uncomfortable running these on the same box that was my interface to the Internet.  What made this worse was that using Asterisk to interface to Google Voice meant opening an even wider range of outbound ports.  This was pretty much the last straw.

I first considered the idea of using a commodity consumer-grade wireless router with OpenWrt or something similar to do the same thing.  However, while the cost is good, OpenWrt is lacking some of the management flexibility I have come to enjoy with a full Linux distribution.  It's no wonder, too, being that these devices have a limited amount of flash memory.  They also are running a MIPS-based CPU rather than an Intel architecture (IA) CPU, which meant I needed a cross-platform development environment rather than using the native development environment on my server.  Since my time (and patience) is at a premium these days, I wanted something I could put together (running Gentoo Linux) and just have it work.  When I need to do updates, I can compile packages on my fast quad-core server in a chroot environment without the need for a sophisticated cross-compiler environment.

I wanted whatever system I used to be fanless (preferably, or a VERY quiet fan) and very low power consumption (on the order of what I could get from a consumer-grade router).

I chose the fit-PC2i Value because it met my criteria pretty well.  I was first scared away because of the cost, but when I factored-in my own time and decreasing patience level, the higher cost seemed worth it.  In order to keep the power consumption low and further eliminate any moving parts (read: not likely to fail anytime soon) in the design, I added a 32 GB OCZ Onyx SSD.  I chose this SSD because it was relatively inexpensive, and I knew I wasn't going to need much in the way of disk space.  I also had heard that the chipset in the fit-PC2i was not very high performance with respect to disk I/O, so there was no reason to get a really fast (and expensive) SSD.

I am using less than 4 GB of the 32 GB SSD (including a full Gentoo portage tree and package tarballs) using a conservative Gentoo install (no X windows, for sure).

Putting Things Together

Right from the start I could tell this was going to be a nifty little computer.  The initial configuration was done by doing my chroot package compile trick on my fast server.  I then attached the SSD to my server via a USB interface cord, and discovered quickly that even a cheap SSD on a cheap USB interface was impressively fast.

I had a bit of trouble on first boot because I neglected to learn anything about the Intel SCH chipset prior to building the kernel.  This was immediately remedied with a quick kernel reconfigure/recompile on the server.  Just keep in mind that (at least with the older Gentoo live media I used) the drivers were not loaded automatically for both the SCH chipset and the Realtek RTL8111 Ethernet adapters.

Once I got everything booted, the first thing I noticed that it seemed pretty fast given the configuration of the system (see more about this below).

Looking at the hardware this is not a system that you're going to try to run everyday software on.  Okay, someone may do that, but I'm not sure it's beefy enough for anything even near that serious.  Not serious enough, in my opinion, to justify a DVI port on a monitor.  Okay, but that's not much of a problem.  What I was surprised about, given the fit-PC2's leaning toward an embedded device is why the BIOS didn't have an option to redirect console output to the serial port.  I intend to run with no keyboard and no monitor, but getting to a console is really helpful when I put something dumb in iptables and lock myself out of the network.  What I ended up doing was simply to tell grub to output both to the serial port and DVI console, and have the default Linux boot option use a serial console.

Performance

The fit-PC2i Value is actually pretty responsive even with a 1.1 GHz Atom CPU.  However, be forewarned that this system is not going to come close to running a firewall at full Gigabit Ethernet speeds!  Running very little and acting primarily as a firewall, I saw the idle CPU down just below 50% measured by "top" when I started streaming Netflix on the Roku.  All of the utilization was in the interrupt stack, indicating that the Ethernet chips were effectively gobbling up the system.  Now that being said, that Atom CPU still has plenty of cycles left, but I'm a bit concerned what would happen if I had an Internet connection that exceeded 15 Mbits/sec.  To be sure, the Linux driver may be slightly at fault, but my guess is that the RTL8111 Ethernet chip is simply not very efficient.

Everything else on the system was plenty responsive during management and running normal system applications.  I haven't tried to run Asterisk on it yet while the unit was doing its firewall/routing application.  Once I do that, I will have a better feel for how well it performs under load.

One thing to note is that the unit runs very warm...I would almost say hot.  CompuLab sells a heat sink that snaps on the case, but that shouldn't be necessary under normal circumstances.  My guess, from looking at the specs, is that the warm-hot aluminum case is okay and won't affect the PC's electronics.  However it is for this reason that I would caution against installing a regular (mechanical) laptop hard disk into the unit.  I anticipate early failure of the bearings in a normal hard drive due to excessive heating of the spindle lubricant, so for longevity's sake I would recommend using a SSD as I did.

Final Initial Thoughts

There's something cool about having a system that fits in the palm of your hand that performs like a system that, just a few years ago, took-up a significant part of your desk.  This is such a system.  It's important to understand its limitations -- you're not going to be using this as a home theater PC or something to run MythTV on.  Why?  Because while these applications may run on this kind of a system, they are not likely to run well.

I'd like to see a version of this with a newer Atom processor and a more efficient Ethernet chip.  However, I don't have any reason to suspect (yet) that the current hardware will be a bottleneck in my application.  Seriously, I haven't seen any small system that doesn't suffer from some degree of this.

The power consumption (or lack of it) is fantastic.  CompuLab's motto, "do without wasting," is very applicable here.  Likewise, not wasting space is also a virtue of this system.  I wish I could do this without spending so much money.

I really like being able to ssh into a Linux system and do what I always do when I administer a box and not get caught-up in fancy web interfaces and other stuff like that.  The fit-PC2i really works for this, so far.  I have no reason to believe that it will have trouble running a pretty full-featured Asterisk installation as well, although I wouldn't expect it to be a PBX for anything bigger than a fairly small business.  It should be well-suited to running a PBX that will be an interface to Google Voice and some other things.  I will soon find out if I'm right.

Update:  September 18, 2011

I had a problem tonight with the Ethernet interfaces (both of them) simultaneously going down in the middle of watching a Netflix video on the Roku, with no other indication except the following in the log:

Sep 17 22:12:29 neuron klogd: r8169 0000:03:00.0: eth1: link up
Sep 17 22:12:29 neuron klogd: r8169 0000:02:00.0: eth0: link up

This was weird since there was no indication that the link even went down.  Doing some googling turned-up that there appears to be a bug in the r8169 driver with the links spontaneously going down on RTL8111/8168B chips on some recent versions of the Linux kernel (I am running 2.6.39), with the fix being to go to the Realtek driver (source is available from their site).  I created a Gentoo ebuild for the r8168 driver from Realtek and that seems to be working.  This also seems to have addressed the high CPU interrupt utilization (which is now about 25%, leaving the CPU 75% idle) when stressed.  There were also some network performance issues while viewing some HD YouTube videos with the Roku that caused the Roku to step-down to a lower-quality video.  This seems to be solved with the new driver.  What is also interesting is that my server system uses the same chipset, and while I haven't seen this issue with 2.6.39 on that system, I am tempted to install the Realtek driver anyway as a proactive measure.

I also installed Asterisk this afternoon with very promising results.  I held a conversation with my parents for over an hour through Google Voice with excellent audio quality.  No complaints at all.  While not fit-PC-related, it may help someone out there looking to use Google Voice on Asterisk for my firewall rules.  If you limit your RTP ports to ports 10000-20000, you need to make sure that the following are opened outbound:  tcp/5222, udp/{10000-20000}, udp/3478, and udp/443.  That last one was a bit of a surprise, but it seems that it is used in the STUN code with Google Voice.

Update September 21, 2011

Well, it seems that the Ethernet problem has surfaced again.  This time only eth0 went down, but that is still annoying.  This time it was when I was VPN'd into work.  The connection dropped for about 5 minutes or so.

I am actually at wits end.  I went onto the fit-PC forums and was disappointed to see that CompuLab's answer to hardware issues with a Linux OS that they haven't tested is:  We don't support that OS (it was RedHat, as I recall) - in order to get support load Ubuntu on it.  Thanks, CompuLab, for that overwhelming feeling of support (said dripping in sarcasm).

What I did see and was worth a try was going into the BIOS and disabling "C-States" and only enabling GV3 support (per this forum article and this forum article).  I also disabled hyperthreading and anything else that this box didn't support, in the hopes that this would prevent any potential issues from that from surfacing.  I'm not sure I have any other ideas at this stage.

If the Ethernet ports are not stable, my only recourse is to dump this idea and go to a more power-hungry and more standard PC.  The whole idea of running this is to support a reliable network router/firewall/PBX.  If that doesn't work, then I am wasting my time with this system.

This is why I think I should wait a few weeks before posting my "initial impressions" even though that seems to be dishonest.

Update October 8, 2011

It seems that the BIOS change made above worked, and I am no longer seeing problems with the Ethernet ports.

Aside from the temperature issue (that doesn't seem to negatively affect the operation of the computer), the fit-PC2i is working great.  Let's hope it stays that way for a long time!

Sunday, September 11, 2011

Reflections On 9/11- 10th Anniversary

Like everyone else, I have felt compelled to reflect on what happened on September 11, 2001 on this 10th anniversary of that event.

I had gotten to work on an otherwise uneventful morning.  Someone mentioned that an airplane had crashed into the World Trade Center.  There was a lot of speculation as to what happened.  While nobody at that time openly considered that this was an intentional act,  I felt right away that this was done on purpose.  A short time later the second airplane hit the other tower, and then the news came in that there was some kind of an explosion at The Pentagon (it was a while before it was confirmed that it, too, had been a suicide mission using an airplane).  By then, it was pretty much felt that this was an intentional attack.  Was it a domestic attack like what Timothy McVeigh did in Oklahoma City, or was it an attack from an extremist group like Al Qaeda?  Of course, we now know it's the latter.

My brother had been interning at a business in the WTC only a few weeks earlier, and my sister-in-law worked near the towers in Manhattan.  I remember calling my parents to find out whether they were OK.  It was a stressful time.  Thankfully everyone in my immediate family were safe, but I know of people who weren't as lucky.  To me, it was a horrific and needless way for over 3,000 people to die.  Immediately following the attack, I shared the sentiments of most Americans who wanted to see the people responsible brought to justice (the definition of "justice" at the time meaning "just desserts").

A few weeks later I flew to New York to visit my family, and while I was in New York I took a trip out to Manhattan to see the wreckage.  The air was thick from the dust and smoke, and it was hard to breathe.  There were piles of dust and debris on the visors on the traffic lights in the area.  It was sad to see the remains of a building that once stood proud and where business was conducted every day.  It was even more sad to consider that the people who worked in these buildings were no longer with us.

They say to never forget, and these images and experiences will be forever engraved in my memory.

What followed was, in my opinion, some of the worst handling of such an event that I could have ever imagined.  Out of one side of their mouths, our government said that the best way to tell "the terrorists" that this didn't stop us was to carry-on as usual and show them that our liberty and way of life could not be stopped like this.  Then the same government carried out some of the most intrusive abuses of the liberties of its own citizens that I have ever seen.  They used the event and political spin to justify a war with Iraq that, while it probably needed to happen, had nothing to do with the events of September 11.  It spawned two terms that I have come to detest:  "weapons of mass destruction (WMDs)" and "war on terror."

As I have discussed in a past blog entry, there is no such thing as a war on terror.  "Terror" is a tactical way of fighting an enemy.  You can't wage war against a tactic.  You can only wage war against a specific group of people or ideology.  In my opinion this so-called "war on terror" is just a big political snow-job that is a justification to do things that a government has no business doing without a much stronger justification.  All I want is the U.S. government to tell us, the people who they represent, the truth.  If you're fighting Al Qaeda, then that makes sense.  If you're waging war against a dangerous dictator (Saddam Hussein) who used chemical weapons against his own citizens, then just say so.  Using September 11 and "the war on terror" as justification for such actions is dishonest and just cheapens the lives that were lost.  As much as I love this country, I feel that our government has sacrificed much of our liberties that our forefathers fought so hard to gain for a false sense of security that has really moved our political system away from a representative republic and toward a more authoritarian system.  This needs to be fixed.

This week I also saw an episode of NOVA on PBS that was about the usage of the land where the former WTC was located.  There is a large memorial and museum to respect those who lost their lives, and a new, modern, and safe office building is also being erected.  In the program they mentioned that some of the materials for the memorial and/or building were manufactured in other countries (one portion specifically in China).  I find it very ironic and almost insulting that the materials to build at this location cannot be entirely of U.S. manufacture and supplies.  You'd think that the best way to honor those who lost their lives would be to show that the United States still can stand on its own.  I would rather have seen a smaller memorial with the materials being all of U.S. origin than to have a large memorial with foreign materials (particularly from China).  The program also glossed-over the bitching session that has taken place over the previous 9 years over what was going on the WTC site and what the memorial and new building would consist of.

There was also recent talk about a Christian cross being placed on the site of the WTC memorial.  This has come under criticism because it leaves-out other faiths of the people who died on September 11.  The memorial is not a religious symbol, but rather a way for we, those who survived September 11, to honor and respect those who lost their lives that day.  It seems that people have forgotten the motivations for the attack on September 11.  The attack was perpetrated by a group of Muslim extremists who feel, in the eyes of their belief system, that the United States and its people are evil since they do not subscribe to what is in the Qur'an and they feel that our influence in the Middle East has interfered with their culture.  Their beliefs are a justification to work toward eliminating us and our society.  Our strength comes from our political system being overall neutral to personal religious practices.  When our government starts respecting a single religion more than others, no matter what the prevailing majority practices, it starts us on the slippery slope toward becoming a theocracy, much like the one our forefathers also fought to break-away from.  Worse, though, is that we are promulgating the same kind of behavior that fueled the acts of September 11,  Basically it's an "our god is better than your god" argument.

To me, it's not enough to just say, "Never surrender...Never forget."  Yes, we all experienced September 11, 2001 in our own way.  Those experiences are important to history, for sure.  However, if we are to learn anything from the tragedy that happened 10 years ago, then it requires that we understand the motivations involved.  It means we don't just feel sad for those who lost their lives, but we also understand what it means to be American and the value of the liberties we have as a result.

Saturday, September 3, 2011

General Annoyances I

It's time for some new rants, I'm afraid.  Here are some things that the world needs to know:

I.  Use your OWN picture for your facebook profile picture

There are a whole bunch of people who, for whatever reason, find it necessary to use their kid, their pet, their spouse, a celebrity, or something just plain stupid as their profile picture.  If I'm looking for you, I want to see what you look like.  If you have someone else's picture in there, how in heck am I supposed to know if it's you or not?

If you want to highlight things about your kid, give 'em their own facebook page and put it there.  If you're so obsessed with your kids that you have to replace your own picture with their's, then maybe it's time for a bit of therapy.  Seriously, perhaps you've forgotten that your kids do not define you (or they shouldn't, anyway) and that you're important as well.  Substitute "pet" and "spouse" and "celebrity" for "kid" and read this paragraph again.

I'll give some slack to those who are genuinely uncomfortable with having their picture available for people to look at.  Still, in this case, pick an avatar (one that resembles you would be cool) and stick with it.

PS: Yes, I know that my Blogger profile picture has been my cat and is certainly not looking entirely like me right now.  That's a privacy issue...  It's not what I do on facebook.

II.  Too much information (TMI) on facebook

It seems that many people are convinced that every single thing that they do is worthy of broadcasting to everyone they know.  They broadcast nearly every place they go.  Everyone they see.  Every single thought they have.  Sometimes, the thoughts have absolutely no context.

When facebook asks, "What's on your mind," it doesn't necessarily mean that you must elaborate on every single thing you're doing or thinking.  Have we all become so narcissistic that we truly believe that everyone with whom we're associating truly wants, in real-time, to know every single thing we do or thing?  This is one reason I like a blog-style format.  It doesn't demand the level of attention that a facebook "News Feed" stream does.

There is also the issue of boundaries:  There are some things about you or aspects of your life that I really don't need to know about because they're private.

Perhaps the correct fix for this is a fix an enhancement to facebook:  Through some word analysis and, maybe, some classification of various applications in facebook, there could provide a "level" of importance given to each status update (it would default to an assigned value from 1 to 4, and you could manually change it).  Anything from gowalla or indicating "I am here" or "I'm here with someone" or "my picture changed" or "I'm now friends with {blah}" could be assigned a 1.  Phrases that seem to be merely a sentence fragment that don't really appear to be anything more than a disconnected idea could be a 2.  An update with any religious, political, or current event could be a 3.  Everything else is a 4.  If Google can transcribe voicemail messages into text and facebook can do analysis on photographs and automatically tag people, then this priority system surely could be established.

III. I am not just browsing the web (and your site)

Perhaps I'm just too old fashioned, but not everything I do (on the computer) is related to the Internet, and some things I do on the Internet does not require a web browser.  My web browser is still oriented in a "portrait" (more tall than wide) manner, and it does not consume my entire computer screen.  I realize that, to some people, this concept is completely foreign, but I actually do more with a computer than browse web pages on the Internet.  You should try it sometime.

Message to web developers:  YOUR SITE IS NOT THE ONLY THING ON MY SCREEN.  So when you assume that I have an entire 1900x1080 pixel screen devoted entirely to your site, you are most sorely mistaken.  Likewise, I don't have a 1280x1024 pixel display or a 1024x768 pixel display or even a 1024x600 pixel (netbook) display entirely devoted to your web site.  To assume that I have devoted my complete and total attention to your web site is pretentious and insulting.  In fact, as I have been writing this blog entry, I have been opening up additional windows to look-up words and facts, or reference other things, or check to see if someone is trying to reach me, or monitor my computer system's health.

I have said this before with Flash, and I'll repeat it here for any other web content:  Web standards were developed so that you could develop content that would adapt to the user's environment, not the other way around.  I'm not asking that you design your site around a 320x240 pixel display, but for heaven's sake, most netbooks have a display that is 1024 pixels wide.  Considering that I would be using about 2/3rds of the display for my browser,  figure that your web page should generally be usable at 680 pixels wide ("usable" means that I may need to horizontally scroll once in a while, but not all the time).  Also remember that there are a variety of display heights (particularly with newer, 16:9 format displays).  This means that if you clutter the top with crap, then I'm going to be constantly vertically scrolling as well.

Shrink down your browser during development, and if you find yourself having to horizontally scroll frequently to get to navigation buttons, then you're pissing off a bunch of people.  Stop doing what Weather Underground does where they make it so if your browser is too narrow, even horizontally scrolling doesn't work right (the content simply disappears, permanently)...or some developers that verily piss me off and disable the horizontal scroll bar completely.  Yeah, you idiots, you know who  you are...

People who make web pages that have text that needs to be horizontally scrolled back and forth in order tor read it should be forced to endure some amount of torture (to-be-determined).  IMDB...warn your web developers.  I'm coming for them.

IV.  Soliciting information or soliciting religious preferences is still soliciting

I have a sign at my home's front door that says, "NO SOLICITING."  I bought that sign, and I put it there.  According to the dictionary, the word "soliciting" means:
1b. to approach with a request or plea
2. to urge (as one's cause) strongly
4. to try to obtain by usually urgent requests or pleas
So when I say, "NO SOLICITING," I mean that I don't want people knocking at my front door to:
  1. Sell things (that's the obvious one)
  2. Try to convert me to their religion or "save me" by religious conversion (I'm atheist, give it up)
  3. Request information (as in polls or surveys)
  4. Kids selling raffle tickets, candy, or the like
  5. Try to "save me money" (that's just trying to sell stuff in disguise)
In fact, the only solicitations I really am interested in are those from people who I know or care about in a time of serious need (which are likely not any of the above) or someone who I have arranged for a solicitation in advance.

No means no.  I don't generally care about your motivation.  Just because I don't have an electrified barbed-wire fence and an attack dog in my yard doesn't mean that I'm inviting you to come and disturb me.  If you see a "NO SOLICITING" sign at someone's door, it probably means they've had enough of people bothering them when they're in their pajamas trying to edit a blog entry on the computer.  Or something like that.  Ignoring the sign just pisses people off.

V.  People who's blog consists mostly of rants

Oh, crap, that's me...

[to be continued]

Thursday, August 18, 2011

Rick Perry, his pals, and Constitutional Amendments

I originally started this as a pointed, humorous open letter to Rick Perry, but I have been having trouble channeling my inner-humor to deal with this.

In case you haven't heard (I hadn't), it seems that Rick Perry and a handful of other potential Republican presidential candidates have decided that we need a constitutional amendment to ban gay marriage.  I heard about this from BionicDance's YouTube channel (see her video titled Sector Control: Persecution specifically).  I think that Kate (BionicDance) handled the subject pretty well by herself, but I have a (slightly) less emotional analysis and would like to address the bigger issue that this creates.  For the record, I am not part of the LGBT community (I'm straight as an arrow, in case any available straight women like what they read here!!).  However, I do support their rights as I generally would any other group of people who don't interfere with my rights.

I'd like to first mention the immediate issue, which is a constitutional amendment to ban gay marriage.  My question:  "Why?"  I think this is a perfectly valid and simple question.  Why must the United States of America have an amendment to its Constitution banning gay marriage?  Why is gay marriage even an issue?  The usual answers I've heard are:
  1. "Gay marriage taints the sanctity of marriage."  --  The United States does not make laws with respect to religious preference (more about this below).  If marriage is, indeed, a religious construct rather than a legal one, then marriage as a legal construct should be abolished immediately.  End of conversation.
  2. "Gay marriage is contrary to family values."  --  Two US citizens capable of making decisions for themselves and are in love with each other seems, to me at least, to be the foundation for marriage.  As I have mentioned in previous blog entries, the gay/lesbian community has been excluded from the privilege of marriage for so long that their decision to marry is typically much deeper and more thought-out than heterosexual marriages.  Seriously, there is nothing about homosexual marriage that is causing the hetero marriages out there to fail.  They are doing so on their own merit (or lack thereof).
  3. "Gay marriage is an abomination!"  "If gay marriage is allowed it will cause the human population to die off." -- The first statement is typically an excuse for religious dogma shrouded in an opinion statement, but when the people who speak it try to separate the religious aspect from it, they say it means the second statement.  First, there is no requirement that married couples have offspring.  Second, the population is continuing to increase without gay marriage or the requirement for married couples to spawn.  There is no reason to believe that allowing gay marriage will create any problem for humankind.  Besides, it is not the role of government to institute population control policies (and if it is, then I think we need to start to spay/neuter some of our human population).
  4. "Gay couples who raise children will encourage the children to be gay."  "Allowing gay marriage will mean that being gay is acceptable behavior and set a bad example for children." --  Unless you've been living under a rock for the past 20 years, it is pretty well-established that homosexuality is typically more deeply rooted in the psyche than simply a learned behavior.  In point of fact, most heterosexuals (even kids) are genetically predisposed to be attracted to the opposite sex.  They won't learn this behavior from an adult, and most people in the LGBT community will tell you that life would be much easier if they were more like everyone else.  It isn't a choice -- it's more deeply rooted than that.  Is it a genetic issue?  a deep psychological issue?  a mis-wiring of the brain?   Who knows?  Who cares?  A child isn't going to "learn homosexuality."  The worst case would be that a child who is predisposed to homosexuality would have a sense of understanding and acceptance of themselves rather than to put a bullet in their own head later in life as they become so depressed and confused and isolated when they feel "different" and have no place to turn.
  5. "What next?  People will start asking to marry their pets!"  --  Pets/livestock are considered property (at this point in time) and do not have the faculties to make decisions as you and I do about love and the responsibilities surrounding it.  While we love our pets and feel they "love" us, that is not the same kind of conscious love that happens between two intelligent beings.  When it becomes that way, then it would not necessarily be unreasonable to allow inter-species marriage.  Consider that black (so-called "African-American") people were considered property and sub-human not so long ago in recent history.  We have since become more enlightened...or less bigoted...whatever the case may be.  Society hopefully adapts to what it learns about the life around it.  Consider what will happen when and if intelligent life from other planets inhabits the Earth with us.  The question of marriage between human and alien life will ultimately need to be considered.
  6. "I just don't like gay marriage."  "It makes me feel uncomfortable."  --  Thanks for being honest.  My comment about your answer is below.
So I think that covers all the usual answers.  None of these have any business being a matter for government policy, and definitely not a constitutional amendment.  If you're religious and are convinced that the U.S. is a "Christian nation," then please re-read my other entry called "School Prayer" where I cover this ad-nauseum.  You're wrong, get over yourself.  If you can't figure out why this is a serious issue for gay people, then I invite you to perform a thought experiment:  Pretend you are not able to marry.  Figure out how you will deal with power-of-attorney and access to your loved one in time of sickness, how you will manage health care for a non-working partner, how you will handle the death of your partner and property ownership, etc, etc.  Think about how the rest of the nation will arbitrarily refuse to accept the loving union between you and your spouse.  That's what our gay friends are dealing with, and it most definitely is and should be a big deal to them!

My final thoughts addresses the larger issue of "reason #6" (above) and legal/constitutional policy in general.  If you're wanting to ban gay marriage because it is uncomfortable to you, then while I applaud your honesty, I disapprove of your using comfort as the basis for law.  Basically, Rick Perry and his cohorts are effectively using this as a basis for law, and they're wrong.  While they likely haven't yet done so, I'm sure that they will ultimately compare it to anti-smoking laws.  Here we have a legal substance, but it is illegal to use it in various places.  The reason for the law is that it is thought to harm others (and it does), but more realistically the law protects those who are made physically uncomfortable by the presence of tobacco smoke.  There is a difference, though.  Tobacco smoke, as I mentioned before, is not simply an idea you don't like, but is a physical irritant.  When people smoke around me, for example, I have a negative physical reaction.  When someone smokes around me, they affect the ability for me to enjoy my rights as a citizen without physical harm.  Gay marriage, on the other hand, is an idea that some people dislike.  Gay marriage doesn't cause anyone physical harm, nor does it negatively impact the rights of others.  A same-sex couple holding hands, while potentially offensive to you, would actually be legal whether or not there was a gay marriage ban.  If ideas are allowed to drive legal and constitutional bans, would it be OK for me to initiate a ban on Adobe Flash?  Flash is offensive to me and is actually far more harmful to the population at large than gay marriage.  When we talk about tolerance, these are the times when we should be considering what that word means.  There are acts - such as animal cruelty, rape, murder, and family violence - that are examples of things we should not tolerate.  That's why there are laws against these acts.  There are laws against child pornography.  We have decided, as a society, that such ideas are so unconscionable that they need to be illegal.  This is very far from banning gay marriage or Adobe Flash.

I am somewhat embarrassed that I live in the same state where Rick Perry is governor.  First he tries to get rid of the drought through a mass prayer event.  Then he speaks out against gay marriage.  This is a man that I cannot respect because, while his intentions seem to be well-placed, his decisions are based on pure ignorance.  Instead of setting an example of behavior that can be emulated by the public, he is promulgating (and even validating) the same ignorance and bigotry that the most uneducated or stupid of people believe.*  He is not the kind of person I want representing my country as president, and I am sorry to say that he represents me as governor of the state where I live.  Unfortunately I can say the same about most of the politicians in office -- both Republican and Democratic.  Our system of government was founded on the assumption that those who served in office would do what was best for its citizenry, regardless of what popular (or corporate, or special interest, or political party) pressure would say to do.  They were supposed to be the more highly educated among us.  Instead, elections are a popularity contest based on the empty promises they give us all and how charismatic they are with the public.  While I sit in awe of those who have the responsibility of representing the United States of America, I also sit in disgust wondering how the founders of our great nation are rolling over in their graves when they see the kind of people that followed them.

* - I don't mean to imply that everyone who has religious beliefs is stupid or uneducated, but what I am saying is that, well, using your public office to organize an prayer event to try to affect the weather is both stupid and uneducated, and it would be more useful for our public servants to be helping those affected than to try to change the weather....and of course, there is that issue of gay marriage.

Sunday, July 24, 2011

The Week In Memes...

I think switch chips in wireless routers are going to be the bane of my existence.  I spent this weekend trying to document the Realtek RTL8366SR switching chip that is in my new Netgear WNDR3700 wireless router.  Basically I am documenting the chip's internal registers from the smattering of Open Source and datasheets that are related to the RTL8366SR.  Why am I doing this?  Well, I am not convinced that OpenWrt's driver for the chip is entirely correct. I found one or two issues with it already, and in looking at their documentation it is clear to me that they were also working from an extreme scarcity of documentation.  In fact, the OpenWrt folks didn't even realize that the chip is a RTL8366SR (they thought it was an 8366S, which has some significant differences).  What made me realize that we were dealing with that specific piece of hardware is that I can see from the traces on the PC board that the WAN port is connected to the switch chip, and it appeared that the second Ethernet port on the WNDR3700's SOC was connected to the switch chip.

It turns out that one of the features that the RTL8366SR is that it provides a 5th PHY (10/100/1000BaseT Ethernet port) that can be either used as a 5th switch port or connected to the CPU via a second RGMII port.  In this case, they route it to the second RGMII port (coming up as eth1 under Linux) which provides some measure of additional security and performance for the WAN port.  The first RGMII port on the switch chip is what the OpenWrt coders called the "CPU port" and is actually treated as the 6th port (p5 in zero-based nomenclature) on the switch.  The second RGMII port is ONLY available as an interface to port 5 (p4) if that port is configured out of the switch fabric (according to a preliminary spec sheet I was able to dig up on the Internet, for the exact purpose the router uses).

In any case, the driver developers didn't realize this and made a fair number of assumptions about the chip that are somewhat wrong.  My goal is to produce a document that accurately represents the chip registers like I would have gotten from the official Realtek datasheet if I could get my hands on one, and then fix the driver accordingly.  Despite some incorrect information in the driver source code, it was an excellent base for understanding enough about the chip to be able to extrapolate some of what I needed based on what I know.  I wonder how in the world they were able to get so much information without the actual datasheet.  Unfortunately, I am discovering that this router is suffering from the same lack of information than my previous router did.  Sigh.  Realtek and Broadcom:  WHY OH WHY do you require a non-disclosure agreement and be a "development partner" to get a datasheet?!  This makes no sense.  There is no IP in a datasheet - just the information that allows one to use the friggin' chip!

It has been hotter 'n hell down here in Texas for the past couple of months.  I don't mean like, "You live in Texas, you should expect it to be hot," kind of hot.  I mean day after day of 100 (or near-100) degree temperatures since May.  I think we had one day since then with any significant amount of rain (we had a sprinkle or two a few mornings back).  The drought is serious at this point where I anticipate some draconian water restrictions coming.

When it gets this hot outside, I really can't say I feel much like going anywhere outside of the air conditioned house.  Today I thought about going for a ride in the country in the car, but just driving around in this heat even with an air conditioned car seems kind of pointless.

I have been following the YouTube musings from a gal who calls herself "Bionic Dance" (her real name is Kate).  She has been trying to explain to people why babies are atheist.  This has prompted a series of responses from people who think etymology is the study of hearing one's self babble endlessly without thinking.  Kate has been trying to get people to understand that effectively people are born without a belief in a god, and therefore our default position in life is being atheist.  We must learn to have a belief in a god, and become a "theist" as that learning takes place.  The reason why is simple:  The word "atheist" means "without belief in a god" - in other words, not a theist.  This is important for two reasons:
  1. Getting people to understand that atheism is simply without belief in a god (and not satan worship or baby killers or some other such nonsense) is the first step toward all of us being able to coexist.
  2. It doesn't matter what you are talking about, if a person or thing or animal does not believe in a god for any reason whatsoever, then by definition they are atheist.  It doesn't have a negative, positive, or any other connotation.  It just is.  It's like saying, "I have blue eyes."  You know the definition of blue, and what eyes are, and when you look at the color of my eyes, you see blue.
The big controversy comes from religious people (and I think even a few dense atheists) who disagree with Kate that babies are born atheist.  Heaven help that when a baby comes out of a bible-thumping theist the little tyke is atheist.  But, really, there is nothing wrong with that.  As soon as the little spawn is old enough for same theist to indoctrinate him or her with their nonsense, the poor kid, not knowing that their parent is running on automatic, will probably believe it, and no longer be atheist.  However that isn't good enough.  That's because religious types want to believe that absent of any intervention that somehow their offspring will magically believe as they do, for to not do so would make them defective in some way.  Actually, the truth is that their offspring is more likely to believe in the monster under their bed or the evil monkey in the closet than their parents' god without the proper teaching.

The battle over religion vs. atheism seems to be coming to the forefront more and more lately, and more and more I see lots of misinformation being passed around (aside from the superstition making up religion itself).  Watching a show on PBS, I saw a country singer who recently "came out of the closet" declare that the USA is a "Christian nation."  Yet another person who paid no attention in history class and has never looked at the Constitution, or is simply spouting something they heard from someone else that they never verified.  It makes me wonder how long I can handle the ignorance and stupidity that is around me.  Yeah, folks, I'm not perfect and I don't know everything, but when I hear people fight with "Bionic Dance" over the meaning of "atheist" without a rational thought whatsoever, I have to wonder how in hell I ended up in this world.

For what it's worth, Kate, I'm with you!

(courtesy of memebase "Rage Builder")

In spite of all this, I've been listening to "K-Earth Classics" (oldies pop from the 1960s) from Los Angeles on my Roku, which is a great station.  I actually lost track of the time and need to get to sleep...since the alarm and my cat will be waking me up in the morning, and this time it really will be time for work!

Thursday, July 21, 2011

Is Open Source Headed In The Wrong Direction?

Over the time I began writing here, I have made many comments about Open Source projects and have, overall, been a fairly vocal advocate of Open Source Software.  I still feel that open standards and keeping a rich library of open source software is the only way that computer technology can continue to be innovative, particularly in light of the patent frenzy that looms over the computer science and technology community as a whole.  In my line of work I get to work with both commercial (closed-source) and community (open-source) software and, in general, I find that while the commercial software tends to be more polished, the same kinds of bugs and software quality issues exist.  The difference, generally, is that to get the commercial software fixed you first have to convince the company there is a bug, then convince them that the bug is worth their time to fix in a reasonable time period, and if you get that far you may actually see the fruits of your labor in a software update for little or no cost (generally, you end up having to buy a new version or a support contract).  Traditionally Open Source software had a quick turn-around on bug fixes due to the fact that you could, indeed, fix the bug, or someone among a large user community could usually do so.

There are some dirty little secrets, though, festering in the Open Source community that I feel compelled to reveal in the hope that we can reverse the trend.  Note that I am not an OO (Object-Oriented) type-of-person, so what you will see here references procedural software design.  However, I feel that these same issues apply (maybe even more so) to OO classes as they do to subroutine libraries.  That said...

Issue 1:  Poorly Documented Code

If you have a small utility program that does a specific task and is not generally embedded in some other program, then documenting your code is not critical (nice, but not critical).  When I refer to code documentation, I refer to subroutine/class libraries or major OS subsystems that are meant to interface with (or act as an interface for) other software.  What I am finding more and more is that automated utilities are being used to interpret meta-tags in comments and produce documentation, but this really isn't documentation.  These systems produce loads and loads of HTML documents and subroutine descriptions, but don't really show how the subroutine or subsystem is meant to be interfaced with.

The example I like to cite often is the Linux D-Bus system, which is an IPC (inter-process communication) system that is meant to allow various software subsystems to talk to each other.  It is meant to replace many IPC methods that are both incompatible and non-interoperable.  Search in Google for "dbus documentation" you may end up at several places.  The de-facto place to start is the freedesktop.org site, where the D-Bus specifications are located.  While the introduction to D-Bus in the specifications say that it is "easy to use," I still find the entire description of it so incredibly complex and obtuse that I have still yet to understand how all the pieces fit together, what is going on inside, and most importantly, how and why I would use this rather than trying to roll my own (in actuality, I know why I wouldn't want to "roll my own" -- it's because I wouldn't want to write yet another non-interoperable IPC system!).  However, by the time you've read the third or fourth dot-separated interface definition example, your head begins to spin.  By the time I'm done reading, I don't really have a clue how to write a program that uses a D-Bus interface, nor do I have a really good idea what my responsibilities are in utilizing that system.  Okay, yeah, you've given me an API in several different languages, and maybe even written an example program, but I still don't know, both as a software developer and as a system administrator, what I have to do for the care and feeding of the D-Bus system.

I call this poor documentation not because the people involved didn't attempt to document the code, because they clearly did.  In fact, they wrote a lot.  What's bad is that it is not helpful to me.  It goes through lots and lots of pieces of history about the inner workings, but is not organized such that a system administrator can read a section and understand their responsibilities with respect to D-Bus, and an application developer can read a section and understand the interfaces they need to know with respect to D-Bus, and finally, if i want to hack on the internals of D-Bus, a deep investigation as to how it really works (complete with some diagrams, because pictures really do speak a thousand words).  Instead, all of these are probably documented somehow, but are so jumbled together that it is impossible for these three groups of users to truly understand the system as it applies to their role.

I am not picking on D-Bus alone.  This is the same for many projects - particularly in the Linux world, because of the rapid development taking place.  D-Bus is also not the worst offender either.  There are other libraries or OS interfaces which have little to no documentation at all, so your best bet is to grab source code and try to wrap your brain around what the authors were thinking when they wrote it.  That makes for a very elitist group, and seriously limits who can participate in development.

I remember when I was using the VAX/VMS and TOPS-10 operating systems and they had excellent documentation on the OS libraries and system services (TOPS-10 had the Monitor Calls Manual).  Here, you knew what the library call did, when you would want to use it, how to use it, and what data structures were required to be defined.  I think I have just dated myself...

PS:  OO programs and classes are not self-documenting.

Issue 2:  Unnecessary Complexity

I always laugh when I talk about SNMP - the Simple Network Management Protocol - because it is so far from simple as to nearly be an oxymoron.  I've been working with network equipment for years, and even network giants like Cisco can't implement SNMP correctly in their products.  In fact, I have never seen SNMP implemented entirely correctly anywhere.  The reason why is that while the protocol may be "simple" (ASN1 may be simple in theory but it is not simple to implement), the interfaces are so complex that nobody really implements it properly.  Anyone who has downloaded a manufacturer's MIBs and tries to run them through the ever-friendly (said rich in sarcasm) Net-SNMP (originally developed at Carnegie Mellon University) interpreter will notice that they end up with hundreds of error messages.

After looking at SNMP for a while you start to ask yourself, "Can't this be done any simpler?"

In defense of SNMP, I actually wonder if it can.  I mean, I certainly haven't come up with anything better, but I also haven't tried much either.  In any case, organizationally speaking, it is actually hard to figure out how to manage any network equipment with SNMP even after looking at the MIBs the device implements.  You'll typically end up having to join one OID (object identifier) in one "table" to get information about some OID in another table.  Cisco even makes things worse by requiring that you get information for different VLANs by using the community string in an undocumented way (for those interested, it's {community}@{VLAN}).  Sure, this is all documented in the MIBs, but trying to navigate them is a chore.  Cisco at least had a web-based tool to navigate their OIDs, but given Cisco's slow web site, it isn't pleasant to use either.

Some software simply grows organically in such a way that its interfaces or functionality becomes so complex that it would be better to re-think how it is done than to pile more and more functionality on the already complex framework.  I point to two other examples of software that has grown in this way:  two newer syslog daemons for LInux, and the latest Linux OS startup manager called "systemd."  These are two simple functions should really have (or retain) a simple interface, but are becoming more and more complex as time goes on.

One other casualty of excessive software complexity is that it becomes so difficult to use and/or configure properly that latent security holes form that can eventually be exploited.  While I have come to like sendmail, it is an early example of a software system that suffered from this kind of issue.

UNIX was originally created such  that simple software tools were developed as building blocks, and these simple tools were meant to be coupled together to form more complex systems.  While the problems we're now solving are more complex than these original tools were designed to handle, it seems that we've lost the basic principles that made UNIX a desirable operating system to use.

Issue 3:  Bloat / Scalability

I almost feel that the issues of bloat and scalability should be handled independently, but upon further thought I think they are so closely related that I am going to keep them together.

When I talk about bloat I am talking about a system that has become so large that it should be questioned whether the system should be broken into smaller, more manageable, pieces.  Most often, bloat occurs because the software (like what was described under excessive complexity) grows organically and eventually starts to do things that it wasn't originally meant to do.  At other times, it simply grows too big because it is trying to do everything all at once.  I have a few examples of this that I am going to pass-on, because my writing is also becoming kind of bloated as a result.

A cousin of bloat is scalability.  Scalability problems generally arise when someone writes code to solve a small problem, someone sees it and thinks it's a great idea, and uses it to solve a much bigger problem.  In Open Source software the biggest scalability problem I see can be categorically called memory abuses.  In so many software systems I see software that will casually read an entire configuration file, parse it, and keep it in memory.  This acceptable when the configuration file doesn't grow to be too big, as most configuration files are.  However, there are some configuration files that hold data that is probably better suited to be kept in a database of some kind, rather than being read into memory from a configuration file.  The Asterisk Open Source PBX contains many classic examples of such an abuse.  In addition to the application tying-up loads of memory holding copies of these configuration files, it also prevents any other applications from being able to modify the data outside the application in such a way that the multiple applications can work together.

Another example of a hidden and subtle memory abuse and scalability problem is OpenWrt's UCI (Unified Configuration Interface).   UCI works by taking a common configuration file format in multiple files in a single directory tree (/etc/config, in their case).  Applications wishing to use UCI use a library that effectively takes all the files in the directory, parses them, and converts them to a tree of dot-separated-key/value pairs.  The configuration language itself presents a scalability issue because its syntax is limited, and is expected to be used for virtually all OS configuration tasks.  The bigger scalability issue is that shell scripts that use UCI has an API that reads the entire configuration file tree into shell variables.  So if a shell script uses only a small portion of the UCI-based configuration, it must read, parse, and store all of the configuration files in memory.  In fact, every time the UCI library is used, the configuration files are effectively parsed, because the application never knows which configuration file it may be using, and the UCI system doesn't know if one of the configuration files were changed by another process.  As I started to understand more and more of what UCI was doing and how it worked, I asked myself, "Why in the world didn't they just use SQLite?"  Now, granted, there are some advantages to UCI, an important one being the ability to maintain temporary state by grouping temporary directories with the normal configuration directories.  Yes, I get that.  However, SQLite gives you the flexibility and scalability of a SQL-based database coupled with an efficient size that works well in embedded devices.  It was designed with this in mind.  State could be maintained in a temporary table, as an example.  OpenWrt has some fine conceptual design features but lacks sufficient scalability in many areas.

When Open Source software systems become more bloated and less scalable, it forces people to ask themselves, "Why don't I just cave and use Windows?  Or MacOS?"  Which leads me to the final issue...

Issue 4:  Bugs & Egos

Bugs are a fact of any software system, particularly those that become larger and more complex.  It is how the bugs are addressed where Open Source software projects are becoming more and more troublesome.  While it is true that having the source code means you can fix the bug yourself, where you can't in a commercial (closed-source) model, being able to actually fix the bug requires a particular level of expertise.  If you're dealing with issues 1 through 3 that I outlined above, that level of necessary expertise becomes less and less available, even to people who are experienced software developers.  In addition, if you find the bug, and are skilled enough to fix it, you'll ultimately want your hard work to be incorporated "upstream" into the next release of that software.  If you can't fix it yourself, then you need to report the bug upstream as well.

Now having worked on several software projects in my day, I realize there are frivolous and even incorrect bug reports and patch suggestions.  However, the developers on many Open Source projects have begun to have an inflated sense of their ability to both produce good code and bug-free code such that they frequently place such stringent demands on people reporting bugs as to discourage participation.  Without naming specific projects, I have submitted bugs with a high enough level of detail that the core development group should have been able to reproduce the bug without lots of additional detail.  However, they require so much additional detail that it frequently takes me longer to report the bug than it did to fix it (when I can).  Seriously, many projects simply outright refuse to acknowledge your bug report unless you provide massive amounts of debugging output and precise details on how to reproduce the bug.  Some bugs cannot be easily reproduced without being exercised in a specific environment that can't be trimmed down to a small sample case.  I have also had instances where some projects rejected my bug report simply by refusing to acknowledge the behavior as a bug, or by refusing to address the issue, generally asserting that the problem won't occur in a typical environment.  This is a more of a problem of ego than of failing software, and is becoming more and more common as more and more people utilize Open Source software.  I genuinely value people's time and understand that these projects are being run in a volunteer capacity, but if a project is to be taken seriously it can't be so inaccessible that only a few elite can be trusted to address problems in that software.

The other ego issue is code that is so badly written that, while it works, it is hardly maintainable or expandable.  Most software projects won't allow the code to be rewritten, or if they do, it won't be without a large amount of supporting evidence.  In many cases, what constitutes badly-written code is in the eyes of the programmer, but I've seen some utter crap in my travels that make you wonder how any computerized device in existence today actually works at all.  Again, without mentioning a specific project, there is a well-known Open Source developer that wrote some C code with two arrays.  That developer depended on the C compiler allocating space for the two arrays such that they were adjacent to each other, and proceeded to access part of the first array by providing a negative array index in the second array (editor's note: I believe it was actually worse than this, that this was being used to compensate for the case where the index became negative and the programmer was too lazy to address that case).  Not only is this blatantly bad coding practice, it was sufficiently non-portable that the code simply failed when used on a different operating system.  Happily, this specific issue has since been fixed...but what possesses a person to write code like this and assert it is correct?

Commercial software companies employ FUD (fear, uncertainty, and doubt) about Open Source software to convince people that using it is risky.  If, as Open Source advocates and project developers, we don't address some of the issues noted here, we are likely to be playing-into that FUD.  Larger Open Source projects depend on businesses using this software and supporting development through allowing employees to work on the software to make the software viable.  Further, without keeping enough interest and active participation in a project, there will not be enough continued development and support to keep the various projects going.  While I am, and will likely continue to be, a strong Open Source advocate, I am beginning to see these issues as an unraveling of some of what I admire about Open Source.  I understand that my criticisms here are likely to gnaw at some people, but at the same time I'm also hoping that these criticisms will cause some thought that will ultimately lead to better software.

Finally, I want to emphasize, again, that the specific projects I mention here have many positive points despite the fact I have not commented on them.  The reason I mentioned them here was because I was interested enough in the project that I wanted to learn more or wanted to participate.  If you're reading this and are part of one of these projects, understand that what I am saying here is meant as a means to make the project better...not to trash it.

Monday, July 11, 2011

How Government Finance Works

I have said many times that there 's "no such thing as a free lunch."  What I've neglected to do is explain how government finance works -- that is, how does government get the money to spend it on programs and so on.  Note that this is somewhat of a simplification, and I am not an expert on this subject, but I believe what I am saying here is true.  If anyone has any better first-hand knowledge, please pass it along!

Let's start with a simple example of how you would handle things in your own household.  Let's say you want to buy something - a big screen TV for example.  You have several options:
  1. If you have the cash, and it is not earmarked for some other expense, you simply pay for it.  You're done.  The other options below mean you don't have the cash available, so you need to get the money some other way.
  2. Charge it on your credit card.  Doing this means you get the TV, but you will be paying much more for the TV since you will need to pay back the credit card company with interest.  Paying minimum payments on your credit card means that the TV you purchased will cost more than twice as much as you paid.
  3. Borrow money from a family member.  Family generally doesn't charge as much (if any) interest, but not paying the amount back in a reasonable amount of time means that you will not be on good speaking terms any longer with your family (and they could sue you in court).
  4. Sell something of value you already own and don't use.  There's eBay, amazon.com, and even pawn shops.
  5. Perhaps you live with someone and you could both pool resources and share the TV.  This doesn't happen too much anymore.
  6. Don't purchase the TV now, and save for it.
  7. Steal the money.  No, I don't recommend this option, and it really isn't an option, although people do it.
If you were fiscally-responsible, you would first think about whether the TV is something you really needed at this time, and consider whether it was necessary to finance it or simply wait until you had the money to pay for it.  A TV is typically a discretionary expense, meaning you can live without it (it is something you'd just like to have).

Likewise with something more important and much more expensive, like a house.  Most people have no other alternative than to take a mortgage (a loan) to buy a home, which tends to be not quite as discretionary (how large/small and expensive of a house is, though).  That money does come with a large cost, though.  A $100,000 house with a 10% down payment at 5% interest goes a little like this:  You'll need about $15,300 at closing, you will owe $90,000 and pay around $800/month (principal+interest+taxes+insurance).  After you pay the house off in 30 years, the $100,000 home you purchased will really have cost you $183,930.21.  Consider also that if you don't stay in the home for the full 30 years, be aware that the way compound interest works is that you end up paying more interest than principal at the beginning of the loan (in order to keep a consistent payment throughout the loan's lifetime).  I know this because I have a handy spreadsheet around for just this kind of thing.

Some of you already know all this, and I'm sorry I had to explain this in detail.  However, there are some people who miss the fine points of personal finance, which is a prerequisite to understanding municipal and federal finance.

In government finance there is income and expenses, just like in personal finance.  Unlike personal finance, government does not have the means to earn money (they could print money arbitrarily, but that would cause the money to become worthless).  If a government wants to build a bridge, for example, that costs $10,000,000 to make, it needs to do one of the following:
  1. If there are funds in reserve -- that is, money in the government's savings account -- and enough to build the bridge, then the government procures a contractor and construction begins.  Because people in government don't seem to understand finance too well, they don't have money in reserve these days...
  2. It can raise taxes proportional to the amount of the bridge in order to raise funding.  This is a problem, though, because the properties of inflation means that the bridge will likely cost more by the time enough money is raised through taxes to build the bridge.  Also, if the bridge is needed right away, waiting until enough tax revenue is raised may be too long.  Also, assuming that the bridge would be built using 1 year's worth of taxes, it is very likely that this would become an unreasonably large tax burden for most people.
  3. It can sell a bond to acquire the funds to build the bridge (doing this at the municipal level generally requires an election).  This is the usual way that governments obtain funding for a project.
  4. It can steal the money.  I don't recommend that government steal money either, but in some instances this actually does happen, sadly enough.
A bond is where the "national debt" comes from.  Remember "savings bonds?"  This is an example of a government bond.  The government sells bonds with a promise to pay back the principal and a certain amount of interest when the bond matures, or comes due for payment.  At that time, whoever holds the bond can cash it in and the government pays the holder (principal+interest).  In essence, the government is borrowing money from its own people, foreign interests, and so on, just like you would if you borrowed on a credit card or took out a mortgage.  Only in this case, whoever the bond holder is (maybe even you) is the one extending credit.

How does the government get the money to pay the holder of the bond?  They get that through levying taxes.  Generally bonds take 10 years or more to mature, so the principal and interest can be divided up over 10 years, so that taxes won't need to be raised so high that the cost of the bridge would represent an undue tax burden.  In short, the government takes out a loan for the bridge, and we, the people, pay back that loan.

What happens if the government can't pay on their debt?  Well, then, we're in a bit of a pickle, aren't we?  See, the government doesn't earn money, and they don't have stuff they can sell-off on eBay or at a pawn shop.  Worse still, the people who mismanaged the funds to begin with (our elected representatives) are generally long gone, or if not, they're not going to own-up to the fact that they screwed-up.  Or, maybe they haven't screwed-up, but perhaps something cost more than they expected.  Much more.  Either way, the government has to pay on their debt or they default on their loans and go bankrupt.  Since we, the people, are technically the government, that's not a good situation for us.

So what the government usually ends up doing is taking out a new loan to pay the other loans.  Since the government is typically a pretty good "customer," they usually don't have any trouble finding a new entity willing to loan them money.  Remember, though, that just like your own finances, if you pay one loan with another loan you not only pay interest on the original amount, but now you're paying interest on the outstanding balance of the loan plus the interest.  Over time and enough screw-ups, that comes out to a boatload of interest.  The other problem is that governments who have a reputation of being like Bernie Madoff really can't sell bonds after a while, if the prospective bond holders don't think the government can pay it back.  So at some point, funding though tax revenues does have to happen or eventually they'll be so "upside-down" on their loans they won't be able to get more!

This is the reason why there is no such thing as a free lunch.  Eventually, every government program or expenditure requires that we, the people, pay it back.

Senator John Cornyn was recently quoted as saying that 51% of American households pay no income tax.  Let me repeat that:  51% of households in the United States of America are not paying income tax.  When people start bellyaching about the rich not paying their fair share of taxes, I would like you to consider this number.  If the 51% of American households that didn't pay income taxes received no benefit from the programs and infrastructure that the government procured, then perhaps I would feel better about this.  However, what this really means is that 49% of us - that is, the rest of us - are paying for all the stuff that the government did and are doing for all of us that hasn't been paid for yet.  That figure is both astounding and distressing.  While I am in agreement that corporate tax loopholes need to be closed, I also feel that this is a good time to start considering a flat tax.  People cannot be asking for and consuming resources without paying for them, and that is exactly what is happening now.  Municipal governments are increasingly in crisis trying to pay their debts.  The U.S. federal debt is now over 10 trillion dollars, and has no end in sight.  In fact, this is what raising the debt ceiling is all about.  It's not just about what the federal government is spending, but really more about how much they've borrowed and how much they haven't yet paid back.

This is the reason why I tend toward being fiscally conservative (no, not Republican, I mean fiscally conservative, or even better, fiscally responsible).  As a society, we need to start understanding the cost of what we want, and carefully consider that cost against the benefit we receive.  If this were your own household, and you were at least half-way financially responsible, you would not keep spending and spending and increasing your debt while having no way to pay it back.  That is what the government has done, and with the financial climate as it is right now, the implications of our debtors asking for their money and government not having anyone to sell bonds to makes this even more dire.

I don't want to pay higher taxes, but even more so, I don't want to pay higher taxes while more and more people who consume more of the resources the government provides pay none.  Not only is that not fair, it is, in my opinion, criminal.  Yes, I agree that there are issues with health care and so on, but consider what will happen if you tax the doctors and health care providers right the heck out of this country.  Then what?  What happens when all the people who are innovating and making something for themselves leave the United States because they pay so much in taxes that their efforts are no longer fruitful?  I'm not sure you want to think about that.

Again, I am not in favor of "tax cuts for the wealthy," but I'm also not in favor of 51% paying no taxes.  I'm not in favor of someone with 3 kids, a big house, a big shiny new car, and all the crap they buy for themselves and their kids, telling me how they want need a tax cut and asking why the rich are getting a tax cut.  How they want this program and that program to be funded by "the government."  We don't have any more money, and we can't afford to be giving tax cuts to the people who use the stuff the government (really us) pays for.  We have to start being responsible, and if we don't, there soon won't be any government-funded programs and infrastructure.  At all.  Maybe not even a government.