I raised this question at the office today and I was surprised by they debate which arose. Generally developers seemed to immediately favor "instantiate an object" until they had participated in the debate a little. Then the majority leaned on the side of "instantiating a class."
I spent considerable time customizing the Windows XP/2003 install recently in order to slip-stream in the SATA drivers. In the process I came across several good links for this type of thing. All appear to have their root at Microsoft Software Forum Network, a great site especially for IT/Windows type of information.
Creating Multi-Boot DVDs - Provides a step-by-step guide on creating multi-boot CDs and DVDs. There is also a beginners guide. An entire forum dedicated to the topic of Multi-Boot CD/DVDs is also available. More instructions are available here.
XPCreate - a large batch file that slip-streams hot fixes and Windows install customizations into a new ISO image. This program is great and I highly recommend it to anyone trying to slipstream drivers into their unattended install. (It doesn't appear to support Windows 2003 AMD 64 bit :( but greenmachine provides excellent support and I would imagine he would add stuff if there was enough demand. Incuded in this utility are
CDImage - Command line creation of ISO files (an internal tool from MS but available none-the-less with the XPCreate download). A GUI (currently Beta) version is available here and rumor is that it wraps the command line version. CDBurn.exe - Command line CD burning given an ISO file BBIE (Bart's Boot Image Extractor) - Command line extraction of bootimages from CD/DVD/ISOs
Just on the own these utilities are quite useful in my opinion, never mind there use with XPCREATE
XPlode - A tool for aiding the process of running unattended commands/installs during Windows install. There is little documentation but the utility is actually a CMD/BAT file so it is self documenting to some extent (although the author certainly performed some wonders IMO). The top "How to run XPlode" topic on the forum provides the best introduction.
Both XPCreate and Winnt.sif files use and INI format. As a result I needed a commandline INI editor. For some reason it took considerable time to find this program... so much so that I began writing one (in C++ of course) but avoided this at the last minute. Fortunately, I came across EZ INIEdithere and then INIMAN.EXE/INITOOL.EXE tools called INITyme which are part of the XPCreate download.
One of my favorite windows unattended install tips is to open a command prompt at T-12. Besides performing custom actions this is a great location to debug the cmdlines.txt file. To open the command prompt simply add
start /w cmd.exe
to the [Commands] section of CmdLines.txt. Alternatively, place that command along with other commands into a CMD/batch file as described here.
Last week I gave Windows 2003 x64 AMD w/SP1 BETA a spin on my new 64 bit AMD server. I was disappointed at the viability of this. Not because the OS is bad (didn't use it enough to know) but because it had virtually no software or driver support.
Here are my notes:
Neither Microsoft Virtual PC nor Microsoft Virtual Server seem to have 64 bit versions and they don't even install on the 64 bit OS making them unavailable on that platform. This was the biggest disappointment and caused me to uninstall.
Daemon tools ISO reader didn't work (this was my number 2 disappointment) They know there is demand for a 64 bit version and they are planning on releasing one but there is no ETA.
I wanted to try VSTS but there is not 64 bit versions yet although MS will provide them in time.
The Java based SATA RAID software doesn't appear to have a 64 bit version voiding any RAID configurations on this platform.
Tyan provided beta 64 bit SATA drivers (Si3114r)
The Windows 2003 CD structure is different than normal Windows Cd's. There is very little in the I386 directory and lots in the AMD directory. This makes sense but it is hard to know how to customize the install. Where does $OEM$ go for example?
Western Digital 7200RPM 80GB Hard drive WD800JB% ($63.50)
2 X Seagate 7200RPM SATA Hard drive ST3200822AS% ($128.00 each)
Pioneer DVR-108 DVD+/-RW ($91.99)
2 X DDRAM Transcend PC2700 1GB ECC ($235.00)
Everything was purchased from www.newegg.com except the mother board which came from www.buy.com because NewEgg was out of stock. This was my first experience with NewEgg and I have to say their prices were considerable better than I found else where on virtually every item. Very impressive! The big drawback is that they have a restocking fee if you wish to return something even if you are just replacing it with a different item. Only replacing defective materials with the exact same item avoids the restocking fee.
Comments about the hardware are as follows:
The chassis supports 7 SATA drives but the mother board only supports 4.
Both the motherboard and the chassis include SATA drive cables and the chassis provide normal power connectors so it isn't necessary to hook up special SATA power cables (although the mother board does provide some).
The RAID management software uses Java and requires the Java VM get installed. It also leaves a DOS box around after launching when you log in. This software left something to be desired.
The SATA card on the motherboard does not have Windows 2003 build in drivers making the disks inaccessible during Windows 2003 install without providing a floppy or slip-streaming the drivers into the Windows 2003 CD.
There are two ACT cables (I think they are LEDs for the SATA drives) coming from the Chassis that don't seem to have a connection on the mother board.
The motherboard doesn't have a Power Source LED light.
Researching and building the server myself was way too time consuming but I haven't done it for several years so it was good to have a refresher.
The fan on the chassis power supply doesn't work. I suspect (but I am not an authority on this) the problem is due to the fact that there is a square 4 prong connector coming out of the power supply but there is no destination connector on the mother board.
The lack of built in support for SATA drives in Windows XP/2003 is an absolute pain (but now I digress to software so I will post these turmoils separately.)
While at his my Mom and Dad's a few weeks ago my 4 year old son got into a conversation about his last name. Granny told him that his last name was, "Michaelis," making his full name "Benjamin Michaelis." To which he promptly replied that his full name was, "Benjamin Michaelis.NET."
Applications: Running 32-Bit Applications with Windows Running on AMD Opteron and AMD Athlon 64 Systems
Google Search It
I came across this title in the release notes for the beta version of Windows 2003 for 64 bit AMD with SP1. It seems innocuous enough at first. The problem is in the details which I quote below:
Generally, you can run 32-bit applications on Windows Server 2003, Standard Edition; Windows Server 2003, Enterprise Edition; and Windows XP 64-Bit Edition without making any changes. Applications that meet the following criteria, however, are not compatible with Windows products running on AMD Opteron and Athlon 64 systems:
Applications with 16-bit installers
Applications that install 32-bit kernel-mode drivers
Applications with dependencies on any version of Microsoft .NET Framework
We recommend that you contact your software vendors to verify whether one of these exceptions applies to your software.
Hmmmmm... I think that could be a problem for me. Uggghhhhhhh!!!!!! Besides, wasn't the .NET Framework supposed to deal explicitly with this problem?
One omission from .NET 1.0 that would have been extremely useful is a Stopwatch that can report accurate time (presumably using the high performance counter APIs). It is needed especially for doing any type of small scale testing. Unfortunately, there is no such class in .NET 1.0. However, 2.0 does have such a class in the System.Diagnostics namespace called Stopwatch.
If you are stuck in the 1.0 world still then Daniel Strigl has defined a class on CodeProject called HiPerfTimer that could easily be converted to look like the Stopwatch class in 2.0.
Flat tires don't magically fix themselves when you pump them up. You must fix the flat or change the tire. Duh!
Energy bars are too chewy to eat while biking. I imagine that energy goo would be a lot better.
The race is significantly harder without any support from folks you know, cheering you on, collecting your gear, providing encouragement, pushing you not to take it easy, etc. Along the way were chalk writings on the pavement along with spectators spurring contestants on and I am sure having someone you know cheering for you makes a huge difference.
My goal was to finish and at the end of the bike section I was confident I could do this. As a result, I felt fine about walking a significant part of the run. Next time (if there is such a thing) I need a goal that will motivate me to try harder.
Don't use your equipment for the first time on race day. (Another Duh :) )
In the past I have been a big fan of NewsGator and pretty much used it exclusively. However, one particularly irritating feature of some blogs is that they only supply the title, posting URL, and date in the RSS feed, forcing one to go to the website to view the body. intraVnews deals with this issue displaying the posting URL content below the blog content. This is a fantastic feature that allows one to still follow blogs that don't provide a body. (This begs the question that perhaps blogs that don't provide a body should continue to be boycotted regardless of the tools to overcome the problem.)
I am currently giving intraVnews a try and so far I am reasonably pleased. In fact, I have NewsGator and intraVnews installed simultaneously without problem. My two negative comments on intraVnews relate to
Moving blog folders - The UI for this is rather cumbersome and time consuming if there are lots of blogs.
The scheduler to download doesn't appear to autostart (presumably a setting I haven't found yet.)
One of the key items I need to investigate soon relates to exporting the settings of the RSS reader and then importing them once I re-install the OS.
Here is an interesting device especially if you already own a Windows Media PC and want to add cassette capabilities. The PlusDeck 2 is an internal cassette deck for your computer that can help convert cassettes to their WMA/MP3 equivalent. I have lots of cassettes, especially talks from Willow Creek, that I would love to convert just so they can be digitally organized. I would then listen to the MP3s on my not-yet-existent mini Smart Phone with built in MP3 player (and Bluetooth of course).
When .NET was first released I was disappointed by the fact that they had not provided a definition for the term "component." The term was common in the COM days but it was never clearly defined as referring to a particular COM object or the DLL in which the COM object was implemented.
Under .NET the definitions remain ambiguous and at this point too many leading engineers have placed a stake in the ground one side or the other so it is unlikely to get resolved any time soon. Some, like Juval Lowy, firmly believe it corresponds to a class. Other sway more toward it referring to an entire assemble.
I share Michael Platt's amazement that these terms remain ambiguous given the length of time they have been pervasive in the industry. Furthermore, the frequent need to create designs that include classes as well as the containers of the class definitions would lead one to expect that their definitions were firmly established. Perhaps what makes this even worse is that "module" now has a definite meaning in the .NET space. Therefore, it cannot be used as the generic term for a container of compiled code.
Personally, I prefer the component to mean assembly (or container of compiled code) as I don't believe there is any need to provide another word for object or class as these have firm O.O. definitions. Furthermore, there is not really any generic term for the files (or streams) that contain a series of bytes implementing a feature (or class etc.) Component seems like a great term to fill this hole. Recently I read Michael Platt'sdiscussion of the terms Object, Component, Model, and Service and was pleased to hear I am not alone in my leanings.
Creating a Toggle Anchor Lock macro for images in word
Google Search It
I recently wanted a button or keystroke that could automatically toggle the Lock Anchor state for shapes in Microsoft Word. Unfortunately, there didn't seem to be a built-in Word action for doing this. Using a tip from Cindy Meister I created the following macro that does the trick nicely:
Sub ToggleShapeAnchor() Dim newlockAnchorSetting As Boolean If Selection.Type = wdSelectionShape Then If (Selection.ShapeRange.Count >= 1) Then newlockAnchorSetting = Not Selection.ShapeRange(1).LockAnchor End If For Each Shape In Selection.ShapeRange Shape.LockAnchor = newlockAnchorSetting Next End If End Sub
I also had a problem with trying to make fine adjustments of the shapes. Each adjustment caused the shape to jump a couple inches up the page. Further adjustment caused it to jump again. Cindy informed me that this was generally indicative of damage in the binary structures of the control page layout and advised I tried round tripping the file to RTF, WordML, or HTML. I also found that turning on and off the anchor sometimes seemed to get particular images positioning correctly again.
"A comparison operator (==, !=, <, >, <=, >=) has a lifted form when the operand types are both non-nullable value types and the result type is bool. The lifted form of a comparison operatoris formed by adding a ? modifier to each operand type (but not to the result type). Lifted forms of the == and != operators consider two null values equal, and a null value unequal to a non-null value. Lifted forms of the <, >, <=, and >= operators return false if one or both operands are null."
What does this mean?
Perhaps the most significant concept in this paragraphs is at the end where it declares that the operators <= and <= versus the operator == behave differently for Nullable<T> types when that have the value null. As a result, even though == may return true, the >= operator and the <= operator will sometimes return false. Let's consider an example.
int? x, y; // Declares two variables of type Nullable<int> x = null; y = null;
Assert.IsTrue(x == y); Assert.IsFalse(x <= y);
When null is involved with a nullable type, therefore, the >= operator would not be equivalent to the combination of the > and == operators. In other words, the expression x>=y would not be equivalent to the combination of x>y || x==y. Perhaps what is most unusual about this is generally they operator >= is called greater-then-or-equal but in the case of both operands being null, the result of the >= operator would be not equal even though the == operator indicates they are equal.
Furthermore if you were to sort a list of Nullable<T> types using the > operator for ascending order and the < operator for descending order then regardless, all items with the value null would sort to the same location regardless of which operator (< or >) was used (null items would always sort to the top or the bottom regardless of which operator is used.)
Note that currently the May 2005 Visual Studio.NET Tech. Preview does not support the >= and <= operators. Also, the == operator is marked as obsolete.
I would be curious to know what folks think about this implementation?
It has now been one month since my bicycle accident. I would like to say everything is back to normal but there are a few hitches.
Mental state
I will let you draw your on conclusions based on interactions with me and the following additional data points:
Pushed the undock button when leaving work but I ended up forgetting my laptop at work for one night last week. Normally an allergic reaction starts when I get to far from the laptop and I didn't even realize the mistake until I got home.
I left my wallet on the bus (my means of commuting while I can't ride a bicycle) last week and didn't realize it was missing until half way through the day. (Fortunately, this is Spokane and not <enter city name here> because I picked it up intact with all cash and cards 2 days later at lost and found.)
I asked my son to put his used paper napkins into the dishwasher 3 times one evening. Fortunately, my beautiful wife was there to point out my nonsensicalness.
Today I took a bus from work to the transit station. I then moved to another bus and waited for it to leave. Five minutes into the journey I realized that the bus I boarded at the transit station was taking me back to work rather than home. I disembarked soon enough to be in walking distance from home and this was the first time taking this particular route but still, it wasn't particularly bright of me.
Physical state
On Friday I had a tilt table test in the morning, an appointment with an orthopedic surgeon for my AC separation in the early after noon, followed by a stress (treadmill) test and meeting with the cardiologist toward the end of the day. Earlier that week I also had a CAT scan of my heart. The orthopedic went so far as to say that I should come and see him in six months if I still have a problem but that it should heal on its own (I responded that is wasn't personal but I hoped I wouldn't need to see him again either.) At the very end of the tilt table test I went pale and sweaty but I didn't faint (the goal if it was to be a positive test). In the end the cardiologist concluded that all the tests were negative except for the tilt table test which was abnormal but inconclusive. Therefore, he recommended that I go for a Catheter Ablation. He also cleared me for driving but not exercise.
Emotional state
Looking forward to this all being over. Frustrated by my lack of productivity both at work and with writing. Perhaps this is normal but I am blaming it on my accident regardless. :)
Summary
I am uncomfortable with doing the Catheter Ablation and I don't think there is enough evidence to warrant putting a tube into my heart.
They have also not been able to show any exercise related syncope and it frustrates me that they are still asking me not to do any exercise, especially when my two syncope related incidents immediately following my accident have more in common with driving than exercise.
For those of you who were not able to make it to Tech Ed 2004 this year, here are several of the developer related talks that will be broadcast over the web (in date order):
I am not sure why these are the only ones showing up on the Microsoft Event Search pages so if you come across others please let me know.
10:05:05 PM
[]comment []
On May 2 I qualified to join the Washington Saved-by-the-Helmet Club by having a serious accident on my bicycle and living to tell about it because of my helmet. Eric Brady and I were making our now annual bicycle ride to the Bloomsday race of Spokane. This is our third year of biking down and racing, but this year was an exception because I didn't actually make it there.
On the corner of Pines and Montgomery in Spokane Valley I had a bicycle accident. Montgomery is at the bottom of an incline and I fell trying to cross over a triangular median with ramps for wheeled traffic. I don't remember anything except what the median looked like before the accident. Eric described the accident,
"...when you went over the ramp on the pedestrian island, it kicked the rear tire up and threw your weight forward. You then landed on the front tire, went over the handlebars, skidded/bounced one time maybe twice on the pavement, and contacted the curb. It all happened very, very fast."
In other words, after going over my handlebars, I skidded about 6 to 8 feet and my head collided against the curb, cracking my helmet. Following the accident I went by ambulance to the emergency room trauma services at Deaconess hospital in downtown Spokane. From there I was admitted to ICU (Intensive Care Unit) where I remained for three days before being released to the neurological ward and home the next day.
Road rash on my left shoulder, knee, arm, ear and face.
AC separation of my left shoulder.
How am I doing?
Considering what happened I am doing really well.
I am experiencing more tiredness than normal and I am essentially sleeping during the day at the same time my one-and-a-half year old daughter takes naps.
I have pretty constant headaches but I am learning to just accept them as "expected." I take Acetaminophen (Tylenol) with Codeine at night for them and regular Acetaminophen during the day as needed. I am also on some meds. to reduce the chance of seizures.
According to my neurologist I am not currently allowed to bike or drive which makes getting to work rather difficult (I normally bike to work year round). Fortunately, the doctor has also recommended I not work for two weeks following my hospital stay. Still, this puts pressure on Elisabeth as we always have to take the kids with us in order for me to go out.
I don't get to exercise until my cardiologist grants permission just in case my accident was caused by an exercise induced blackout. This makes my preparation for Troika Half Ironman difficult at best.
The Intra-ventricular hemorrhage has caused a loss of short term memory and my mind is a lot slower. (This would be a great time to challenge me in Go or chess or throw some puzzle my way.) Fortunately my thinking is improving but it is slow and I still find it takes me a lot longer to work through stuff that I previously did instantly.
My arm hurts, especially when lifting my daughter.
I feel frustrated at my lack of ability to do anything productive (work and writing are the key sources of frustration) but slowly I am starting to be able to sit at the computer for short durations.
I have been playing around with the inaccuracies of floats and decided to share some of the simplest comparisons that might surprise folks that use the equality comparisons of floats indiscriminately.
The following code listing pretty much captures the issues:
You can use a double to expose the inaccuracy of a float.
Comparing decimalNumber and floatNumber reveals they are not equal even though printing the values out to 20 decimal places indicates they are equivalent.
doubleNumber1 and floatNumber are not equivalent even though they are both assigned the exact same calculated value in the code. (In fact, the IL reveals the values are different.)
This is not just an issue of calculation as the last two assertions reveal.
The obvious question at this point is why?
float is only accurate to 7 digits so if you cast it to a data type that can hold more than that you will inevitable expose the "insignificant" portion such that it becomes significant. (This is why (double)4.2F does not equal 4.2D.)
decimal, float and double get initialized with different calculated values because they require different levels of accuracy. The decompiled IL code is as follows:
In response to and appreciation of Julian's post here I took the time to correct my post. Thanks Julian!
I should perhaps delete the entire post but I think my carelessness requires a correction. The primary modifications are as follows:
I updated the IL code. Converting the hex values displayed by ILDasm.
Deleted the "Trace.Assert((decimal)4.2F != 4.2M);." "Trace.Assert(!4.2M.Equals(4.2F));" was what I should have posted.
I updated the variable names to be slightly better.
Deleted: "Even though floatNumber and doubleNumber2 are assigned the same values in IL they still don't evaluate as equal." This was incorrect. They are not assigned the same value in IL, only in C#.
Delete: "Any time you compare one <of these> types against another the Equals(object value) method is called and it returns false if the data type is not the same. " It didn't really fit as I didn't use the Equals() method in any of my code and generally the Equals() method is overloaded with a parameter that takes the class type.
Deleted: "If you remove the calculations and simply assign 4.2F ...." This was just incorrect (see colophon).
Colophon: The root cause of all the errors was the fact that I was using csc.exe for compiling and not VS.NET. As a result, I forgot the /D:TRACE switch so assertions were ignored. I am amazed that only one of the assertions in the end was invalid but regardless I should have been more careful.
For the past year my wonderful wife has been complaining about the hand-me-down stereo system that we have. Although the system is relatively good the CD player has packed up and the amplifier takes about 20 minutes to warm up due to a bad capacitor that I haven't taken the time to fix. We temporarily replaced it with a boom box but the CD player gave out on that to? We also purchased and under-the-counter CD player and radio but last week the CD player on that died to. What is the deal with CD player reliability or is it just me?
Anyway, I would like to replace it with a network (802.11b/g or Ethernet) enabled stereo system but it appeared that no such thing existed unless of course one goes with a Windows Media Center PC or Linux. The problem with Windows Media Center PCs, however, is they require a monitor and I just want a stereo (I don't want a TV, I am not disciplined enough for that.) A Windows Mobile powered stereo an an x86 processor would be great and I would love the challenge of trying to build one but writing drivers for FM receivers, CD players and the like seems beyond my time constraints. This leaves me with Linux but this too seems like a time sink waiting to happen.
Today I ran across a pretty the Cyruslink system which appears to be running a Pocket PC OS. This seems to be an ideal solution except for one significant factor: £2,999 just for the "lowend" Linkserver.
I unexpectedly received the following dialog from Microsoft Outlook 2003 after dialing in to my VPN.
Perhaps what puzzles me most is exactly who "I'm" is referring to. I was not aware that my computer had feelings of remorse -- or any feelings for that matter.
I came across two NNTP news reader add-ins for Microsoft Outlook recently. The first is NewsLook and the second is from MAPILab's. It appears none of the have the fast efficient newsgroup reading support that comes with Agent Newsreader but still, the idea of integrating email, newsgroups and RSS (via NewsGator) is intriguing.
By the way, why doesn't Outlook support the efficiencies of Agent? I can go through hundreds of messages in Agent in short order and Outlook is an order of magnitude slower. Perhaps the key differentiating factor is the single key accelerator keys (R versus CTRL+R for example) but I think there is more than that.
Note that there is a host of Outlook tools from MAPILab's including a Redirector, Mailing List Service, Duplicate Email Remover and more that I would really like to try.
This article contains a good introduction into the NAS and SAN storage options.
I recently received a quote for a custom built half-terabyte computer with hot swappable hard drives and an ATA serial controller. The price was over $2,500, however, and this seemed higher than necessary. You can by off the shelf NAS devices for less than that. The unexpected costs were in the case (SuperMicro SC742T-550 for $600) and the AMD mother board (TYAN AMD-8000 Chipset Model: Tomcat K8S for $295).
I am interested to learn more about the Microsoft storage solutions that are coming out but the OEM hardware I have seen so far is similarly priced to the custom system.
There is little that can be added to Chris Anderson's post on writing a book. As an author of several, I think he hits the mark quite well. However, I must agree with Mike's comment that, "Writing is a great way to learn something." This is perhaps the greatest motivator for me.
4:19:54 AM
[]comment []
This story is noteworthy just because it puts Spokane on the map in a technology rag which is a pretty rare occurrence. I confess, however, I have never connected to the "city-wide" wireless network as I rarely go downtown (although it is only 20 minutes drive from my house) and when I do it is usually for recreational purposes and my laptop doesn't accompany me.
As it turns out, I am more likely to use the wireless networks in Chicago's airports than the ones in Spokane as I travel there and through relatively frequently and I really like to connect when I travel.
KB article 555025 and 829361 describe a way to decrease the shutdown time of Windows 2003 Server with Exchange 2003. What amazes me is that there is no way to configure the dependency between services so that this happens automagically (they seem to be configured already but the delay still exists.) Neither does there appear to be any Windows support for auto-starting a process at Shutdown time (to automatically do as the KB article suggests.) By the way, Exchange 5.0/5.5 appear to have the same problem as described here.
I was also frustrated again by the fact that the dependency tree between services is read-only in the Services dialog. However, as the JSI FAQ TIP 0069 indicates, you can modify the dependency tree from registry key HKEY_LOCAL_MACHINESystemCurrentControlSetServices and modifying the DependsOnService key of the particular service you want to modify.
This article provided some interesting insight into the power of the Windows XP FOR command that I appreciated as I was trying to do some renaming to a name that included the file date myself.
With my writing I tend to spend more time in Microsoft Word that I like. One particular frustration that I have had with both Word and Outlook is removing formatting or pasting with no formatting. Today I learned about the CTRL+Space (or CTRL+SHIFT+Z) shortcut that removes keyboard shortcuts. Why I never looked for this before now I don't know.
Today I took a Grayline bus from the downtown Seattle to SeaTac. It was one of the most entertaining rides I recall taking. The driver spoke non-stop the entire way there. At first this was quite disconcerting but once I started to pay attention I realized that this guy was hilarious. In spite of intentions to get something useful done on the commute I was entirely distracted by his monologue. I have no idea what one would need to do to take this bus ride with this driver but if you get a chance to travel with Ken I think you would find it enjoyable.
Some time ago now I commented on my need for synchronizing folders between computers and the fact that I was unable to find the ideal solution. Ted Kekatos pointed me to Second Copy which look promising.
5:36:22 AM
[]comment []
I have been wanting a portable access point for some time now and I happened to run across this one while browsing the ASUS site. The description is as follows:
As small as a deck of cards, the Pocket Wireless AP WL-330 is not only a wireless access point (AP) but also a wireless bridge/ repeater and wireless Ethernet adapter.
Seems just about perfect except that it still requires the AC Adapter rather than charging off of USB. Now that would be ideal.
Hope at Heartbreak Motel Photo Journal is a great eye opener to the life of a family unable to achieve the American dream and instead living on the edge of poverty. It is well worth taking the time to peruse through this.
A new "Day in the Life..." book has been released. Publishing profits go toward AIDS education in Africa. Having been born in Africa and spent considerable time traveling in sub-Saharan Africa, it was enjoyable to peruse through the photos. My only disappointment was that there was nothing from Mozambique, a country I happen to be partial too. I especially appreciated Archbishop Desmond Tutu's forward which is quoted in here.
The SharePoint customization site seems like a useful resource if you are looking to do that type of thing. The key tool is FrontPage 2003. The site includes a bunch of How-To articles and Code Samples (Next time I am board I will switch the VSS FAQ to use this code). I am intrigued by the XML/XSLT editor that can be done on live data as my team previously had trouble with accessing data except via web services.
8:16:37 AM
[]comment []
Well, the rest of my Adventure Team is slacking off in helping to choose adventure races for this year. However, as part of my training I have at least three individual runs planed.
Bloomsday (7.46 miles): Goal is 7 min./mile or under 50 min. total if I can find someone to carry me that fast. )
Troika Half Ironman (1.2 mile swim, 56 mile bike, 13.1 mile run): Goal is to finish
Below is a list of URLs for Adventure Races. Let me know if you are interested in racing with me since my team seems to be a little on the disinterested side. I am looking for around a 36 hour race or a day race close to Spokane.
Ted Kekatos (founder of sysadminday.com) pointed out to me some of the not-so-well known features of Google such as the calculator, dictionary, search by number (support VIN, package tracking, area codes, etc), and more. Also, if you wish to modify your Google search preferences such as number of items returned and default language go here.
My dream phone has been announced. Honestly, I struggle to envision anything else I would need in my Pocket PC phone except sooner availability and an purchasable price. More pictures here and videos here.
Last week I took a course titled "Effective Business Writing" with Pat Nickerson. I once worked with a manager who thought that it was a good practice to take one writing course per. year and if this course is any indication, I agree with him.
Here are the noteworthy items I took away from the class:
Write your opening sentence or paragraph last.
Consider using a Serif font (Times New Roman) rather than a San Serif font (Arial).
Don't pick a time to write when you will be interrupted.
Learn about MindMapping (first introduced by Tony Buzan).
Careful of sentences beginning with "ing" words.
Don't open paragraphs, perhaps even sentences, with I.
Consider using "yet" rather than but. It is gentler.
Avoid "have" except perhaps to indicate past tense.
Go with the plural in order to avoid the his/her political correctness problem.
A semicolon indicates there is a tie between two sentences. Periods don't have any such indication.
Long dashes elevate the importance of what appears between them. Parenthesis indicate optional information. Commas keep the additional information neutral.
"Shall" is stronger than "will."
Consider opening emails with the person's name in the first sentence rather than a formal salutation.
Open paragraphs/emails with the facts, not how you feel.
When evaluating a schedule or project plan do so on a risk vs. time graph not just a time-line. (This obviously has little to do with effective writing but I felt it was a good point anyway and I am surprised by how seldom risk is included on the time-line.
"Regard/s" is singular except when used as a salutation (i.e. Regards, Mark).
Don't follow "off" with "of."
Try avoid using the word "try."
Be sure your tone is adult-to-adult.
Use distinct, not distinctive (the latter is used to indicate beauty.)
Don't preface a colon with the verb to be. i.e. Use, "Here are the options" not, "The options are:"
Try to use 1/3 - 2/3 layout, two columns where the first takes up 1/3rd of the width. It is easier to read and a lot easier to scan.
Proof read using two columns per page rather than the full page width. This is more efficient as it requires less horizontal scanning. Furthermore, it actually reduces the page count often.
Obviously you are unlikely to see much effect in my blog as I seldom have time to check my work here but I have already seen the impact this is having on my book writing.
Well, here's a simply approach to reducing the chance of installing spy ware. This download is simply a registry setting that sets common spyware sites as restricted sites within IE. After downloading I went to Gator's site and tried to download and sure enough, I was blocked. Simple but elegant!
9:11:14 PM
[]comment []
This article, entitled "Planning a Service-Oriented Architecture", takes a long winded approach to getting to the point but it is an interesting read none-the-less. The conclusion is simply that in order to successfully implement a Service Oriented Architecture (SOA) architecture you need to plan and execute in short iterations.
In the past I commented on Regular Expression utilities here. Today I came across another one that I really like called Regulator that appears on GDN. Unfortunately, the source code is not yet posted publicly but presumably that will happen with time. Until then I also presume you can join the workspace to gain access.
While taking a look at it I finally figure out that the reason Regex.Split() exists is because it is especially difficult (meaning I don't know how) to parse expressions that begin with the same pattern but don't have any meaningful ending pattern especially when they cross the line boundary. In my case I was trying to split the following string:
<<What is your name <enter name>?: >>Inigo Montoya <The person's name> <<Your name is "Inigo Montoya."
In my case I wanted to split the input into each string following "<<" and ">>" and allowing a match to span a line. Doing this using Regex.Match() is beyond my capabilities but Regex.Split() with a regular expression of "(>>|<<)" was relatively easy. It is more cumbersome to retrieve the exact value you want as I don't believe they can be named but still, I was able to get this to work.
P.S. I am trying to parse the above text for an NUnitConsole program I am in the process of writing. The program is designed to provide a unit testing tool for command line programs. To begin this will be callable from NUnit but in the not too distant future I hope to make it a command line tool as well.
A toolbar for your second monitor. This seems really useful for those that use dual monitors on their laptop when on a docking station and then find they can't get to certain screens when undocked.
Initially this post began as a long question to Microsoft but as I began to describe the problem I realized the rather obvious solution. Anyway, since it took me a little while to solve I decided to post it anyway:
If you previously had the 1.2 Framework installed and then you uninstalled it in order to install the most recent drops you may find that the "Lib" environment variable still contains the 1.2 path. You need to update this environment variable to no longer include the 1.2 path and instead only have the path to the 1.1 Framework. In my case this required updating both the system and user "Lib" environment variable. (It appears you do not need to add the 2.0 path if you happen to have a more recent drop than the PDC bits.)
The exact error that occured for me appears below:
Compilation Error Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. Compiler Error Message: CS1668: Warning as Error: Invalid search path 'C:Program FilesMicrosoft Visual Studio .NET WhidbeySDKv1.2Lib' specified in 'LIB environment variable' -- 'The system cannot find the path specified. ' Source Error:
[No relevant source lines]
Source File: Line: 0
Hopefully this doesn't happen for anyone else but if it happens to hopefully this will save you some time.
3:09:58 PM
[]comment []
A useful link if you have to do this type of thing and you don't have the correct software installed. I should mention that the Windows 2003 Resource Kit also includes DVDBurn.
3:43:24 AM
[]comment []
Has your IT group locked down your Internet access to such a degree that you can no longer do anything useful? Check out Open VPN. With this tool and a server on the outside of your corporate network, all you need is one outgoing port (Port 80 is presumably available). This is some really nice software!
8:40:11 AM
[]comment []
For some time now I have been working on getting an unattended (initially I used the word unintended here but that wasn't what I meant) installation of Windows going. It took a lot more effort than I expected, especially to get the pathing inside CmdLines.txt working. Anyway, in the process I came acrros several invaluable resources:
I was doing to many things at once an accidentally hit the OK button on an ActiveX Control dialog. Barf!!! I suddenly had a thousand programs installed all designed to somehow bombard me with ads! Ugghhh!! I spent hours uninstalling and stopping and deleting the stuff. Truly there seem to 20-30 programs that got installed. Even after uninstalling them all (I thought) I still have random pop-behind ads showing up when I browsed the web. Anyway, I came across Ad-Aware and gave it a try. It found over 100 items still lurking on my computer ready to pop-up at any time. The program removed the stuff and the problem seems to have gone away. I highly recommend it even if you haven't accidentally hit the Trust button.
I gave Bart's PE Builder... very, very cool! Not quite as good as Knoppix but this is a great tool to have. I was even able to boot to the CD and use SetSFN to set the short files names of my Program Files and Documents and Settings directory on my primary boot partition. Excellent.!
3:37:53 AM
[]comment []
For some time now I have been wanting a good program for synchronizing folders between multiple computers. The computers are not necessarily part of the same domain and I can only count on http or ftp access in some cases. Lastly, I would like to tool to run as a service. Well, I haven't selected a tool yet but this post has a good list of options. Unfortunately, none of them fit all my requirements...at least not out of the box.
3:10:17 AM
[]comment []
I recently came across an image editing program called IrfanView. It included the ability to edit IPTC information in addition to the EXIF information. I hadn't heard of this standard so I looked it up. Turns out that the IPTC information includes keywords and categories, two key items that I am looking to embed in my photos. I am not sure I would go this route as EXIF seems to be more common and supported at least some degree by windows. However, it was interesting to note that it was out there.
8:29:06 AM
[]comment []
I am guessing I would miss feeling the keys, especially the knobs on the F and J keys that help determine if your hands are in the right place. Regardless... how cool is this!