Archive

Posts Tagged ‘Software’

Inheritance of features

January 14th, 2010 2 comments

Given my recent combining of Tracks and Shuffle. An interesting thing happened. Something that happens when you combine two products so that they inherit features from each other.

On Shuffle’s issue list there are a few items currently regarding repeating tasks, and the ability to hide a task for a period of time. Tracks has these features, since Shuffle can synchronize with Tracks, Shuffle now also have these features. That is if you choose to synchronize with Tracks.

I’ve done a few integration projects thus far. And the ones that are truly successful are when they take the aspects and features of both applications into consideration, to create a win-win scenario between the two applications.

Here is another recent example. At RemoteX, we recently integrated a system that handles the ordering of materials, goods, equipment etc. In essence this integration feature means that you can go to a retailer, order goods, specify the order they should tag the invoice with. End result, RemoteX automatically adds the goods to the application and if possible attaches a copy of the invoice to the case. Ready to be billed to the customer. Since the other system has integrated with almost all resellers of service equipment in Sweden, the daring customers running this set-up can, at least in theory, eliminates the need for keeping stocks of equipment or goods in house.

If you understand where these synergy effects can show up you can also align the integration so that both applications maximizes the gain of integrating with the other system. This is important to think of when designing an integration, how do we achieve the maximum win-win?

I write laws

October 19th, 2009 1 comment

I went through a business contract, analysing it for weaknesses. I found a not likely case, but still pointed it out.

“You should be a lawyer”, the lawyer says

“I write laws”, I reply.

Now why am I writing this?

Well, there are similarities to developing Laws and developing business systems. Laws are rules in which we humans can work within to achieve value. The value Laws strive for is the value of functional society, a functioning system.

Now developing business software can be viewed in the same way. When developing the software we state the laws in which the users can generate data. The UI is a constraint or law, the business rules are different kinds of laws, and so on. The value we strive for is correct business data, another kind of functioning system.

How it is to live under these governing systems i based on the values they are built upon. A Mac user have different values regarding usability, design, and in some cases “quality” – compared to a Windows user.

Developing software is a team effort. The development team are the legislators of the product they are developing, so which values are governing your software?

Changing the platform of ClickOnce deployed applications breaks automatic upgrade

May 27th, 2009 No comments

I wrote earlier about and issue with ClickOnce Deployment, where the processor of the deployment manifests need to match the processor the application is compiled for. Naturally of course, it turns out we need to compile for a specific platform.

By compiling for x86 and marking the deployment manifest as x86 we managed to get some applications running on 64-bit machines. These applications have dependencies on assemblies that crashes if they are run on 64-bit machines, but aren’t compiled for any specific architecture.

So we recently changed to x86 on most of our ClickOnce-deployments. This resulted in the following error when upgrading previous versions.

+ The deployment identity does not match the subscription.

Apparently when we change the application to compile using x86 the applications identity is changed. This means that the ClickOnce-deployment doesn’t work when we shift from All Platforms to x86.

Funny piece of C# code I found today

May 26th, 2009 No comments

Today I found this piece of code in an integration to RemoteX Application.

switch (ConfigurationManager.AppSettings["UsePriority"])
	{
		case "false":
				switch (... )
				{
					case true:
						log.Write ...
						break;
					case false:
						log.Write ...
						break;
				};

			break;
		case "true":
				switch (... )
				{
					case true:
						log.Write ...
						break;
					case false:
						log.Write ...
						break;
				};
			break;
	}

The dotted out code was application logic, so I omited it.

Tags: ,

Source control folder anti-pattern

May 21st, 2009 No comments

I ran into this issue at work today. Another team depends on my teams code to create customer specific solutions. Now they have an issue where they have to keep track of which versions are currently in use, and produce software for the different solutions. Now I have issues with keeping more than one version of working software in production. The administrative cost for this is enormous and it keeps the organization from scaling.

folders in source-controlThis is one of the problems that could arise from keeping more than one version of the same software in production. The team that creates customer adaptions have to keep references to the different versions of code.

This means that they might have to compile the same code but with two different versions of the software. Either they keep two versions of their software checked in under source-control at two different locations, or they keep two versions of the references checked in, or both.

Using source-control in this way defeats the purpose of using source-control. You do not use the time dimension of the source control system, instead your just using it as a shared folder.

