Merry Christmas!
I've updated my wishlist again, to reflect gifts received now that we've done Melody's side of the family. My side of the family is getting together at the end of the week in Nebraska, while we're all together for my sister's wedding (Congratulations, Jaci Smith). Should be a fun trip, at least as much as is possible when you spend 20 hours out of 72 in a car.
Finally, for anyone who hasn't heard, Melody is pregnant! Due date is in mid-August. We'll know more after her doctor's visit on Thursday.
Just in time for Christmas, I've updated my wishlist. Improvements include adding clothing sizes, culling a few items I've either acquired, no longer need, or that aren't available, and a new addition.
I'm finding more and more that you identify smart people not by whether they give good answers but by whether they ask good questions.
In late 2004 I took a job as a VB.Net programmer. At that point my only exposure to Visual Basic had been a six week segment of a class in college covering VB6. Most of the rest of my college work was done in C++. My employer knew this, but hired me anyway. I hated VB6 then, and I hate it now. Needless to say, I was very nervous going into that job. Fortunately, I fell in love with VB.Net very quickly.
This is why it pangs me so to see the bad wrap VB.Net still gets today, especially when compared to C#. C# does have some admitted advantages over VB.Net, but VB.Net is sometimes not even given full consideration. I think this reputation is undeserved, and largely based on VB6' well-deserved reputation as a 'toy' language. I want to lay it to rest; VB.Net doesn't deserve the same dis-respect as VB6, and here's why. Below is a list of improvements for VB.Net that were not available in VB6. I'm talking real language improvements, not just API classes you can use because they're in the CLR. These are reasons why VB.Net deserves to be considered a real, grown up language:
- Real Exception handling. No more On Error Resume Next (unless you really want to). VB.Net fully supports the try/catch/finally constructs.
- Short-circuit logical operators. VB6's 'And' didn't behave the same as C++'s '&&'. Many programmers are not aware that VB.Net has new logical operators that mimic the functionality of '&&' and '||'.
- Better OOP support. VB.Net still supports modules, but it treats them as a construct called a 'static class' in C#. In addition, you create real instances of classes and structures. They support inheritance and polymorphism. Even operator overloading is allowed now. The only thing missing for complete OOP support is multiple inheritance, and that's not available in C# either, unless you count interfaces (in which case VB.Net has it as well).
- Option Explicit on by default. Most good VB6 programmers used it anyway, but now it's on by default. And you don't see many good VB.Net programmers using variant types anymore, either. When I see a new variable declaration, I expect to see a type name right there as well.
- Generics. Once limited only to C++ templates, VB.Net gained the ability to use generic types for classes and methods at the same time as C#.
- Lambdas. VB9 (Visual Studio 2008) has support for inline lambda expressions.
- Function Pointers. Okay, not really pointers, since no managed language has true pointers. But there is a construct available for using the managed address of a function, or passing a function as an argument to another function.
VB.Net may have a few quirks, but so does any language. These days it deserves the same consideration as the big boys.
http://gizmodo.com/gadgets/clips/wiimote-hack-is-wireless-multitouch-tv-321329.php
To summarize the linked article, it's a video showing how to set up a Wiimote 'Minority Report'-style. What's amazing about this hack is it's simplicity. You don't need any additional software to see it work; most of the demo is shown on using the Wii's calibration system. You don't have to open any hardware or void your warranty. You may need to do a small amount of soldering, but the soldered piece requires only about $4 worth of parts from RadioShack and is about as simple as it gets. You're basically making a flashlight.
Also shown was a demo app running on the PC. Personally, I would love to see a mouse driver for this that let's you move the cursor without holding a mouse (perhaps using a 2nd finger or thumb to 'click'). Okay, without holding anything electronic; you do still need reflective tape.
As a final note, you don't even need a Wii to try this. Wiimotes are available separately and as I mentioned there is a demo app for the PC.
I've spent some time over the past months working on this recipe. Here it is, just in time for Winter:
I recommend the following changes to your standard 'one cup of hot water to one packet of cocoa mix' recipe:
- Use no sugar added cocoa mix. Experimentation has shown me that if you follow the rest of my recipe you won't taste the difference between this and the regular mix, so go with the slightly healthier stuff.
- Start by putting 1/2 to 2/3 of the total water in the cup, and adding the mix to that. This will help keep all the mix from settling at the bottom, make sure all the mix stays in the mug while you stir, and let you add more water later to dissolve the stuff that sticks to the spoon and the side of the cup.
- Replace the last 1/4 cup of hot water with coffee. It will add a nice bite to the flavor as well as some extra caffeine.
- Use 1 1/2 packets of cocoa per cup. If you don't want to save or throw away the extra half packet then try doubling the recipe. You can share the extra or drink it yourself. If that doesn't appeal to you it's okay to use just one packet of cocoa mix, but you'll also want to cut back on the coffee a bit, which to me kinda defeats the purpose.
- Add 1 1/2 portions of French Vanilla Creamer for an extra smooth flavor.
As long as there is software, there will be bugs. This is an axiom every programmer lives by. A first draft of a portion of software is rarely any better than the first draft of a similarly-sized literary work. Not that I'm equating source code to poetry, but there are similar requirements. There will be typos that must be fixed. The cadence must be just right. And a programmer must pay even greater attention to detail. A new piece of code could have subtle consequences far removed from the point of creation. A good percentage of a programmer's time is spent fixing these little problems.
Nevertheless, when a programmer writes new code there is a certain expectation in his mind, before it's tested even once, that the new code works to a certain extent. After a few rounds with a debugger that expectation is much increased. It's not so much that a programmer wraps his ego in his code as it is a natural aversion to making mistakes. People don't like to make mistakes, and programmers are no exception. Programmers want to be able to take pride in their work, just like anyone else. They need to believe that their product has quality.
But as long as there is software there will be bugs, and that expectation for code to work is always balanced with the knowledge that something in the code is still wrong. These two thoughts are constantly at war in a programmer's mind. He knows clearly what he intends his code to do, he knows the language he's expressing it in, so it should work exactly as he expects. At the same time he knows this is a lie for every piece of code of any significant size he's ever written, and somewhere in this code there is a bug such that under the right conditions the code just might behave differently. A programmer has to believe he knows what he's doing, or he will never be able to accomplish anything. He also has to believe he is essentially incompetent, or he'll deliver code that was never adequately tested.
It's easy to see now why programmers have a reputation for burning out. Given this situation, there are a limited number of possible outcomes. If this state of paradox continues forever it will cause increasing stress, leading a programmer over time to come to hate his task and seek a new profession. Burnout. The alternative is that one side must become dominant over the other. If the programmer believes more and more that he is essentially incompetent his ego suffers. He is defeated. He will, again, come to hate software development and burn out.
The other option is for the programmer to believe more and more that his code is perfect. In this case you end up with another programmer stereotype: the arrogant rock-star. If a programmer has the skills to back up this self-image they can go a long way. The really great ones will last out their careers. The somewhat great ones end up in management. If a programmer doesn't have the required skills they'll consistently deliver poor code, and eventually lose their job and move on. This isnt' exactly burnout but has many of the same symptoms, even from the point of view of the programmer. And it still contributes to the image of programmers having a short shelf-life.
Of course, these observations are not guarantees. This is a situation where the ever-changing nature of the industry helps. If you have to learn a new language or a new environment every couple of years you never really attain expert status in that system. You're always on the front end of the learning curve, and that makes it easier to accept your failures. Of course this has it's own negative effect, and can lead to a different kind of burnout.
There are other ways to avoid burnout. You can look for projects that reduce the stress caused by the paradox. A programmer may work on a large project, and then spend several years maintaining that code base. For a fresh programmer that's a frustrating situation, but for a programmer approaching burnout it's a chance to relax. Once the project enters the maintenance phase the programmer has no learning curve and the errors he fixes were mostly committed by others. When the cycle finally ends the programmer is refreshed and ready to move to something new. That's just one example. What works for one programmer may be different than what works for others.
Many programmers will also find a natural balance. The paradox is still there, but they've found a balance that doesn't produce unmanageable stress and still lets them keep their edge, both in the need to be constantly self-critical of their work and the confidence required to produce good code in the first place. Burnout-level stress also takes time to develop, so those who don't find a good balance may be able to outlast the effects. But as long as there is software there will be bugs, and and long as there are bugs programmers will keep pulling their hair out.
Let me start by saying that I don't use MythTV. Come to think of it, chances are that you don't either, so here's a real-quick description: MythTV is DVR software that runs on linux. What that means is that you can use it to turn any old computer into a TiVo. Neat.
One of the features you expect from a decent DVR is the ability to pull down listings for your local area and use them in the menu, to help you tell it what shows to record. For a long time MythTV has used a free service called Zap2It to get those listings. However, Zap2It can no longer support free MythTV users. In the future, MythTV is recommending a for-pay service called ScheduleDirect. It's very cheap, but not free, and not open.
So here's my idea. Create a wiki with a page for each TV station where users can enter their own channel information. For large markets that means most users won't have to do a thing. If you use MythTV and you want data on a channel that's not available yet, enter it yourself. The wiki pages could use a template structure that forces the data into a format that's easily understandable by a MythTV box. As the service catches on some stations may even take over the entry themselves. It's a win-win.
I don't use MythTV so for me this idea is largely moot, but I wanted to share it anyway. If I had an extra old computer lying around I might try it, except that this is an expensive way to get a DVR. The typical PC costs $300/yr to run, depending on your local rates, the specific hardware involved, how much it runs and the software used. A typical set-top box costs 1/3 of that. The money saved will quickly pay for a new standard DVR and support the required subscription.
If you're not a programmer, specifically a .Net programmer, this will likely be a pretty boring post. Fair warning is given.
I just found this link and I wanted to share it. On one hand this isn't a very big deal. MFC included source code, and I can and do step into all the time, often when I don't want to or care (Hopefully they'll be smarter about that with .Net). On the other hand, it's pretty cool, for a few reasons:
- The option wasn't there before in .Net, so this is a new capability for .Net framework developers. There are some pretty complicated methods that do a lot of 'mystery' work behind the scenes (I'm thinking databinding here). It will be nice to explore those.
- This could potentially be a huge boon to the mono project. While the license will likely technically prohibit the mono team from even looking at the code for liability reasons, I wouldn't be surprised to see Microsoft look the other way on this. They already have a relationship with Novell, and have basically contracted Novell to do the Linux Silverlight implementation. It's to Microsoft's advantage to allow the mono folks to take advantage of this code. That's exciting for me, because I would love to be able to build a .Net Windows app and then port it to Linux with very little work.
- There are new capabilities in Visual Studio that let you take better advantage of the framework code than you could under MFC. Now when you pause execution of a running program while debugging you can see the whole call stack, and step into the code at any level. Or you can step out up to any level.
As a conservative who works in a city that is overwhelmingly liberal (Madison may be second only to San Francisco. The mayor even wants to put in a trolley system.), politics tends to be an uneasy subject with me. As a defense, I have resolved not to talk politics with anyone, whether conservative or liberal, who isn't willing to give me, in writing, a list of 5 issues on which their side is wrong, as well as how and why. This policy applies whether your agree with me or not.
I need to clarify this somewhat. I'm looking for real issues here, not current events. Things like education, overall foreign policy, health care, welfare, gun control, the environment, Evolution, prayer in school, and abortion all work. The Iraq war, the sitting president (whoever this may be now and in the future), or whether John Kerry is a flip-flopper don't. I contend that there are plenty (hundreds, some more contentious and popular than others) of issues like this that if you can't find at least 5 points on which you disagree with your side's conventional wisdom you've probably been too entrenched, too brainwashed if you will, to have a real meaningful discussion involving politics. You've lost the ability to think for yourself and will accept almost anything your side's talking heads spout, and reject anything coming from the other side, or at least instantly mistrust it. Cognitive dissonance will kick in too quickly. If you can't find at least a few areas where you don't toe the party line, you need to go back and evaluate how you think about things. Maybe listen a little more to news and media sources sympathetic to the opposition, so you're sure you get both sides of the argument.
To avoid being too much of a hypocrite on this policy, I'm currently working on my own list. I'm putting some thought into it because I want it to still be valid some time from now, so I can point back here and say, "Here are mine. Where are yours?" I'm also planning to list a few additional items where I don't completely follow the Conservative viewpoint, but would still be considered to have a Conservative bent. Look back here soon for me to edit this post to include my list below. The list is now ready, posted on 9/20. Read below:
Energy Policy: Convservatives have largely focused on ways to get more domestic oil or to better use the oil we have, but it's still about oil. When it's not about oil, it's about ethanol. We need to focus more on alternative sources, especially solar.
Environment: Don't get me wrong here; I think a lot of liberals are way off the deep end. As a devout Christian I'm also of the firm belief that God is in control of events. God determines if there will be drastic climate change in our future, not man. I believe global warming is happening, but I'm not convinced that it's a serious problem yet. All that said, I think conservatives ought to push more for, well, conservation. Better recyclying programs, polution controls, and expanding parks. I think the liberals have often taken the wrong tack on how to go about it, but at least they're doing something.
Education: This is something liberals definitely have right, and conservatives need to stand up and take notice. We need to push more money to education, if for no other reason than that the kids of today are the voters of tomorrow. Right the teachers union is fiercly liberal, and not only because that's the standard union way. It's also because the teachers know where their money comes from, and they know democrats in control mean more money in their pocket books. And these are the people who teach our children. You don't have to spend a lot of time in a public school around here to find indications that the result is going to be children who grow up to be liberals. Madison high schools have gay/lesbian sensitivity classes. The elementary schools have children bring school supplies to a socialist style common supply closet.
Space Program: I'm hesitant to use this one because it almost qualifies as a current event, and because it's hard to nail down exactly what the each side's positions are. Suffice it to say that the program has of late followed conservative direction, and it hasn't prospered. It could do a lot more with a lot less. That doesn't mean commercialize the program; that would be a mistake. I think maybe the best solution is better divide the research, exploration, and space services missions. Tom Mueller of SpaceX said of NASA in a recent Wired article that, "They pay five times the cost for the last 5 percent of performance." This would be fine for the research arm, but the same philosophy is killing it's exploration and services branches.
Homeland Security: Creating an entire Homeland Security department was not a good idea. There's just too much beauracracy. Homeland Security should have limited to a new agency under the department of defense, and it's primary charter should consist of only two missions. First, enabling the sharing of information between agencies that currently are unable to do so. The CIA and FBI aren't supposed be too close for good reason. But sometimes one will have info of importance to the other and . A homeland security agency could provide a well-defined, legal means of sharing that data. Second, it should exist to support local governments in securing infrastructure- water supplies, utilies, and roads. I would mention the broad wire-tapping, but that's more of a current-events thing.
Now for some issues where I side with the conservative camp, but with perhaps some liberal leanings:
Gun Control: I think it's pretty clear the 2nd Amendment is referring to individual rights, and not the right of states to keep militias. I don't have space here to go into all the reasons why, but let me just say I think it's wishful thinking to beleive otherwise. Even if these were not case I doubt the wisdom of a ban on guns. I also want to point attention to the word 'infringed'. Infringe is not the same as deny. Have you denied someone a gun if you make them wait seven days, or say they just can't get an assault weapon? Well, no. But you've certainly infringed on their right, and therefore these measures are unconstitutional. I do beleive there are three measures we can take for better gun control in this country:
1) Redefine a gun to include a trigger lock. All guns come with trigger locks, trigger locks must be used in residential and urban areas.
2) License gun owners. It sounds a little creepy, but as long as the government doesn't have the ability to turn down a license (or charge more than a pittance for it), it should be legal. This won't do much on it's own, but it's essential for the next item, which is...
3) Make gun owners somewhat liable for crimes committed with their gun. Level fines for allowing a gun to be stolen, jail time for failure to report a stolen gun.
The idea is make it worthwhile for gun owners to be a lot more responsible about how they take care of their weapons, and make it a lot more difficult for unregistered weapons to end up on the streets, all without denying anyone the right to a firearm.
Prayer in Schools: I believe that even teachers and administrators should be allowed to pray and be seen praying at school. However, leading a prayer that includes students is perhaps crossing the line. As much as I like to think about a student coming to know Christ because of prayers led by a teacher, I still think there needs to be clear guidelines on religious expression from public authority figures. I would be deeply troubled if my daughter felt pressured to pray to 'the Great Spirit', Buddha, or anyone else. However, as long as she is not asked to take part it's merely an educational opportunity. I don't think she shouldn't know what else is out there.