With 5-6 years of hiatus, I am relaunching and rebranding. The new site for my tech commentary is http://jimsrulesregardingeverything.com/
Some of the old articles here may move over there, but I'll probably end up writing wholly new articles rather than republishing.
I've relaunched my gaming website as a gaming/hobby blog. I'm focusing on how I paint and model for miniature wargaming.
Have you everbeen faced with a number of system integrations that require your to securely communicate between servers in very different internal networks that did not expose public ip addresses for the servers?
This is certainly a problem that's been solved before. However, it's made much simpler with Microsoft's Windows Azure Service Bus Relays. If you know how to do WCF development, this is fairly straightforward to implement. It's really just a reverse proxy, just using technology and techniques a WCF developer is (hopefully) pretty familiar with already.
Here is MS's walkthrough : http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-relay/
I just got a new Macbook Pro for work use and wanted to move a
windows image which I used for client work. The image was a bootable VHD
file (like this
) and that presented a couple of issues for a simple move.
First, the bootable VHD is not
the same as the vhd file as used for Microsoft's virtual machine
technologies (whether Virtual PC or HyperV). VHD just means "virtual
hard disk", but that does not mean the machine image contained within
that disk is built for being run as a guest inside another machine. The
bootable VHD machine is configured to be run as it's own machine, it's
just running via a packaged up file sitting inside of another hard drive
partition. The result is you cannot use VMWare Fusion's Import feature
to convert this disk from a VHD to a VMWare image.
What you could
do is use Fusion's "Migrate Your PC" option to migrate the machine, with
a bootable VHD there may be a gotcha. The gotcha is that the Migration
option will automatically try to import the host (naked) hard drive in
addition to the VHD image if it's connected to your VHD machine. Your
VHD image will not be big enough to hold it's parent hard drive! I
suppose you could detach the drive, but doing so would require to alter
the original machine. That doesn't seem such a good idea if you want to
go back to that machine, even to keep as a back up.
What you can do is run the VMWare Standalone Converter
from within the Windows machine you're trying to move over. This will
allow you to tell it to not try to package up any drives you don't want.
It also will let you put the packages elsewhere, not force you to fit
it inside of the VHD's space. This creates the virtual machine for you,
ready to run in just about any of VMWare's products. You can then simply
copy the files over to your mac and then launch it in fusion.
A couple of gotchas that may arise at this point:
- If you did not take the drive with your boot launcher info, you will
need your windows CDs (or isos if it's from MSDN) to run a quick
Windows Repair to fix the boot info inside the new VM. It's pretty
painless, just follow the instructions.
- This is a new machine, you may need to run windows or office
activation again depending on original activation requirements. OEM
installs of windows will probably give you grief, but it's unlikely you
were running that from a VHD to begin with.
Overall, once I figured out the need to run the stand alone
converter, this was a pretty easy process. But, it did take a bit of
noodling and googling to figure out.
A new little toy out there... Wordle
. Feed it some text (or a blog) and it creates a word cloud for you.
Apparently I want to Just Get Work Going People.
Clicking through may cause issues in some browsers, seems to work fine in Opera though.
I've put the first version of dice roller for 7th Sea up on my gaming related site, smellyoldgamer.com
. As of right now, smellyoldgamer is still just an alias for jimleo.com
, so you can just use jimleo.com as the root too. The full address to the dice roller is http://www.smellyoldgamer.com/sog/7thSea.html
I've built it to play nice with keyboard, mouse, and touch displays, so please check out. Notes on keyboard use are on the bottom.
I kept the page completely self contained, so you can just save it and use it offline. It doesn't save anything, post it back to the server, or anything like that. It's completely intended to be locally run because everywhere your device goes may not have an internet connection. Simply save it as an html file and load it up in your browser for later.
A possible enhancement over today's version would be to keep track of the last x number of rolls so you wouldn't need to reenter them.
I've tested it using the major browsers, and as usual, IE is the only one annoying the snot out of me. There's a bit of page "dancing" going on that causes one of the sections to move a bit unexpectedly that I'm still working on. Firefox seemed to be the pickiest and managed to find bugs in markup that the other browsers compensated for.
Wow, I missed a YEAR’s worth of A Few Very Useful Tools. You are now entitled to your subscription fee back. Given I pay most of you to read this, you owe me money.
[Warning, philosophy ahead]
Seriously though, a year ago I was running out of things to post, so it was time to let it rest for a little while. There’s really only so much you can use well enough to get a good idea of whether it’s worth using. Lots of reviews represent 5-10 hours of use of a product (if that) and often come down to what I euphemistically call “counting cup holders”. Feature count doesn’t matter if those features aren’t well implemented. I would much rather use a bunch of small utilities that did one thing well
than one mega-app that did it all but not very well. Granted, there are times where the whole is greater than the sum of its parts, but that requires true integration.
Without further ado, some gems from the last year.
- Git – Source control the way it should be (I believe I heard that from Linus Torvalds). Most of all, branching and merging are so easy you stop thinking about it. You also can ship changes directly to someone else without creating ugly patches/shelves and without sending it through the central server. Why? Git is distributed from day one. A central repository is a decision you make as a project team, not requirement of the software. You commit to a local repository, then merge that repository with a central or with your peers. Git is much more a command line tool, graphic tools are lacking. They’re available, just lacking. Mercurial is a close second and has better graphical tool support if you’re on windows, but Git’s the king right now in terms of functionality.
- Resharper – Ok, it was on my Dishonorable Mentions list a year or so ago. That said, I think they’ve improved it, but I’ve also found that on a “real” machine it rocks. That said, a “real” machine is a Windows 7 box with min 4GB ram and a beefy CPU. An SSD and 6GB of ram makes for a nice experience with “R#”. This configuration will neuter my main complaint from a year ago, which was performance. The refactoring tools, the test running tools, and the various navigation tools make for a completely different world of development.
- Remote Desktop Connection– Silly as it sounds, this little tool is just what the doctor ordered if you have to work with multiple machines. I’ve stopped trying to manage multiple machines with a Keyboard-Video-Mouse switch. Using Remote Desktop, you can just open a window on one machine into another machine. It is not screen sharing. It let’s you open another desktop as if you were another user logged into the system (note number of users is limited). As far as I know, there’s nothing like this for mac, although there is for Linux. XRDP let’s you pull this off in a Linux world and share between the two as well! Mac doesn’t get to play, sorry.
- Moq – Unit testing is the sign of a professional developer. It’s also the sign of a sane developer. Moq is a mocking framework that makes unit testing in C# absolute cake. I would favor this over any pre-VS2008 frameworks as it makes extensive use of lambdas to make mocking out dependent classes absolutely easy. Of all the things I can say about it, the best one is probably this: just about anything I’ve thought would be hard to mock has already had a way to do it in Moq. You really don’t need much more than the Quick Start page for this, trust me.
Well, that’s it. Four stellar tools in one year, only two of which I’d say are new-to-me in the year. Back to the grind…
Ok, maybe I’m late to the presses with this one, but given that no one I’ve talked to recently knows about this, I think it’s worthy of more press…
The .Net DateTime structure is a nice handy structure that we basically can’t escape. Funny thing about users, they have a tendency to want to know when they did something, when they should do something, and how far overdue it is when they didn’t do it.
The problem with .Net’s DateTime is the lack of time zone information in the structure. Believe it or not. Yeah, really.
In .Net 1, we had no indicator of what time zone it was for. In .Net 2, they introduced the notion of “kind”, but that was limited to indicating “Local”, “UTC” (i.e. GMT or Zulu), and “Unspecified”. Even with .Net 2, this led to most of us just taking the convention of immediately converting everything to UTC. Unfortunately, that led to more than one bug when someone forgot to convert or double converted (or triple or quadruple or…).
MS’s answer was always that DateTime was a 64 bit structure that they used something like 62 bits for it. They were able to add in the “kind” by using the extra 2 bits, but that only allows for 4 possible values if you recall your bitwise arithmetic (00, 01, 10, 11). Hence, Local(10), UTC(01), Unspecified (00). Maybe you’re thinking that “we only need 24”, but that doesn’t account for India or Newfoundland (something + .5 hours offset) and leaves you scratching your head at what to do with daylight savings time.
Worse, SQL Server’s DateTime only
stored the date and time with no idea on time zone. However, there at least we could just say “server time” and be done with it.
This is manageable and usually not too
much of a problem in self contained systems. Where it becomes painful is in situations where you need to serialize data and send it somewhere else. Then you really
need to worry about that time zone and it gets really goofy when you’re working with datasets. Once I get over the psychological trauma of dealing with datasets and time zones, I might be able to blog about that.
Since VS2008/.Net 3.5 and SQL 2008, we’ve had a new and vastly improved way of handling this. This is called DateTimeOffset. Unfortunately, the name seems to throw everyone off. DateTimeOffset does not just store the offset
(I.e. –5 from UTC), it stores the entire date time (2/2/2011 9:56:12 PM -05:00). Now,the interesting part is that this takes a TimeSpan, so you really can make this as flexible as you want it. TimeZoneInfo helps you with finding timezones and applying the various rules such as daylight savings time. Both just plain work with SQL server.
Short of it is that I plan on forgetting all about DateTime and only using DateTimeOffset from now on. Now I’ll always know what time zone I meant and not have to figure out what rules I need to apply to get it into local time.
Once I figure out the gotchas, I’ll relay those too.
NOTE: Since originally published, two things have happend. ReSharper has continued to improve, and most of us have development machines that have enough RAM to get around most of the performance issues that caused it to appear on this list originally. Jim-4/20/13.
I think I've settled on a nice theme with the "A Few Very Useful Tools
" series. It helps me think about what I'm using, what I should be looking for, and so on. However, there's another side of the coin, and I think that I would be remiss to neglect to put down a few of the 'tools' that I've come across that have inspired revulsion in me.
- OpenOffice - I know this is the darling of the Anti-Microsoft community, but seriously, it's been a miserable experience anytime I've tried this garbage-ware. I don't expect OSS to be as polished as commercial software, but when an application (or applications in this case) is positioned as not just an alternative, but the alternative to commercial apps, it really should be a good experience. Bad UI and missing features are one thing, but I've run into one bug after another anytime I've used it, no matter the platform or version. OpenOffice is more about the Anti-Microsoft agenda than about providing quality, functional software. How many hours do I have to lose before the cost of an MS product becomes cheap? Maybe I'm just an 'expert' user of Office and pushing the edges of what OpenOffice can do, but there's only so many exception dialogs I can put up with in an app that should be solid. It's not like I'm pro-MS... after all, I do like and use iWork on the Macs I own.
- ReSharper - ReSharper positions itself as providing the "missing" functionality in Visual Studio. I will admit that I have mixed up feelings about ReSharper. Almost all of its features are really good, and I particularly like it's unit testing features as well as "collapse all" (ms... hint... you really need this in Solution Explorer). BUT anytime I've seen it used on a large solution (which is to say every project I've found myself in the last couple of years), its performance is LOUSY. I mean pathetic. It's bad enough that VS is struggling under large projects (probably worth another post on that topic), but once you turn on ReSharper, VS becomes unusable. If performance was acceptable, this would be a fantastic tool. When you are waiting 2-3 minutes for the screen to catch up to the keyboard several times a day and generally feeling like you're running in molasses, life is not good.
- StyleCop - One of the worst things ever released by Microsoft, even if it is freeware. Seriously, there's little to nothing this 'tool' does that shouldn't just be done by the IDE. Instead, it adds to your build time, and then throws errors because you forgot to put an extra return after a closing '}' and similar silliness. It's particularly fun when you get out of sync with the rules on your local environment vs. the build server. You commit, then it pukes all because you exceeded 120 characters on a line (when we all have widescreen monitors!) What kills me most is that the default rules of StyleCop actually contradict Visual Studio's defaults in some cases. Why does MS produce an IDE with one set of rules and then create a tool to check style that does the exact opposite? It also requires comments all over the place. Comments are nice when they are useful, but they are actually harmful when someone is just putting in comments because the tool told them they had to do so. That leads to comments such as "Gets the name." for a method named "GetName". Err... duh. I've seen this used by people who think somehow they are increasing the quality of the application they are building, but the reality is that it doesn't affect the actual output of your compiler, just the code the developer sees. In the end, it is not a replacement for FXCop or other static analysis tools. The good news is that much of what it wants to whine about can be fixed with a quick CTRL-K, CTRL-D. The whole tool violates the philosophy of "Make it easy to do things right". Again, if it matters, why doesn't the IDE just do most of it automatically? Give me tools that help me, not constrain me!
So there's some things I recommend staying away from that may help you out. ReSharper is one I really would like to put on my "A Few Very Useful Tools" list, but bad execution is its Achilles Heel. The same can be said for OpenOffice (I would really like to see a viable multi-platform Office alternative). Style Cop is flawed from the get go. There's little it offers that FXCop doesn't or shouldn't just be made easy by the IDE. Maybe that means it's an admission of guild on MS's part? Ok, that's harsh, but it's inevitable to get to that thought!
Ok, ok, I missed the January Useful Tools. So sue me...
The last couple of months have seen me get a new iMac
and create a new desk at home so I don't end up with stuff on top of stuff when working from home with the work laptop on the, umm, desk top. Seriously, why do we call them laptops? Just about any modern laptop will cook your lap if you try to hold it on your lap for any length of time. Notebook is also a misnomer when the thing weight 6+ lb..
In the interim, I've been contemplating what tools I've been finding most useful that I haven't already mentioned. There's a PC bias this go-round as I've settled into a bit of a routine with the macs.
- SQL Server Profiler - This tool is distributed with MS SQL Server. It is a MUST HAVE if you are developing against SQL Server and need to know what commands you're executing against your database server. Many performance issues can be resolved by consolidating your DB calls in to things that make more sense. Not at all relevant to anything that is not SQL Server.
- CruiseControl.Net - A free, open source continuous integration (CI) server. Sets up easily, easy to maintain, and did I say FREE? If you have a team that is developing code together, once you start with CI, it will be difficult for you to go back in my opinion. Once you know you can 'get latest' without fear of suddenly being broken due to someone else's bad commit, you can be much more productive. What I like about CI servers in particular is that I can commit, wait for it to complete building, and go home knowing that I didn't miss a dependency when I committed. Anyway, CCNet is solid, dependable, even if it lacks the frills of commercial products.
- AnkhSVN - An open source, free plugin for Visual Studio that provides real, honest to goodness source control features for SVN. It doesn't do everything that SVN supports, but it does the things you need to do on a regular basis. Most importantly to me, it brings support for "show history" and "pending changes" for SVN to Visual Studio. After not having source control integration in Visual Studio when starting with SVN, I felt like I was missing a thumb. Now I feel whole again. At least when coding.
- Numbers - I've been using iWork more and more on the Macs, and while KeyNote and Pages are just so-so for me, I've really taken to Numbers. Numbers is the iWork spreadsheet and what I particularly like about it is that it's really easy to set up 'forms' in Numbers. In Excel, it's really kludgy to try to have different regions of the page that represent different data tables, etc. In Numbers, it's cake. It's what they call 'Intelligent Tables' and given a lot of the data analysis spreadsheets I saw while at PwC, I gotta say this is a missing feature in Excel!
Alright, there's a serious development bent to the above tools, but hey, it's what I do!