Sourcecontrol timelineInstead the way to use source-control is to check-in the references for each version they have to support, in order. Keeping them at the same place, this enables them to get the specific version of the reference and compile a custom delivery for that specific version. That way you are working with the time dimension instead of working in parallel to it. Dependency management can become a pain in the rear if you don’t use the tools for what they are worth.

Tags: , , ,

Updating ClickOnce deployment manifest with PowerShell

May 20th, 2009 No comments

We are automating some of our deployment using powershell. As such we use the command line tool mage.exe for signing our deployment manifests, in effect were creating them using mage.exe as well.

We needed to add the trustUrlParamter setting to one of our manifests. Using mageui.exe you just check the box for allowing the application to see the query string, but with mage.exe this isn’t possible.

What you need to do is modify the XML of the application.deployment manifest, adding the parameter as an attribute to the deployment tag.

<deployment install="true" >

Should become

<deployment install="true" trustURLParameters="true">

As I said, we’ve already automated the process of creating and signing deployment manifests using powershell, now we just need to add the element attribute before signing the manifest. Powershell has some nifty features for updating XML, part 3 of  Windows PowerShell in Action: Working With Text and Files in Windows PowerShell (Part 3) demonstrates this.

So just before invoking mage.exe to sign the manifest we add this litle piece of powershell code:

    $xml = [xml]( Get-Content $deploymentManifestPath )
    $trustUrl = $xml.CreateAttribute("trustURLParameters")
    $trustUrl.psbase.Value = "true"
    $null = $xml.assembly.deployment.SetAttributeNode($trustUrl)

Voila, the manifest now has the trustURLParameters set.

The customHostSpecified attribute is not supported for Windows Forms applications.

May 20th, 2009 No comments

Last night we worked on ClickOnce deploying an application. The application is a connector between two standard systems, one for economics and the other is RemoteX Applications. In essence it means that our customers will be able to update their integration with the economic system by ClickOnce.

It is an application because the economic system is designed for small scale enterprises and doesn’t have a server component.

Anyway as we were working on the ClickOnce deployment, and as usual we get a deployment error. This however was a new one:

The customHostSpecified attribute is not supported for Windows Forms applications.

The problem is that the application was compiled for x86 platforms, switching it to all platforms resolves the deployment error. Switching to All Platforms isn’t an issue for us, but I can imagine it becoming a problem if you need to specify the platform.

In that case you would have to look into the mage commands reference:

http://msdn.microsoft.com/en-us/library/acz3y3te.aspx

and work with the -p parameter for specifying the processor.

Performance monitoring of a deployed application

April 14th, 2009 No comments

I had an idea today while working with a performance issue on the REST-service of RemoteX Applications.

In theory having a performance counter with the average execution time of SQL-queries over time. Will allow monitoring of system wide average cost for queries in the system.

That means that overtime its possible to track the changes of the execution times as they grow or shrink during normal production environment conditions. The cost for calculating the average could be relatively cheap to calculate compared to the round trip to the servers, and also the calculation could be threaded of to a different thread, so as not to disturb the worker thread that handles the request to the web server to begin with.

The idea is to examine the changes of the average query time over time, to see if performance of data access is changed between version upgrades, or hardware upgrades for that matter. There are some performance counters built into MSSql that can give data that is somewhat like this. However most of the require heavy load to see any performance upgrade or downgrade. This instead logs an average of the actual execution time for the application.

A benefit with this is that the performance is individual per application, but the actual code or counter could be reused between different applications.

Languages in software

April 1st, 2009 No comments

This is getting out of hand. More and more companies are assuming, that just because I live in Sweden I want to have Swedish localization in my apps.

Sure I do want the date format and the currency format. But I really do not want Swedish words in exceptions, menus or any message delivered to me by software.

I don’t want Swedish to be the primary language on google. I don’t want to have all the exception messages in .Net to be in Swedish (impossible to understand, and the documentation in Swedish is nothing compared to the documentation available in English).

Now when I select where to download IE8, I select Sweden since I assume its the closest download site. However when I do that I’m being punished by Microsoft which insist on sending me a Swedish version of IE8.

Please let language selection be based on user input. If a user says sure I want this in Swedish, its one thing. But just because my closest download site is Sweden? Just because I live in Sweden? Language should be select by the user, and it should be apparent to the user that it is language their selecting, not which country they live in.

Just to be clear, I’m not even Swedish, I just live here.

Tags: