Generated by All in One SEO v4.9.10, this is an llms.txt file, used by LLMs to index the site. # Philosophical Geek Code and musings by Ben Watson ## Sitemaps - [XML Sitemap](https://www.philosophicalgeek.com/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [Announcing: Microsoft.IO.RecyclableMemoryStream 1.3.0](https://www.philosophicalgeek.com/2019/10/18/announcing-microsoft-io-recyclablememorystream-1-3-0/) - It's a long time coming, but I've finally released the next version of Microsoft.IO.RecyclableMemoryStream! Links CodeNuget Package What's New Bug Fixes Removed a buggy and unnecessary boundary check in Write methods. (927e173, benmwatson) Performance Removed LINQ iteration in some properties (ffe469c, ndrwrbgs)Overloads of Read, SafeRead, and Write that accept Span arguments (.NET Core and .NET - [How to work an 8-hour day](https://www.philosophicalgeek.com/2008/04/14/how-i-work-8-hour-days/) - One of the things I decided when I started working was that I was not going to be one of those guys who worked 12 hours a day for a company (if I ever become an entrepreneur, all bets are off since I'm working for myself). So far, I've been pretty successful, and I've noticed - [How to Write and Publish a Technical Book and Not Lose Your Sanity](https://www.philosophicalgeek.com/2018/07/07/how-to-write-and-publish-a-technical-book-and-not-lose-your-sanity/) - Earlier this year, I published my third book, Writing High-Performance .NET Code (2nd Edition), my second that was fully self-published. In this article I want to detail a topic that I found incredibly under-documented as I went through the process of writing this revision: the technical process of managing a book's manuscript. This won't cover - [Sample Chapter of Writing High-Performance .NET Code, 2nd Edition](https://www.philosophicalgeek.com/2018/05/23/sample-chapter-of-writing-high-performance-net-code-2nd-edition/) - Head on over to http://www.writinghighperf.net to read a sample chapter of Writing High-Performance .NET Code, 2nd Edition. The sample PDF also includes some of the front and back material to give you a taste for the rest of the book. - [.NET Rocks covers .NET Performance!](https://www.philosophicalgeek.com/2018/05/15/net-rocks-covers-net-performance/) - I was recently on .NET Rocks!. Carl and Richard were great. Go here to listen to us discuss a bunch of perf stuff. - [Writing High-Performance .NET Code on the No Dogma podcast](https://www.philosophicalgeek.com/2018/05/07/writing-high-performance-net-code-on-the-no-dogma-podcast/) - I was recently interviewed by the wonderful Bryan Hogan for his No Dogma podcast. Check out the episode here. If you want to subscribe, which you should, podcast feed is here. You can follow Bryan or myself on Twitter. Check it out! We had a great discussion about performance, Bing, Azure, and more. - [Announcing Writing High-Performance .NET Code, 2nd Edition!](https://www.philosophicalgeek.com/2018/03/16/announcing-writing-high-performance-net-code-2nd-edition/) - The new book will be available for sale on or around May 1, 2018. You can pre-order right now for Kindle in many Amazon markets, and for print as well in the US. The book is out! Get it in the US, or go here for more markets and options. The new book is a mix - [Free Kindle version of Writing High-Performance .NET Code when you buy the print version](https://www.philosophicalgeek.com/2015/03/09/free-kindle-version-of-writing-high-performance-net-code-when-you-buy-the-print-version/) - As of last week, when you buy the print version of Writing High-Performance .NET Code from Amazon, you can get the Kindle version for free. - [Don’t Make This Dumb Locking Mistake](https://www.philosophicalgeek.com/2015/03/10/dont-make-this-dumb-locking-mistake/) - What’s wrong with this code:try { if (!Monitor.TryEnter(this.lockObj)) { return; } DoWork(); } finally { Monitor.Exit(this.lockObj); } This is a rookie mistake, but sadly I made it the other day when I was fixing a bug in haste. The problem is that the Monitor.Exit in the finally block will try to exit the lock, even - [Get Your Thread Synchronization Right the First Time](https://www.philosophicalgeek.com/2015/03/02/get-your-thread-synchronization-right-the-first-time/) - I was recently debugging a problem that just didn’t make any sense at first. The code looked like this: class App { public bool IsRunning {get; set;} private Thread houseKeepingThread; public void Start() { this.IsRunning = true; this.houseKeepingThread = new Thread(ThreadFunc); this.houseKeepingThread.Start(); } private void - [Announcing Microsoft.IO.RecycableMemoryStream](https://www.philosophicalgeek.com/2015/02/06/announcing-microsoft-io-recycablememorystream/) - It is with great pleasure that I announce the latest open source release from Microsoft. This time it’s coming from Bing. Before explaining what it is and how it works, I have to mention that nearly all of the work for actually getting this setup on GitHub and preparing it for public release was done - [2014 Year In Review](https://www.philosophicalgeek.com/2014/12/18/2014-year-in-review/) - Just a recap of the things that have occurred this year. I have been truly blessed, and I have lot to be thankful for. Just a small part of them here… Writing High-Performance .NET Code was published! I spent the first half of the year heads down and working on the book until it was - [Buy EPUB and PDF of Writing High-Performance .NET Code and Save 25%](https://www.philosophicalgeek.com/2014/11/30/buy-epub-and-pdf-of-writing-high-performance-net-code-and-save-25/) - My book Writing High-Performance .NET Code is already pretty inexpensive by programming book standards, but I’ve added a new deal. If you want to do get both the PDF and the EPUB, you can get 25% off the entire order, which basically makes one of them over 50% off. Just go to http://www.writinghighperf.net/buy, add both - [Digging Into .NET Loop Performance, Bounds-checking, Iteration, and Unrolling](https://www.philosophicalgeek.com/2014/11/20/digging-into-net-loop-performance-bounds-checking-iteration-and-unrolling/) - Introduction In this article I am going to go into detail about how .NET treats loops involving array and collection access and what kinds of optimizations you can expect. I had mentioned some of these in a previous article, but in this article, we’re going to go deep and see many more examples. We're going - [Tips for Writing a Programming Book](https://www.philosophicalgeek.com/2014/11/10/tips-for-writing-a-programming-book/) - In this article, I want to go through the process of writing a book, to give others who are thinking of writing a general idea of what kinds of things you will need to do. This is the article I wish I had read before starting out. Some of this will be applicable to fiction - [Book Review: High-Performance Windows Store Apps](https://www.philosophicalgeek.com/2014/11/08/book-review-high-performance-windows-store-apps/) - I recently read Brian Rasmussen’s book High-Performance Windows Store Apps, and I think it’s an excellent companion to my own Writing High-Performance .NET Code. It’s a good companion because while my book is all about the nitty-gritty details of .NET and how they effect performance, I don’t go too much into things at the UI - [Using MemoryStream to Wrap Existing Buffers: Gotchas and Tips](https://www.philosophicalgeek.com/2014/10/22/using-memorystream-to-wrap-existing-buffers-gotchas-and-tips/) - A MemoryStream is a useful thing to have around when you want to process an array of bytes as a stream, but there are a few gotchas you need to be aware of, and some alternatives that may be better in a few cases. In Writing High-Performance .NET Code, I mention some situations where you - [50 Reasons You Should Be Using Bing](https://www.philosophicalgeek.com/2014/10/13/reasons-you-should-be-using-bing/) - I frequently get asked by family, friends, and acquaintances why they should use Bing over our competitors. This post is a comprehensive answer to that question, as much as it can be. Note that I’m hardly an unbiased observer. I work for Bing, but I work deep in the layers that do the bulk of - [A WPF Numeric Entry Control with Pop-up Calculator](https://www.philosophicalgeek.com/2011/01/31/a-wpf-numeric-entry-control-with-pop-up-calculator-2/) - Part 1 – WPF Numeric Entry Control Part 2 – This article Download Source Code When WPF first shipped, there was a noticeable lack of certain controls we’ve become used to in Win32 and WinForms: Calendar, DateTimePicker, and NumericUpDown. WPF 4 adds Calendar and DatePicker, but not anything for numeric entry. I described how to - [Appearance on .NET Rocks! Podcast](https://www.philosophicalgeek.com/2014/09/29/appearance-on-net-rocks-podcast/) - Carl and Richard put together a great podcast. .NET Rocks! has existed for years now and it’s amazing how many episodes they’ve published. A couple of weeks ago, I had the privilege of recording their latest episode with them, #1041. We talked about a ton of interesting things like the importance of memory management, precise - [Digging Into .NET Object Allocation Fundamentals](https://www.philosophicalgeek.com/2014/09/29/digging-into-net-object-allocation-fundamentals/) - [Note: this article also appeared on CodeProject] Introduction While understanding garbage collection fundamentals is vital to working with .NET, it is also important to understand how object allocation works. It shows you just how simple and performant it is, especially compared to the potentially blocking nature of native heap allocations. In a large, native, multi-threaded - [iTunes 11.4 not syncing/refreshing podcasts? How I resolved it](https://www.philosophicalgeek.com/2014/09/23/itunes-11-4-not-syncingrefreshing-podcasts-how-i-resolved-it/) - In general, I try to avoid Apple products when I can, but I do use and enjoy and iPod Nano for podcasts. With the recent update to 11.4 I noticed that my podcasts were not refreshing, either on a schedule or on-demand. I tried restarting iTunes, unplugging the iPod, restarting the computer – nothing. Until - [5 More Attributes of Highly Effective Programmers](https://www.philosophicalgeek.com/2014/09/15/5-more-attributes-of-highly-effective-programmers/) - Nearly 7 years ago, I wrote a little article called The Top 5 Attributes of Highly Effective Programmers that got some good feedback and has proven popular over time. One matures as a developer, of course. I wrote that last article quite closer to the beginning of my career. Over the last few years, especially - [Using Windbg to answer implementation questions for yourself (Can a Delegate Invocation be Inlined?)](https://www.philosophicalgeek.com/2014/07/25/using-windbg-to-answer-implementation-questions-for-yourself-can-a-delegate-invocation-be-inlined/) - The other day, a colleague of mine asked me: Can a generated delegate be inlined? Or something similar to this. My answer was that the generated code is going to be JITted and optimized like any other code, but later I started thinking…. “Wait a sec, can the actual call to the delegate be inlined?” - [Prefer WeakReference to WeakReference](https://www.philosophicalgeek.com/2014/08/14/prefer-weakreferencet-to-weakreference/) - In Writing High-Performance .NET Code, I mention the WeakReference type briefly in Chapter 2 (Garbage Collection), but I don't go into it too much. However, for the blog, I want to start a small series of posts going into some more detail about WeakReference, how it works, and when to use it, with some example - [Short vs. Long Weak References and Object Resurrection](https://www.philosophicalgeek.com/2014/08/20/short-vs-long-weak-references-and-object-resurrection/) - Last time, I talked about the basics of using WeakReference, what they meant and how the CLR treats them. Today in part 2, I'll discuss some important subtleties. Part 3 of this series can be found here. Short vs. Long Weak References First, there are two types of weak references in the CLR: Short - - [Practical uses of WeakReference](https://www.philosophicalgeek.com/2014/09/03/practical-uses-of-weakreference/) - In Part 1, I discussed the basics of WeakReference and WeakReference. Part 2 introduced short and long weak references as well as the concept of resurrection. I also covered how to use the debugger to inspect your memory for the presence of weak references. This article will complete this miniseries with a discussion of when - [Article about Class Design and General .NET Coding](https://www.philosophicalgeek.com/2014/08/28/article-about-class-design-and-general-net-coding/) - I modified Chapter 5 from Writing High-Performance .NET Code and posted it as an article at CodeProject. Take a look and tell me what you think! - [Keep API Usage Simple](https://www.philosophicalgeek.com/2012/04/16/keep-api-usage-simple/) - One lesson that I’m appreciating more every week is that old acronym, K.I.S.S. – Keep It Simple, Stupid. Simple code is best. The highest cost of most software is maintenance—and you don’t want maintenance to include a lot of “how the heck does this work?” This simplicity does not apply to just your own code. - [Easily Unit Testing Event Handlers](https://www.philosophicalgeek.com/2007/12/27/easily-unit-testing-event-handlers/) - In C#, If you need to unit test a class that fires an event in certain circumstances (perhaps even asynchronously), you need to handle a little more than just running some code and doing the assertion. You have to make sure your unit test waits for the event to be fired. Here's one naive way - [How to learn WPF (or anything else)](https://www.philosophicalgeek.com/2009/01/29/how-to-learn-wpf-or-anything-else/) - I’ve recently been learning WPF. This is a huge topic that is uncontainable by any single book, tutorial, or web-site. The complexity and breadth of this framework is nearly oppressive, but the results are incredible. Or rather, I should say, potentially incredible. Like this? Please check out my latest book, Writing High-Performance .NET Code. From - [10 Ways to Learn New Things in Development](https://www.philosophicalgeek.com/2008/04/01/10-ways-to-learn-new-things-in-development/) - Expanding upon one of the topics in my post about 5 Attributes of Highly Effective Developers, I've been thinking of various ways to kick-start learning opportunities in my career and hobbies. 1. Read books. There are tons of books about programming--probably most of them are useless, but there are many, many gems that can greatly - [My interview experience with Google](https://www.philosophicalgeek.com/2007/08/12/my-interview-experience-with-google/) - (See also part 2 of this article). A few months ago I received an e-mail from a recruiter at Google asking for an opportunity to talk to me about available development positions. Needless to say, I was pretty excited. I'm fairly happy in my current job, but--it's GOOGLE. You don't say no to an interview - [4 Principles of Not Wasting Time](https://www.philosophicalgeek.com/2008/05/06/4-principles-of-not-wasting-time/) - There are so many postings out there on all sorts of blogs about how not to waste time that I'm not sure I can contribute something very meaningful (certainly not new), but since it's something I've been thinking about, I might as well spill some ideas about it. Like this? Please check out my latest - [How To Debug GC Issues Using PerfView](https://www.philosophicalgeek.com/2012/07/16/how-to-debug-gc-issues-using-perfview/) - Update: If you find this article useful, you can find a lot more information about garbage collection, debugging, PerfView, and .NET performance in my book Writing High-Performance .NET Code. In my previous artlcle, I discussed 4 ways to optimize your server application for good garbage collection performance. An essential part of that process is being - [4 Essential Tips for High-Performance Garbage Collection on Servers](https://www.philosophicalgeek.com/2012/06/04/4-essential-tips-for-high-performance-garbage-collection-on-servers/) - Update: If you find this useful, you can read a much more complete treatment of garbage collection and performance in my book Writing High-Performance .NET Code. Update: Part 2 – How to Debug GC Issues with PerfView is now available. On this blog, I’ve alluded to the fact that I work on high-performance server applications, - [Almost 6 years at Microsoft…](https://www.philosophicalgeek.com/2014/07/16/almost-6-years-at-microsoft/) - I will have been at Microsoft for 6 years this fall. What an incredible journey I’m on. When I first joined, Bing was Live Search and was a totally different organization. It was a lot smaller. I think back then we could not even be called underdogs—Live Search just was not relevant. The progress we - [Top 5 Attributes of Highly Effective Programmers](https://www.philosophicalgeek.com/2008/01/20/5-attributes-of-highly-effective-programmers/) - What attributes can contribute to a highly successful software developer versus the ordinary run-of-the-mill kind? I don't believe the attributes listed here are the end-all, be-all list, nor do I believe you have to be born with them. Nearly all things in life can be learned, and these attributes are no exception. Like this article? - [Determine CPU usage of current process (C++ and C#)](https://www.philosophicalgeek.com/2009/01/03/determine-cpu-usage-of-current-process-c-and-c/) - Like this? Please check out my latest book, Writing High-Performance .NET Code. Updated 2/4/2009: I changed the implementation of these classes from the original: Instead of a critical section, InterlockedIncrement/Decrement is used. The sample driver program now demos using multiple threads using the CpuUsage class to show thread safety. Download the C++ and C# projects - [My Interview Experience at Microsoft](https://www.philosophicalgeek.com/2008/08/10/my-interview-experience-at-microsoft/) - (If the thought of reading more than 4,500 words makes you hyperventilate, please go instead to my summary) Please also read my Clarification on Why Study for an Interview Like this? Please check out my latest book, Writing High-Performance .NET Code. My Microsoft Background Before I go into the specifics of the interview experience, I - [More on Google interview](https://www.philosophicalgeek.com/2007/08/14/more-on-google-interview/) - This a follow-up to my previous post about my interview process with Google. Once a post gets as long as that one did, I'm sure to forget to say some things. Rather than updating that post, I thought I had enough new to say to warrant a new post. First is the picture I got - [Announcing Writing High-Performance .NET Code](https://www.philosophicalgeek.com/2014/07/14/announcing-writing-high-performance-net-code/) - This blog has been silent for far too long. That’s because I’ve been heads-down on a side project for the last 10 months. I’d like to announce my latest technical book: Writing High-Performance .NET Code If you write managed code, you want this book. If you have friends who write managed code, they want this, - [Goodbye, Wireless!](https://www.philosophicalgeek.com/2012/09/09/goodbye-wireless/) - I’m going to talk about a product today, and no, this post is not sponsored. This is just something I recently started using and it really worked out for me. When we moved into our current home, I knew I wanted to setup a media center on our TV. It would incorporate Windows Media Center - [Alternative to Double-Checked Locking: Lazy](https://www.philosophicalgeek.com/2012/05/28/alternative-to-double-checked-locking-lazyt/) - A common pattern for lazy-initialization of a possibly-expensive type is double-checked locking. The pattern is essentially this: // member field private volatile MyType myObject = null; private object myLock = new object(); public MyType MyObject { get { if (myObject == null) { lock(myLock) { if (myObject == null) { myObject = new MyType(); } - [Visual Studio 2003 and 2005 Default Keyboard Shortcuts Cheat Sheet](https://www.philosophicalgeek.com/2006/11/02/visual-studio-2003-and-2005-default-keyboard-shortcuts-cheat-sheet/) - My first book, C# 4.0 How-To is now shipping! If you like tips you can use, check it out! I wanted to have a quick-reference sheet available to help me learn the Visual Studio keyboard commands. Surprisingly, I couldn't find a handy printable reference. So I made one. It doesn't contain ALL the shortcuts. For - [Use Appropriate Collections](https://www.philosophicalgeek.com/2012/05/07/use-appropriate-collections/) - .Net makes using fancy collections very easy. In fact, it can be almost too easy. It is so simple to just throw in a List or a ConcurrentDictionary that it’s tempting to do it at every opportunity. Today’s tip is to stop and think critically about the type of collections you need. Some examples: - [Don’t Log Exception Stacks Unless You Can Afford It](https://www.philosophicalgeek.com/2012/04/30/dont-log-exception-stacks-unless-you-can-afford-it/) - A short, simple tip for this week: Don’t log exception stacks in managed applications unless you understand the performance of your system. If you have a standard desktop client, or some other app where you can tolerate many-millisecond disruptions or a spike in CPU usage, then you don’t have to care about this. If you - [Concurrency, Performance, Arrays and when Dirty Writes are OK](https://www.philosophicalgeek.com/2012/04/23/concurrency-performance-arrays-and-when-dirty-writes-are-ok/) - This article will show how to increase the performance of a rather simple algorithm up to 80%, by showing how we can accept a loss in absolutely accuracy, and also taking advantage of how processors work. Introduction When we talk about multiple threads using a shared resource, often the first thing we think of is - [Activator.CreateInstance: Slow vs. Less-Slow](https://www.philosophicalgeek.com/2012/04/02/activator-createinstance-slow-vs-less-slow/) - In the system I’m working on, there is a lot of runtime type resolution, e.g., lines like this: var obj = Activator.CreateInstance(type, param1, param2, param3) The params are arguments to the constructor of the type. The type itself is ultimately given through some configuration or otherwise-dynamic means. Since we do a lot of this (many - [Performance and Other Issues with System.Enum](https://www.philosophicalgeek.com/2012/03/27/performance-and-other-issues-with-system-enum/) - I’ve been doing a lot of very intense .Net coding at work for the last few months and it’s very gratifying to see that .Net can handle some pretty serious high-load scalable server work. We are doing some pretty amazing things. However, there are all sorts of gotchas—you do have to learn how to do - [Some awesome dual-piano music](https://www.philosophicalgeek.com/2011/01/30/some-awesome-dual-piano-music/) - I came across this awesome piano duo via Great White Snark: Awesome Star Wars rendition: I also loves this rendition of Rondo all Turca You can see a ton more about Anderson and Roe at their website. - [New C# 4.0 How-To Review](https://www.philosophicalgeek.com/2010/11/04/new-c-4-0-how-to/) - Of course I think you should go get my book, but so do other people. :) Here’s a recent, good review of the book: C# 4.0 How-To by Ben Watson. Some excerpts: There were a couple things about this book that really compelled me. The format (this is a first How-To book by Sams for - [Another C# 4.0 How-To Book Give-away](https://www.philosophicalgeek.com/2010/09/10/another-c-4-0-how-to-book-give-away/) - In celebration of the beginning of the school year here in the USA, I’m going to give away a few more copies of my book C# 4.0 How-To . If you’ve ever wanted a step-by-step guide with practicable code examples for hundreds of tasks in C#, .Net, and Windows, then this is the book for - [Birth of Emma Watson](https://www.philosophicalgeek.com/2010/09/10/birth-of-emma-watson/) - On August 6, 2010, our first baby, Emma, was brought into this world. It’s over a month since then, but as you can imagine, I’ve been busy. She’s a beautiful, healthy, wonderful girl. Every day is a new adventure with her, as she learns something new, does something different, changes her patterns, and explores her - [Measure Amount of Data to Serialize with a Null Stream](https://www.philosophicalgeek.com/2010/07/26/measure-amount-of-data-to-serialize-with-a-null-stream/) - If you’ve got to serialize some data, especially in a binary format, it’s common to output the length of the data. This is useful for versioning, random access, knowing when you’re done reading the records, among other reasons. Therefore, you need to know the size of the data you’re going to serialize. There are a - [Get a Free, Autographed Copy of C# 4.0 How-To!](https://www.philosophicalgeek.com/2010/05/10/get-a-free-autographed-copy-of-c-4-0-how-to/) - To celebrate how well C# 4.0 How-To is doing, I’m going to give away two free copies of the book! Here’s how it’s going to work: 1. Leave a comment on this post describing a project you’d like to build with C# 4. 2. I’ll pick two people from those comments at random. (Make sure - [Interview with Me](https://www.philosophicalgeek.com/2010/03/19/interview-with-me/) - InformIT has just published an interview with me where they asked me a bunch of questions related to C# 4.0 How-To. We got into the multicore future, Internet versus books, why C# programmers need to know about UAC, and a lot more. Check it out! - [Blog moving hosts this weekend](https://www.philosophicalgeek.com/2010/03/12/blog-moving-hosts-this-weekend/) - I looked at my site’s settings in Google’s webmaster center and it told me that my site was in the top 5% slowest sites on the Internet. Wow. That really sucks. I’m sorry, dear reader. In any case, this was the final straw, after a string of outages and other general unhappiness. So I’m moving - [The Book is Made Real](https://www.philosophicalgeek.com/2010/03/09/the-book-is-made-real/) - These arrived in the mail today. :) - [C# 4.0 How-To Available Now!](https://www.philosophicalgeek.com/2010/03/08/c-4-0-how-to-available-now/) - Well, it’s finally out! Amazon no longer lists the book as available for pre-sale, and it should be shipping to purchasers today or tomorrow. If you’re a B&N shopper, you can also order it there, or grab it in stores within a few days. From the product description: Real Solutions for C# 4.0 Programmers Need - [How to position windows correctly at 120 DPI in WPF](https://www.philosophicalgeek.com/2009/11/21/how-to-position-windows-correctly-at-120dpi-in-wpf/) - If you want to place a window at a specific place in WPF, it will work pretty much as you expect—unless your DPI is 120 (the default is 96). Here’s a sample that shows how to put it where you want. In this case, I want to put a window just under another control, aligned - [A WPF Numeric Entry Control](https://www.philosophicalgeek.com/2009/11/16/a-wpf-numeric-entry-control/) - When WPF first shipped, there was a noticeable lack of certain controls we’ve become used to in Win32 and WinForms: Calendar, DateTimePicker, and NumericUpDown. WPF 4 adds Calendar and DatePicker, but not anything for numeric entry. For my solution I wanted something that behaved very similarly to the WinForms NumericUpdown control. Some of the specifications: - [Review: The Code Book – the most entertaining book on cryptography you’ll ever read](https://www.philosophicalgeek.com/2009/11/03/review-the-code-book-the-most-entertaining-book-on-cryptography-youll-ever-read/) - I recently wandered into a thrift store and as is usual in these stores I headed to the book section.(I live by the maxim that you can never own too many books.) The only thing that really caught my eye was a hardcover edition of The Code Book: The Science of Secrecy from Ancient Egypt - [Bing LEGO mosaic](https://www.philosophicalgeek.com/2009/10/24/bing-lego-mosaic/) - This is a simple project I’ve been working on during the weekends lately. It’s the Bing logo done in LEGO plates. I’ll be moving it into my office soon. It took maybe 6 hours of work and is about 3.4ft (1m) wide. Feel free to leave comments at flickr, or check it out at my - [C# 4.0 How-To now available for pre-sale!](https://www.philosophicalgeek.com/2009/10/15/c-4-0-how-to-now-available-for-pre-sale/) - For the last year, aside from starting a great job with Bing, I’ve also been working on a book about C# 4.0 and the upcoming .Net framework. The news: it is finally available for presale! This book is not your typical C# reference. It’s designed to be an easy guide to how to accomplish specific - [Lots, and lots of tiles](https://www.philosophicalgeek.com/2009/10/07/lots-and-lots-of-tiles-2/) - Over in my flickr account, I’ve posted a picture of part of the destruction of the LEGO shuttle. I just wanted to show the amount of tiles used in the project—it was a lot, but I didn’t count. The shuttle is sadly no more, but new projects are coming… - [Lots, and lots of tiles](https://www.philosophicalgeek.com/2009/10/07/lots-and-lots-of-tiles/) - Over in my flickr account, I’ve posted a picture of part of the destruction of the LEGO shuttle. I just wanted to show the amount of tiles used in the project—it was a lot, but I didn’t count. The shuttle is sadly no more, but new projects are coming… - [BrickCon 2009 this weekend—get your LEGO fix in Seattle!](https://www.philosophicalgeek.com/2009/10/02/brickcon-2009-this-weekendget-your-lego-fix-in-seattle/) - If you’re in Seattle this weekend, BrickCon 2009 is going on, and I’ll be participating for the first time, displaying my Space Shuttle model. The convention has more space than ever this year: 35,000 square feet. The public hours are Saturday and Sunday, 11am-3pm. It’s only $7 per person (or max of $20 per family) - [More Photos](https://www.philosophicalgeek.com/2009/08/15/more-photos/) - I finally logged back into my flickr account and uploaded some recent photos from an evening trip to Mercer Island. It was around sunset, the light was beautiful, and I had about two hours to myself to just shoot what I could. This hand was part of many holding a chain along some docks. The - [Some photos of Pine Lake](https://www.philosophicalgeek.com/2009/08/12/some-photos-of-pine-lake/) - We went down to one of the many local lakes and I snapped a couple of shots of the lake during sunshot. It’s a small, beautiful lake with a tiny public beach, a dock inhabited by fishermen and a small swimming area. No motorized boats are allowed. I’m sure there are hundreds of places within - [LEGO Space Shuttle](https://www.philosophicalgeek.com/2009/07/19/lego-space-shuttle/) - Over the last year, I’ve (very slowly) been working on a LEGO model of a NASA Space Shuttle. It’s finally finished, or as much as it will be. I need to move onto other things now. It’s about 38” long. I have no idea how many pieces—many thousands because every surface is tiled over. The - [Photos from the 2009 Seattle Rock and Roll Marathon and Half Marathon](https://www.philosophicalgeek.com/2009/06/29/photos-from-the-2009-seattle-rock-and-roll-marathon-and-half-marathon/) - On Saturday, my wife ran in the Rock and Roll Marathon in downtown Seattle. I roamed around and took pictures of Qwest and Safeco fields and snapped a few of the race itself. Bib numbers I captured (where I could read them) are: 3, 4, 5, 7, 9, 11, 15, 1275, 1347, 1350, 1356, 1412, - [First Bing.com commercial](https://www.philosophicalgeek.com/2009/06/03/first-bingcom-commercial/) - Working on Bing.com for the last 9 months or so has been exhilarating. Finally, we can show the world the great stuff we’ve been doing. Here is (I think) the first TV commercial about Bing.com, running as of today. I kissed Google goodbye more than a year ago and haven’t looked back. I think once - [Getting the real view under a CPreviewView (MFC)](https://www.philosophicalgeek.com/2006/06/23/getting-the-real-view-under-a-cpreviewview-mfc/) - I had an interesting problem at work the other day. In this MFC application, there are a number of views that can be printed and we support the Print Preview function. However, in one of these views we rely on getting the view from the frame window in order to handle command updates. This is - [New apps and features from Live Search](https://www.philosophicalgeek.com/2009/02/20/new-apps-and-features-from-live-search/) - I’ve been meaning to highlight a few of the cool things we’re doing in Live Search. I don’t have any direct involvement in the development of any of these—I just think they’re cool. Answer Suggestions for IE8 IE8 is awesome, so go get it. Live Search has these things called Instant Answers where it can - [Updated CPU usage article](https://www.philosophicalgeek.com/2009/02/04/updated-cpu-usage-article/) - I made a important changes to the CPU usage code and have updated the article to reflect it. Instead of a critical section, the code uses just the interlocked increment/decrement functions. I also updated the sample demo to use multiple threads to read the CPU usage to demonstrate the thread safety clearly. - [An easy stack layout panel for WinForms](https://www.philosophicalgeek.com/2008/12/12/an-easy-stack-layout-panel-for-winforms/) - This is a simple, but useful tip. Users of WPF are spoiled. They have all sorts of layout options. Those of us still working in WinForms have FlowLayoutPanel and TableLayoutPanel. That’s it. WPF has those and more. For my current project, I needed a panel to layout controls vertically. The TableLayoutPanel can be awkward to - [Malware Detection in Live Search and Webmaster Tools](https://www.philosophicalgeek.com/2008/12/04/malware-detection-in-live-search-and-webmaster-tools/) - Live Search has recently released some great new features that I want to highlight. The first is from the Webmaster center, which is the team I was hired on. With the new Webmaster Tools, you can now see which pages on your site are infected with malware (aka drive-by downloads). The links are clearly highlighted - [NDepend: A short review](https://www.philosophicalgeek.com/2008/11/29/ndepend-a-short-review/) - NDepend is a tool I’d heard about for years, but had yet to really dive into recently. Thanks to the good folks developing it, I was able to try out a copy and have been analyzing my own projects with it. Here’s a brief run-down of my initial experience with it. Installation There is no - [Better Find In Files results in Visual Studio](https://www.philosophicalgeek.com/2008/11/25/better-find-in-files-results-in-visual-studio/) - Sara Ford has an awesome tip for Visual Studio on how to customize the formatting of search results. - [Girl from Mars – Magneta Lane](https://www.philosophicalgeek.com/2008/11/22/girl-from-mars-magneta-lane/) - I first saw this video at the Microsoft Company Meeting 2008, and looked for the song everywhere, but couldn’t find the Magneta Lane version. They recorded it just for Microsoft. Nevertheless, the original Ash version is great too, so get that in the meantime. Magneta' Lane’s MySpace page does mention the song, and maybe a - [On the importance of ignoring your problems](https://www.philosophicalgeek.com/2008/11/20/on-the-importance-of-ignoring-your-problems/) - I’ve been having a great time at Microsoft over the last couple of months, but the ramp to full productivity is very steep. Recently, I’ve been working on an important improvement to some monitoring software, which requires a fairly good understanding of part of the system. It can be a little overwhelming trying to design - [Consequences of a Star Trek-like computer](https://www.philosophicalgeek.com/2008/11/17/consequences-of-a-star-trek-like-computer/) - Star Trek, along with other science fiction futures, has given us many things, apart from a vision of humanity that is hopefully a little better than we prove to be, but also a taste of what technology can be like when it is integrated so fully into people’s lives that it’s nearly taken for granted. - [Software Creativity and Strange Loops](https://www.philosophicalgeek.com/2008/11/03/software-creativity-and-strange-loops/) - I’ve been thinking a lot lately about the kind of technology and scientific understanding that would need to go into a computer like the one on the Enterprise in Star Trek, and specifically its interaction with people. It’s a computer that can respond to questions in context—that is, you don’t have to restart in every - [I’m a PC](https://www.philosophicalgeek.com/2008/10/24/im-a-pc/) - Judging, by the blogosphere’s reaction, I’m one of the few people who liked the Gates-Seinfeld ads by Microsoft. They were odd, sure, but it got people thinking, talking, going WTF? – and that can’t be bad. But I definitely like the I’m a PC ads better. I was at the company meeting when they debuted, - [My universe rebalances](https://www.philosophicalgeek.com/2008/10/20/my-universe-rebalances/) - Do you ever get the feeling that when things are going too well, something has to give? I think sometimes the universe decides it needs to humble you, remind you just how thin the thread is from which we all hang. Months of comparative ease and happiness demand a balance. Yesterday, we were rebalanced. Now, - [On the importance of having a good haircut](https://www.philosophicalgeek.com/2008/10/11/on-the-importance-of-having-a-good-haircut/) - Note to future self: Don't get haircut the week before important events take place. After my last day of work at GeoEye, I went to get my haircut at a nearby salon. I asked for it a little shorter. Between the time I gave this brief instruction, and the time she lifted her hands to - [First two weeks at Microsoft](https://www.philosophicalgeek.com/2008/09/28/first-two-weeks-at-microsoft/) - It has been an insane first couple of weeks at Microsoft. In actuality, though, I don't know if I can count it as two weeks of experience. I've had two days of orientation, one day for the company meeting (which was awesome, by the way), and two more days for training in Live Search specifically. - [Goodbye Google Ads](https://www.philosophicalgeek.com/2008/09/28/goodbye-google-ads/) - Given that I'm now working for its major competitor, I've decided to take down the Google ads from this site. I hope this leads to less clutter and intrusiveness. My goal for this site has been (and still is) for it to be self-sustaining, and I hope it can continue to be through Amazon referrals. - [Converting OLE_COLOR to System.Drawing.Color](https://www.philosophicalgeek.com/2008/09/13/converting-ole_color-to-systemdrawingcolor/) - I've been working on a project using Visual Studio Tools for Office 2008 (VSTO) and at one point I needed to get the colors for categories in Outlook 2007. There are actually 3 colors, and they are returned as uint's--why the .Net wrappers don't convert to colors for you, I don't know (to avoid linking - [Would you rather...](https://www.philosophicalgeek.com/2008/09/11/would-you-rather/) - be able to read minds (anyone's around you. Selectively. You aren't forced.) - OR - be the smartest person in the world (in any field, you're a genius) ...a question my wife and I pondered as we cleaned the house the other day... - [Google Chrome - the Good, Meh, Ugly, and This Means War](https://www.philosophicalgeek.com/2008/09/02/google-chrome-the-good-meh-ugly-and-this-means-war/) - I just read all about Google Chrome, their new open-source browser, in the comic they put out. No download link at this time, but I'm sure it's coming. My initial thoughts: The Good The JavaScript changes seems to make sense. The better garbage collector and speed improvements can't hurt. The free API to download lists - [GeoEye supplying imagery to Google](https://www.philosophicalgeek.com/2008/08/29/geoeye-supplying-imagery-to-google/) - My soon-to-be-old-company just announced a deal to give exclusive imagery to my-soon-to-be-rival. Sweet! I am a little disappointed Microsoft didn't get it, but I don't know any details of how the deal happened. The GeoEye-1 satellite will be the highest quality commercial satellite out there when it launches next week. I am a little sad - [Airplane engines and teamwork](https://www.philosophicalgeek.com/2008/08/28/airplane-engines-and-teamwork/) - Charles Fishman has a wonderful article on a aircraft engine manufacture plant in Durham, NC. There are a lot of interesting lessons in here about teamwork, motivation, and work that make it a highly recommended read. I'm supposed to be packing up the house and instead just read that. Update:Jon supplied a link to a - [No American resumes? - state of CS education](https://www.philosophicalgeek.com/2008/08/28/no-american-resumes-state-of-cs-education/) - I had been planning on writing a blog entry on the apparently sad state of our CS industry these days, and the complete lack of qualified American resumes that come across my desk, when we actually got a decent one today. Still, there is much to be said about the poor quality of education. At - [Diagnosing SEO issues with Live Search Webmaster Tools](https://www.philosophicalgeek.com/2008/08/26/diagnosing-seo-issues-with-live-search-webmaster-tools/) - The folks on my future team at Microsoft have released a presentation about the diagnosing search engine issues with the recently released Live Search Webmaster Tools (it was out before, but in beta). Diagnose SEO Issues with Live Search Webmaster Tools View SlideShare presentation or Upload your own. (tags: seo) If you run a web-site, - [Fans of LEGO: BrickFair is coming to DC this weekend!](https://www.philosophicalgeek.com/2008/08/25/fans-of-lego-brickfair-is-coming-to-dc-this-weekend/) - If you are in the DC area, you must attend the BrickFair LEGO convention on its public days this weekend. The models here will be amazing. There will be over 12,000 sq ft of convention space. Bring the kids. If you don't have kids, bring yourself--it will be worth it. I was going to enter - [Top 10 Things To Do My First Week at Microsoft](https://www.philosophicalgeek.com/2008/08/19/top-10-things-to-do-my-first-week-at-microsoft/) - Wear my Google t-shirt. Set my homepage to www.google.com Continually ask, "Have you met BillG? Where's BillG? When can I see BillG?" Show off my bright blue iPod Nano "Upgrade" my workstation to Windows XP Then just format it and install Ubuntu Randomly shout "Yahoo!" as I walk through the halls Add my gmail address - [Top 10 Reasons Why I'm Excited to Work at Microsoft](https://www.philosophicalgeek.com/2008/08/20/top-10-reasons-why-im-excited-to-work-at-microsoft/) - My last post was well and good (definitely read the comments), but I think I should be serious about my new employer because I really am excited to work there. Here are some reasons why: The opportunity to work with people smarter than me. The chance to meet some of the people I admire in - [The Effective Software Developer's Book List](https://www.philosophicalgeek.com/2007/11/21/books/) - What books should all serious developers read and study? This is a list of books that I have either found particularly helpful in my own growth as a programmer, or that are popular on various required-reading lists. I have bolded books I consider absolute required reading (probably multiple times) for all software developers. I've gathered - [Clarification on Why Study for an Interview](https://www.philosophicalgeek.com/2008/08/13/clarification-on-why-study-for-an-interview/) - I had mentioned this in the Tips section, but some people on some sites might still get the wrong idea about studying for my recent Microsoft interview, so I want to write this post, which explains my opinion more (and it really is just my opinion--I have no idea what Microsoft's policy or opinion is). - [Microsoft Interview Experience - Summary](https://www.philosophicalgeek.com/2008/08/12/microsoft-interview-experience-summary/) - Some people (I'm looking at you reddit), have complained about the length of my interview story. So sorry. I wanted to document the entire experience, for myself as well as others, so I included a lot of detail. I know a lot of people enjoy it. There are plenty of shorter experiences out there, so - [Fixing Printing Problems with IE7 and Vista](https://www.philosophicalgeek.com/2008/07/26/fixing-printing-problems-with-ie7-and-vista/) - If you are having problems printing from Internet Explorer 7 under Windows Vista, check to see if you have AVG 8.0 installed. If so, get the latest version from http://free.grisoft.com. I did have build 8.0.101 and upgraded to build 8.0.138--everything works fine now. I've also seen reports that it could be an error while running - [Close-up shots of the Space Shuttle Enterprise](https://www.philosophicalgeek.com/2008/07/14/close-up-shots-of-the-space-shuttle-enterprise/) - I'm currently building a large-scale LEGO model of the Space Shuttle, and in order to get some detailed shots of a shuttle that are hard to find on the Internet, I visited the nearby Air & Space museum in Chantilly, VA. You can find the photos on flickr. - [log4cxx + VS2005 + Windows SDK v6.0 = compile error](https://www.philosophicalgeek.com/2008/07/09/log4cxx-vs2005-windows-sdk-v60-compile-error/) - If you are following the instructions to build log4cxx 0.10 in Visual Studio 2005, and you have the Windows Platform SDK v6.0 installed, you may get errors compiling multicast.c in the apr project. I found the solution, and it's pretty easy. Open up multicast.c and edit the lines: 136: #if MCAST_JOIN_SOURCE_GROUP 148: #if MCAST_JOIN_SOURCE_GROUP to - [Nuclear Energy and the Question of Uranium Supply](https://www.philosophicalgeek.com/2008/07/03/nuclear-energy-and-the-question-of-uranium-supply/) - In the replies to my article about nuclear power, there were statements about the supply of uranium the world can provide and that in the end, nuclear power may not be the panacea we hope it would be. I respectfully disagree. First, let me state my bias: I am an optimist. I almost never buy - [I love xkcd](https://www.philosophicalgeek.com/2008/06/27/i-love-xkcd/) - http://xkcd.com/442/ AND I love the Discovery Channel commercial. - [Adapting to Changes](https://www.philosophicalgeek.com/2008/06/12/adapting-to-changes/) - Change is a fact of life. Nowhere is this more obvious in a medium where the very thing we make is completely intangible and malleable: software development. There is almost nothing that is impossible in software--there are only limited resources. This malleability has been one of the reasons for the enormous pace of change we've - [Questions about Robots](https://www.philosophicalgeek.com/2008/06/09/questions-about-robots/) - In the future, when you have your first humanoid robot servant and you decide to have some fun with it, and you tell it to do something stupid and arbitrary like go stand in the corner for no reason, put itself in embarrassing poses, or anything generally "abusive", will you feel bad afterwards? Should you? - [Volunteers for Change Fairfax, VA](https://www.philosophicalgeek.com/2008/06/09/volunteers-for-change-fairfax-va/) - Leticia has been interested in getting us involved more in the community so she's been hunting around for local service opportunities. She finally found a great program in our area that I thought I'd share for anybody looking for volunteer experiences in the DC metro region. Fairfax City runs a division called Volunteer Fairfax that - [Review: Pragmatic Unit Testing in C# with NUnit, 2nd Ed.](https://www.philosophicalgeek.com/2008/06/04/review-pragmatic-unit-testing-in-c-with-nunit-2nd-ed/) - I saw this book when I bought Programming WPF a few weeks ago and it looked promising enough to buy. I've been doing unit testing in C# for a few years now, but I thought there were always things to learn and maybe I'd pick up a few new ideas. It is easy to contrast - [We Need More Growth of Nuclear Power](https://www.philosophicalgeek.com/2008/05/23/we-need-more-growth-of-nuclear-power/) - With this post, I'm beginning a new series or category of bog posts that I'm loosely terming "A Better Future." I've been thinking a lot about the grail of infinite power, coupled with the enormous rise in gas prices this week. While I am all in favor of reducing wasteful consumption, increasing efficiency, and generally - [Virtual PC 2007 Tips and Tricks](https://www.philosophicalgeek.com/2008/05/22/virtual-pc-2007-tips-and-tricks/) - Put them on any drive other than C:\ (actually, any drive that you don't heavily use at the same time) Don Roessler discusses how to reduce the size of your virtual hard disk (.vhd) files, and some other tips. Scott Hanselman talks about disabling unneeded services Consider Virtual Server instead (not for all users) Always - [Custom data source for Google Earth](https://www.philosophicalgeek.com/2008/05/20/custom-data-source-for-google-earth/) - Using just these links as a guide, we quickly (less than a day) put up a data source over https for our customers to download GIS data to Google Earth. KML reference and tutorial - KML is the XML language used to describe features that can be displayed in Google Earth and Google Maps. Sample - [Formational Experiences](https://www.philosophicalgeek.com/2008/05/15/formational-experiences/) - When I was 9, I started playing with GW-BASIC by typing in programs found in the old kid's 3-2-1 Contact magazine. This soon progressed to QBASIC, where I mostly made cool graphics with lines and circles. (click for larger image) QBASIC is not included in Windows anymore, but you can still get it. (click - [Tracking database changes using triggers](https://www.philosophicalgeek.com/2008/05/13/tracking-database-changes-using-triggers/) - Tracking changes in database tables is an incredibly useful feature--especially for operational data that can change often. Having recently had to implement this feature, I thought I'd share some of the techniques I learned. Sample Database First, let's conceptualize a very simple database consisting of user information (name, date of birth), and e-mails. A user - [Lots of Good Movies This Year](https://www.philosophicalgeek.com/2008/05/14/lots-of-good-movies-this-year/) - We might have to make a few exception this year to our decision not to go the theater anymore...hopefully won't have experiences like the last time... Cloverfield The Chronicles of Narnia: Prince Caspian Batman: The Dark Knight The Day The Earth Stood Still Get Smart Harry Potter and the Half-Blood Prince The Incredible Hulk Indiana - [Opening Visual Studio solutions from Explorer in Vista](https://www.philosophicalgeek.com/2008/05/12/opening-visual-studio-solutions-from-explorer-in-vista/) - You've installed Visual Studio 2005 on Vista and dutifully changed it to run as administrator, like you're supposed to. And then... Problem: Visual Studio 2005 solutions no longer open when you double-click them in Windows Vista. In fact, when you double-click nothing happens. Solution: Change them to open with Visual Studio 2005 directly instead of - [Now twittering](https://www.philosophicalgeek.com/2008/05/09/now-twittering/) - Thought I'd try it out. You can follow me at my twitter page and I'll follow you back. Also trying out putting twitter status on my blog. I've been thinking about twitter for a while, but still not sure how I'll use it. - [Software Pick: SyncMyCal](https://www.philosophicalgeek.com/2008/05/09/software-pick-syncmycal/) - With the acquisition of a Blackberry I wanted to be able to sync both my work and home Outlook setups to the Blackberry (and to each other). I tried a number of free tools (though they aren't that easy to find) and quickly concluded I would need a better solution. Enter SyncMyCal. It's easy, it's - [Announcing: GeekSoftworks.com](https://www.philosophicalgeek.com/2008/05/05/announcing-geeksoftworkscom/) - I've setup a new domain for a front page for my software hobbies and what will eventually be my "store front": Geek Softworks It uses WordPress, but it's not a blog--it's for the software I write. So far, only a few products are up, including DiskSlicer (a new version!), Windows Media Top 10 Plugin, and - [I could get cable for this...](https://www.philosophicalgeek.com/2008/04/29/i-could-get-cable-for-this/) - My wife and I only recently bought a TV, but we still don't get cable or even have an antenna. If we ever did, the only things we'd watch are Discovery, History, and Food. This is the closest I've come to signing up: - [In this universe we obey the law of commutativity](https://www.philosophicalgeek.com/2008/04/17/in-this-universe-we-obey-the-law-of-commutativity/) - This kind of thing has happened to be a few times now, so I thought I'd share the fun. In one of our pieces of software we have a process that looks like this: void MyThread(){ while (true) { DoFunctionA(); DoFunctionB(); SleepFor10Seconds(); } } While FunctionA and FunctionB are conceptually similar, they interact with completely - [Rudeness is destroying the arts](https://www.philosophicalgeek.com/2008/04/28/rudeness-is-destroying-the-arts/) - or Why I Don't Leave The House Anymore "Am I disturbing you?" The last movie I saw in the theater was the 3-D version of Beowulf. The theater was fairly empty--maybe 30-40 people total. Two teenage girls sat two seats to my left. A man was in front of me. The two girls talked loudly - [Please help with Word Count Plugin](https://www.philosophicalgeek.com/2008/04/29/please-help-with-word-count-plugin/) - I was taking a look at the download page for my Word Count Plugin for Windows Live Writer. It's gotten a few hundred downloads (thanks!), but the single review is actually spam. Unfortunately, I can't remove it or even report the review from my account since it's my own software. Plea for help: Can a - [How to enable Simple Tags support in Windows Live Writer](https://www.philosophicalgeek.com/2008/04/18/how-to-enable-simple-tags-support-in-windows-live-writer/) - I'm using Simple Tags to do the tags on this site. I wanted to enable support for these tag links in Windows Live Writer (it beats having to log in and edit each post after publishing). Quite easy: Click on Insert Tags In the Tag Provider combo, scroll to the bottom where it says (Customize - [Need some new audio cable?](https://www.philosophicalgeek.com/2008/04/15/need-some-new-audio-cable/) - Get it from Blue Jeans. Awesome. (BlueJeansCable.com) (via digg) - [GetTextExtent vs. DrawText (with DT_CALCRECT)](https://www.philosophicalgeek.com/2008/04/10/gettextextent-vs-drawtext-with-dt_calcrect/) - Working on an MFC app that has just been converted to Unicode (finally!), I noticed that one button (which is created dynamically) is too small to fit the text in Korean (and Russian and a few other languages). The code was calling something like: CSize sz = m_btAdjustColors.GetDC()->GetTextExtent(sCaption); It seems correct, but these script languages - [How to catch a NetFlix thief](https://www.philosophicalgeek.com/2008/04/08/how-to-catch-a-netflix-thief/) - Via Geekologie comes the hilarious tale of a man (boy, really) caught stealing NetFlix DVDs from a mailbox. The comments are funny, too. Some seem like they're obviously written by the neighbor. One issue I didn't really see addressed in the comments on the post is the overall issue of mail safety. People need to - [The Bugle podcast](https://www.philosophicalgeek.com/2008/04/03/the-bugle-podcast/) - I just discovered this gem of a podcast. The Bugle is a podcast published by the Times Online. Better writing than the Onion, and funnier than the Daily Show. It's basically two Brits being witty about the week's news. I've only listened to episode one so far, but found myself laughing too hard to concentrate - [6 Programming problems you don't want in the interview](https://www.philosophicalgeek.com/2008/02/01/6-programming-problems-you-dont-want-in-the-interview/) - 1. Write out all floating point values between 0 and 1. 2. Write tic-tac-toe in Brainf*&$ 3. What is 2128 in decimal? 4. Solve traveling salesman in constant time (O(1)) 5. How many grains of sand are there in the Sahara (at a given instant, assuming constant, well-defined boundaries)? 6. Implement quicksort on a spherically - [One Wonderful Year](https://www.philosophicalgeek.com/2005/04/07/one-wonderful-year/) - As of today, I've been married for one year to my lovely-as-ever bride Leticia. Life has never been as wonderful and sweet. Here's to many decades more... - [Starting a job is fun to do](https://www.philosophicalgeek.com/2005/05/14/starting-a-job-is-fun-to-do/) - A little under a month ago I began a new job with a company called ORBIMAGE. It's a satellite imaging company with contracts with the government and private corporations. Any google search will tell you more about the products and services it offers. Specifically, I work on the SeaStar team as an Applications Analyst. I - [New Site Format](https://www.philosophicalgeek.com/2005/05/20/new-site-format/) - I've decided to go with a much simpler blogging application: WordPress. I'm still figuring out how it works, but so far I like it a LOT more. The articles and projects have yet to make it here, but I'll try and get to it this weekend. Hope you enjoy it! - [Memorial Day in Arlington Cemetery](https://www.philosophicalgeek.com/2005/05/30/memorial-day-in-arlington-cemetery/) - Leticia and I went down to Arlington Cemetery this morning to view the Memorial Day proceedings. We got there just in time to see the presidential motorcade, and we saw President and Mrs. Bush. My camera couldn't catch it because they were driving fast and my camera's cycle time is a little slow. We listened - [Cars and the Idiots who Own Them](https://www.philosophicalgeek.com/2005/06/11/cars-and-the-idiots-who-own-them/) - Yes, I'm talking about me. This morning, we had a big day planned: food shopping, checking out an international market, and having some guests this evening. We decided to go to the international market first1. We had heard they had really cheap produce and were not disappointed. We picked up quite a bit of greens - [Cars and the Idiots who Own Them - Part II](https://www.philosophicalgeek.com/2005/06/13/cars-and-the-idiots-who-own-them-part-ii/) - Well, I took it in this morning for a full checkup. I should preface this with by saying that for the last month, and especially the last week or so, I've been feeling strongly that I needed to take the car in for a serious look. Things just felt different--and not better. I left it - [25 Years](https://www.philosophicalgeek.com/2005/06/25/25-years/) - Well, today marks my 25th year of personal reign upon this earth.... I'm still young 'un. I'm still in grad school, but I've got a good job, a wonderful wife, and things are going pretty well with everything else. One of my favorite presents is a lego set. When I was a kid I played - [London](https://www.philosophicalgeek.com/2005/07/08/london/) - Leticia and I want to express our sorrow and empathy for the brave people of London. While used to terror attacks in the past, this was a particularly egregious act of barbarism. May the families of those who lost loved ones be comforted and may those responsible be brought to certain and swift justice. - [Gum](https://www.philosophicalgeek.com/2005/11/19/gum/) - I've never liked gum. I did eat the stale pink stuff sticks that came in Topps baseball cards years ago, but since then...yuck. Today I had a piece of my wife's gum. Ick. Chewing gum is like brushing your teeth for thirty minutes. - [Esha](https://www.philosophicalgeek.com/2006/05/17/esha/) -  We miss our sweet Esha. She has really left a big empty spot in our house and in our hearts. This is how we will remember her; sitting in her favorite place; watching over the front garden. 2 Feb 1996 - 15 May 2006   - [Math Magic](https://www.philosophicalgeek.com/2006/07/27/math-magic/) - I just started reading Scott Flansburg's Math Magic book. It's all about more efficient and intelligent ways of doing math. It's an idea I've long wanted to try--to increase my speed and ability to crunch numbers in my head. The hard part is practice--how do you make yourself good at this without a lot of - [On the cover of Wired magazine](https://www.philosophicalgeek.com/2007/09/08/on-the-cover-of-wired-magazine/) - OK, It's a bit old now, but I thought I'd show myself on the cover of Wired magazine. Cool, isn't it? This was part of a promotion by Xerox where they printed 5,000 (more?) custom covers. This was the July issue. I mostly like how we're obviously on the water in the picture, but not - [Offline this weekend](https://www.philosophicalgeek.com/2008/01/31/offline-this-weekend/) - I'm offline this weekend, so if you submit comments (which are moderated), they'll show up sometime on Monday or Tuesday. Thanks! - [No Internet at home](https://www.philosophicalgeek.com/2007/12/03/no-internet-at-home/) - It is really hard not having Internet service at home. Really, really hard. It's not that I spend every minute checking e-mail, but the lack of ability to check makes the desire that much stronger. It went out Friday night, sometime after 9 PM. I called Saturday morning, they sent a tech on Sunday night. - [New look coming soon](https://www.philosophicalgeek.com/2008/01/28/new-look-coming-soon/) - I've been wanting to change the look of this blog to be much more minimalist for a while now, and I think this week will be the week to do it. If you notice weird changes as you're browsing, please bear with me. :) I'm also going to be reducing the number of ads on - [Why I love LEGO](https://www.philosophicalgeek.com/2008/03/03/why-i-love-lego/) - For Christmas, I got my wife a neat little townhouse. A LEGO townhouse. She loved it--until she got towards the end of the first model. There was a single piece missing. I went to LEGO's web site and filled out a simple form. A few weeks later, I got the part and a really nice - [Installed Vista SP1 - no problems](https://www.philosophicalgeek.com/2008/03/21/installed-vista-sp1-no-problems/) - I installed Windows Vista Service Pack 1 this morning. It took about 45 minutes, two reboots, and afterward I had no problems. It never showed up in Windows Update for me so I used the standalone installer (linked to above), fully prepared to reinstall some drivers. But afterwards, no drivers seemed to have any problems--Device - [Threads in MFC I: Worker Threads](https://www.philosophicalgeek.com/2002/04/29/threads-in-mfc-i-worker-threads/) - There are two types of threads in MFC. Worker and User Interface. Here, I will discuss how to use a worker thread.First, let's discuss some multi-threading basics. Each application has what we call a process. Usually, an application has only one process. This process defines all the code and memory space for the application. You - [Threads in MFC II: Synchronization Objects](https://www.philosophicalgeek.com/2002/04/30/threads-in-mfc-ii-synchronization-objects/) - Introduction In part I, I looked at getting threads communicating with each other. Now let's look at how we can manage how multiple threads operate on single objects. Let's take an example. Suppose we have a global variable (or any variable that is accessible to two or more threads via scope, pointers, references, whatever). Let's - [Threads in MFC Part III: Exceptions, Suspense, Murder, and Safety ](https://www.philosophicalgeek.com/2002/05/06/threads-in-mfc-part-iii-exceptions-suspense-murder-and-safety/) - Exceptions In the previous tutorial, I described the various synchronization objects you can use to control access to shared objects. In most cases, these will work fine, but consider the following situation: [code lang="cpp"] UINT ThreadFunc(LPVOID lParam) { ::criticalSection.Lock(); ::globalData.DoSomething(); SomeFunctionThatThrowsException(); ::criticalSection.Unlock(); return 0; }[/code] What's going to happen when that exception gets thrown? The - [Operator Overloading in C++](https://www.philosophicalgeek.com/2002/08/14/operator-overloading-in-c/) - Definition This can be a weird subject for some, especially those with a strong Java background, or another language that doesn't support this feature. It can be confusing even for excellent programmers. But it is a strong feature of C++ that, if mastered, can yield some increased productivity in programming. We all know that an - [Modifying the System Menu in MFC](https://www.philosophicalgeek.com/2002/08/14/47/) - Introduction The system menu is a standard feature of every Windows application. It is managed by Windows so normally we don't have to worry about it at all. However sometimes it is nice to be able to modify that menu according to our own program with things that Windows can't automatically do for us. As - [Example of a Great User Interface](https://www.philosophicalgeek.com/2004/12/03/example-of-a-great-user-interface/) - Designing good user interfaces is a very hard thing to do. It's something that Apple does great, Windows does generally pretty well, and Linux is getting better, but... Instead, I have an example from the more mundane world of consumer electronics. Many years ago, I bought a certain alarm clock from Sony. (I'm sorry I - [BRayTracer 0.7 Almost Finished](https://www.philosophicalgeek.com/2005/02/21/braytracer/) - I've almost finished version 0.7 of my ray tracer. Here's the (mostly complete) list of things I've worked on. - [A Month with NUnit](https://www.philosophicalgeek.com/2005/03/30/a-month-with-nunit/) - I'd been hearing about this thing called NUnit for the past 6 months, and finally two months or so ago I decided to see what all the hoopla is about. NUnit is a .Net version of the original JUnit unit-testing package for Java. The newest version has a very strong .Net feel with its use - [Yankee Group vs. Linux Zealots](https://www.philosophicalgeek.com/2005/04/07/yankee-group-vs-linux-zealots/) - There is a wonderful little article about the Yankee Group's reaction to criticism of their surveys. I'm not as forgiving as Laura DiDio. My entire undergraduate education was heavily Linux-based, and as I saw it, there were very few reasonable opinions. It was either love linux above all else and bash Microsoft with idiotic assertions, - [Interesting article about Linux politics](https://www.philosophicalgeek.com/2005/05/20/interesting-article-about-linux-politics/) - John Dvorak has an interesting commentary on the implosion of the Linux community. As I've mentioned before, I'm sympathetic to the view that Linux and OSS in general are having problems with religious zeal affecting people's better judgement. - [Math can be freaky...](https://www.philosophicalgeek.com/2005/05/24/math-can-be-freaky/) - To preface, I am not a mathematician. I can hold my own in most college-level math (I've taken 3 years of algebra, trig, geometry, 3 years of calculus, and 1 year linear algebra: where is all that knowledge now?), but I'm still easily impressed. I've been working through an algorithm textbook (more on that later), - [Code Timing functions](https://www.philosophicalgeek.com/2005/06/27/timing-functions/) - time_t vs. GetTickCount vs QueryPerformanceTimer vs. GetMachineCycleCount - [Mr. Hatch and the Internet](https://www.philosophicalgeek.com/2005/07/21/mr-hatch-and-the-internet/) - Phil Windley, commentator, author and IT industry expert (and also a former professor and supervisor of mine) has a wonderful little statement about Senator Hatch. I try to avoid posting politics on this blog, but I have to mostly-agree with Dr. Windley. I've long been very wary of Senator Hatch's dangerous and lopsided proposals. He - [Curvy: Part 1](https://www.philosophicalgeek.com/2005/07/30/curvy-part-1/) - I've been wanting to learn COM lately, and not knowing where to start I began in some of the MFC books I have. Admittedly, MFC hides quite a bit of COM complexity, but I figured it would be a good place to get my feet wet without getting scared. My first test program is called - [Getting NUnit to work on .Net 2.0 and VS Studio 2005 Beta 2 (Whidbey)](https://www.philosophicalgeek.com/2005/08/31/getting-nunit-to-work-on-net-20-and-vs-studio-2005-beta-2/) - I've been playing around VS.Net 2005 Beta 2 for a while now and like it so much that I've converted the BRayTracer to use it exclusively. Yes, this means you need .Net 2.0 to run all future versions, but it's worth it. I ran into the slight problem of not being able to use NUnit - [List<> vs. ArrayList](https://www.philosophicalgeek.com/2005/09/02/list-vs-arraylist/) - I read Rico Mariani's latest quiz, and decided to check out the results for myself in BRayTracer. I already have some simple performance benchmark tests in my NUnit tests, so I ran some before and after. I changed only the ArrayList's used in the scene object to hold shapes, materials, and lights. Before: 25.197 opaque - [Navigating a Changing Universe](https://www.philosophicalgeek.com/2005/11/20/navigating-a-changing-universe/) - Something my wife and I were talking about the other day inspired me to think about navigating the cosmos. I don't remember our conversation, but I do remember wondering How can we travel to a star a million light years away if the universe is constantly expanding? It wouldn't be there once we arrived! Which - [On Fixing Computers](https://www.philosophicalgeek.com/2005/12/23/on-fixing-computers/) - As the family's computer guy, I often get asked to fix, maintain, look at, improve, or otherwise modify my family's computers over vacations. This Christmas vacation is no exception. While I was at my brother's house he asked me to look at his computer--remove spyware, make sure everything was running smoothly. I updated Spybot to - [Golden Days](https://www.philosophicalgeek.com/2006/01/05/golden-days/) - Yesterday was a golden day. Everything I touched turned to gold. I solved all the problems that came up, fixed bugs right and left, and even figured out the root cause of a bug that's been plaguing us for a month or so. Some days are like that. I like days like this, because I - [Why Developer Certification Doesn't Make Sense](https://www.philosophicalgeek.com/2006/01/15/why-developer-certification-doesnt-make-sense/) - Much as been said about the pros and cons of requiring software engineers to be certified, just like the medical, law, and engineering fields. I personally do not believe this should happen. First of all, those other, certified, fields have existed for thousands of years. Computer Science is not even a century old. The field - [Credibility](https://www.philosophicalgeek.com/2006/02/02/credibility/) - One thing I cannot stand that is so prevalent in the computer industry is criticism by people of ideas, products, and technologies that they don't understand. You see this a lot in the OS wars--especially of Windows, but Linux and Apple are not immune. In very few cases do people have a well-reasoned and thought - [SM_SECURE](https://www.philosophicalgeek.com/2006/02/21/sm_secure/) - In the system metrics that you can retrieve with GetSystemMetrics, one of the available options is SM_SECURE. The only explanation provided is "Nonzero if security is present; otherwise, 0." What does that mean? On my computer, the value is 0. There are a few different ways security can be "present" in my mind--what specifically are - [ArgumentNullException and ArgumentException](https://www.philosophicalgeek.com/2006/02/27/argumentnullexception-and-argumentexception/) - Does it strike anyone else as ironic that ArgumentException and ArgumentNullException have mismatched argument ordering? The parameter name is first for the null version, but second for the other one. Uggh... this makes it awkward to remember if you use both. ArgumentOutOfRangeException follows the example of ArgumentNullException. I can see no obvious reason for the - [Multiple Choice Tests](https://www.philosophicalgeek.com/2006/03/09/multiple-choice-tests/) - The problem with multiple choice/true-false tests is that the more you know, the more answers become "that depends." - [Simple Customization of a Collection Class](https://www.philosophicalgeek.com/2006/03/15/simple-customization-of-a-collection-class/) - I needed a simple array of strings today, and I needed to be able to return it via a property. I could use a simple array, but that has some significant drawbacks. I could use an ArrayList, but the indexer returns an object, which would force the application to always cast it. I decided to - [Editing Tracks in Windows Media Player](https://www.philosophicalgeek.com/2006/03/17/editing-tracks-in-windows-media-player/) - I recently embarked on a complete overhaul of my digital music library--including re-ripping all of my hundreds of CDs into WMA at 192 Kbps. It took a few weeks to get through that, and now I'm going through each album "normalizing" it--fixing up names, album artists, composers, etc. It's quite an effort and very tedious - [Macros are evil](https://www.philosophicalgeek.com/2006/03/20/macros-are-evil/) - I'm innocently developing a device context class for my LFC framework and I want a method called SelectPen. All of a sudden I'm getting very weird linker errors about how SelectPen is not defined. It turns out that SelectPen is a macro defined in windowsx.h as an alias for SelectObject. #define SelectPen(hdc, hpen) ((HPEN)SelectObject((hdc), (HGDIOBJ)(HPEN)(hpen))) - [The web in a box](https://www.philosophicalgeek.com/2006/04/07/the-web-in-a-box/) - I was reading an interview of Gary Flake who works with MSN search. The following quote stood out to me:  However, there is an even richer class of algorithms that can only be efficiently built on a 64 bit system because you essentially have to have a significant part of the web stored close to - [Sleep and the length of days](https://www.philosophicalgeek.com/2006/04/16/sleep-and-the-length-of-days/) - Is it just a coincidence that humans require roughly the same amount of sleep as there are hours during the night? In other words, is the amount of sleep that is "healthy" for us the result of long centuries of nurturing and tradition or is it biological? In other words, if the day were 30 - [Programmer's Paradise](https://www.philosophicalgeek.com/2006/04/12/programmers-paradise/) - Joel of Joel on Software recently posted a good article on managing programmers in software companies. I liked this paragraph: A programmer is most productive with a quiet private office, a great computer, unlimited beverages, an ambient temperature between 68 and 72 degrees (F), no glare on the screen, a chair that's so comfortable you - [Detecting database connection](https://www.philosophicalgeek.com/2006/04/19/detecting-database-connection/) - How to detect whether a database is up and available before processing data. - [Benefits of using "as" in C#](https://www.philosophicalgeek.com/2006/04/21/benefits-of-using-as-in-c/) - The "as" keyword is very useful in managed code because it solves a very common problem. Suppose you have this: object o; ... ... string s = (string)o; but what if o is null? Then you will get a NullReferenceException. Sometimes this is ok, but often if o is null, you want s to be - [What's wrong with this code? - 1](https://www.philosophicalgeek.com/2006/04/26/whats-wrong-with-this-code-1/) - What is wrong with the following code? struct Foo {    public int id;    public string value;    public static readonly Foo Empty = new Foo("");    public Foo(string val)    {         this.value = val;         this.id = -1;     } }; and elsewhere... Foo m = new Foo("Something"); if (object.ReferenceEquals(m, Foo.Empty)) {    - [.Net Deprecation](https://www.philosophicalgeek.com/2006/04/24/net-deprecation/) - A useful attribute in .Net is Obselete. When you mark a method with this the compiler will flag any line that accesses the method (or property, or whatever) with a warning (error is optional). I recently used it for a framework that sits between a database and applications--I wanted to faithfully reflect the database design - [What's wrong with this code? - 1 - Answer](https://www.philosophicalgeek.com/2006/05/03/what’s-wrong-with-this-code-1-answer/) - The main thing wrong with the code is that object.ReferenceEquals(a,b) will ALWAYS return true because it's comapring structs, which are value types. Value types are passed by value, not reference, so every instance is different.  - [Favorite new feature in IE7](https://www.philosophicalgeek.com/2006/05/08/favorite-new-feature-in-ie7/) - My favorite new feature in IE7 is QuickTabs (Ctrl+Q) that shows thumbnails of all the current tabs. It's just cool. - [What's Wrong with this code? - 2](https://www.philosophicalgeek.com/2006/05/10/whats-wrong-with-this-code-2/) - What's wrong with this code? UINT a; . . . DoSomething(HIWORD(a)); void DoSomething(int x) {  if (x < 0)  {   //do something  }  } I recently ran into this in some code I was working on. - [What's Wrong with this code? - 2 - Answer](https://www.philosophicalgeek.com/2006/05/12/whats-wrong-with-this-code-2-answer/) - In the last post, I showed some code that had a very simple problem. The problem is that when you call HIWORD, it converts the 16 bits into an unsigned short, which then gets passed as an int padded with zeros--not sign extended (it's not signed). It will NEVER be less than zero. The solution - [Programming as a hobby](https://www.philosophicalgeek.com/2006/05/15/programming-as-a-hobby/) - People are often amazed when I tell them that programming is not just a job--it's also my hobby. I know that it's one of the main reasons I was immediately considered for the job I have now. After looking at my cv, my now-manager headed to my web-site and saw that I had done a - [Windows Media Player 11](https://www.philosophicalgeek.com/2006/05/17/windows-media-player-11/) - The best media player just got better. At work, I just downloaded the new version of Windows Media Player 11 in beta. From what little I've used it, it's a HUGE improvement. One potential thing I slightly miss is that I can't view albums in the left-hand "browser" and the tracks in the right-hand "content" view. - [Bose headphones](https://www.philosophicalgeek.com/2006/06/26/bose-headphones/) - I received many wonderful gifts for my birthday, but these in particular have helped me at work in a way nothing else has. I listen to music constantly as a program--it helps me concentrate and eliminates all other distractions. They really do work as well as I expected--maybe even better. I work in a pretty - [Windows Media Player 11 continued...](https://www.philosophicalgeek.com/2006/06/28/windows-media-player-11-continued/) - Some things I really like about the new media player: It is a LOT faster. I have at least 15,000 songs I've ripped from my large CD collection. WMP 10 took far too long enumerating albums and songs. The instant search may become my primary way of finding specific music to listen to. I like - [w.bloggar](https://www.philosophicalgeek.com/2006/07/22/wbloggar/) - I'm out various offline blog editors. Currently I'm using w.bloggar. I'm not sure what I think of it. WYSIWYG is really a nice thing to have in an editor, but the ability to see the HTML is useful too. Probably the best editor I've used is Dreamweaver's split-pane HTML/WYSIWYG interface, which allows you to view - [Qumana](https://www.philosophicalgeek.com/2006/07/24/qumana/) - I think, however, that I like Qumana better. The WYSIWYG is nice. Seems easier to use. I don't need a lot of advanced features. It works simply and well. I'm not sure what I think of the drop-pad, however. It doesn't really support how I typically write posts, but perhaps I can make some use - [Raising Taxes versus Lowering Spending](https://www.philosophicalgeek.com/2006/07/26/raising-taxes-versus-lowering-spending/) - Every few months, our Senators and Congress-men and women debate taxes and whether or not to raise, lower, keep them steady, or blame others for doing so. The main thing that I notice during this ridiculous political fights is that nobody ever talks about the most basic financial wisdom: Spend Less Than You Earn. Why - [Alexandria, Virginia has RSS Feeds available](https://www.philosophicalgeek.com/2006/08/03/alexandria-virginia-has-rss-feeds-available/) - My city of Alexandria, VA has a couple of RSS feeds available. They're not much quite yet (DASH bus service notifications and city press releases), but there is the promise of more.  What I'd like to see next? Daily crime reports and history and recreation news. Alexandria also has a very impressive collection of online GIS - [Goodbye newsletters, hello RSS](https://www.philosophicalgeek.com/2006/08/04/goodbye-newsletters-hello-rss/) - I used to subscribe to tons of CNet, TechRepulic, PCMagazine, and Builder.com newsletters, but as of today--no longer. I've been unsubscribing from them as I get them. Unfortunately for them, I didn't really use their content so I'm not bothering to subscribe to their RSS feeds. Maybe in the future... I am relying more on - [Checking all values of an enumeration in C#](https://www.philosophicalgeek.com/2006/08/07/checking-all-values-of-an-enumeration-in-c/) - I have a utility function that takes in a status enumeration and returns a string description associated with the given status code. It looks something like this: internal static string MailProcessCodeToString(MailProcessCodes eCode) { switch (eCode) {case MailProcessCodes.mpcGoodData:    return "No errors detected in the order mail";case MailProcessCodes.mpcNoHeader:    return "Could not find header in order - [Windows Live Search Toolbar -- not quite there yet](https://www.philosophicalgeek.com/2006/08/10/windows-live-search-toolbar-not-quite-there-yet/) - I forced myself to uninstall the Google toolbar and exclusively try out the new Windows Live Toolbar. I think I'm going to uninstall it today. First of all, I like a lot of things about it: Customizable buttons Lots of great features Search history with automatic drop down list that shows past/related searches Desktop search - [The users are in control](https://www.philosophicalgeek.com/2007/09/21/the-users-are-in-control/) - I really enjoyed and appreciated this essay from Raganwald about the user experience at work versus that of their home PC environments (among other topics). I particularly liked the point: And meanwhile, the very same users could walk across the street and buy themselves a much better PC for less money than we pay and - [Thoughts on Writers Guild of America Strike](https://www.philosophicalgeek.com/2007/11/07/thoughts-on-writers-guild-of-america-strike/) - This strike is a big deal, but it's much bigger deal for Hollywood, the producers and writers than for the rest of us. I think they are facing some specific dangers that they had better think about before they drag on too long. The actual points the union and producers are arguing about are probably - [The War on Being Different](https://www.philosophicalgeek.com/2007/11/01/the-war-on-being-different/) - Bruce Schneier has a wonderful essay on his site today about how our culture of fear of harmless people and objects is being propagated. I think this is my favorite essay of his. I really like this paragraph about how this happens: Watch how it happens. Someone sees something, so he says something. The person - [Amazon Kindle + Audible = Killer-app?](https://www.philosophicalgeek.com/2008/02/14/amazon-kindle-audible-killer-app/) - My wife sent me a link to the Amazon Kindle the other day, and asked, "Have you heard of this? what do you think?" I think she wants one. I have to admit that the thought of such a device is appealing. I have tried reading e-books on my PDA and BlackBerry occasionally, but other - [Linux Reality Check](https://www.philosophicalgeek.com/2006/08/18/linux-reality-check/) - Over at Slashdot, Fedora Project Leader Max Spevack responds to some frank question about the Fedora project. He talks about a number of topics: Unified package managers across distros Propritetary drivers Differences in Linux over time Fedora's biggest weakness Threat of Vista inclusion of NTFS driver in kernel Wacky package dependencies a few others... What - [Linux Reality Check part 2](https://www.philosophicalgeek.com/2006/08/18/linux-reality-check-part-2/) - Scoble has a great commentary on the state of Linux fonts. It's something I never thought about much before, but now that he's brought it up, I realize that poor font quality is something I've definitely suffered through when I did actively use Linux. It's just another example of one the seemingly-minor-but-actually-major issues facing Linux. - [How to track savings bonds in MS Money 2007](https://www.philosophicalgeek.com/2006/09/08/how-to-track-savings-bonds-in-ms-money-2007/) - I recently upgraded to Microsoft Money 2007, and decided to finally add in some treasury bonds that I have had for years. I couldn't figure out, how to do it, however, until I came across this FAQ. - [Simple Command Mapping Infrastructure in .Net](https://www.philosophicalgeek.com/2006/09/06/simple-command-mapping-infrastructure-in-net/) - Unlike MFC, .Net does not offer a built-in framework for message handling in WinForm applications. MFC developers, for better or worse, have a rather large mechanism that automatically maps command messages from menus, toolbars, and windows into the classes that want them. .Net has no such all-encompassing framework, though some 3rd-party frameworks exist (perhaps I'll - [Say no to Variable Pricing](https://www.philosophicalgeek.com/2006/08/28/say-no-to-variable-pricing/) - ICANN is hearing a proposal to charge variable prices for domain names. This has to stop before it starts. How are they going to determine a price? What's the fair market price of something? Does it depend on how many whois queries there are? Someobody will just slam that, driving up the price. Is it - [ClearType is like a new pair of glasses](https://www.philosophicalgeek.com/2006/08/18/cleartype-is-like-a-new-pair-of-glasses/) - Many have said it already, but let me just add my voice: ClearType technology is the most wonderful thing to hit Windows in a long time. I recently received a new computer at work (3.4Ghz hyperthreaded, 1 GB RAM, 80/200 GB disks--a screaming machine, at least compared to what I used to have). and during - [Worse than Y2K--what if gravity changes?](https://www.philosophicalgeek.com/2006/08/21/worse-than-y2k-what-if-gravity-changes/) - Though the danger to life, civilization, and future of all that is good and beautiful was greatly oversold, Y2K was still a pretty big deal. It required the detailed analysis and updated of millions of lines of legacy code in all sectors, levels, nooks, and crannies of computer civilization. We survived, somehow. Planes didn't fall - [The hidden purpose behind private web browsers and history cleaners.](https://www.philosophicalgeek.com/2006/09/07/the-hidden-purpose-behind-private-web-browsers-and-history-cleaners/) - Does anybody else think that the real purpose behind the big movements in privacy, hiding web browsing habits, building anonymizers, and more... is really just a movement to allow everyone to view pornography without their SO's finding out? Come on, perhaps there really are people in a public library who need to look up an - [How to solve severe driver problems in Windows](https://www.philosophicalgeek.com/2006/09/12/how-to-solve-severe-driver-problems-in-windows/) - A colleague at work recently got a second video card--a bottom of the barrel (or close to it) nVidia MX 4000 (PCI). He had an existing AGP nVidia Vanta. Well...the installation did not go well. It did something to Windows so that it consistently blue-screened during the driver load process (the progress bar moving in - [The power of the blog to motivate corporate, societal, and government change](https://www.philosophicalgeek.com/2006/09/15/the-power-of-the-blog-to-motivate-corporate-societal-and-government-change/) - This is an issue that has been discussed many times previously--so many that I won't even bother to link to those discussions. By now it's well-understood that blogs carry a power stronger than most in the media initially assumed possible. Not just blogs, but the entire "Web 2.0" phenomenon--MySpace, YouTube--the whole rotten bunch. :) Would - [What would the human race look like?](https://www.philosophicalgeek.com/2007/09/04/what-would-the-human-race-look-like/) - On my drive into work this morning, I heard an interesting story on on WAMU (sorry, can't find the specific story link) about a Korean-American adopted by white American parents. While initially struggling against her Korean heritage, she eventually came to appreciate and be proud of it. The commentator, himself an adopted Korean in the same - [Cell phones, water and wireless mice](https://www.philosophicalgeek.com/2007/11/05/cell-phones-water-and-wireless-mice/) - I'm embarrassed to say that the link took me a long time to figure out. If you're wireless mouse or keyboard is having connection problems, signal weaknesses, or similar signs of problems, make sure your cell phone isn't anywhere around them! I did this at work for a long time--it screwed up the signal strength, - [Neo Must Die - Give us the Matrix](https://www.philosophicalgeek.com/2007/10/31/neo-must-die-give-us-the-matrix/) - We don't want to be free. Neo is our enemy, not our savior. Most of us have seen The Matrix, or are at least familiar with the story. Neo is our hero in the movie, a virtual god in training, selflessly seeking to destroy the Matrix and free the enslaved humans therein. Yet, curiously, one - [The Benefits of Having Too Much Processing Power](https://www.philosophicalgeek.com/2007/11/28/the-benefits-of-having-too-much-processing-power/) - Do an experiment: keep Task Manager or any other CPU activity monitoring program up on your screen for a few hour or days, glancing at it every so often. Do you see it EVER above zero (other than momentary spikes)? Here's mine, from a Google sidebar gadget: I've got a Dual Core and 2GB RAM. - [Infinity - Infinite Storage](https://www.philosophicalgeek.com/2007/12/19/infinity-infinite-storage/) - Anybody who's taken high school or college mathematics know how phenomenal exponential growth is. Even if the exponent is very, very small, it eventually adds up. With that in mind, look at this quick-and-dirty chart I made in Excel, plotting the growth in hard drive capacity over the years. [source: http://www.pcguide.com/ref/hdd/hist-c.html] Ok. it's ugly, but - [Infinity - Infinite Energy](https://www.philosophicalgeek.com/2007/12/21/infinity-infinite-energy/) - Power. Electricity. The Holy Grail of modern technology. I say this because the information revolution completely depends on electricity, whether it's batteries, hybrid motors, or the grid. Everything we do depends on converting some naturally occurring resource into power to drive our lives. I was thinking about power recently while watching an episode of Star - [Dear Spammers...](https://www.philosophicalgeek.com/2008/02/15/dear-spammers/) - Thank you for your increasing interest in my blog, which is apparently slowly gaining in popularity with legitimate readers too! Unfortunately, my dear spammers, you are idiots. 100% of comments on this blog are moderated--99.9% are filtered before I ever see them. The rest are fairly obvious scams. None of your stupid spammy comments will - [We can only hope...](https://www.philosophicalgeek.com/2006/09/14/we-can-only-hope/) - Analyst predicts plunge in gas prices... - [Code Formatter Plugin for Windows Live Writer](https://www.philosophicalgeek.com/2006/09/14/code-formatter-plugin-for-windows-live-writer/) - I stumbled across a great code formatter for Windows Live Writer today. Here's an example, using a C# function that converts a number into a formatted file size: public static string SizeToString(long size) { const long kilobyte = 1L - [Code formatter for Windows Live Writer](https://www.philosophicalgeek.com/2006/09/18/code-formatter-for-windows-live-writer/) - I stumbled across a great code formatter for Windows Live Writer today. Here's an example, using a C# function that converts a number into a formatted file size: public static string SizeToString(long size) { const long kilobyte = 1L - [Why you shouldn't catch System.Exception](https://www.philosophicalgeek.com/2006/12/14/why-you-shouldnt-catch-systemexception/) - There are probably many reasons, but my favorite is that, if you are resorting to catching anything at all, you probably don't understand the code well. For example, in complicated parsing of text, it is often easier to just put a huge try {...} catch (Exception ex) {...} around the entire thing, rather than take - [Importance of disposing MailMessage objects](https://www.philosophicalgeek.com/2007/01/16/importance-of-disposing-mailmessage-objects/) - Always, always, always follow the suggested usage patterns of disposable objects. I had a strange problem recently where e-mail messages with attachments weren't releasing the lock on the files for a long time. I was using the System.Net.Mail namespace, specifically the Attachment and MailMessage classes. Disposable objects represent resources not directly under control by the - [Changes in .Net 1.1. and 2.0 E-Mail classes](https://www.philosophicalgeek.com/2007/01/13/changes-in-net-11-and-20-e-mail-classes/) - I recently (re?)learned a harsh lesson at work. We migrated a critical application's e-mail client code to use System.Net.Mail's classes instead of those in the deprecated System.Web.Mail. After doing this, we immediately had three problems, mostly with the Attachment class: Our automated test software could no longer read the attachments Attachments started having names of - [Deep Computing Philosophy from Steve Yegge](https://www.philosophicalgeek.com/2007/01/24/deep-computing-philosophy-from-steve-yegge/) - If you haven't read Steve Yegge, you owe it to yourself to do so. He only writes about once a month, but every single article is worth reading, whether you agree with him on everything or not. His latest is fascinating and incites some interesting pondering about the future of software...I'm going to have to - [Thoughts on Process: How much is enough](https://www.philosophicalgeek.com/2007/08/17/thoughts-on-process-how-much-is-enough/) - I've been thinking a lot about process lately, specifically how much process is enough, and how to automate things I do regularly. First of all, I think I'm lucky to work in a place that does not have a burdensome process in order to get anything done. At its core, process is necessary because we - [Excellent article on Rare Risks and Overreactions by Bruce Schneier](https://www.philosophicalgeek.com/2007/05/18/excellent-article-on-rare-risks-and-overreactions-by-bruce-schneier/) - I recently started following Bruce Schneier's blog about security and security technology. He makes LOTS of excellent points. Too bad the powers that be don't educate themselves sufficiently on this type of stuff before passing bad laws or taking drastic, pointless actions. I especially like his recent essay on over-reacting to rare events. Right on. - [UnitTest++](https://www.philosophicalgeek.com/2007/07/12/unittest/) - I've got a great process using NUnit in all my .Net projects. However, at work we have a large MFC/C++ application that has NO automated testing. I've been planing on getting unit testing into it for quite a while, but finally decided this is the week to do it. It turns out that C++ unit - [Most addictive game ever](https://www.philosophicalgeek.com/2007/07/13/most-addictive-game-ever/) - I have become quickly addicted to this fun, simple flash game: Desktop Towers Defense. - [Promoting your blog](https://www.philosophicalgeek.com/2007/08/20/promoting-your-blog/) - Peter Bromberg has a great checklist of things you can do to promote your blog. It took a while, but I went through almost all of them. We'll see if it pays off! Technorati Tags: blogging, promotion - [Shout out to a store at Bricklink](https://www.philosophicalgeek.com/2007/10/01/shout-out-to-a-store-at-bricklink/) - I buy most of my Legos these days second-hand from a huge online market called BrickLink. People post their inventories for sale, and you can order from all of these people. BrickLink manages all of it. Well, one store (so far) is a generous donor in the Buy Me a Lego campaign, and I wish - [Getting Green Off the Grid](https://www.philosophicalgeek.com/2007/09/30/getting-green-off-the-grid/) - Going green is something I am slowly becoming more interested in. I'm not really sure what steps exactly we need to take--I don't think we have an inordinate impact on the environment, and to be honest, right my pocketbook is far more important. That said, I do drive a Honda Civic that I've been able - [Shout-out to Sweet St Music Technology](https://www.philosophicalgeek.com/2007/10/04/shout-out-to-sweet-st-music-technology/) - I want to thank Chuck Brown of Sweet St. Music Technology for sponsoring my Buy Me a Lego campaign. I took a look around his site, interested as I was, because I'm an amateur musician myself (I play piano). I used to play alto sax in middle school, but never became great at it. Anyway, - [Watkins Apothecary](https://www.philosophicalgeek.com/2007/10/01/watkins-apothecary/) - I just wanted to say thank you to Valerie and Don for their contribution to my Buy Me a Lego campaign. Their generous donation deserves a link to the web-site of a very interesting store. As an aspiring gourmet, I particularly enjoy the pantry section of the store. I've been meaning to look into some - [Washington, DC / Baltimore photographer](https://www.philosophicalgeek.com/2007/10/02/washington-dc-baltimore-photographer/) - Thibeaux Lincecum contributed to my Buy Me a Lego campaign and deserves some props. He's a photographer local to Washington, DC / Baltimore and I enjoyed many of his photos. He's got a lot of stuff with Burning Man, weddings, parties, and a ton of others. I liked the Montgomery County Fair photos, particularly this - [A DC Video Production Company](https://www.philosophicalgeek.com/2007/10/08/a-dc-video-production-company/) - Here's a shout-out to "Memories in Motion", Video Production Technology, a great videography and production company in the metro Washington, DC area. Frank also does great video work for the news wire service my wife works for. They were generous with a donation to my BuyMeALego campaign, and I wish them the best of luck. - [Data Brick](https://www.philosophicalgeek.com/2007/10/09/data-brick/) - I just wanted to thank Data Brick, a sponsor of my Buy Me A Lego campaign. They've got a bunch of LEGO sets for sale, so go check them out! Technorati Tags: Lego, BuyMeALego - [What is Lupus?](https://www.philosophicalgeek.com/2007/10/05/what-is-lupus/) - One of my donors to my Buy Me a Lego campaign was a representative of the Lupus Erythematosus Society of Saskatchewan (L.E.S.S.). I appreciate this opportunity to give them so more publicity. I had heard the word "Lupus" but I was not familiar with exactly this disease was, so I looked it up on their - [Getting the most out of Outlook 2007](https://www.philosophicalgeek.com/2007/10/08/getting-the-most-out-of-outlook-2007/) - I've been trying to organize my life lately, and this weekend, I decided to get my Outlook under control--respond, file, or delete the hundreds of e-mails in my inbox, create necessary tasks, delete obsolete ones, reorganize the folder hierarchy, etc. Also, I've recently been introduced to the Getting Things Done methodology and was interested in - [Encouraging child creativity](https://www.philosophicalgeek.com/2007/10/22/encouraging-child-creativity/) - One of the most interesting sponsors to my Buy Me a Lego campaign is a company called Kidz Worxx. They have a unified line of artwork-related items aimed at children. I think this is stuff my sister, who is an artist, would have loved as a kid. From the site description: A child friendly, easy - [Bricks that Stick](https://www.philosophicalgeek.com/2007/10/16/bricks-that-stick/) - Thank you Paul, for your contribution to my Buy Me A Lego campaign! Paul runs a store at BrickLink called Bricks that Stick. He's got quite a few parts. If you need Legos, please go check him out! Technorati Tags: Lego, Legos, BuyMeALego - [West Virginia Cabin for Rent](https://www.philosophicalgeek.com/2007/10/28/west-virginia-cabin-for-rent/) - One of my co-workers (and a contributor to my still on-going BuyMeALego project) has some family members with a beautiful home in West Virginia, available for rental to anyone interesting in a get-away to one of the most beautiful parts of the country I have ever been to. The surrounding area is wooded, there are - [Problems with null character in WordPress feed?](https://www.philosophicalgeek.com/2007/10/31/problems-with-null-character-in-wordpress-feed/) - In a recent post, I had this sequence of characters (which I'm expressing this way to avoid repeating the problem): . That's the NULL character, if you didn't know. It broke my feed. I'm not sure if it was IE or WordPress, but either way is bad so I replaced the offending sequence with - [Resume Help](https://www.philosophicalgeek.com/2007/11/14/resume-help/) - FreeResumeReview.org is my latest sponsor to my Buy Me a Lego campaign. The cool thing about them: they actually really are FREE. The tips section is useful on its own, but the really cool thing is that you can upload your resume and cover letter and they'll review it for free. Free Resume Review dot - [Door to Door Organics](https://www.philosophicalgeek.com/2007/11/30/door-to-door-organics/) - A few months ago, Leticia and I signed up for a service called DoorToDoorOrganics. Simply put, this is a way to get farm-fresh, organic produce from local farmers, delivered to your door. How it works is this: Create an account, decide on the size and type of box you want. Decide how often you want--every - [Don't delay your merging](https://www.philosophicalgeek.com/2007/12/07/dont-delay-your-merging/) - Another one of those lessons learned posts. I know I'm supposed to merge changes across branches often to minimize the pain, but I didn't do it. Here's the scenario: We've got 3 development branches: 6.3, 6.4, and 7.0 (the trunk). 6.3 and 6.4 are technically maintenance branches because we didn't anticipate needing to them, but - [BugTracker.Net](https://www.philosophicalgeek.com/2007/12/07/bugtrackernet/) - I've been meaning to write about this software for a while. When I started my current job, all software development was done by an outside contractor. I quickly took over, and that necessitated implementing a lot of tools and procedures to handle our large C++ and C# code base. Choosing Subversion for source control was - [Will someone please stop these people! (RIAA)](https://www.philosophicalgeek.com/2007/12/31/will-someone-please-stop-these-people-riaa/) - Washington Post story. You can no longer put the CDs you BOUGHT onto your iPod. Update: ok, apparently the story is wrong. Still, the RIAA is evil... Technorati Tags: RIAA, digital music - [Word Count Plugin for Windows Live Writer](https://www.philosophicalgeek.com/2008/01/07/word-count-plugin-for-windows-live-writer/) - I've fixed one of the biggest holes in functionality in Windows Live Writer. It's simple, but essential: the ability to count words (and characters and paragraphs) in your posts before publishing. Windows Live Writer doesn't really offer a way to extend the menu system itself, but you can create an "Insert..." plugin that just analyzes - [HostForWeb - best hosting company ever](https://www.philosophicalgeek.com/2008/01/19/hostforweb-best-hosting-company-ever/) - Ok, I have to give a quick shout out to my hosting company, HostForWeb. I've had my web-sites and e-mail hosted by them for about...5 years now? I can't remember when I started, but a while ago. Today, I noticed that my e-mail was not going out through my domain via smtp. I quickly determined - [Multiple-Item Clipboard a good idea?](https://www.philosophicalgeek.com/2008/01/25/multiple-item-clipboard-a-good-idea/) - Jeff Atwood laments the single-item nature of the Windows clipboard, and points out utilities that can expand the capabilities to multiple items. I think that's a great power tool to have, but I'm not sure having a multiple-item clipboard is really the best thing. I think one of the strengths of the clipboard is its - [Online reading list - bookwormr](https://www.philosophicalgeek.com/2008/02/20/online-reading-list-bookwormr/) - I found a great site I wanted to share with everybody: bookwormr. To explain: I've got 3 large books on my nightstand at the moment: Scotland: The Story of a Nation - Magnus Magnusson - Much of my heritage is Scottish, and I got intensely interested in Scottish history during our trip to Edinburgh last - [Unit testing benefits programmers who are already good](https://www.philosophicalgeek.com/2008/02/28/unit-testing-benefits-programmers-who-are-already-good/) - In order to kick my unit testing skills up a notch, I've been reading a lot about it lately. Today I had the thought: "Unit testing only helps already-good programmers." My reasoning is that bad programmers are going to write bad tests, or not enough test cases, or bad test cases, or won't take the - [6 Ways to Increase Your Confidence As You Code](https://www.philosophicalgeek.com/2008/03/06/6-ways-to-increase-your-confidence-as-you-code/) - One of the key requirements for being able to reliably update software is the confidence that the changes you are making are safe. The amount of confidence required increases with the complexity of the system. In my day job I work on a real-time messaging system that can have very, very little downtime. As the - [Solving "Unexpected Store Error" in Exchange](https://www.philosophicalgeek.com/2008/01/30/solving-unexpected-store-error-in-exchange/) - Getting a weird COM Exception with the cryptic ID 0x8055001E? We've been struggling with this problem for over a year now, and we finally have a solution. We have some critical code that is contacting Exchange server via COM Interop and CDOEX.DLL to read some inboxes and process e-mails. About once a month or so, - [Fighting Brain Rot](https://www.philosophicalgeek.com/2008/02/07/fighting-brain-rot/) - Alex Shalman has a great post at zenhabits about how to avoid letting your brain decay into apathy and atrophy. It's a great call to action, to find ways of self-improvement. I think the behaviors listed here dovetail very nicely with the attributes of highly effective programmers. By continuing to do as we always have, - [.Net Reflector](https://www.philosophicalgeek.com/2008/02/13/net-reflector/) - Lutz Roeder's .Net Reflector has been discussed on many blogs before, but I want to give it an additional plug. I recently had to emulate some C# serial-port code in our C++ app. The .Net SerialPort class is great, easy-to-use, and works well. Unfortunately, we're using a C++ serial port library that does not support - [Tip: Easily Automating use of WaitCursor](https://www.philosophicalgeek.com/2008/02/22/tip-easily-using-waitcursor/) - This is really simple and probably common, but it's a useful tip anyway. Say you need to set a form's cursor to the wait cursor while you accomplish something. You would do something like this: this.Cursor = Cursors.WaitCursor; //do something this.Cursor = Cursors.Default; Of course, what if "do something" throws an exception? Then - [Bad Random Functions Redux](https://www.philosophicalgeek.com/2005/11/15/bad-random-functions-redux/) - I had talked before about the random play function in my car stereo, particularly the playing of Arlington every time I drive past Arlington National Cemetery. It happened AGAIN. This is the 5th time in a row. I haven't heard the song, otherwise. - [Dear Blockbuster,](https://www.philosophicalgeek.com/2006/03/04/dear-blockbuster/) - Our relationship has been a long one, but at long last the time has come to go our separate ways. I can't say our relationship has been a happy one. I remember the long nights of walking up and down your aisles, looking in vain for a decent movie, only to return home empty-handed to - [Software Spoilage](https://www.philosophicalgeek.com/2007/10/29/software-spoilage/) - Jeff Atwood had an interesting post about software spoilage, in which he quotes PC World's list of no-longer-good-too-bloated applications which includes Windows Media Player 11. Are they kidding? WMP11 is a LOT better than WMP 9 and 10. It has better organization, and the fact that I can do instant filtering on albums, genres, artists, - [Podcasts I listen to](https://www.philosophicalgeek.com/2008/01/24/podcasts-i-listen-to/) - I got a 4 MB blue iPod Nano 2nd Genfor my birthday last June, and while I do have a few music playlists, I almost exclusively listen to podcasts. I can't believe I went so long without one of these. Putting together the list below led me to some others that I might give a - [Updated my favorite podcasts](https://www.philosophicalgeek.com/2008/01/25/updated-my-favorite-podcasts/) - I've updated my list of podcasts with some that I forgot and some new ones I discovered while finding the links to the first ones. I also slightly reorganized the list (Added a business section) - [Dilbert and Unfit by the same artist](https://www.philosophicalgeek.com/2006/02/18/dilbert-and-unfit-by-the-same-artist/) - I haven't seen this anywhere else on the web yet, but my suspicion is starting to grow. Even if it's a nutty theory, I'm still going to put it forward. Has anyone else wondered if Mike Belkin and Scott Adams are the same person? There is a relatively new comic out there called Unfit by - [Why 57 Varieties?](https://www.philosophicalgeek.com/2006/11/04/why-57-varieties/) - Every why there are 57 varieties of Heinz something-or-other? Here's a humorous answer and a general history. - [Does Linux Cure Cancer?](https://www.philosophicalgeek.com/2007/04/20/does-linux-cure-cancer/) - Maybe it does... - [Simpsonize Me](https://www.philosophicalgeek.com/2007/10/10/simpsonize-me/) - If you haven't seen this by now, you really need to check it out. Simpsonize Me - upload a photo of yourself and it will analyze it and generate a Simpson-ish lookalike. Very cool, and a big time waster. :) Update: here's mine. Should have put it up earlier... - [Microsoft really is the Borg!](https://www.philosophicalgeek.com/2007/10/12/microsoft-really-is-the-borg/) - And they really do have all power. Specifically, they can hide and unhide nation-states at will! Don't believe me? SPUtility.HideTaiwan Proof! Technorati Tags: Taiwan, Microsoft, API, Windows, SharePoint, humor, geopolitics - [The Nerd Handbook](https://www.philosophicalgeek.com/2007/12/13/the-nerd-handbook/) - Found The Nerd Handbook via Phil Windley. I sent it to my wife and told her she needs to read it. A highly-accurate depiction of nerds, I would say. At least in the generalities... Technorati Tags: nerds,humor - [BRayTracer Version 0.8 Released!](https://www.philosophicalgeek.com/2005/05/24/braytracer-version-08-released/) - Another version, with major improvements - [Managing Complexity](https://www.philosophicalgeek.com/2005/06/01/managing-complexity/) - Software developers and managing complexity - [Managing Complexity - Part 2](https://www.philosophicalgeek.com/2005/06/03/managing-complexity-part-2/) - Further musings on complexity and software - [Attributes and Complexity](https://www.philosophicalgeek.com/2005/06/06/attributes-and-complexity/) - Attributes are really just lightweight base classes...or are they? - [Code Security and Typed Assembly Language](https://www.philosophicalgeek.com/2005/06/09/code-security-and-typed-assembly-language/) - Over the summer I'm taking a class called Programming Languages and Security. This is the first time I've delved into security at this level before. It's a seminar style, which means lots of paper reading, and I am going to give two presentations. My first presentation was this past Thursday. I spoke about typed assembly - [Still No Silver Bullet...](https://www.philosophicalgeek.com/2006/03/07/still-no-silver-bullet/) - Much is being made lately about vulnerabilities in Mac OS X, and various people are either haughtily dengrating the Mac while others are pooh-poohing the results with bad logic. All of the ridiculous claims of "My OS is [better | more secure | safer] than your OS" is getting old. All these problems really do - [Free Code Here!](https://www.philosophicalgeek.com/2006/04/30/free-code-here/) - I just received this hilarious message: Thanks, you *****, for not responding to my Prim's e-mail, and may you be cursed with the worst of success in Computer Science. Sincerely, Michael Every once in a while I get requests from people asking me for completed code. The purpose of my articles (and this blog) is - [Pausing a Thread Safely](https://www.philosophicalgeek.com/2006/05/01/pausing-a-thread-safely/) - In .Net you have the option of Thread.Suspend() and Thread.Abort(), but under normal circumstances these are horrible options to use because they're likely to create locking problems (i.e., the thread has a locks on resource that other threads need). A far better way is to signal to the thread that it should pause and wait for a signal to - [Unsupported Frameworks...](https://www.philosophicalgeek.com/2006/05/17/unsupported-frameworks/) - Programming with a framework that you've developed can be annoying, when you compare it to the ease of IDE-supported frameworks. MFC is a nice framework primarily because Visual C++ has so much built-in support for it. My little framework has no such support (and I have no ambitions to build in IDE support for it) - [Rhythmic Programming](https://www.philosophicalgeek.com/2006/06/19/rhythmic-programming/) - Has anyone else ever had the experience of typing code in such a way that you build up an actual rhythm, patterns, a definable velocity punctuated by occasional flourishes? I found that happening today. I'm coding up a well-understood pattern in this application and so I can type quite a bit in long spurts. I - [Microsoft Sandcastle Released](https://www.philosophicalgeek.com/2006/08/01/microsoft-sandcastle-released/) - Now that NDoc is officially dead, and without support for .Net 2.0, it is a relief to many that Microsoft has released Sandcastle, the tool that they use to build MSDN documentation. Update: A FAQ/blog is available. I couldn't subscribe to the feeds in RSS Bandit, however. It may be a temporary problem. - [Factory Design Pattern to the Rescue: Practical Example](https://www.philosophicalgeek.com/2006/08/02/factory-design-pattern-to-the-rescue-practical-example/) - Design patterns really are quite useful. I have a situation in the code I'm working on where I was obviously repeating a lot of the same patterns and code (functions that were 90% the same--the only thing different was the specific class being instantianted): perfect candidate for factory techniques. Let's say we have the following - [DiskSlicer 1.0 Released!](https://www.philosophicalgeek.com/2006/11/09/diskview-10-released/) - [Note: edited to reflect updated name] A little pet project of mine, DiskSlicer, has finally reached the 1.0 stage. It does one thing, but does it well: shows you your disk space is allocated among all the folders and files on your drives. It can be an invaluable tool for figuring out where all your - [There's a reason my blog has been sparse...](https://www.philosophicalgeek.com/2007/07/18/theres-a-reason-my-blog-has-been-sparse/) - I've been working a lot on a software project. It's the first thing I've done in a long time that I've been passionate about. Basically, it's a LEGO® inventory management system. I know that some existing stuff already exists out there, but mine is going to have a little different focus. I don't want to - [3-Valued Logic (Boolean + Unknown)](https://www.philosophicalgeek.com/2007/07/19/3-valued-logic-boolean-unknown/) - There is a really interesting post by Hugo Kornelis on what happens when you have to introduce the value Unknown to boolean algebra. Unfortunately, it also reminds me of What Is Truth? on WorseThanFailure. :) - [What I'm doing to become a better developer](https://www.philosophicalgeek.com/2007/07/31/what-im-doing-to-become-a-better-developer/) - There was a meme going around about 5 steps people will take to become a better developer. I'm not a famous enough blogger to get tagged, but I'll share my 2 cents anyway. There's nothing like publicizing something to make you committed: Read more source code from other projects (especially .Net projects) Now that I've started - [Don't ignore naive or "stupid" algorithms -- hardware is cheap and fast](https://www.philosophicalgeek.com/2007/09/20/dont-ignore-naive-or-stupid-algorithms-hardware-is-cheap-and-fast/) - I just had a nice reality check. Sort of pleasant in that I realized I could save a LOT of memory usage (like from 35MB down to 9 MB), but also aggravating because I have spent probably 10-20 hours developing a clever algorithm designed for speed. Lesson learned. I should have built the naive version - [Thoughts on Process: Automation (and examples)](https://www.philosophicalgeek.com/2007/08/21/thoughts-on-process-automation-and-examples/) - If a process, or part of a process, can be automated it should be. For example, in a project at work, part of our process is to make sure that every dialog present in the English resources of an MFC application is also present in all the other dialogs. We do this manually by loading - [digg for developers](https://www.philosophicalgeek.com/2007/11/08/digg-for-developers/) - I was thinking the other day that there should be a digg-like site that is only for software developers. Well, it turns out there is! I was analyzing my web traffic and the list of recent referrers. A few were coming from dzone. Apparently, somebody has been submitting some of my articles to this site - [Tip: Mouse back and forward work in Visual Studio 2005 too](https://www.philosophicalgeek.com/2007/11/09/tip-mouse-back-and-forward-work-in-visual-studio-2005-too/) - You know how you can use the extra mouse buttons to move back and forward in Internet Explorer? The same shortcuts work in Visual Studio. Suppose you right-click on a function call, and select Go To Definition. Once you're done looking at the definition, hit the back button on your mouse: You're taken right back - [DiskSlicer 1.2 Out](https://www.philosophicalgeek.com/2007/12/17/diskslicer-12-out/) - I made some minor updates to DiskSlicer. Mostly, some minor bug fixes, but also I added the much-requested ability to delete files directly from the program. Go get it and enjoy! - [Never make assumptions about performance](https://www.philosophicalgeek.com/2008/03/17/never-make-assumptions-about-performance/) - The importance of measuring performance changes is a topic that has been covered by others smarter and more experienced than me, but I have a recent simple tale. I've simplified the code quite a bit in order to demonstrate the issue. Suppose I have a wrapper around an image (it has many more attributes): 1: - [How to file good bug reports (from Frank Kelly)](https://www.philosophicalgeek.com/2008/03/19/how-to-file-good-bug-reports-from-frank-kelly/) - This is an issue I run into constantly at my job. Frank Kelly wrote up a good summary of some items. They're simple, easy to understand, easy to follow, even for non-programmers. ;) In fact, I'm sending this link out to everyone in my group here at work. Technorati Tags: testing,programming,bug reporting - [20 Things to do when the Internet goes down](https://www.philosophicalgeek.com/2007/12/14/20-things-to-do-when-the-internet-goes-down/) - Even if the Internet connection goes out, your computer does not become a dumb brick. There were days these last few days where I didn't bother turning it on. Then I realized all the things I could still do. (My home Internet connection finally came back this morning. I'm bit upset that they didn't figure - [Code Complete 2](https://www.philosophicalgeek.com/2005/05/20/code-complete-2/) - I finally bought myself a copy of Steve McConnell's Code Complete, 2nd Edition. I've read about a third of it so far and love it. It's by far the most practical and useful book on programming I have ever read. But how to learn it all? Sure, an experience programmer will pick up many of - [5 Books to make you stupider](https://www.philosophicalgeek.com/2008/02/29/5-books-to-make-you-stupide/) - Well, after a week of investigation, I've settled on a social network for books: Shelfari. It's attractive, easy-to-use, easy to manipulate many books at once, they have a mobile version, and I have one friend on it (who invited me). Goodreads.com also looked nice, and it almost won. bookwormr.com, the one I originally found was - [Mouse tilt wheel horizontal scrolling in C#](https://www.philosophicalgeek.com/2007/07/27/mouse-tilt-wheel-horizontal-scrolling-in-c/) - In my current project, I'm using a custom ListView-like control to give my WinForms app a very rich interactive experience. This control does not implement mouse wheel scrolling like the Microsoft ListView implementation does so it was up to me to add it. You can use the knowledge in this article to implement full scrolling - [San Francisco Restaurants - Dining Guide](https://www.philosophicalgeek.com/2007/12/05/san-francisco-restaurants-dining-guide/) - We have another sponsor! MyChoyce.com is a free dining guide for the San Francisco area. And wow. It's nice. I am really wishing something like this existed for the Washington, DC metro area. The site is attractive, easy to use. And they have menus! Awesome. You can search and filter by food, services, location, price. - [Free Resume Review - Professional Service](https://www.philosophicalgeek.com/2007/12/05/free-resume-review-professional-service/) - I've mentioned Free Resume Review before, but I want to now mention their paid services. In addition to their free offerings, you can make a payment and get even more options and services, including: Increased chances of securing employment. Our resumes have a high rate of success in landing interviews. A contemporary, stylish, unique digital - [How to really have Middle East peace](https://www.philosophicalgeek.com/2007/11/29/how-to-really-have-middle-east-peace/) - With the talks in Annapolis this week between Middle East governments, peace is on a lot of people's minds. A meeting like this, while it won't solve anything immediately, does illustrate the point that you can't reasonably talk and fight at the same time. With that in mind, I have a permanent solution. How do - [Difference between ConfigurationSettings and ConfigurationManager](https://www.philosophicalgeek.com/2007/11/26/difference-between-configurationsettings-and-configurationmanager/) - If you upgraded a project from .Net 1.0/1.1 to .Net 2.0, and it used application configuration files, you will soon come across the compiler warning message 'System.Configuration.ConfigurationSettings.AppSettings' is obsolete: 'This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings' You have to add a reference to the System.Configuration assembly, but once you do, you can - [Instant Searching and Filtering in .Net - Part 2](https://www.philosophicalgeek.com/2007/10/22/instant-searching-and-filtering-in-net-part-2/) - This is part two of my series on fast searching/filtering of text using C#. In the previous article, we developed the filtering interface, built up a testing framework and implemented a naive indexer. For many purposes, that indexer performs more than adequately. Still, there are other possible implementations that might work better (or not...let's wait - [Instant Searching and Filtering in .Net - Part 3](https://www.philosophicalgeek.com/2007/10/29/instant-searching-and-filtering-in-net-part-3/) - This is part three of my series on fast searching and filtering of text using C#. The previous article developed an indexing method using a hash table. This article develops a method using a trie structure. If you don't know tries, I highly encourage to go read about them before continuing. This filtering method is - [Instant Searching and Filtering in .Net - Part 1](https://www.philosophicalgeek.com/2007/10/18/instant-searching-and-filtering-in-net-part-1/) - Even though I recently wrote about just using naive algorithms when they're sufficient, it helps to know about other options and their characteristics. With that mind, I'm beginning a little series (4 parts planned--I'll update this list as I go along) in C# documenting how I developed a few different approaches to doing fast (instant) - [Instant Searching and Filtering in .Net - Part 4](https://www.philosophicalgeek.com/2007/11/13/instant-searching-and-filtering-in-net-part-4/) - This is the final part of my series on instant searching and filtering using C#. The only further issue that I wanted to cover was efficiently using a ListView when the items will change so often. ListViews already have the concept of a virtual mode, where the consumer of the class must supply the items - [How to make money from telemarketers (or just annoy them)](https://www.philosophicalgeek.com/2007/11/07/how-to-make-money-from-telemarketers-or-just-annoy-them/) - My father-in-law is absolutely fed up with telemarketers calling. But rather than just hang up on them, why not try to get some money out of them? So he made a recording, to be played next time he gets a call: Listen to this recording he made. Ok, it's a long shot, but I think - [Easily Getting Last Two Digits of Year](https://www.philosophicalgeek.com/2007/11/02/easily-getting-last-two-digits-of-year/) - This is an easy one, but some people don't know it: if you need the last two digits of a year, say 2007, it's very easy to get, without converting to a string and getting the last two characters: int lastTwo = year % 100; Now that you know, it's obvious, right? And if - [A sign that ticket prices are too high](https://www.philosophicalgeek.com/2005/12/30/a-sign-that-ticket-prices-are-too-high/) - Les Misérables is in town, and I would love to see it. I've seen it three times, but it's one of those shows that I could see a million times and love it more each and every time. Problem is: the tickets are minimum $200.00. The best seats still available are over $300.00. $300.00 for - [Fantasian Kingdoms](https://www.philosophicalgeek.com/2007/10/17/fantasian-kingdoms/) - Fantasian Kingdoms looks like a very interesting game, and they are one of the more interesting sponsors of my Buy Me a Lego campaign. From the homepage: Fantasia is a distant planet ruled by a mysterious race known as Fantasians. This planet is stuck in constant turmoil due to the magical force hidden deep within - [Serial Port Code Library](https://www.philosophicalgeek.com/2007/10/16/serial-port-code-library/) - Need to interact with some hardware via serial port? I'm having to do some serial port communications in a project at work, and it is officially Not Fun. There was some original code that was doing only reads from the port, and I needed to some significant functionality that would not be possible with the - [What's Wrong with this Code 2 (Answer)](https://www.philosophicalgeek.com/2007/10/04/whats-wrong-with-this-code-2-answer-2/) - In my previous post, I showed some code that we "fixed" and it caused problems--it actually broke the algorithm. The bug was in relying on some compiler behavior and the usage of the stack. Here's the original (pre-"fix") code again for reference: for(i = 0; i < overlaySize.cx; i++) { long i1 = (long)((double)i / - [What's Wrong with this Code 2](https://www.philosophicalgeek.com/2007/10/02/whats-wrong-with-this-code-2-2/) - We've been working on our next version of our flagship product at work and, as part of that, we upgraded to Visual C++ 8 (2005) and turned on the most strict compiler settings, warning level 4, more debug runtime checks--basically trying to make everything very strict. As part of that process, we had to go - [Some more stores at BrickLink](https://www.philosophicalgeek.com/2007/10/03/some-more-stores-at-bricklink/) - I received a couple more donations (for http://www.BuyMeALego.com) from stores at BrickLink--thanks guys! First, eBricksOnline for a wonderful $25.00 donation! thanks! They also gave me a coupon to their store. And also, Ash's Extras, for a $2.00 donation. Thank you very much! So check them out if you need some Lego bricks. Technorati Tags: - [Announcing Buy Me a Lego](https://www.philosophicalgeek.com/2007/10/01/announcing-buy-me-a-lego/) - So I've resorted to desperate measures. :) I've started a small experiment/campaign to raise the cash for a Lego Millenium Falcon. But I am making it worth people's while. Whoever donates gets a link from the page to their own site. The way it works is: * for 65 cents, I put a link to - [Funniest Spam Ever](https://www.philosophicalgeek.com/2007/09/30/funniest-spam-ever/) - I just got hit with the funniest link spam ever on this blog. It contained an obvious link to a porn site, but before that was this sentence: Cameron Diaz takes a big swig of soda and shows the world that she can belch! Nice. :) Technorati Tags: Cameron Diaz, soda, funny spam, belching - [A Visual Studio that's easier on the eyes](https://www.philosophicalgeek.com/2007/09/28/a-visual-studio-thats-easier-on-the-eyes/) - After you've looked at Visual Studio all day for a few days in a row, the brightness of the white background can really start to bother you, especially as LCD monitors get brighter and brighter. That's why I've become a big fan of Dave Reed's Dark Side theme for Visual Studio 2005. It took me - [My Wife's Logic (or Women's Logic Explained?)](https://www.philosophicalgeek.com/2007/09/24/womans-logic-explained/) - For all of you who learned boolean algebra in your CS courses in college, I am sorry to be the bearer of bad news: your education was incomplete. The list of boolean tautologies and truth tables that you may have memorized or learned over time was wrong, with some startling and glaring errors. To rectify - [Farewell, Robert Jordan](https://www.philosophicalgeek.com/2007/09/17/farewell-robert-jordan/) - According to his blog, Robert Jordan passed away yesterday. He fought a tough illness for quite a while. I became a big fan of The Wheel of Time a few years ago and forced myself to stop reading the books until the final one comes out. I loved the books because they were immense, detailed, - [The Fountain](https://www.philosophicalgeek.com/2007/09/15/the-fountain/) - We just got Darren Aronofsky's The Fountain in the NetFlix mail today, and we loved it. Definitely worth watching, a thinking movie, a feast for the eyes. The use of lights was spectacular. It was in the same realm as What Dreams May Come (though I liked that one better), but it also made me - [How to measure memory use in .Net programs](https://www.philosophicalgeek.com/2007/09/13/how-to-measure-memory-use-in-net-programs/) - In developing an important component (which I will discuss soon) for my current personal project, there were a number of different algorithms which I could use to attack the problem. I wasn't sure which one would be better so I decided to implement each of them and measure their time/memory usage. I have a series - [Setting the minimum Windows version supported (C++)](https://www.philosophicalgeek.com/2007/03/06/setting-the-minimum-windows-version-supported-c/) - Recently, I was trying to use the Shell function SHGetFolderPath. Despite including the correct header file (shlobj.h), the compiler wasn't recognizing it. My code looked like this: CString strPath; HRESULT hResult = SHGetFolderPath( NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, strPath.GetBufferSetLength(MAX_PATH)); strPath.ReleaseBuffer(); What I did was lookup the definition of SHGFP_TYPE_CURRENT in shlobj.h, and found this: #if (NTDDI_VERSION - [John Edwards Presidential Special Haircut!](https://www.philosophicalgeek.com/2007/06/13/john-edwards-presidential-special-haircut/) - Seen outside a hair salon in Washington, DC. Snapped by my wife. - [Simulating a Server in .Net (C#)](https://www.philosophicalgeek.com/2007/04/02/simulating-a-server-in-net-c/) - I recently had a need to simulate an FTP server connection in some unit tests. Rather than developing a full test-server, for this purpose, I could easily simulate an FTP stream by creating it in memory, and then passing that stream to the functions that expect it: public Stream CreateTestStream(string text) { byte[] buff = - [Fahrenheit 451](https://www.philosophicalgeek.com/2007/01/01/fahrenheit-451/) - I just read the book Fahrenheit 451 by Ray Bradbury. This is the first time I've read it, never having come across it in school, like most people seem to. To me, it was the greatest argument against getting a TV. My wife and I decided towards the beginning of our marriage to never subscribe to - [Copying Beethoven](https://www.philosophicalgeek.com/2006/11/15/copying-beethoven/) - I was lucky enough to score some tickets to an advance promotion of Copying Beethoven from Washington's Classical Station, WGMS. It opens this Friday. I was pretty excited. It was in the very nice E-street Landmark theater in downtown DC. Apparently, they had given away hundreds of tickets, but no more than 30 people show up. - [Queue multiple GUI updates into a single update event (C# .Net)](https://www.philosophicalgeek.com/2006/09/21/queue-multiple-gui-updates-into-a-single-update-event-c-net/) - I'm writing a simple utility that involves scanning a hard disk and updating a display with the latest status. There are potentially many, many, many, many, MANY changes that happen to the display in very quick succession and sending an update event which triggers a screen refresh for every single state change would be an - [Don't use CArchive with native C++ type bool](https://www.philosophicalgeek.com/2006/09/11/dont-use-carchive-with-native-c-type-bool/) - I recently ran into an issue where I was trying to serialize a bool variable from a CArchive object. Archiving it out, with this code, works fine: //CArchive ar;bool bFill;ar > bFill has problems. It compiles fine under Visual Studio 2003, but errors out under Visual C++ 6 with this error: C2679: - [It isn't Infectious...](https://www.philosophicalgeek.com/2006/08/19/it-isnt-infectious/) - My father-in-law was visiting this week and the first thing he said to me, extending his hand to shake mine was: "Don't worry, it isn't infectious." (He has a temporary skin condition) - [Star Wars Epsiode III: Revenge of the Sith](https://www.philosophicalgeek.com/2005/05/28/star-wars-epsiode-iii-revenge-of-the-sith/) - My thoughts about episode 3 - [Narnia](https://www.philosophicalgeek.com/2005/05/31/narnia/) - The Lion, the Witch and the Wardrobe is coming to a movie theater this Christmas! - [Visual Studio 2005 TS Beta 2](https://www.philosophicalgeek.com/2005/06/13/visual-studio-2005-ts-beta-2/) - I finally received my Visual Studio 2005 Team System Beta 2 in the mail! It took about 3 weeks to get here. I'm very excited. I plan on converting BRayTracer to use VS 2005. It's on track to take about 90 minutes to install. Installation of the compact framework failed, so I'm repairing that component. - [Checking if a Directory Exists](https://www.philosophicalgeek.com/2005/07/05/checking-if-a-directory-exists/) - I recently had to write a utility that moved hundreds of thousands of files to a new location under a different directory organization. As part of it, I checked to see if the destination directory already existed and if not, created it. At one point I wondered if it would just be faster to try - [Movie Theaters](https://www.philosophicalgeek.com/2005/09/06/movie-theaters/) - Much has been said in the media lately regarding the drop in movie theater attendance by the American public. Reasons given include: awful movies; expensive tickets and concessions; competition from DVDs, home theaters, and video games; cell phone users; advertisement and preview glut; rude patron behavior; etc. I bet the list could go on for - [When Bad Random Functions Go Good?](https://www.philosophicalgeek.com/2005/09/30/when-bad-random-functions-go-good/) - Most software developers who have even a cursory knowledge of code security know that using the built-in rand() function for anything cryptographic is a bad idea. Now take the issue of randomness in car CD players, for example. In the last year I replaced my car's stolen stereo system with a new one. It's a - [A long day of coding...](https://www.philosophicalgeek.com/2005/11/30/a-long-day-of-coding/) - You know you've spent too long that day writing code when you start working on a term paper and ending sentences with semi-colons instead of periods. - [First billion dollar movie](https://www.philosophicalgeek.com/2006/01/01/first-billion-dollar-movie/) - With today's large blockbuster movies (LOTR, King Kong, Spiderman, Chronicles of Narnia, Titanic) costing hundreds of millions of dollars to make, I wonder what will be the first movie to cost $1 billion to produce. How will they recoupe the cost? When will it happen? - [Infinite Enjoyment with Finite Resources](https://www.philosophicalgeek.com/2006/01/05/infinite-enjoyment-with-finite-resources/) - Have you ever thought about the miracle of music? OK, some might object to the world miracle, but I'm talking about music, something where transcendental terminology is appropriate. On a piano you have 88 keys. Instruments can go higher (violin) or lower (organ), but with the same repeated 12-note octave everything in western music is - [A Debugging Exercise](https://www.philosophicalgeek.com/2006/02/20/a-debugging-exercise/) - A few weeks ago I had an interesting debugging problem. A program we develop had a memory leak in it that Visual Studio was catching when it ended. The trace text was something like this: Detected memory leaks! Dumping objects -> {292300} normal block at 0x05590040, 2771928 bytes long. Data: FF FF FF 00 FF - [Creating an Object-Oriented Framework from an existing API](https://www.philosophicalgeek.com/2006/03/02/creating-an-object-oriented-framework-from-an-existing-api/) - One of my personal goals this year is to go through Petzold's book on Programming Windows. During that 1500+ page journey I'm creating a framework class library for my personal use while developing Windows applications. This way I can simultaneously learn the intricacies of Win32 while at the same time developing a framework library that - [What's the word for...](https://www.philosophicalgeek.com/2006/03/14/whats-the-word-for/) - NPR ran a fun story the other day about coming up with words to express feelings or situations that we don't have a word for. My question is: what's the word for the fear of writing "Love, " (Like you would maybe automatically do to your spouse) at the end of an e-mail to your - [Flightplan](https://www.philosophicalgeek.com/2006/05/16/flightplan/) - We just watched Flightplan on DVD, and I have to say I thought it was a pretty good movie. It was interesting how it made you feel by taking place completely on an airplane (albeit a very large one). There were some weak moments, but all in all it kept me interested. - [Riverdance](https://www.philosophicalgeek.com/2006/06/25/riverdance/) - Leticia and I took in Riverdance over the weekend. I'd seen the video and listened to the music countless times, but seeing it live on stage is a completely different experience. If the tour ever comes to your area I highly recommend it. The foot work is simply out of this world and the music - [The First Thing in an XML file needs to be...](https://www.philosophicalgeek.com/2006/05/05/the-first-thing-in-an-xml-file-needs-to-be/) - I just discovered a fun tidbit of information. I was using NUnit to test a number of assemblies in a single project, and many functions need an app.config file. The instructions on how to do this can be found in various places, but I was having a problem that nobody else seemed to have. My - [Gift of the Magi](https://www.philosophicalgeek.com/2005/12/25/gift-of-the-magi/) - While I was shopping for a gift for my dad I must have mentioned to somebody something about how someday I wanted to build model ships. My dad caught wind of it, and on Christmas Eve I opened a nice set of knives and razors suitable for working with small wood parts. I was really - [2-D Arrays versus Structs](https://www.philosophicalgeek.com/2005/11/12/2-d-arrays-versus-structs/) - I had a situation the other day where I needed an array of two values and the thought occurred to me: which is better? A 2-D array or a 1-D array of structs. I decided to come up with a quick test to see. Here are my results: 2-D Arrays : 55.9376 cycles/row Structs : - [The Customer Service that Keeps on Serving](https://www.philosophicalgeek.com/2004/10/24/2/) - After moving to the DC area a few months ago, I signed up for Comcast high speed internet. The service has been wonderful, no complaints whatsoever. As part of their promotion, they were giving away free web cams. ## Pages - [Resume](https://www.philosophicalgeek.com/cv/) - Benjamin M. Watson ben [at] benwatson [dot] org Work Experience and History Principal Engineer at Microsoft Bing, 2008 - Present Recognized expert in .NET performance in Bing, Microsoft, and the industry.Large architectural design and modifications to complex distributed systems.Designed and coded critical query-serving components for Bing. Extremely high-availability, reliability and performance requirements. Utilized advanced .NET - [Software](https://www.philosophicalgeek.com/software/) - DiskSlicer - A very simple disk viewing application that shows where your hard drive space is going. Multiple views, including 3-D, and it lets you delete folders and files directly from the application. - [Music](https://www.philosophicalgeek.com/music/) - I play piano and I've composed a few things here and there. One piece that isn't too bad is an arrangement of a beautiful hymn: Each Life That Touches Ours For Good. Download piano solo arrangement of Each Life That Touches Ours For Good. You can use this music in any non-commercial setting. Also, I wouldn't - [Windows Media Top 10 Plugin](https://www.philosophicalgeek.com/software/windows-media-top-10-plugin/) - A set of plugins that tracks the most-played music in Windows Media Player. Haven't updated it for a while. Download - [DiskSlicer](https://www.philosophicalgeek.com/software/diskslicer/) - DiskSlicer is a drive space visualization tool. You may use it for free. Downloads: DiskSlicer zip file DiskSlicer installation - [C# 4.0 How-To](https://www.philosophicalgeek.com/c-4-0-how-to/) - Real Solutions for C# 4.0 Programmers Need fast, robust, efficient code solutions for Microsoft C# 4.0? This book delivers exactly what you’re looking for. You’ll find more than 200 solutions, best-practice techniques, and tested code samples for everything from classes to exceptions, networking to XML, LINQ to Silverlight. Completely up-to-date, this book fully reflects - [About Me](https://www.philosophicalgeek.com/about-me/) - My name is Ben Watson and I am a software developer. Here is my computing life story: I began programming BASIC when I was about 8 or 9 years old on my dad's 286 using GW-BASIC and MS-DOS 3.1. I soon moved up to QBASIC was doing things a little more complicated. I think I ## Categories - [Uncategorized](https://www.philosophicalgeek.com/category/uncategorized/) - [Humor](https://www.philosophicalgeek.com/category/humor/) - Funny things that have happened to me, stories I’ve heard….anything - [Code](https://www.philosophicalgeek.com/category/code/) - [Music, Film, Theater](https://www.philosophicalgeek.com/category/music-film-theater/) - [Books](https://www.philosophicalgeek.com/category/books/) - [Link/News](https://www.philosophicalgeek.com/category/links/) - [Interviewing](https://www.philosophicalgeek.com/category/interviewing/) - [Tips](https://www.philosophicalgeek.com/category/tips/) - [Software Development](https://www.philosophicalgeek.com/category/software-development/) - [Thoughts On Tech and More](https://www.philosophicalgeek.com/category/thoughts-on-technology/) - [Personal](https://www.philosophicalgeek.com/category/personal/) - [microsoft](https://www.philosophicalgeek.com/category/microsoft/) - [lego](https://www.philosophicalgeek.com/category/lego/) - [A Better Future](https://www.philosophicalgeek.com/category/a-better-future/) - [Live Search](https://www.philosophicalgeek.com/category/microsoft/live-search-microsoft/) - [Bing](https://www.philosophicalgeek.com/category/microsoft/bing/) - [Photos](https://www.philosophicalgeek.com/category/photos/) - [WPF](https://www.philosophicalgeek.com/category/code/wpf-code/) - [.NET](https://www.philosophicalgeek.com/category/code/net-code/) - [CodeProject](https://www.philosophicalgeek.com/category/codeproject/) - [Performance](https://www.philosophicalgeek.com/category/code/performance-code/) ## Tags - [programming](https://www.philosophicalgeek.com/tag/programming/) - [literature](https://www.philosophicalgeek.com/tag/literature/) - [writing](https://www.philosophicalgeek.com/tag/writing/) - [reading](https://www.philosophicalgeek.com/tag/reading/) - [communication](https://www.philosophicalgeek.com/tag/communication/) - [projects](https://www.philosophicalgeek.com/tag/projects/) - [apple](https://www.philosophicalgeek.com/tag/apple/) - [google](https://www.philosophicalgeek.com/tag/google/) - [teaching](https://www.philosophicalgeek.com/tag/teaching/) - [podcasts](https://www.philosophicalgeek.com/tag/podcasts/) - [.net](https://www.philosophicalgeek.com/tag/net/) - [languages](https://www.philosophicalgeek.com/tag/languages/) - [Java](https://www.philosophicalgeek.com/tag/java/) - [Patterns](https://www.philosophicalgeek.com/tag/patterns/) - [humility](https://www.philosophicalgeek.com/tag/humility/) - [hobbies](https://www.philosophicalgeek.com/tag/hobbies/) - [vista](https://www.philosophicalgeek.com/tag/vista/) - [service pack](https://www.philosophicalgeek.com/tag/service-pack/) - [windows](https://www.philosophicalgeek.com/tag/windows/) - [drivers](https://www.philosophicalgeek.com/tag/drivers/) - [bugs](https://www.philosophicalgeek.com/tag/bugs/) - [teams](https://www.philosophicalgeek.com/tag/teams/) - [self-improvement](https://www.philosophicalgeek.com/tag/self-improvement/) - [learning](https://www.philosophicalgeek.com/tag/learning/) - [performance](https://www.philosophicalgeek.com/tag/performance/) - [ListView](https://www.philosophicalgeek.com/tag/listview/) - [pictures](https://www.philosophicalgeek.com/tag/pictures/) - [asynchronous](https://www.philosophicalgeek.com/tag/asynchronous/) - [confidence](https://www.philosophicalgeek.com/tag/confidence/) - [process](https://www.philosophicalgeek.com/tag/process/) - [consistency](https://www.philosophicalgeek.com/tag/consistency/) - [unit testing](https://www.philosophicalgeek.com/tag/unit-testing/) - [code coverage](https://www.philosophicalgeek.com/tag/code-coverage/) - [automation](https://www.philosophicalgeek.com/tag/automation/) - [refactoring](https://www.philosophicalgeek.com/tag/refactoring/) - [deployment](https://www.philosophicalgeek.com/tag/deployment/) - [testing](https://www.philosophicalgeek.com/tag/testing/) - [XP](https://www.philosophicalgeek.com/tag/xp/) - [spam](https://www.philosophicalgeek.com/tag/spam/) - [amazon](https://www.philosophicalgeek.com/tag/amazon/) - [kindle](https://www.philosophicalgeek.com/tag/kindle/) - [audible](https://www.philosophicalgeek.com/tag/audible/) - [ipod](https://www.philosophicalgeek.com/tag/ipod/) - [netflix](https://www.philosophicalgeek.com/tag/netflix/) - [usability](https://www.philosophicalgeek.com/tag/usability/) - [tools](https://www.philosophicalgeek.com/tag/tools/) - [art](https://www.philosophicalgeek.com/tag/art/) - [music](https://www.philosophicalgeek.com/tag/music/) - [math](https://www.philosophicalgeek.com/tag/math/) - [exchange](https://www.philosophicalgeek.com/tag/exchange/) - [COM](https://www.philosophicalgeek.com/tag/com/) - [exceptions](https://www.philosophicalgeek.com/tag/exceptions/) - [email](https://www.philosophicalgeek.com/tag/email/) - [clipboard](https://www.philosophicalgeek.com/tag/clipboard/) - [gadgets](https://www.philosophicalgeek.com/tag/gadgets/) - [dilbert](https://www.philosophicalgeek.com/tag/dilbert/) - [sales](https://www.philosophicalgeek.com/tag/sales/) - [passion](https://www.philosophicalgeek.com/tag/passion/) - [adaptability](https://www.philosophicalgeek.com/tag/adaptability/) - [talent](https://www.philosophicalgeek.com/tag/talent/) - [organization](https://www.philosophicalgeek.com/tag/organization/) - [star trek](https://www.philosophicalgeek.com/tag/star-trek/) - [creativity](https://www.philosophicalgeek.com/tag/creativity/) - [customer service](https://www.philosophicalgeek.com/tag/customer-service/) - [software](https://www.philosophicalgeek.com/tag/software/) - [blogging](https://www.philosophicalgeek.com/tag/blogging/) - [RIAA](https://www.philosophicalgeek.com/tag/riaa/) - [cars](https://www.philosophicalgeek.com/tag/cars/) - [space](https://www.philosophicalgeek.com/tag/space/) - [energy](https://www.philosophicalgeek.com/tag/energy/) - [philosophy](https://www.philosophicalgeek.com/tag/philosophy/) - [infinity](https://www.philosophicalgeek.com/tag/infinity/) - [power](https://www.philosophicalgeek.com/tag/power/) - [science fiction](https://www.philosophicalgeek.com/tag/science-fiction/) - [efficiency](https://www.philosophicalgeek.com/tag/efficiency/) - [future](https://www.philosophicalgeek.com/tag/future/) - [storage](https://www.philosophicalgeek.com/tag/storage/) - [internet](https://www.philosophicalgeek.com/tag/internet/) - [games](https://www.philosophicalgeek.com/tag/games/) - [outlook](https://www.philosophicalgeek.com/tag/outlook/) - [svn](https://www.philosophicalgeek.com/tag/svn/) - [san francisco](https://www.philosophicalgeek.com/tag/san-francisco/) - [food](https://www.philosophicalgeek.com/tag/food/) - [interviews](https://www.philosophicalgeek.com/tag/interviews/) - [resumes](https://www.philosophicalgeek.com/tag/resumes/) - [jobs](https://www.philosophicalgeek.com/tag/jobs/) - [widgets](https://www.philosophicalgeek.com/tag/widgets/) - [processors](https://www.philosophicalgeek.com/tag/processors/) - [cpu](https://www.philosophicalgeek.com/tag/cpu/) - [memory](https://www.philosophicalgeek.com/tag/memory/) - [politics](https://www.philosophicalgeek.com/tag/politics/) - [resume](https://www.philosophicalgeek.com/tag/resume/) - [indexing](https://www.philosophicalgeek.com/tag/indexing/) - [searching](https://www.philosophicalgeek.com/tag/searching/) - [tutorial](https://www.philosophicalgeek.com/tag/tutorial/) - [mouse](https://www.philosophicalgeek.com/tag/mouse/) - [visual studio](https://www.philosophicalgeek.com/tag/visual-studio/) - [digg](https://www.philosophicalgeek.com/tag/digg/) - [hollywood](https://www.philosophicalgeek.com/tag/hollywood/) - [simpsons](https://www.philosophicalgeek.com/tag/simpsons/) - [office](https://www.philosophicalgeek.com/tag/office/) - [tv](https://www.philosophicalgeek.com/tag/tv/) - [strike](https://www.philosophicalgeek.com/tag/strike/) - [money](https://www.philosophicalgeek.com/tag/money/) - [telemarketer](https://www.philosophicalgeek.com/tag/telemarketer/) - [phone](https://www.philosophicalgeek.com/tag/phone/) - [water](https://www.philosophicalgeek.com/tag/water/) - [mice](https://www.philosophicalgeek.com/tag/mice/) - [war](https://www.philosophicalgeek.com/tag/war/) - [fear](https://www.philosophicalgeek.com/tag/fear/) - [security](https://www.philosophicalgeek.com/tag/security/) - [neo](https://www.philosophicalgeek.com/tag/neo/) - [matrix](https://www.philosophicalgeek.com/tag/matrix/) - [movies](https://www.philosophicalgeek.com/tag/movies/) - [mmorpgs](https://www.philosophicalgeek.com/tag/mmorpgs/) - [social networks](https://www.philosophicalgeek.com/tag/social-networks/) - [wordpress](https://www.philosophicalgeek.com/tag/wordpress/) - [media player](https://www.philosophicalgeek.com/tag/media-player/) - [bloat](https://www.philosophicalgeek.com/tag/bloat/) - [trie](https://www.philosophicalgeek.com/tag/trie/) - [west virginia](https://www.philosophicalgeek.com/tag/west-virginia/) - [vacation](https://www.philosophicalgeek.com/tag/vacation/) - [children](https://www.philosophicalgeek.com/tag/children/) - [ssearching](https://www.philosophicalgeek.com/tag/ssearching/) - [mfc](https://www.philosophicalgeek.com/tag/mfc/) - [borg](https://www.philosophicalgeek.com/tag/borg/) - [taiwan](https://www.philosophicalgeek.com/tag/taiwan/) - [sharepoint](https://www.philosophicalgeek.com/tag/sharepoint/) - [gtd](https://www.philosophicalgeek.com/tag/gtd/) - [washington](https://www.philosophicalgeek.com/tag/washington/) - [video](https://www.philosophicalgeek.com/tag/video/) - [photography](https://www.philosophicalgeek.com/tag/photography/) - [lupus](https://www.philosophicalgeek.com/tag/lupus/) - [quiz](https://www.philosophicalgeek.com/tag/quiz/) - [compiler](https://www.philosophicalgeek.com/tag/compiler/) - [baltimore](https://www.philosophicalgeek.com/tag/baltimore/) - [spices](https://www.philosophicalgeek.com/tag/spices/) - [electricity](https://www.philosophicalgeek.com/tag/electricity/) - [logic](https://www.philosophicalgeek.com/tag/logic/) - [wife](https://www.philosophicalgeek.com/tag/wife/) - [women](https://www.philosophicalgeek.com/tag/women/) - [boolean](https://www.philosophicalgeek.com/tag/boolean/) - [WPF](https://www.philosophicalgeek.com/tag/wpf/) - [visualization](https://www.philosophicalgeek.com/tag/visualization/) - [algorithms](https://www.philosophicalgeek.com/tag/algorithms/) - [hardware](https://www.philosophicalgeek.com/tag/hardware/) - [fantasy](https://www.philosophicalgeek.com/tag/fantasy/) - [wired](https://www.philosophicalgeek.com/tag/wired/) - [imagination](https://www.philosophicalgeek.com/tag/imagination/) - [simplification](https://www.philosophicalgeek.com/tag/simplification/) - [exercise](https://www.philosophicalgeek.com/tag/exercise/) - [risk](https://www.philosophicalgeek.com/tag/risk/) - [linux](https://www.philosophicalgeek.com/tag/linux/) - [cancer](https://www.philosophicalgeek.com/tag/cancer/) - [media](https://www.philosophicalgeek.com/tag/media/) - [delegates](https://www.philosophicalgeek.com/tag/delegates/) - [events](https://www.philosophicalgeek.com/tag/events/) - [government](https://www.philosophicalgeek.com/tag/government/) - [entertainment](https://www.philosophicalgeek.com/tag/entertainment/) - [serialization](https://www.philosophicalgeek.com/tag/serialization/) - [browsers](https://www.philosophicalgeek.com/tag/browsers/) - [history](https://www.philosophicalgeek.com/tag/history/) - [privacy](https://www.philosophicalgeek.com/tag/privacy/) - [architecture](https://www.philosophicalgeek.com/tag/architecture/) - [domains](https://www.philosophicalgeek.com/tag/domains/) - [Y2K](https://www.philosophicalgeek.com/tag/y2k/) - [gravity](https://www.philosophicalgeek.com/tag/gravity/) - [physics](https://www.philosophicalgeek.com/tag/physics/) - [cleartype](https://www.philosophicalgeek.com/tag/cleartype/) - [fonts](https://www.philosophicalgeek.com/tag/fonts/) - [scoble](https://www.philosophicalgeek.com/tag/scoble/) - [ntfs](https://www.philosophicalgeek.com/tag/ntfs/) - [growth](https://www.philosophicalgeek.com/tag/growth/) - [live](https://www.philosophicalgeek.com/tag/live/) - [enum](https://www.philosophicalgeek.com/tag/enum/) - [rss](https://www.philosophicalgeek.com/tag/rss/) - [design patterns](https://www.philosophicalgeek.com/tag/design-patterns/) - [factory](https://www.philosophicalgeek.com/tag/factory/) - [database](https://www.philosophicalgeek.com/tag/database/) - [taxes](https://www.philosophicalgeek.com/tag/taxes/) - [responsibility](https://www.philosophicalgeek.com/tag/responsibility/) - [bose](https://www.philosophicalgeek.com/tag/bose/) - [theater](https://www.philosophicalgeek.com/tag/theater/) - [dogs](https://www.philosophicalgeek.com/tag/dogs/) - [family](https://www.philosophicalgeek.com/tag/family/) - [XML](https://www.philosophicalgeek.com/tag/xml/) - [threads](https://www.philosophicalgeek.com/tag/threads/) - [attributes](https://www.philosophicalgeek.com/tag/attributes/) - [health](https://www.philosophicalgeek.com/tag/health/) - [productivity](https://www.philosophicalgeek.com/tag/productivity/) - [debugging](https://www.philosophicalgeek.com/tag/debugging/) - [unfit](https://www.philosophicalgeek.com/tag/unfit/) - [comics](https://www.philosophicalgeek.com/tag/comics/) - [credibility](https://www.philosophicalgeek.com/tag/credibility/) - [religion](https://www.philosophicalgeek.com/tag/religion/) - [certification](https://www.philosophicalgeek.com/tag/certification/) - [beauty](https://www.philosophicalgeek.com/tag/beauty/) - [random](https://www.philosophicalgeek.com/tag/random/) - [structs](https://www.philosophicalgeek.com/tag/structs/) - [assembler](https://www.philosophicalgeek.com/tag/assembler/) - [complexity](https://www.philosophicalgeek.com/tag/complexity/) - [star wars](https://www.philosophicalgeek.com/tag/star-wars/) - [menus](https://www.philosophicalgeek.com/tag/menus/) - [synchronization](https://www.philosophicalgeek.com/tag/synchronization/) - [Links/News](https://www.philosophicalgeek.com/tag/linksnews/) - [society](https://www.philosophicalgeek.com/tag/society/) - [inspiration](https://www.philosophicalgeek.com/tag/inspiration/) - [science](https://www.philosophicalgeek.com/tag/science/) - [goals](https://www.philosophicalgeek.com/tag/goals/) - [twitter](https://www.philosophicalgeek.com/tag/twitter/) - [BASIC](https://www.philosophicalgeek.com/tag/basic/) - [GIS](https://www.philosophicalgeek.com/tag/gis/) - [virtualization](https://www.philosophicalgeek.com/tag/virtualization/) - [nuclear](https://www.philosophicalgeek.com/tag/nuclear/) - [robots](https://www.philosophicalgeek.com/tag/robots/) - [ethics](https://www.philosophicalgeek.com/tag/ethics/) - [community](https://www.philosophicalgeek.com/tag/community/) - [virginia](https://www.philosophicalgeek.com/tag/virginia/) - [service](https://www.philosophicalgeek.com/tag/service/) - [census](https://www.philosophicalgeek.com/tag/census/) - [management](https://www.philosophicalgeek.com/tag/management/) - [internet explorer](https://www.philosophicalgeek.com/tag/internet-explorer/) - [printing](https://www.philosophicalgeek.com/tag/printing/) - [uranium](https://www.philosophicalgeek.com/tag/uranium/) - [xkcd](https://www.philosophicalgeek.com/tag/xkcd/) - [strange loop](https://www.philosophicalgeek.com/tag/strange-loop/) - [intelligence](https://www.philosophicalgeek.com/tag/intelligence/) - [haircut](https://www.philosophicalgeek.com/tag/haircut/) - [advertising](https://www.philosophicalgeek.com/tag/advertising/) - [color](https://www.philosophicalgeek.com/tag/color/) - [chrome](https://www.philosophicalgeek.com/tag/chrome/) - [geoeye](https://www.philosophicalgeek.com/tag/geoeye/) - [airplanes](https://www.philosophicalgeek.com/tag/airplanes/) - [education](https://www.philosophicalgeek.com/tag/education/) - [computer science](https://www.philosophicalgeek.com/tag/computer-science/) - [webmaster](https://www.philosophicalgeek.com/tag/webmaster/) - [live search](https://www.philosophicalgeek.com/tag/live-search/) - [brickfair](https://www.philosophicalgeek.com/tag/brickfair/) - [interview](https://www.philosophicalgeek.com/tag/interview/) - [C#](https://www.philosophicalgeek.com/tag/c/) - [malware](https://www.philosophicalgeek.com/tag/malware/) - [reviews](https://www.philosophicalgeek.com/tag/reviews/) - [computer](https://www.philosophicalgeek.com/tag/computer/) - [AI](https://www.philosophicalgeek.com/tag/ai/) - [Mercer Island](https://www.philosophicalgeek.com/tag/mercer-island/) - [seattle](https://www.philosophicalgeek.com/tag/seattle/) - [brickcon](https://www.philosophicalgeek.com/tag/brickcon/) - [XAML](https://www.philosophicalgeek.com/tag/xaml/) - [NumericUpDownControl](https://www.philosophicalgeek.com/tag/numericupdowncontrol/) - [control](https://www.philosophicalgeek.com/tag/control/) - [calculator](https://www.philosophicalgeek.com/tag/calculator/) - [HasFlag](https://www.philosophicalgeek.com/tag/hasflag/) - [IsDefined](https://www.philosophicalgeek.com/tag/isdefined/) - [servers](https://www.philosophicalgeek.com/tag/servers/) - [Activator.CreateInstance](https://www.philosophicalgeek.com/tag/activator-createinstance/) - [dynamic](https://www.philosophicalgeek.com/tag/dynamic/) - [TPL](https://www.philosophicalgeek.com/tag/tpl/) - [Task Parallel Library](https://www.philosophicalgeek.com/tag/task-parallel-library/) - [simplicity](https://www.philosophicalgeek.com/tag/simplicity/) - [API](https://www.philosophicalgeek.com/tag/api/) - [maintenance](https://www.philosophicalgeek.com/tag/maintenance/) - [concurrency](https://www.philosophicalgeek.com/tag/concurrency/) - [interlocked](https://www.philosophicalgeek.com/tag/interlocked/) - [histogram](https://www.philosophicalgeek.com/tag/histogram/) - [optimization](https://www.philosophicalgeek.com/tag/optimization/) - [cache](https://www.philosophicalgeek.com/tag/cache/) - [exception](https://www.philosophicalgeek.com/tag/exception/) - [stacks](https://www.philosophicalgeek.com/tag/stacks/) - [collections](https://www.philosophicalgeek.com/tag/collections/) - [array](https://www.philosophicalgeek.com/tag/array/) - [list](https://www.philosophicalgeek.com/tag/list/) - [dictionary](https://www.philosophicalgeek.com/tag/dictionary/) - [lazy](https://www.philosophicalgeek.com/tag/lazy/) - [double-checked locking](https://www.philosophicalgeek.com/tag/double-checked-locking/) - [garbage collection](https://www.philosophicalgeek.com/tag/garbage-collection/) - [heap](https://www.philosophicalgeek.com/tag/heap/) - [pooling](https://www.philosophicalgeek.com/tag/pooling/) - [server](https://www.philosophicalgeek.com/tag/server/) - [perfview](https://www.philosophicalgeek.com/tag/perfview/) - [gc](https://www.philosophicalgeek.com/tag/gc/) - [dlink](https://www.philosophicalgeek.com/tag/dlink/) - [media center](https://www.philosophicalgeek.com/tag/media-center/) - [network](https://www.philosophicalgeek.com/tag/network/) - [wireless](https://www.philosophicalgeek.com/tag/wireless/) - [delegate](https://www.philosophicalgeek.com/tag/delegate/) - [assembly](https://www.philosophicalgeek.com/tag/assembly/) - [inlining](https://www.philosophicalgeek.com/tag/inlining/) - [Windbg](https://www.philosophicalgeek.com/tag/windbg/) - [CLR](https://www.philosophicalgeek.com/tag/clr/) - [WeakReference](https://www.philosophicalgeek.com/tag/weakreference/) - [weak reference](https://www.philosophicalgeek.com/tag/weak-reference/) - [finalizer](https://www.philosophicalgeek.com/tag/finalizer/) - [finalization](https://www.philosophicalgeek.com/tag/finalization/) - [resurrection](https://www.philosophicalgeek.com/tag/resurrection/) - [software engineering](https://www.philosophicalgeek.com/tag/software-engineering/) - [ownership](https://www.philosophicalgeek.com/tag/ownership/) - [effectiveness](https://www.philosophicalgeek.com/tag/effectiveness/) - [iTunes](https://www.philosophicalgeek.com/tag/itunes/) - [refresh](https://www.philosophicalgeek.com/tag/refresh/) - [sync](https://www.philosophicalgeek.com/tag/sync/) - [11.4](https://www.philosophicalgeek.com/tag/11-4/) - [allocation](https://www.philosophicalgeek.com/tag/allocation/) - [debugger](https://www.philosophicalgeek.com/tag/debugger/) - [podcast](https://www.philosophicalgeek.com/tag/podcast/) - [book](https://www.philosophicalgeek.com/tag/book/) - [photo](https://www.philosophicalgeek.com/tag/photo/) - [search engine](https://www.philosophicalgeek.com/tag/search-engine/) - [quality](https://www.philosophicalgeek.com/tag/quality/) - [relevance](https://www.philosophicalgeek.com/tag/relevance/) - [cortana](https://www.philosophicalgeek.com/tag/cortana/) - [MemoryStream](https://www.philosophicalgeek.com/tag/memorystream/) - [ArraySegment](https://www.philosophicalgeek.com/tag/arraysegment/) - [deserialization](https://www.philosophicalgeek.com/tag/deserialization/) - [editing](https://www.philosophicalgeek.com/tag/editing/) - [publishing](https://www.philosophicalgeek.com/tag/publishing/) - [review](https://www.philosophicalgeek.com/tag/review/) - [loop](https://www.philosophicalgeek.com/tag/loop/) - [foreach](https://www.philosophicalgeek.com/tag/foreach/) - [il](https://www.philosophicalgeek.com/tag/il/) - [bounds check](https://www.philosophicalgeek.com/tag/bounds-check/) - [coupon](https://www.philosophicalgeek.com/tag/coupon/) - [epub.pdf](https://www.philosophicalgeek.com/tag/epub-pdf/) - [blog](https://www.philosophicalgeek.com/tag/blog/) - [RecyclableMemoryStream](https://www.philosophicalgeek.com/tag/recyclablememorystream/) - [fragmentation](https://www.philosophicalgeek.com/tag/fragmentation/) - [bug](https://www.philosophicalgeek.com/tag/bug/) - [lock](https://www.philosophicalgeek.com/tag/lock/) - [monitor](https://www.philosophicalgeek.com/tag/monitor/) - [Humor](https://www.philosophicalgeek.com/tag/humor/) - [Code](https://www.philosophicalgeek.com/tag/code/) - [Books](https://www.philosophicalgeek.com/tag/books/) - [Interviewing](https://www.philosophicalgeek.com/tag/interviewing/) - [Tips](https://www.philosophicalgeek.com/tag/tips/) - [Personal](https://www.philosophicalgeek.com/tag/personal/) - [microsoft](https://www.philosophicalgeek.com/tag/microsoft/) - [lego](https://www.philosophicalgeek.com/tag/lego/) - [Bing](https://www.philosophicalgeek.com/tag/bing/) - [CodeProject](https://www.philosophicalgeek.com/tag/codeproject/) - [dotnet](https://www.philosophicalgeek.com/tag/dotnet/) - [self-publishing](https://www.philosophicalgeek.com/tag/self-publishing/)