Friday, August 29, 2014

TiddlyWiki — a non-linear personal web notebook

I'm starting to love TiddlyWiki. It's been a never-ending search for a decent tool where I could store some notes, organized by topics, and having links and relations among each other, that are also searchable. Basically, a personal wiki site for notes on certain topics.

First I used Redmine but this requires a decent infrastructure to run - Ruby + a whole host of dependent libraries, admin rights, etc. These are not available everywhere. And, it is especially painful upgrading these things.

Then I searched for node-based wikis. There are a few. Node is relatively easy to install and npm takes care of dependencies but this is still not ideal. The ultimate drawback is that none of the available wiki solutions include a simple text search. Ugh.

Using text files, spiced with Markdown syntax for decent visual effects when used in a Markdown Editor, was ok. The files are indexed by a desktop search engine and can even be searched. But, this is also not that great.

Finally, in comes TiddlyWiki. Technically, it is just an HTML page that includes all the grease (javascript, css, default content and templates). Therefore, it runs in a browser. The downside is that any change dumps a new file, when used like that. But the good devs of TiddlyWiki have used node-webkit to create a desktop version of TiddlyWiki. This is a customized browser that runs your wiki. Runs pretty smooth and the content is separate from the engine, which is great. This way it is also easy to save any changes, avoiding any browser-caused issues.

Markdown syntax is supported via plugin. The posts have to be marked as text/x-markdown type and then they get rendered properly.

So far this looks great and exactly what I was looking for.

TiddlyWiki — a non-linear personal web notebook

Monday, August 18, 2014

Merge code in TFS by Workitem

Here are two ways to merge code between two branches in TFS, but only the ones linked to a specific work item

One is qbus vMerge extension (link) for Visual Studio 2013, and another is done in TFS manually in the Hierarchy window (link).

I can confirm that the extension works well so far and is really useful for pushing the changes from Dev to QA branch, for example.

Source: Merge by Workitem – Customer Feedback for Microsoft

Tuesday, August 12, 2014

Octopus Deploy

Octopus Deploy is a deployment solution focused on .Net development teams. The goal is to have an automatic deployments. The whole concept is very similar to integration server - a place where code is built, packed, and deployed. Except that Octopus takes care of the deployment of packages to desired destinations.

It achieves this by installing services (called Tentacles) on destination machines and one central point - the Octopus. The software releases are packed as nuget packages - a simple zip container with files + some metadata.

Octopus can deploy web sites as well as windows services.

A few tricks are required, though.

  • Set the Web.config transforms build action to Content so that the transform files do get copied to the output directory. Only then Octopus can actually perform the transform process. More here.

Code Project Preparations

Configuration Transformations

One of the key things is to have configurations for different environments in the source code.
Web Config Transformation Tester is an online tool that helps to test configuration transforms. Alternatively, use Slow Cheetah, Visual Studio extension.

Build Process

Package Restore

See "Package Restore with Team Build" for instructions on how to build a solution that has NuGet Package Restore enabled. In brief, use the build.proj MS Build script as the destination project. Adjust the paths to your code's locations before hand.


OctoPack nuget package can be added to deployable projects to help out in generation of deployable packages. Then, add "/p:RunOctoPack=true" parameter to MSBuild to generate the packages. Additional parameters:
"/p:OctoPackPackageVersion=1.0.1" overrides the package version number which is, by default, taken from the project version.
"/p:OctoPackPublishPackageToFileShare=c:\packages" instructs OctoPack to copy only the resulting packages to the destination directory. This way you do not need any other output files.
OctoPack can also deploy directly to NuGet Server with "/p:OctoPackPublishPackageToHttp=http://my-nuget-server/api/v2/package".
See more at OctoPack GitHub page.


Monday, August 11, 2014

Microsoft & agile

How Microsoft dragged its development practices into the 21st century (Peter Bright/Ars Technica)