Developing on Staxmanade

Oops - how a simple bit of automation put NuGet services on edge...

(Comments)

This past week I received an email from Microsoft's NuGet team asking if I could look into a bit of an issue with DefinitelyTyped's NuGet package publishing.

Some Background

A really long time ago, I wanted to access DefinitelyTyped packages within Visual Studio via the NuGet package manager. So I quickly wrote up a powershell script to accomplish this. This script has run almost continuously ever since, and primarily without issue.

There's been a couple tweaks/issues along the way - as to be expected, but it's been primarily hands-off.

As of today, these NuGet packages have been downloaded over 5,268,852 times - wow.

What does the automation do?

All of the NuGet packages generated for DefinitelyTyped are run through a build process on the good servers at AppVeyor (Thanks AppVeyor).

Every 2 hours the task does some git-fu to figure out what DT packages have updated (since the last run) and publishes updated NuGet packages for each updated DT package.

The initial problem report:

First let me say that thanks to Yishai and Maarten from Microsoft who brought the issue to my attention and were extremely polite and patient with the raised issue. So thank you, thank you, thank you for the support and being so friendly while working through this...

service status image of problem with nuget

Looking at status.nuget.org

It was pretty easy to see that every 2 hours a large spike in uploads to NuGet was happening.

service status image of problem with nuget

service status image of problem with nuget

While I can't say for certain this incident report on the status page was due to the NuGet automation, it was around the same time the automation was pushing extra builds (and right before I was contacted by Microsoft).

Was that my automation oops?

I didn't recall getting an error email from AppVeyor so I was initially suspicious. But logging in and looking at build history: hmmm. Looking back at my email, looks like I did receive the first failed build email - but must have been busy day as I didn't happen to notice that one email (when I usually do from other projects).

service status image of problem with nuget

YIKES!... so I quickly responded to Microsoft saying I'd shut down the automated portion and dig into it.

The Problem & Resolution

Turns out the problem was due to a large pull request that updated about every package in the DT repo. This meant it had to publish every single package, but for some reason (not showing in the logs) the AppVeyor job was failing at the end and not saving the fact that the packages were being updated on NuGet...

I have a way to run the NuGet publish manually on a local machine so I pulled down the project and ran the complete build. This took quite a while (almost 3 hours) and eventually I discovered the problem.

At the end of the script is a git commit -m {msg} command. This is an important step as it records what has been updated/published. The problem was due to the large number of packages published, the {msg} was so big that it was throwing an error saying the command line command was too long to execute. Causing the system to not complete the cycle and end up re-publishing all nuget packages every 2 hours.

I was able to manually commit with a shorter message and it brought the system back to normal.

And below is NuGet status after the fix.

service status image of problem with nuget

Thanks NuGet!

Turns out the NuGet team put some time into optimizing the publishing process of their service - so maybe there was a benefit to this whole fiasco, but hopefully we won't be hammering the system going forward :)

So I'd like to say thanks again to the NuGet team for your kind support email and professional way of handling the issue. This is a great example of how Microsoft is helping the OSS community and their support is really taking off and showing promise!

Also Good Point

service status image of problem with nuget

Happy NuGetting!

Look at where DefinitelyTyped is Now

(Comments)

A Little Wondering

I installed Visual Studio 2015 the other night and was just poking around and stumbled upon the Cordova Project Template that is provided. This not necessarily that new, but is new to me as I spend most of my time these days working on a Mac doing iOS, Docker (for server-side stuff) and other projects. Though, I miss and still enjoy the benefits of Visual Studio for some projects.

