“Can you share your serial key with us so that we can check the properties of the key and do the needful to you.”
by Skelta Support http://www.skelta.com/

Visual Studio 2010: Obsidian Theme

Obsidian for Notepad++ is a great theme, no doubt. I normally use a custom theme based on this site’s colors, but for once I’m actually drawn away and into the world of Obsidian.

Here’s Obsidian at work in Notepad++ (well, with my typical font adjustment obviously):

I accidentally stumbled across a Visual Studio 2008 theme based on Obsidian and was immediately hooked. I downloaded and applied right away. I noticed, however, that really anything outside a standard code window looked awful and mostly unusable. So I rectified the situation – I adapted the Obsidian VS2008 port into a VS2010 theme!

This one is complete with syntax colorization through the web layers as well as the code. Here’s a quick shot:

Download the Obsidian theme for Visual Studio 2010

Goosh!

Wow… Just… wow! Check out the face of a killer command prompt looks like on the web.

Google is so much nicer in CLI mode!

http://www.goosh.org

Bonus: For an added treat, here are the commands for you to make your Goosh command prompt look awesome – Obsidian style!


set style.bg #293134
set style.fg #E0E2E4
set style.hl #EC7600
set style.sh #E8E2B7
set style.link #93C763
set style.vlink #678CB1

“To hell with them…”

It’s a troubling ordeal we’re all in here with the Oracle/Google problem. If you’ve not yet heard, Google is being sued by Oracle over their use of Java with regard to their Android Java VM. Here is a well written article on the situation. Reading this is quite disturbing, but is something that I think people should know about who are at all involved with Google, Android, or Java development. ChrisDev55, a commenter over at ZDNet put it better than I ever could have:

Larry Ellison and his legal lapdogs have breathed a chill down the backs of the entire Java development community. What a shameful business practice: plain and pure extortion via licensing fees! Oracle (and Sun in particular) did not lead advancements, the platform or novel implementations in Java over the past few years. Others did, Google being one of the most recognizable. For all of those innovative, up-start Java development houses out there… watch your back! If your product/service is successful in the marketplace, you could get a letter from Redwood Shores, CA asking for a cut. As a key decision maker within my organization, I plan on skewing all future Oracle technology feasibility assessments and licensing renewals in favor of OSS. Oracle’s move has completely eroded any residual customer loyalty I had. To hell with them…

Low-carb Geek…

Okay, so for those that do not see me regularly, you may not know that I’ve changed my life a little bit. I’ve decided it’s finally time to lose some weight.

I know, I know… I’m sure those of you that know me are saying “Yeah… tried to tell you that!”, but I also know that in order to make life-altering changes you have to want to do it.

So I’ve started with my diet. Life would be so much easier if I said that I was “dieting”, but that’s not the case, as “dieting” is almost always a slingshot effect, and I don’t want this stuff coming back.

I’ve also found that many of my experiences along this path are things that, going into it, I never knew. It’s very much a learning experience, but I find every day that there are ways to make it closer and closer to what my previous diet was. I think this is the reason that it’s easy to look at this as a life change more than a diet – it can be sustained.

So I saw, through many a bewildered eye at the things that I could eat, that there was a need to explain my findings for others to possibly benefit from. I started lowcarbgeek.com to hopefully help out with that a bit.

If you’re looking to lose some weight and don’t already have a plan, give it some consideration. After all, I’ve lost 52 pounds so far, and I’m not even remotely miserable. ;Þ

IDisposable Cheat Sheet

I was having a conversation with my boss a while back and he asked if we could discuss the using block a bit and any resonant patterns to its usage.

We discussed what it was, why, and how there should be some list out there indicating what is to be scoped with using() that may typically be forgotten.

Obviously, I can't dig into your proprietary code to show you your own IDisposables, and I'm not willing to list out every CLR IDisposable derived type. What I can do, however, is list what commonly used classes are IDisposable and why.

The What

I'm assuming by the fact that you're here, you know what IDisposable and the using block are. If not, here's a very brief overview.

IDisposable

IDisposable is the ever-impressive interface that informs your code that the type that it is applied to has explicit instruction on what is to happen in the case of its untimely demise.

Now, as .NET developers, most of us know this. In many cases, however, we haven't a clue as to what it really means, or why it matters. The reason for this is that, in the vast majority of cases, we are writing strictly managed code — managed code behaves differently than unmanaged code.

The using() Block

Wrapping up code that uses an IDisposable object is as elegant as can be. Simply do the following.

using (var mine = new MyClass())
{
	mine.DoSomethingUnmanaged();
}

After this block executes, the declared variable will invoke its Dispose() method, thereby running any needed finalization/disposal logic.

The Why

In managed code, the Garbage Collector is mostly self-sufficient and can usually handle getting rid of your pesky leftovers.

In unmanaged code, however, the GC is actually quite lost. It needs explicit knowledge of things that are beyond it's reflective capabilities… not beyond yours, though.

By indicating that a type is disposable, you gain the responsibility of adding a Dispose() method to your type that tells the CLR how to get rid of your unmanaged resources.

There are also classes that need to be disposed of in order to clean themselves up and out of a hierarchy. These types will essentially make whatever updates and notifications needed to other objects that may be using them, indicating that they are being disposed of, and won't be around for dessert.

The Classes

The following is by no means an exhaustive listing of the classes that implement IDisposable (nor a copy and paste of the Object Browser). This is hopefully a catalog of the most common disposable objects whose scope need to be explicitly defined.

Class Reason
Microsoft.ServiceModel.Channels.Mail.MailTransport Communication
System.Data.Common.DbCommand Communication
System.Data.Common.DbConnection Communication
System.Data.Common.DbDataReader Communication
System.Data.Common.DbTransaction Communication
System.Data.Linq.SqlClient.SqlProvider Communication
System.Data.OleDb.OleDbCommand Communication
System.Data.OleDb.OleDbConnection Communication
System.Data.SqlClient.SqlDataReader Communication
System.Diagnostics.Eventing.Reader.EventRecord Hardware (Memory)
System.Drawing.Brush Hardware (GDI)
System.Drawing.Font Hardware (GDI)
System.Drawing.Graphics Hardware (GDI)
System.Drawing.Image Hardware (GDI)
System.IO.BinaryReader File System
System.IO.BinaryWriter File System
System.IO.Stream File System
System.IO.StreamReader File System
System.IO.StreamWriter File System
System.IO.TextReader File System
System.IO.TextWriter File System
System.Net.FtpWebResponse Communication
System.Net.Mail.MailMessage Communication
System.Net.Sockets.TcpClient Communication
System.Net.Sockets.UdpClient Communication
System.Net.WebResponse Communication
System.Security.Cryptography.HashAlgorithm Hardware (Memory)
System.ServiceModel.ChannelFactory Communication
System.ServiceModel.Channels.Message Communication
System.ServiceModel.ClientBase Communication
System.Threading.Timer Hardware (CPU)
System.Web.UI.Control Notification
System.Windows.Forms.Control Hardware (GDI)
System.Xml.XmlReader File System
System.Xml.XmlWriter File System

Custom Classes

It is also very important to note that the use of these classes inside your own as members warrants implementing IDisposable on your own classes as well.

Having one or more disposable objects inside your class is, essentially, making your own class dependant on the resources (sockets, threads, the file system, etc...) that those objects need help cleaning up.

What else?

I will continue adding additional classes as they either become more common in my own use, or are requested. Not all developers write the same type of code, so this list obviously won't cover everything important by my hand alone. Please feel free to leave comments for others that I've left out and you think should be included.

PicPick

