Pages

Sunday, August 31, 2014

Installing Ghost on Ubuntu 14

I've been wanting to check out Ghost for a while now, and over the weekend I decided to give it a whirl. I fired up a new VM and installed the latest version of Ubuntu, downloaded the source from the Ghost.org site, and followed the simple installation procedure. And that's about as far as I got.

Unfortunately, something within the latest release of 'buntu is not configured correctly to just install and go. After some Googlin' I found Jinyu Liu's post about setting up Ghost, and he found the magic.

Run the following:
sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
It will fix the Node symbolic link, which is apparently not correct.

After running that, everything installed just as described on the Ghost.org site, and I had a new blog up and running in minutes.

Monday, August 25, 2014

SSRS Deployment Center

I recently worked on an enterprise project that involved deploying SSRS reports and data sources to different environments throughout the organization. SSRS reports have always lacked proper deployment tooling compared to other project types. The RS.EXE deployment tool from Microsoft makes it possible to create scripted deployments, but it's too complex for the average business user. And although it's possible to use it in conjunction with automated builds, it is not as easy as it should be. Because of this I created a set of GUI and command line tools called the SSRS Deployment Center that will hopefully ease future SSRS report deployments.


I've put the project onto CodePlex, so if your in need of a set of tools to make report deployments easier, check it out here:

https://ssrsdeploymentcenter.codeplex.com/

The CodePlex site has all of the information you need to download, configure and run the tools.


Monday, July 28, 2014

SSRS Nested Subreport Gotcha!

Recently I was working on a reporting solution for a client when I ran across an interesting problem. I was writing a report in SSRS using multiple nested subreports that would roll up into the report. This has been a fairly common approach that I've used in the past. The difference in this case was the number of nested subreports. Specifically I was using three levels of reports, all of which used some form of data binding. I ran into an issue where the "grand-child" report would not render.

It is easiest to explain the situation using images. There are three reports. A top level, "master" report that we will refer to as the Parent. Within the Parent report there is a sub report that we will refer to as the Child. And within the Child report there is a sub report that we will refer to as the GrandChild.

Monday, July 21, 2014

Reminder: If you develop WebForms, you should be doing this…

There are plenty of posts out there about using the aspnet_compiler.exe tool.

http://mikehadlow.blogspot.com/2008/05/compiling-aspx-templates-using.html
http://odetocode.com/blogs/scott/archive/2006/10/17/what-can-aspnet_compiler-exe-do-for-me.aspx

I’m not writing this to shed any new light on the subject. I'm writing this to remind developers that you should be using this tool… period.

Monday, April 28, 2014

Improving WebSql interaction using jQuery Deferred

I recently inherited a project that made heavy use of WebSql. Though it has been deprecated as a client side technology, this project was using it to create an offline web application that could be run on mobile devices. The immediate problem that I noticed with the project was that there was no consolidation of logic into a central JavaScript file. Each page included inline functions that essentially did the same thing, just using different queries. After profiling the site I realized that this "distribution" of logic also led to multiple instances of the web sql database being instantiated.... which, as you guessed, is a problem.

To address this issue I started by creating a wrapper for the Web SQL functions that would make it easier to work with the technology. The wrapper removes the work of instantiating the database object and managing the transaction, and it uses jQuery Deferred objects to make it easier to work with the results returned by the Web SQL calls.