While looking over the project template, I was surprised to see a familiar folder structure typings/cordova/* in the project.

Why is this folder structure familiar?

Because I created it almost 2 years ago when I threw together a PowerShell script that chucks DefinitelyTyped TypeScript definitions up onto NuGet.

Another example of the folder structure, while I can't say for certain, but I can only guess that when the winjs started converting over to TypeScript that they chose to put their type definitions into the same structure. I won't claim to have inspired it, but would be cool to say I did.

It was a bit surprising and humbling to discover Microsoft had in one of their default templates a reference to some TypeScript type definitions that (while I didn't have anything to do with the creation of the definitions, nor DefinitelyTyped) I did created the simple little utility that runs continuously up on TeamCity.CodeBetter.com and tirelessly updates NuGet packages as they change over on DefinitelyTyped.

This reminded me, that I hadn't checked up on the NuGet user account for DefinitelyTyped in quite a while so I decided to head over to the NuGet.org, take a glance at the account and check out how many downloads there had been?

DefinitelyTyped NuGet account

** HOLY Typings **, there've been over 2 million DT type definitions?

This little ditty was neat to find. I haven't done a ton with TypeScript in a while, but it's quite amazing to see the traction it is starting to gain.

This means that the TeamCity over at CodeBetter has pretty much been cranking out new and updated DefinitelyTyped TypeScript definitions for almost the last two years, but it's time to re-visit...

Thanks TeamCity @ CodeBetter

Before all of the new, cool, and hip online continuous integration systems came to be, one of the only free options for open source was an instance of JetBrains TeamCity over at CodeBetter and I'd like to throw out a big thank you for those at CodeBetter who put the time and effort into hosting this service for many of the .Net OSS projects out there.

Hello AppVeyor

I recently ported this job to an AppVeyor build for the DT project and after a quick round of using their wonderful support to work through a hurdle, I completed a new build at AppVeyor that replicated the one originally hosted on the TeamCity server.

So a HUGE thanks to AppVeyor for creating such great product, and offering free builds to the OSS community.

I'll keep an eye on the new build for a while (before I forget about it) and hopefully it'll run for another long time to come.

Happy TypeScripting!

NuGet Project Uncovered: SpecificationExtensions.[MSTest | NUnit | Xunit]

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

NOTE: this project is one I created and as it turns out this has now become it’s introductory post.

The SpecificationExtensions.[MSTest | NUnit | Xunit] are a set of NuGet packages that add C# fluent specification extensions to your test project. I first blogged about this in early 2009 and have had a set of these that I take with me for every project I work on.

There are a number of other options out there for specification extensions, but since I first created my original set, I haven’t used anything else (although I should as I might be able to learn a little from each).

image_thumb10_thumb

NuGet Project Uncovered: EventAggregator.Net

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

NOTE: this project is one I created and as it turns out this has now become it’s introductory post.

EventAggregator.Net is a single C# file that can provide a basis for a simple in memory Pub/Sub event aggregator.

I extracted this out of my StatLight project as I found that I often wanted a similar one and kept finding myself copy/pasting this into projects. I figured a single location for this project would be better and I use StatLight as the first dog bowl when I need to dog food the project.

If you’re familiar with the…

Install-Package Caliburn.Micro.EventAggregator

…then you know probably know what this project is like.

Its history starts a few years ago when I read Jeremey Miller’s Braindump on Event Aggregator Pattern and decided I wanted rip out StatLight’s usage of the Prism event aggregator and replace it with a similar one to the one found in StoryTeller. It’s gone through quite a few revisions inside of StatLight since then and eventually made its way into its own project.

Some thanks have to go out to the great feedback and pull requests from Jake Ginnivan who found this project on his own (before I publicized it).

If you’re interested in using it, I’d recommend checking out the source’s test project and the SampleUsage project. The SampleUsage project demonstrates how you can configure the tool to publish events in an async mode.

One concept introduced in this EventAggregator is taking the IEventAggregator interface and breaking it up into two interfaces (IEventPublisher and IEventSubscriptionManager). This proved extremely useful when trying to diagnose components that did both aggregator subscription management vs ones that only published events. It even helped to easily diagnose components that did not correctly unregister objects.

NuGet Project Uncovered: DumpToText

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

NOTE: this project is one I created and as it turns out this has now become its introductory post.

DumpToText is a single C# extension I wrote a little while back. The inspiration from this came from the need to view the values of an object graph quickly and easily during a TDD session.

Have you ever been doing TDD and something isn’t working quite as expected? Would it be nice to just dump out the values of an object quickly without having to spin up the debugger?

The inspiration for this project came from an amazing feature of LINQPad. If you have ever used LINQPad then you’re aware of the amazing ability for it to take any object and create a view of it’s data. Take the simple anonymous type below.

image_thumb2_thumb

Now wouldn’t it be great to have that “.Dump()” extension method at hand anywhere in your code and during a TDD session?

That’s why I create DumpToText.

Now if I have a test as follows and want to see it’s data. I can use the ‘.DumpToText()” extension method to have it print out an ASCII based representation of the object graph.

image_thumb4_thumb

image_thumb6_thumb

By default this just uses the System.Diagnostics.Trace(…) to write the output to, but you can override the “write” implementation by giving your own delegate as shown below.

image_thumb8_thumb

The below shows an example of a nested object that also has an array of items.

image_thumb14_thumb

image_thumb13_thumb1

Anyone out there using ApprovalTests? (You can get it on NuGet)

I’ve not taken the chance to use ApprovalTests yet in a project, but I have a strong feeling that my DumpToText helper could be very useful when leveraged in conjunction with ApprovalTests. If anyone out there is using ApprovalTests, I’d love to hear how it’s going, and if you think that DumpToText would be useful there.

NuGet Project Uncovered: Nancy

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Nancy is another project founded by an elegant coder. Andreas has blogged about it a number of times here on ElegantCode.

Nancy is a lightweight HTTP framework for building web services and sites. The framework runs on both the .net framework and Mono.

I have not used this project myself, but as I started to look it over I think I might have to spin up a site quickly just to try it out.

NuGet Project Uncovered: Extended.Wpf.Toolkit

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Extended.Wpf.Toolkit is a project that should not need an introduction, and if you follow this blog you’ve probably heard Brian talk about it. If not, check out some of the posts on the Extended WPF Toolkit!

This project is one of the most download on codeplex, discussed on Channel9, Coding4Fun, and is being leveraged by Telerik in their Open Access ORM product.

Below is a sample of some of the controls you can find in the toolkit:
(but make sure you check out the project site for the full list of controls)
  • BusyIndicator
  • Calculator
  • ChildWindow
  • ColorCanvas
  • ColorPicker
  • DateTimePicker
  • Magnifier
  • MultiLineTextEditor
  • PrimitiveTypeCollectionEditor
  • RichTextBox
  • SplitButton
  • WatermarkTextBox
  • Wizard

NuGet Project Uncovered: TranslatorService.Speech

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

TranslatorService.Speech is a small little wrapper around the Bing text to speech API. You will need to get a Bing api key to leverage this.

Below is a sample usage of the library.

SpeechSynthesizer speech = new SpeechSynthesizer(APP_ID);   


// To obtain a Bing Application ID, go to http://msdn.microsoft.com/en-us/library/ff512420.aspx  

string text = "Have a nice day!";
string language = "en";

using (Stream stream = speech.GetSpeakStream(text, language))
{
using (SoundPlayer player = new SoundPlayer(stream))
player.PlaySync();
}



I threw that into a quick test and was quite impress with how fast it worked.



Unfortunately I tried to translate a larger “paragraph” or so of text and saw.




System.Net.WebException : The remote server returned an error: (400) Bad Request.



at System.Net.HttpWebRequest.GetResponse()

at TranslatorService.Speech.SpeechSynthesizer.GetSpeakStream(String text, String language)


at NuGetTestProject.Sample.SampleTest() in Class1.cs: line 14




I didn’t take the time to diagnose why, whether it’s a Bing problem or this library.



Some other observations:




  • + It supports some Async methods as well


  • - The Async methods don’t support the standard APM so I couldn’t easily wrap a task around. (I know there are some ways to make it work, but it’s not out of the box easy…)

NuGet Project Uncovered: JsValidator

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

JsValidator, on first glance, is a down right awesome gem of a NuGet. I’ve heard of Google’s Closure Compiler before, but have never used it. This NuGet makes it a snap to use inside Visual Studio.

When you first install the package:

Install-Package JsValidator;

This NuGet tool automatically updates your project so it will execute the tool on compilation. Awesome if you are not an MSBuild expert as it just configures itself for you straight from the package install.

Once installed, run a build on your solution. On first build you get an error. You’re probably thinking '”How can this tool be erroring, we just added it to the project”. This error is a good thing. It’s telling you that you now have a manual step to configure it correctly.

Go check out the codeplex site as it will explain more on how to use it.

I just might consider this on my next new javascript project in Visual Studio.net.

NuGet Project Uncovered: FastMember

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

FastMember would be something you pull in if you’re trying to do reflection to read properties of your objects, but starting to notice some performance issues. This project will emit some IL at runtime that can read your properties much faster than good old reflection (like below)

var value = typeof(MyObject).GetProperty(“MyProp”).GetValue(myObjInstance, new object[0]);

Replace the above with.

var accessor = TypeAccessor.Create(typeof(MyObject)); 
var value = accessor[obj, “MyProp”];



This project lets you either read or assign values to properties. (See my test below)



image_thumb1_thumb

NuGet Project Uncovered: FakeO

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

FakeO is a fake object generation library. It doesn’t seem to play nicely with objects that require parameters in the constructor. However if you have lots of classes that have a default constructor and plain old get/set properties this project might be very useful.

You can even specify not just random text or numbers to generate, but some specific context driven data.

For example:

  • Random company name
  • Lorem Ipsum to various lengths.
  • Phone numbers
  • Random strings based on a regex.
  • etc…
// example FakeO call
var comp = FakeO.Create.Fake<Company>(
c => c.Name = FakeO.Company.Name(),
c => c.Phone = FakeO.Phone.Number(),
c => c.EmployeeCount = FakeO.Number.Next(100,200)); // random number from 100 to 200

NuGet Project Uncovered: NaturalSpec

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

NaturalSpec is a BDD framework written in F#. This one is interesting due to F#’s concise nature and can give you very readable tests/specs.

The below sample was pulled from the github readme.

[<Scenario>]
let ``When removing an element from a list it should not contain the element``() =
Given [1;2;3;4;5] // "Arrange" test context
|> When removing 3 // "Act"
|> It shouldn't contain 3 // "Assert"
|> It should contain 4 // another assertion
|> It should have (length 4) // Assertion for length
|> It shouldn't have duplicates // Tests if the context contains duplicates
|> Verify // Verify scenario



It says you don’t have to learn F# to use it. Which I’d argue you may not have to learn F# as deep as you might to be able to code a production product in it, but you will definitely benefit from learning some as you go. You will also spend a bit of time learning the DSL that this project has created.



Regardless, this project has enough interest factor for me to play around with someday.

NuGet Project Uncovered: SpecsFor

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

SpecsFor is a BDD framework. This project is nice in that it has packaged many of my favorite testing tools all into one package. Instead of pulling down NUnit, Moq, Should, Automocking, and ExpectedObjects creating your own base fixture class. This project wraps all that up for you with a solid base spec class.

The creator of this project spent some time and created a nice project site with examples and documentation.

NuGet Project Uncovered: Nukito

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Nukito is a project that’s taking AutoMocking to another level and baking it into the tooling/framework. If you use xUnit and Moq and want to avoid much of your redundant mock setup/verify code. You might want to take a look at this project.

I didn’t dig very deep into this project, but it smells somewhat like AutoFixture which I believe has more support for other frameworks and is a bit more popular. (Again I didn’t dig deep enough to understand the core differences).

NuGet Project Uncovered: AboditNLP

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

AboditNLP is a Natural Language Processor library. This kind of stuff in interesting, but not something I have chosen to spend my time on.

It has a demo http://nlp.abodit.com/home/demo which gives you sample things to type to the library. I noticed it was a bit case sensitive, but still, project is one to look into if you were to say build a home automation system.

NuGet Project Uncovered: Northwind.Db

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Northwind.Db is a version of the infamous Northwind database packaged in an awesomely easy install/setup NuGet package. I’ll outline the experience of installing the Northwind.Db into a sample project.

After executing the below command in my Package Manager Console

Install-Package Northwind.Db

I was presented with a wizard where I could choose what type of database model I wanted to use.

image_thumb61_thumb

How did I want to generate my model?

image_thumb7_thumb

Where should it connect to (Notice the Northwind database was already setup for me).

image_thumb8_thumb1

And now I had the Northwind database all setup and ready to go.

image_thumb9_thumb

I’m not quite sure why it installed twice. (once in the root of my test project, and the other in the App_Data folder)

I also couldn’t use the Uninstall-Package command to remove the project

The process cannot access the file '…App_Data\Northwind.MDF' 
because it is being used by another process.



Regardless of some of the issues, if I had to quickly get a sample sql database up and running this would be nice and easy.

NuGet Project Uncovered: Deleporter

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Deleporter is a project I used over a year ago. It allows you to setup a delegate and execute it in a different process.

For Example: You spin up a unit/integration test project. Over in IIS you have a web site running. Now how do you do things like mock out crazy dependencies, adjust the time in your favorite SystemTime implementation or just tweak the configuration on the fly?

You can leverage Deleporter to execute code over on the web server controlled by your test project.

I’d recommend your go read the introductory blog post

Deleporter: Cross-Process Code Injection for ASP.NET

NuGet Project Uncovered: DynamicXaml

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

DynamicXaml takes a fluent approach to building up xaml in code. Following the pattern laid down by the HtmlTags project, this project provides a very clean way to write out your xaml code in C#.

I’ve copied a sample from the github readme below.

var _builder = new XamBuilder();
var button =
_builder.Start<Button>()
.Margin("5,0")
.WidthAndHeight(200d,30d)
.Create();



One of the things I like about these projects is if you can’t use markup and are pushed to write your xaml in C#, you can apply some great tricks to reduce duplication with your code. (Not sure how this library works out, but I would suspect that if you created a default Button object, it would allow you to override specific properties one at a time or extend with new properties. This way you can create your base controls and only tweak as necessary.

NuGet Project Uncovered: IntX

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Have you ever wanted to generate a number that could potentially have millions of digits and do arbitrary mathematical operations against it? Ya, me neither. But if I did, I would take a look at this project.

IntX is

an arbitrary precision integers class written in pure C# with fast - about O(N * log N) - multiplication/division algorithms implementation. Runs on .NET 2.0+.

The intx.codeplex site has quite a bit of info about the project (TL;DR). If you’d like to learn more I’d suggest checking it out.

NuGet Project Uncovered: Burro

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Burro is a project that I only quickly looked at. I don’t know all that it does, or how to get it up and running. In the project’s readme it says

I'll put some examples up as things progress, for now you'll just have to work it out yourself.

What I do know is that it is supposed to parse build output from a build server in a consistent way. How do I know that? (The github project says).

What is it?

Burro is a tool for parsing output from build servers in a consistent way.

I only put this in here as a project to look at. I think that parsing build output sounds very challenging and props to this project for giving it a go…

NuGet Project Uncovered: Chronic

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Chronic is a port of Ruby’s Chronic providing some natural language parsing for dates.

This is a pretty cool little utility as it lets you take some input like "tomorrow” or “two weeks ago” and turn that into a DateTime object.

Take a look at some tests I pulled from https://github.com/robertwilczynski/nChronic/blob/master/src/Chronic.Tests/CustomParsingTest.cs.

[Fact]
public void seven_days_from_now_at_midnight()
{
Parse(" seven days from now at midnight")
.AssertEquals(Time.New(2006, 8, 24));
}

[Fact]
public void _2_weeks_ago()
{
Parse("2 weeks ago")
.AssertEquals(Time.New(2006, 8, 02, 14));
}

[Fact]
public void two_weeks_ago()
{
Parse("two weeks ago")
.AssertEquals(Time.New(2006, 8, 02, 14));

I tried playing with it a bit. There seem to be some cases sensitivity issues with the codebase now as “tomorrow” works but “Tomorrow” doesn’t. But I think that’s a great reason to be on GitHub. Fork, fix, and send a pull request. All better…

NuGet Project Uncovered: Enum Metadata Library

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

EnumMetadata.Core provides some clean extensions over enums that give you access to metadata you place on enum values. This project’s approach is to use attributes on an Enum and some fancy extension methods to get at the data stored in attributes in a strongly typed way.

I couldn’t quickly get this project up and running on my x64 machine. I received the good ol BadImageFormat exception. I didn’t take enough interest to get it working at the time, and was able to get a pretty good picture of how to use it from the tests (if I had to). Just knowing this project is here is good enough for me at the moment.

Side Note: It’s a different approach to the problem. Another strongly typed approach I tend to prefer can be found at the following Gist here. Not exactly an “enum” but gives a similar feel with access to more metadata and gives the possibility of adding behavior to each item.

NuGet Project Uncovered: VerifyArgs

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

VerifyArgs is another approach to a guard helper that takes an interesting approach.

Verify.NotNullOrEmpty(new { first, second });
Verify.Positive(new { secondCount });



Many of you might look at the above and think “But what about performance?” If that’s you, I’d have to say go test it out for yourself. But for nearly all cases out there I don’t think this level of performance is anything to be concerned with. The project’s home site has a little blip that tries to address the performance concern.



image_thumb11_thumb



image_thumb13_thumb



This project is great because of the fluent nature of each Verify.***

NuGet Project Uncovered: Guard

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Guard is one of the MANY projects coming out of the netfx project. (HOLY NUGET there’s a ton of these).

If you’re not familiar with the netfx project, you should become acquainted with it. Daniel Cazzulino (of Moq fame) and others have created an awesome set of add-on functionality to the .Net framework through these NuGet packages

Back to the Guard package:

Many .Net developers tend to write their guard clauses as such…

image_thumb3_thumb

One problem with this is that if you were to rename the “value” parameter you have to make sure you rename the magic string “value” in the guard check.

The Guard package offers a solution that is a little more resilient to these types of rename issues as its usage will automatically either get renamed, or if you don’t you will get a compiler error.

The below test shows an example of its usage.

image_thumb1111_thumb

If you run that test, you’ll see a nice exception message.
image_thumb6_thumb[1]

NuGet Project Uncovered: NSpec

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

NSpec is one of many flavors of BDD framework out there. I’ve never used it, but its website looks good and has some nice documentation and examples.

What is your favorite BDD framework?

NuGet Project Uncovered: Stimpack

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Stimpack is another project leveraging ReactiveExtensions (RX). It’s based off of ReactiveUI and has some interesting concepts for consideration with a MVVM pattern.

This was probably originally added to my To-Research list mostly because of the RX factor.

I didn’t find an good sample project on how to use it, but if you read through the fairly clean test project you can probably figure out anything you need.

NuGet Project Uncovered: Anna

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

Anna is an event-driven HTTP server library leveraging the ReactiveExtensions (RX).

The below sample copied / shortened from the GitHub site.

using (var server = new HttpServer("http://*:1234/"))
{
// simple basic usage, all subscriptions will run in a single event-loop
server.GET("/hello/{Name}")
.Subscribe(ctx => ctx.Respond("Hello, " + ctx.Request.UriArguments.Name + "!"));
}

NuGet Project Uncovered: NFeature

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

NFeature looks to be a pretty solid feature toggle implementation written in .Net C#.

This project peaked my interest because I’ve wanted to try the concept of feature toggles in a project for a while now. With all the hubub last year about feature toggles vs feature branches. I’ve wanted to experience feature toggles first hand.

NuGet Project Uncovered: xizzle

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

xizzle is a project that attempts to give you CSS-Like selector capability over arbitrary xml. This project first piqued my interest because I hoped it would be a light weight alternative to fizzler (Somebody should put fizzler on the NuGet feed. 1.2.3 not it). Unfortunately it isn’t quite there. Maybe someday xizzle will be strong enough to compete with fizzler but at the moment it doesn’t support nearly the amount of selector syntax that fizzler does and once I started playing with it I was mildly disappointed in its selector capabilities. Was probably written to get a certain class selector options accomplished and the writer just didn’t need all that much support yet. But I think there’s some real potential for a project like this to push forward. Lightweight, all included easy syntax.

NuGet Project Uncovered: PineCone

If you are coming to this series of posts for the first time you might check out my introductory post for a little context.

I found a description from a blog post for this project:

PineCone lets you take a C# class and then builds a schema for this class. This schema contains cached members that via IL Emit extracts all simple values from the object graph. All values are turned into a StructureIndex, which is contained by a Structure. Each StructureIndex holds a Guid pointing back to the structure so that you easily can navigate to the structure again.

It’s described as a component used in http://sisodb.com/ (which itself looked interesting) and he may use it on other projects.

NuGet Project Uncovered: An Introduction to the Series

A while back I posted about following the NuGet feed via an RSS reader. For some strange reason I’ve been reviewing this feed since then on an almost daily basis in my RSS reader. Throughout that time I’ve kept a small list of what I think are interesting projects that have put out a release since that time. Today we’re going to start a journey through projects that I’ve found during my review of the feed. Some projects are interesting because I could find a use for them, some are interesting because they are unique, and others solve an interesting problem.

Why were these packages chosen to post about over others?

There wasn’t any scientific process in place to decide what projects made this list or not but as I think back over my time reviewing the feed, below are some items that came to mind.

Some reasons I may have chosen a project:
  • I could potentially see myself investigating its usage someday.
  • It solved a problem in an interesting way.
  • Preferred small, focused, unique packages.
  • Preferred projects that were Open Source as in FREE.
    • Although I didn’t bother to look at any of the licenses so be sure to read into those before you use any yourself.
  • Preferred projects that have a “Project Site” where I could browse the source code see examples or even documentation.
    image
  • For some reason if I saw it was hosted on GitHub I preferred those to sites that had their own dedicated location (Can’t explain why – just did…)
Some reasons I may have NOT have chosen a project:
  • Tended to avoid projects that posted large numbers of packages even though many of them are still very good projects.
    EX:
    • NServiceBus
    • FubuMvc
  • For some reason I tended to stay away from anything MVC related. There are probably very interesting projects for MVC on there, but I probably avoided them because I’m not doing anything MVC related at the moment.
  • Avoided packages that had “utilities” or “common” or “helpers” in the package name.
    • But it might still be worthwhile checking out some of those open source “utility” projects. Just to get an idea of what others consider “needed on every project” and different approaches to the problems.

Some items to consider with these little NuGet gems.

  • Make sure you read and understand any license the project has before including or using them in your own work.
  • These posts won’t be full project analysis, but a generally a first impression.
  • Be sure to research any project before using. I’m only mentioning them because they piqued my interest. Not because I have extensive knowledge of the projects or know their stability.