PicPick (http://picpick.wiziple.net/)

As a developer and designer, a color picker is an integral part of my development utility arsenal. Many other features are boasted in this little utility, but a well-featured, reliable, easy to use, small footprint, and lightning fast color picker is the flagship.

Not only can you pick your color from the screen easily by assigning a hotkey or using the system tray icon, PicPick will store your previous colors (in session) so you don’t have to go back and find it again.

Output options cover the basics pretty well, but could make use of some .NET (“Color.FromArgb()”) or “named” (“Firebrick”) color options if we’re opening up to the coding. Currently, PicPick supports HTML, RGB(), C++, and Delphi output.

The other tools are nice as well. They mostly all create function screen overlays that would assist designers and developers with measurements.

There is a very nicely thought out pixel ruler that you actually place on the objects you’re measuring, as opposed to most “rulers” that you have to click twice and hope you landed where you meant to.

There’s also a magnifying glass that’s movable, sizable, and supports up to 10x zooming. Some of the other tools have a built-in magnifier, so I’ve not used this a lot.

If you need positional details, there’s a cross-hair that simply tells you your X and Y on the screen. I haven’t really found any other features (or many uses) for this, but since it doesn’t hurt the application to have it, I’m not complaining.

PicPick even has a protractor. Yep, now you have what you need to get your angles right (yes, all pun was intended).

If you send a lot of screenshots to people in lieu of explaining yourself in words, you’ll get a kick out of the whiteboard feature. Mark your screen all up, click save, and send it off.

Speaking of screenshots, PicPick is also a full-featured screen capture application. It has all of the function that you would expect in a desktop snapshot program:  full screen, active window, window control, region, fixed region, and even a freehand option. A setting or two later and you can have all of your screenshots be uploaded via FTP to a web server, or automatically saved into a common screenshot folder.

While I haven’t had much use for it due to Gimp and Paint.NET, PicPick has an image editor built in for manipulating the screens you capture. I know that it covers some basic effects like pixelating, framing, and HSB adjustment. It also will let you freehand draw with a color palette and simple brushes, shapes, and a fill bucket. It’s not really what I’d consider a rich graphical editor, but that’s not why we have it.

It loads fast, sits quietly in the system try until needed, and has never crashed on me. So as far as being one of those utilities that’s more of a burden than it’s worth, PicPick is certainly not the tool you’ll need to turn right around and delete in a month.

While unfortunately not being packaged as a portable application, PicPick is capable of being used entirely from a storage device.

I would only like to see one major feature be added to this application: saved color sets. As a developer/designer, I find that after I build my list of colors for a site or application, I need to get back to those colors often. I would think that it would be fairly easy to implement something like this, and look forward to future versions to see that come to pass.

Miranda IM

Miranda IM (http://www.miranda-im.org/)

Most of us have multiple chat protocols that we have to support to accommodate our friends, family, and co-workers. And of course, there are applications out there that will let you connect to multiple network protocols at once.

I’ve not seen any others operate as conveniently or flexible as Miranda, though.

Probably the most impressive capability of Miranda IM is how much is available for it to do. In addition to the standard messaging protocols (and a few obscure; X-Fire, LAN, Facebook, etc…), it has a plug-in system that opens the messaging client up to functions beyond messaging.

For instance, have you ever thought about getting “messaged” by your subscribed RSS feeds, micro-blogging from an IM, or glancing at the weather metrics for multiple locations nested in your contact list?

There are plug-ins that will encrypt, spell-check, auto-correct, or even render mathematical formulas from your messages. The message viewing window itself can be customized in many ways (from what I’ve read), but I’ve had little luck with it myself. I don’t really care about how the messages look though, I just need them to come and go reliably.

I’m guessing this has become more commonplace over the years, but it still cracks me up… this thing even has mini-games, people. Battleship, anyone? I have yet to try any out, but I will most likely get into the fun stuff after I get bored of the more practical elements.

By default, Miranda seems aesthetically unappealing to me, but a quick download of a new plug-in and I’m more than content with the contact list. I’ve seen many pages of custom contact list skins posted on deviantArt, but I’ve not really the need, as the default skin of the Modern Contact List matches my home and work pretty well.

As I mentioned above, the message window is supposedly improved greatly by the IEView plug-in. I just haven’t been able to get it going on my setup. Picking up some tabs for the message window is a must, however.

Configuration is a bit tricky, but if you keep with it, you can have it exactly how you want it in no time. You’ll probably need to look through the forums and FAQs a bit to get your initial questions answered, but Google will turn up some great articles on customization if the official site doesn’t have an answer for you.

I also fancy Miranda for being a portable application. Trust me, you don’t want to have to manage multiple instances of this application with as customizable as it is.

I liked Pigdin just fine, but if you’ve ever tried to use it on a corporate VPN with MSN, you know what I’m getting at. Errors all l over the place. Yeah, Miranda doesn’t have that little problem.

All-in-all, Miranda IM is probably the best messaging client I’ve ever used (and I’ve used more than enough).

Here are the links to the plug-ins I referred to (in order)…

Tools import underway…

As of now, I’ve re-created three of the tools that were being used on the recently deceased version of lancemay.com.

There are a couple I still need to pull in, and more still that I have yet to write, but that process is currently underway.

If you have any (primarily development) tool ideas that you’d like me to write up, please let me know and I’ll see what I can do for you.

StackOverflow.com advertisers, beware…

I’ve gotten a fair bit of irritation from corporate internet blocking (Websense and the like), so this was almost overlooked entirely.

Just about every developer in my division’s department has been scanning Google trying to fix issues and stumbled across half of the results being on SO (http://www.stackoverflow.com).

Much to our dismay, however, when their pages load they’re completely blank. Upon further investigation we noticed that we’re actually getting 403′d! A simple email to SO (team@stackoverflow.com) went out from a co-worker…

Hi,

Pretty much everyone on my dev team has noted that any attempt to access StackOverflow.com winds up with just a blank page for a few months now. Firebug indicates I’m getting a 403 error. Google pointed me to this post (which in itself is rather meta):

http://74.125.113.132/search?q=cache:2YXVwUIBnTgJ:meta.stackoverflow.com/questions/8596/403-forbidden-returned-for-any-so-related-page+%22403+Forbidden+returned+for+any+SO+related+page%22&cd=2&hl=en&ct=clnk&gl=us&client=firefox-a

Our public IP appears to be ??.???.??.?? as reported by whatismyip.com.

So, I’m curious… have we been somehow banned?

Thanks.

Amazingly enough, from a company as seemingly awesome as SO, the response comes back (in its entirety)…

<add ipAddress="??.???.??.??" allowed="false" />    <!– 6k hits multiple hours –>

Wow. Thanks for the professionalism, respect, and general acknowledgement that our company’s IT professionals are important enough to speak to.

I, myself, sent the following email as a response to this news (and have yet to be graced with a response)…

SO,

I received a rather vexing email from a co-worker of mine about why our (very large) company cannot access SO. Apparently we have been banned. The response to a standard email explaining our situation and asking if we were banned resulted in a cold response of:

"<add ipAddress="??.???.??.??" allowed="false" />    <!– 6k hits multiple hours –>"

That was all. No explanation of what that was supposed to mean (other than the obviousness that we had been banned), how or why it happened, or what (if anything) we could do to resolve the issue. Again, this is a very old, very large company with many developers whom I’m sure your advertisers would love to market to, and would quite probably be assisting your users with industry knowledge as well.

I would like to ask that a response be given addressing the questions that, from any other company, would have been offered freely as a professional courtesy. Thanks much in advance.

All-in-all, I guess what I want here is for SO to know that the people they are blocking are very knowledgeable and contributing in most cases. Instead of taking a professional approach to this, you’ve alienated hundreds of IT personnel.

Most importantly, however, I would like for the advertisers of SO to read this and know that instead of being marketed to developers with corporate budgets, they are getting spun to primarily the average hobbyist who doesn’t have a Fortune 500 company’s budget to work with.

*** UPDATE ***

A response came from SO, finally. Not to me, but to another developer in our department. Here it is…

I manually removed the ban.

Be aware that 6k hits per hour is highly anomalous, and the daily scripts will flag and auto-ban IPs with that kind of traffic pattern.

So I guess we’re back in with SO. That being the case, I have nothing more to speak about on the topic.

All is well that ends okay, so I’ll end thi— meh… you probably know what comes next anyway.

Task Coach

Task Coach (http://www.taskcoach.org/)

A co-worker told me the other day that I should start writing up a post or review of a piece of software every day. I don’t know about every day. I mean I can try, but that may just not be practical. Now, mind you, I do use a lot of software – more than most by a long shot.

I am a utilitarian. This means one thing for me, particularly; there is a tool for every job. Being a software developer, a graphic designer and developer, creative and technical writer, and a self-proclaimed gamer, I have a lot of reason to use a lot of software.

In the past, I ran a software review site, but that was over a decade ago, and things have changed drastically since. For now, I will be trying this on for size and I do promise to give it my best, but I make no guarantees as to its longevity or relevance to the general public.

So here is the first of what hopefully will be a long-running stretch of software suggestions, reviews, tips, and the like.

Let’s talk a bit about the application that officially sparked the conversation: Task Coach.

Task Coach is an open source personal time manager and task list. Obviously the “free beer” here is important, but for only two developers on the books (Ohloh), this is hands-down a quality product.

Categories will keep your “tasks” separated by function, location, or whatever other categorical partitioning you can think of. They can be nested, allowing you to create subdivisions of function (e.g. “Work” can have general work-related tasks, while “Work/ProjectX” can be more granular). Recently (v0.77), a new option was added to categories allowing them to be mutually exclusive. This allows you to create custom status filters and the like.

Nested tasks are really where this “to-do” becomes much more. While I don’t completely agree with the math, the ability to see a task’s relative completion by the percentages (and full “Completes”) of its children is amazing. I’m not sure as to a limit of nesting, but to be able to start with a vague task and drill down to the granular components is a real incentive to think through your action items.

Tasks can also be applied a budget of time and with a few simple clicks, you can have a live monitor of the time (“effort”) that you spend on a particular item. This data can also be graphed out a couple of different ways to better show you where your time goes. It would be nice, however, to have a monetary budget metric as well.

These tasks are thick! Aside from the main task description area, which is easily visible via tooltip upon hovering your task, you can add notes and attachments to tasks. An attachment will act as a link to a file (i.e. no files are actually stored; only referenced). Notes are a good way to mark up a task, but personally, I find that simply appending/editing the main task description better suits my needs.

The task scheduling system is intuitive enough, and seems to support all variations of recurrence that I think I’ve ever needed. I haven’t really had a chance to get into the reminders though.

The main task list display is almost perfect for me, personally. The two adjustments that I have to make are adding the “Overall % Complete” and “Days left” columns to my view. Category colorization is very nice when you choose to view multiple categories at once as I often do.

Right-clicking on a task gives quick access to a lot of features including “Mail task”. This is both my most and least favorite feature of the application all rolled into one. If you have a single task selected when you hit this, you will have an email sent to your default mail application via mailto: (at least I assume it’s through mailto: due to limitations). The subject will be the “path” of your task (e.g. “ProjectX Deadline -> Fail Plan B -> Cower in corner”). The body will contain the task’s description. Unfortunately, there is no easy way to get any of the other details of a task (attachments, status percentage, notes, effort, etc…) into the email that I can find. Selecting multiple tasks will simply mail the paths (see subject above) of each of the selected tasks and description with no visible separation between items. Some minor amount of bordering with equal-signs or hyphens would be wonderful. This would be a great place to send status information, completion color-coding, etc…, but this is not currently the case.

Also, I found out about this application because it is now published on portableapps.com. Being packaged as a portable application keeps it on my drive (“Life:\”; ½TB; goes with me everywhere) and accessible to me wherever I am.

I guess I can finish off with a pro/con list for sport. ;)

Pro: free beer, portable, task nesting (w/ status math), easy to enjoy, actually works
Con: Mail task is too limited, effort/status reporting, math on nesting status is a little bit off

Tags
Get a free book about code review best practices.