Skip to main content

The Misadventures of a .NET Dev

Sooo... long time, no post! All zero readers of this blog might be curious about why I disappeared. The short story is I’ve been sidetracked by personal issues combined with a butt-ton (sorry to those in far away lands; I don’t know how to convert this to metric) of work at my paying gig. We’ve all been there and done that. I’m sure you can relate, non-existent reader. But I’m not making any more excuses! This post serves as a list of topics I want to cover in future posts. It’s long, so I doubt I’ll get to all of these.

  • More ‘SharpMock’ – I haven’t abandoned this project, but I was saddened when I realized I had forgotten all I learned about PostSharp when I cracked open the [smelly from having gone so long without bathing] spike code.
  • Creating DSLs with MGrammar – I’ve noticed a lot of bloggers are unsure about the vision Microsoft has for ‘Oslo’. Count me among them. But I definitely have had some fun playing around with Intellipad and MGrammar recently. I see a lot of potential for making my development life easier when it comes to maintaining metadata. I also have an idea for a little project to make it easier to author certain scripts that perform a certain development function which currently depend on some ugly XML (I’m awesome at starting projects and terrible at finishing them).
  • ASP.NET WebForms and the MVP Pattern: What Not to Do – I wish I had time to even play the the new (or old for that matter) MVC bits. I wish I had time to learn Silverlight 3 (or 2, or 1 for that matter). I wish I had time to use jQuery (or some other cool JS framework for that matter) and improve my piss poor JavaScript skills. Alas, we’re stuck in the stone age of web development at my job. I’ve done my best to reduce code duplication and improve testability with the MVP pattern, and along the way I’ve done a lot of stupid things that I think others should avoid. Actually, I probably shouldn’t write about MVP at all. Meh.
  • Persisting Abstract Expression Trees: What Not to Do – Again, the stone age (hmm, I should probably be capitalizing that) of development means not using an ORM. I have some advice about what to avoid if you have to persist expression trees and write all of the data access code. This will mainly be about persisting inheritance hierarchies (table per class, table per subclass, etc.) and coping with object model changes.
  • Building a LINQ Provider – I have no idea why, but I want to do this. I’m specifically thinking of a fun little project called either ‘LINQ to MP3’ or ‘LINQ to ID3’ (I’m good at naming things and horrible and building them). I figure it’s time to start learning .NET 3.5 since .NET 4.0 will be out sometime soon. On that note…
  • .NET Certification Fun! – I never got any MS development certifications (I did manage to fail one test… seriously), and I’ve listed getting my MCPD as a goal at work. I have some opinions on the certifications in general, and occasionally I run across interesting things in the process of studying (okay, I don’t study). I’ll blog about this. P.S. We’re talking .NET 2.0 here :(
  • Ruby, Ruby, Rubyyyyy – I’m not talking about a Kaiser Chiefs song. I’ve been playing around with Ruby a little (and reading Why's (Poignant) Guide to Ruby, which is absolutely hilarious), and it’s a lot of fun. I actually probably won’t blog about this, as I don’t have much to say.

Well, that’s all I can think of for now. Talk to you again in 6 months!

Comments

Popular posts from this blog

Enabling Globalization Invariant Mode for .NET Core App on Raspberry Pi Running LibreElec

I had an app I wanted to run on my Raspberry Pi 3 running LibreElec . In LibreElec you can install the dotnet core 2.2 runtime as an addon, and in Visual Studio you can compile for ARM processors with ‘Target Runtime’ set to ‘linux-arm’ in the publish profile. So, I published to a folder from VS using that profile, and I copied the output over to my RPi which had the dotnet runtime installed. I did a simple dotnet Whatever.dll to run the app (actually in this case, it was /storage/.kodi/addons/tools.dotnet-runtime/bin/dotnet Whatever.dll because of the way the addon is installed) and was met with this error: FailFast: Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support. at System.Environment.FailFast(System.String) at System.Globalization.GlobalizationMode.GetGlobalizationInvariantMode() at System.Globalization.GlobalizationMode..cctor() at Syste

Migrating Hg Repos with hg-fast-export and Windows Subsystem for Linux

Introduction I prefer Mercurial (hg) to git . I don’t really have any reason for this preference - they both do the same thing, and the user experience for 90% of the use cases is the same. It probably comes from the conditions of the DVCS landscape when I started using these systems. Some of this may have been perception only, but it looked like this: GitHub didn’t have free private repos BitBucket did have free private repos BitBucket was very hg-friendly Joel Spolsky had an amazing tutorial that served as both a how-to for hg as well as a general intro to DVCS hg was much more Windows-friendly than git Since hg was written in python, I felt like extending it would be easier than doing so for git if I ever needed to (admittedly, this is a pretty ridiculous reason) hg felt like a more unified, “coherent” system than the very linux-y feeling git and its extensions (also pretty ridiculous) Where they differed, I liked the verbs hg used better than git’s counterparts

Serializing Anonymous Methods

I’m taking some time off from not blogging to do a little blogging. I hope this doesn’t inconvenience absolutely nobody. I was doing some [binary] serialization work recently when I came across a problem – I wanted to serialize objects with delegate fields that were populated with anonymous methods at runtime. To wit, I had types like this: public delegate void MakeMove(); public class AdrianPeterson { public int GameOneYards { get; set; } public Football Ball { get; set; } public MakeMove Move { get; set; } } Populated like this: var explicitDirections = new List<string> { "left", "right", "left" }; var ap = new AdrianPeterson(); var apName = ap.GetType().Name; ap.GameOneYards = 87; ap.Move = () => Moves.Weave(apName, explicitDirections); So, I pop a [ Serializable ] on AdrianPeterson (and Football ), and I’m set, right? Wrong. Wrong like getting away from running AP in the second half when the only receiving threat you have is bei