It was a year ago since the last release of logview4net.
This resease was initiated by an error report from a user and due to my development environment I decided to bite the bullet and use a more recent version of the .Net Framework. I will probably do a lot of work on the graphics now that I can use WPF instead of WinForms.
I did not sign this release so Windows will complain about it having an unknown publisher.
To begin the story you should know about the Manifesto for Agile Software Development
These ideas are now more than a decade old and just as most other noble ideas they have morphed into thorny parodies of the original.
A lot of my customers practice Panic Driven Development
Agile valuesWe Individuals and interactions over processes and tools do whatever we're told in response to uninformed panic. Working software over comprehensive documentation fix it when some one panics, unless it's documented.
A while back I made a post regarding InstallMonetizer that turned into some whining about how the bundled installer from them looked.
My intentions with the post was mostly to tell my (complaining) users what was happening but I also had some hope of making a change by speaking about my perceived problem.
In a week or so after posting my complains I got a polite email from Jay at InstallMonetizer wanting to know what they could do to make me use their service again.
(At least for the default downloads.)
There’s an edit from 2013-08-26 at the end.
Over at logview4net.com I have a piece of open sourced software that I’ve made public since 2004. Over the years I’ve probably made less than $10 by having Adsense ads on the page. I’ve gotten $110 in donations over the same period. ($60 last week)
Early last year I figured I should try to monetize it a little bit more so that it could pay for its hosting and a code signing certificate.
Finally I managed to make a new release of logview4net.
Please go HERE to download or check the change log.
This is the first release built without Visual Studio so I thought I should give credit to some of the software making this possible.
Subversion on Sourceforge
As I wrote on logview4net.com: It has been a hectic couple of weeks trying to keep ahead of the script kiddie who has been vandalizing my sites.
I’m still not sure if it is one of my sites or Dreamhost as a whole that has been compromised but my sites there are trashed within minutes after I fix them.
A part from the vulnerability in it self the main factor for my troubles are that Dreamhost is running Apache under my user account.
Today a made a release of jsiServiceManager.
I fixed one bug that manifested itself when restarting a service and one that popped some warning dialogs when stopping a group of services.
When restarting a service it failed to stop it first, it was text-book-stupid. I forgot to negate a condition when checking the service status.
The other one failed when one service in a group was already stopped. It reported all services as already stopped even though it stopped them.
The changelog for release 11.02 is: Fixed:  logview4net keeps redrawing view, even though it is Paused Fixed:  F11 vill now hide/show the menu and the form border. Fixed: An exception was sometimes thrown when closing a session window because the listener was not closed before the view. Changed: The string pattern for an action is now a regular expression, not only an exact match. Fixed:  tables list not retrieved when db name contains a period Fixed:  HighlightMatch highlighting is offset by -1
In DotnetRocks #553 Chris Sells said that he had written the code to manage data in Nerddinner.com in various ways.
In a weak moment I promised someone at work to write ‘Hello World’ with Microsoft’s various methods of data access so I was quite happy to hear this.
A quick Google session didn’t give me the code so I emailed Chris and asked it it is available online. He responded fairly quickly and told me that the code is available here: http://msdn.
I have created a site to help the board work in tenant-owner’s associations here in Sweden and I really want it to take off. There is enough functionality in there now to let people in, so I guess it’s time to start that weird people part called marketing. I wish @garyvee had written more about how to hustle. At least I am passionate about it. If people gets me started at lunch I am talking about it like there’s no tomorrow.
A friend of mine, that I’ll keep anonymous, asked me to help her with an ASP page that didn’t work. The changes she made wasn’t visible when she ran the script on the server. I got most of it running on my local machine and thought there should be no problem running it on the production server. A couple of hours later the ASP file contained nothing but plain HTML and it still wasn’t working.
Please let me know how you are using logview4net and what more you want it to do.
I know there are some who use it to monitor and consolidate Apache web logs. One user told me he monitors the chat log of his MMORPG with logview4net running on a second monitor. Another use is to watch for activity in an ftp archive.
How are you using it?
Yesterday I made a new release of logview4net my multi channel log monitor. I got a request for a TCP listener in addition to the UDP listener that was already there. It actually wasn’t much work; First I copied the UDP listener, then I copied some code from the MSDN documentation. I haven’t done any real testing though so if you want a stable TCP listener please try it out and give me some feedback.
When do you really need a reporting engine like Microsoft Reporting Services or one of the Data Dynamics offerings?
I’m working with a customer to rewrite an old application that is used to collect and publish a lot of data.
Some of the data is easy to pull from the database, but needs complicated layout. Other data is hard to get out of the database, filtering is ad hoc and it is published without formatting in an Excel spreadsheet.
Get your fresh copy from SourceForge.
I need some help designing part of the GUI for the next release.
The changes in this release are:
Fixed:  The part “User Interactions” in the settings dialog doesn’t expand if one adds more patterns.
Fixed:  Manage actions missing scrollbar
Fixed:  FolderListener: logview4net crashes if an additional file …
Fixed: Http authentication in the RSSListener
Fixed:  Save dialog default folder
According to Computerworld the technology in Windows Azure will be part of Windows Server in the future. I really hope this will come with a service pack about the same time Azure is released for commercial use.
By keeping the entry level pricing low, or free, this is a perfect way to get students and start ups on the Microsoft train. It doesn’t come as a surprise since Microsoft makes its money from selling licenses, but it’s nice to get the information out.
I’ve been involved in a couple of projects where SourceSafe was kicked out. In most cases there were long discussions on how to handle the history in SourceSafe. Most developers seems to manage without migrating the history, but there has always been a vocal minority that desperately want to have the history migrated.
When dealing with this it has struck me that every project that was in favor of migrating the history also was missing decent release practices.
Cloud computing as it is presented by the big vendors right now looks a lot like time sharing of main frames. In the previous post I wanted Microsoft to offer Windows Azure for in house hosting. That would really shorten the time span to repeat the time sharing history of companies buying parts of the capacity of something expensive and then affording to have all the capacity for them selfs.
Windows Azure is Microsofts take on Amazon Elastic Compute Cloud and Google App Engine.
All these services offer companies to host their web based applications in ‘the cloud’. For Amazon you upload a virtual machine that you can start as many instances you need of. Google chooses to only allow Python code that is then distributed over as many cores as is needed for the moment. Microsofts solution is in between.
I bought a Sansa Clipa couple of days ago because I didn’t want to carry around my cell phonejust to listen to podcasts.
A ‘feature’ of the Clip became a major pain for my podcast listening though. It will take all MP3:s that has ‘podcast’ as category and treat them in a special way. It will do that even if they are referenced in a playlist. It is realy annoying to find the playlist created by jsiPodFetch empty on the player.
A couple of days ago a colleague called me because the session state kept disapearing in his ASP.NET application.
He was running the application in a virtual machine and had a nagging feeling that this was the cause of the problem.
A few basic questions later it struck me that he probably had not changed the memory settings of his virtual machine.
It was still running on the default 128 MB so every time he reloaded the offending page the ASP.
(Edit Dec. 2010) I didn’t coem arount to recreate the GUI in WPF, I find it more valuable to make it run on top of Mono instead. (end edit)
I am rewriting the GUI and recompiling everything for .Net 3.5
This will remove a couple of the existing bugs and hopefully not introduce to many new ones.
If there are things in the GUI you would like to change now is the time to tell me.
Tonight logview4net passed 10 000 downloads on Sourceforge.
There are some open bugs so there will be at least one more release this year.
Next year it will probably be moved to .NET 3.5 and made able to route messages.
Comments: Josef Assad January 23, 2009 at 8:33 pm Fantastic! I keep on making the case that we in Ramböll have deeper open source experience than we have with proprietary stacks and technology culture, but that it’s just not visible.
I started a project on SourceForge for jsiServiceManager yesterday. You can find it here.
The currently released version is the same one as on jsiSoft. When I do the next release I will link to SourceForge.
Speaking of the next release…
I have added the functionality I wrote about in an earlier post but I haven’t tested it very well with services. It works as a charm with all my auto starting applications though.
… and it takes forever to merge the Help Index.
I just want to install the Team Explorer and do my stuff. Why do I have to wait an hour to merge the help index? In my opinion that should be done on a low priority thread after the install is done.
I used to run a small hack I made in Delphi that delayed the start of auto starting programs in windows. It really shortens the time from power on to a workable browser.
My current install takes forever to boot so I am working on adding that functionality to jsiServiceManager.
It is a very simple scheduler that allows you to delay the start of both plain applications and services. Initially i was about to add the option to repeatedly start an application but that is best left to the scheduler in Windows.
We have all been part of the blame game, by our choosing or by the actions of someone else.
In todays Dilbert, Wally takes it to the next level.
I work as a consultant and beyond the instant irritation I actually find some amusement in watching the blame game in action. At least when I am not a central player.
I’ve had to work with people that CC’s and forwards every mail to a supervisor (or a hand full of peers) and insists on the same policy for booking meetings.
I just had a doh! moment.
In .Net the System.IO.Directory object has a GetFiles method that returns all files from a directory. I used to pair that up with some recursion to get all files from all sub directories. BUT, heres the doh!: GetFiles has an overload that takes a SearchOptions parameter so that it can return the sub files directly. So go back to your old unnecessary recursive code and do it the .
I used to run jsisoft.com (and jsisoft.se) on Wordpress, but since the content is very static it felt like overkill. Now I have all of the site, including all file releases, in a Subversion repository. This way It will be a lot easier to have the application documentation in line with the current release. It also allows me to revert to an older version if (when) I screw up. To support the development of these applications I will keep the ads, even though there is almost no one clicking them.
Someone Googled for ‘better than logview4net’ and ended up on my blog. It must have been an anticlimax to look for something better and end up on the developers blog.
There is a java application called Chainsaw that is part of the Apace Logging Services. I don’t know about all it’s features but it inspired me to create logview4net.
I know there are some performance issues with some usage patterns. If you think you are on of those users please write a comment and use a WORKING email address so that I can try to fix your issues.
I’ve been rambling about Continuous Integration a couple of times before and I just noticed that I have misspelled Continuous every time so I guess I’ll just have to go through all of my old posts and correct that. I have, on the other hand, gotten a lot of Google traffic from fellow misspellers around the world.
Here’s a google search with misspelled articles, and here’s a search with the corrected ones.
… and here are the relevant release notes:
Fixed some sloppy null exceptions
Uses a newer version of jsiAppUpdater to enable localized web site.
Fixed an error whith the state image in the app. window
Enabled manual sorting of the services within a group.
Starting a group will start the services in the display order.
Stopping or Pausing a group will stop or pause the services in the reverse display order.
I use an overridden button for the flat buttons in jsiPodFetch and I had forgotten to call InitializeComponent in the constructor that gets called by the designer. This has the nasty side effect of making the control disappear from the form.
The underlying error was corrected before I released 8.04 but I missed one form when I checked for missing buttons; The form to confirm a new feed.
Old users probably never noticed since they have their feeds configured already, but new users got a modal form without button or control box.
Update: Now there is a working installer.
The latest release of jsiPodFetch has a broken installer. I uploaded the previous version while I’m fixing the error.
I had forgotten to add some files to the install package. The application will load, but it will have a blank main window.
I am really sorry for any inconveniences this has brought you.
I will re-release 8.04 later today.
Today I launched the Swedish sister site of jsiSoft. It is at jsi.se and all of my software that is translated to Swedish will be published there.
At the moment the screenshots for jsiPodFetch are still in English but they will be replaced real soon.
The contact form on jsiSoft.com has been broken for a while, but it should work now. If you have tried to get in contact with me through the About / Contact page on jsisoft.com and I haven’t responded; please try again. I usually reply to email within a day whether or not I know how to answer a particular question.
My apologies for any inconvenience this may have caused you.
After some indications from a faithful (thanks Bill) user I found a perceived ‘hang’ in logview4net; If you load two large files (>500 lines) it will hide the progress bar for the second file. I have fixed that so now it doesn’t appear to hang while loading the files. It is still unusable until both files are loaded though.
I have to implement some kind of auto sizing of the buffer and then I’ll do a new release.
I have changed the license for logview4net from BSD to Artistic License 2.0. As far as I understand these licenses this means that you previously could do just about whatever you wanted with the logview4net and now your freedom is limited to your own organization. That is: You may still freely distribute the unmodified binaries, but you are only allowed to distribute modifications within your organization.
The reason for this change is that I don’t want anyone to repackage my stuff and make a lot of money from it.
Wow, the releases are coming fast now.
Today I released a new version of logview4net:
CHANGELOG: 8.02 Request:Show short filename on prefix-filename Fixed: It is not possible to change the buffersize in the viewer config window. Fixed: HighlightMatch only formatted the first occurance of the pattern in a message. Fixed: The textbox reverts to default format when enforcing the buffer size Added a Play Sound action that will play a PCM Wave File on pattern match.
Today I released jsiServiceManager at jsiSoft.com. It is a free application that helps you manage Windows Services.
It allows you to Start/Stop/Pause/Restart Windows Services from a context menu that lives in the system tray. You can group services and hide groups where all services doesnâ€™t exist on the current computer. This allows you to manage several computers with the same configuration file.
The Microsoft .Net Framework 3.0 is required so the installer will direct you to its download page if it’s not installed already.
Here’s a one week old post I forgot to publish:
I did some performance testing and fixing in logview4net today, but I threw away the baseline performance report. I managed to shave some processing time, but I only kept the previous report so I am not certain how much I saved. It’s a stupid mistake but hopefully I’ll not make it again now that I’ve told you about it. Save your baseline for future comparison when doing performance optimizations.
New year, new release.
This release incorporates the performanceÂ fixes that were maid last week after some user feedback.
I still have no intentions to turn logview4net into a full featured log parser, but now it can handle much bigger datasets than before. If I get some bright ideas it might get faster still. The problem is that I load all existing data into the textbox that shows the data. So if you add a file or SQL listener and there is lots of data already there and you choose to show it all; logview4net will treat each row as a separate message and show each message one at a time.
I recently got a message from a user who had performance issues with logview4net when using the pause function in combination with lots of incoming events. Since pause is probably mostly used in situations when there are lots of events I guess more users than Bill and I have noticed it before. I have two cores on my main machine so I usually just let it be until logview4net has recovered by it self.
I am thinking of releasing logview4net under a commercial license as well as the BSD license I am using now. This would enable users in organizations that dislike open source to use the application anyway.
Besides the political issues I need something else to motivate an organization to pay for something that is given away for free. There is at least one new listener coming up and I could definitively release updates earlier to commercial users.
I’m reading Pro BizTalk 2006by Apress and a section in the chapter about setting up a new BizTalk project made me a little upset.
The author thinks it is a disadvantage that: ‘A formal build-and-deploy process becomes essential.‘
WTF; in an organization big enough to think about, and afford, BizTalk I would say that a formal build-and-deploy process is a prerequisite. Since BizTalk is a lot, if not all, about integrating different systems and organizations having a strict configuration management is essential to keep the cost down and the quality up.
I’m inventing a wheel today.
My current project needs to update itself over the Internet but I don’t want to have a Click Once install. The launcher will incorporate the licensing scheme I created for jsiPodFetch and most of the updating functionality from jsiPodFetch and logview4net.
The launcher might be installed via Click Once, but I think it will need a little to much privileges to run in the sandbox.
Yesterday I slipped out a new version of logview4net. It was just a very small bugfix. I had lost the checkbox for adding a filename to the listener prefix in the settings for the folder listener.
Big ups to Paul who told me about it.
Last Thursday I took the 70-235 exam from Microsoft and as the post title hints I passed. I haven’t really looked at BizTalk much since it was in Beta a couple of years ago. I did some workshop like sessions with a couple of our customers managers about it but we didn’t get any real BizTalk cases back then. During the years I have been working on other things and some colleagues of mine has taken the BizTalk jobs.
This week I moved part of my web sites to Dreamhost. The outage on this blog (and probably my Swedish counterpart) was because I forgot to change the blog url in Wordpress. It took a while for me to notice because of the time it takes for some DNS servers to update.
Otherwise everything worked perfectly. I migrated my Wordpress blogs by exporting/importing all content. Luckily the export files didn’t exceed 7mb so I had no trouble importing them.
I just uploaded a new release of jsiPodFetch.
CHANGE LOG 7.44 - Enabled two simultaneous downloads. Might be more in the future. - Made it possible to stop copying files to the player while syncing. - Feed URL is now emptied after a click on add. - Fixed a bug that prevented some feeds to be verified. - All actions should have a wait cursor now. - A copy of the settings file will now be made when loaded successfully.
In my last post I wrote about my corrupted settings file in jsiPodFetch. In the long term I intend to save the state in a different way from what I am doing now. To minimize the discomfort if/when the current solution fails I started to make a copy of the settings file if it loads successfully on application start. So the worst case scenario of failing settings is now that the last session is lost.
The settings file for my installed jsiPodFetch was corrupted today. I probably turned of my computer while it was still saving the file. Since I know the inner workings of the application there wasn’t much of a hassle for me, but since application didn’t start at all I thing other users will just stop using it if this happens.
At the moment I store my settings in a serialized class. One of the properties of the settings class is a typed DataSet.
This week I had the opportunity to introduce a recently employed colleague. He came out of school when there were almost no programming work available. Being a smart guy he has nurtured his programing skills while doing other things to pay the bills.
I really like spreading the little knowledge I still have. It feels like I have forgotten a lot more than I remember. This week I worked on a couple of Visual Basic 6 applications.
I just got handed a click event with 19 pages of code. Yep, you read it right: nineteen pages!
What can I say? My need for a refactoring tool that works in Visual Basic 6 became immediate. Luckily I found CodeShine through a little googling.
It doesn’t do a lot, compared to Refactor! and Resharper, but the things it does are invaluable. Its functions are: Extract method, Introduce Explaining Var, Extract function, Localize module variables and Rename.
This week I had to get Excel to run as a server object to serve an ASP.NET solution that I migrated from .NET 1.1 to .NET 2.0 and moved to a new server. Please spare me the comments on running Excel on the web server. That decision is/was not mine to make. Anyway; I got really reminded of how much I forget when I am not working with it. I think I once new all the COM-errors I encountered this week by heart.
It is painfully slow to do disk intensive things in a virtual environment on my laptop. The disk, and hence the laptop, is getting very hot. I forgot to bring my Zalman laptop cooler to work today. A mistake I get punished for now. It is not just hot as h..l it had the sound characteristics of a hairdryer. With the cooler attached I have to stress the laptop a lot before it gets really hot.
The last release wasn’t thoroughly tested and this morning I found a nasty bug that prevents the application to start on its first run.
That is a god way to get rid of users, isn’t it?
I added code in the last release to check for the device name of the player. That way the application can find the player even if the drive letter is changed. If that happens I replace the last drive letter with the current drive letter in the player path setting.
About a week ago I was offered help to translate logview4net to Russian. The offer came from a gentleman owning an open sourced project for translating .NET applications.
Of course I was thrilled by the offer. I had really thought about localizing it, but since English and Swedish is all I know I haven’t put it on top of my to do list. Most, if not all, Swedish users of logview4net are probably happy using it in English.
Writing the previous post got me thinking:
I would like to have an open sourced free hosted translation service available. It should offer procedures and tools for localizing .NET applications. A developer should be able to upload a bunch of strings and some context describing text so that volunteering individuals could translate them online. It could be set up so that you got one string translated in return for translating another string.
Today a made a new release of logview4net.
I got an error report from a user who had set up a UDP logger with log4net and got loads of weird characters in logview4net. I had hard coded Unicode and log4net was sending something else.
This led me to add a drop down list with available encoders to the Udp Listener. I might do the same for the file listeners in the near future.
I got reminded about the ??-operator in C# today. It is a coalesce operator and works like this:
string a = null; string b = a ?? "Woops, a is null."; Console.WriteLine(b); <- Will write 'Woops, a is null.'
I really need to read the language specification at least one time per year to remind myself about all the things I don’t use frequently. It is way to easy to keep on solving programming problems with the same old tools all the time.
Today I added Rubiverse, a podcast about Ruby, to my jsiPodFetch feed list.
I’ve recently learned some Ruby and I like it a lot. I will definitively install IronRuby when it is properly released. Currently I’m using ‘real’ Ruby for my jsiPodFetch build scripts and for aggregating data from my weblogs. It feels a bit awkward to install something like Ruby just to do some scripting in Windows though, maybe I should look at Powershell instead.
This article will describe how I have implemented license keys in jsiPodFetch. I hope it will help someone else trying to do this. It would also be nice if someone reading this gave me feedback if this solution doesn’t work in practice since I haven’t analyzed this solution thoroughly enough to swear by it, but I think it will work.
Through out this code there are places that are open for variation.
I will probably start differencing the functionality for registered and unregistered users of jsiPodFetch. Since it doesn’t do much there is not many functions to take out. I will start by directing unregistered users to a downloading page when there are upgrades instead of downloading the new installer automatically. Nag screens are also a viable solution, but I will give that a second thought. Nag screens has converted me from a free rider to a paying customer some times.
I just did a new release of jsiPodFetch.
Unless I get distracted by user reported errors the next release will include support for downloading media via BitTorrent.
CHANGE LOG 7.37
Fixed an error because of mismatch between the meta data and the file system that could happen if a user for some reason killed the process in the wrong millisecond.
Added call in uninstaller to remove jsiPodFetch related data
The current job is about defining/refining and documenting a system that is a couple of years old. I was a big part in building it initially but it has grown without much control since then. As I see it, the main reason it is hard to get a grasp of it now is because there is (or has never been) a central role to consolidate the development. For each little project there has been a new project manager who only wanted to do his part at the lowest cost or him.
I’ve got the old PC up and running again. It was no easy quest to find a matching motherboard for an ancient computer. I ended up buying a used board. The current plan is to run it as a file- and svn-server mainly, but I had to keep running XP so the kids can do their stuff on it. I will probably have the svn repository on the system disk and back it up daily to the other disk.
I’m using OpenSVN to manage the source code to some of my projects, but it has been down for a couple of days now. That is a real pain. IT is (was) a free service so have expected that it would shut down eventually.
I don’t have a computer that I can run SVN on. I do all my programming on the same machine so I could possibly run SVN or (evil thought) SourceSafe on that and use Diino for external backup.
I encountered a couple of severe errors in jsiPodFetch this week so there was a new release yesterday.
Changes in 7.36
When adding new feed it didn’t show up in the list. Don’t download items marked as done. Woops; If a feed was deleted while one of its files were on the player; the app couldn’t display any items. Added a content menu to the tray icon. Added a play button when an item is selected so that one can listen to the media on the PC Extended tooltip on ‘blue light’ when downloading content.
Today I did the first service release of my podcast downloader; jsiPodFetch. The new version is 7.35 (I use year and week for version numbering) and this is what i have fixed since 7.33:
App disappears when minimizing.
Blue ‘light’ turned of after first downloaded item. Even if there were more.
It takes to long to open the initial window.
Items in new feed wasn’t downloaded until restart of application.
Now that I have released jsiPodFetch I have some marketing to do. It is definitively a task I am not comfortable with. I even find it hard to explain what the program does in an understandable way.
In reality the application doesn’t do very much and that is what I like the most about it. I think (hope) that people will be able to use it without much explanation.
…anyway; the itch I had was that I had trouble copying podcasts to my phone and keep track of what I had listened to.
At last I have released a beta of jsiPodFetch:
Make it easier to listen to podcasts with your phone or media player.
jsiPodFetch will download the audio files from your podcast RSS feeds and create a playlist for optimal listening order.
Downloaded media is stored on your PC until you mark them as done.
jsiPodFetch is in beta and can be downloaded here.
More information and documentation will be provided shortly.
My upcoming shareware application is almost ready. There is some more testing to be done in Windows 2000 and Windows XP. I am also going to try to run it in Ubuntu using Mono, but that will come after the initial release. I’m arguing with myself about whether I should implement the GUI in WPF in a future release or if I should stay with WinForms so that I can run with Mono.
When I moved logview4net to SharpDevelop I got the dreaded CodeDomSerializerException in the WinForm designer. It complained about resources not existing.
Since everything worked in Visual Studio and the application compiles and runs I started looking for other things. After some digging around I found that the properties in the typed resource class was declared internal. I changed the modifiers to public instead and now the WinForm designer works again.
I just made a new release of logview4net.
New features are:
A StdOut / StdErr listener
A block ignore action
Goto jsiSoft.com to download it.
7.28 Fixed: Add an IgnoreBlock action that should have an IgnoreStart + IgnoreEnd pattern Fixed: Make it possible to ingore events on pause instead of caching them. Fixed: Make the cmd-line parser use the StdOut-listener for .exe-files Enabled the StdOut listener Fixed a dispose bug on all listeners.
Jeffrey Palermo states in his post ‘Baking requirements - Developing with raw ingredients is waste’ that requirements has to be thought through before they are presented to the developers.
I think that is a statement that holds true for all levels of requirements. Software development is intangible and it is perceived that changes are easy to do. This leads to bad requirements from everyone. Customers doesn’t think through their needs and expectations before starting software projects.
For my upcoming release of logview4net I did the manifest magic to elevate the process to run as administrator. I did this because I kept getting SecurityExceptions when I wanted to monitor the EventLog.
I have however decided to remove the manifest so that a user would have to explicitly run the application as administrator to monitor the EventLog or other locked down resources. The reason being that I thought it was annoying to confirm the elevation when I didn’t need it and I felt like I was cheating.
In light of the recent controversy of using plugins in Visual Studio Express and getting some inspiration after listening to the DotNetRocks episode with Christopher Wille on SharpDevelop I thought I should give SharpDevlop a chance again. I am working on two utilities that I plan to release as shareware and as I do not want to rely on tools supplied by my employer I have been using Visual Studio Express until now.
Make sure your automatic, daily and continuous, build actually works.
It is just like checking that your backup procedures actually works. You do not want to find out either one of those is not working when you really need them.
This weekend our Team Foundation Server was moved and everything looked all right on Monday morning. There was no problem at all to connect to the new server and the Cruise Control Tray icon was a comforting green.
Make sure your automatic, daily and continuous, build actually works.
It is just like checking that your backup procedures actually works. You do not want to find out either one of those is not working when you really need them.
This weekend our Team Foundation Server was moved and everything looked all right on Monday morning. There was no problem at all to connect to the new server and the Cruise Control Tray icon was a comforting green.
Here Dan Fernandez explains the technical reason Microsoft claims TestDriven is in violation of the EULA.
I had not understood how much of a hack the integration is. Hijacking a process and injecting code is not something you do by accident.
So my rule is in favor of Microsoft, but I hope they can solve it without taking TestDriven out of business.
This article is revisited here.
There is an ongoing conflict between Microsoft and Jamie Cansdale regarding TestDriven.NET.
I think Microsoft is really wrong here. Is anybody really going to buy one of the non-free Visual Studio SKU’s because they want TestDriven to work? The companies that are so cheap that they don’t use the ‘real’ Visual Studio SKU’s now will probably not buy them anyway. It is still possible to run the unit test outside of Visual Studio so the cost isn’t justified for TestDriven alone.
I attended Developer Summit last week and went mainly to the architecture sessions.
One trend I noticed was the wake up call for developers to close the gap to the business side of their organizations. It is a line of thought I have taken for granted, but that may be because I worked for five years as a bean counter before I became a developer. The colleagues that came straight out of some tech school and never saw the process and people side of software development might need the wake up call, but calling it a new paradigm to see software as an enabler of business is to devalue a lot of talented people around the word.
Lots of times I have been involved in lengthy discussions about how to solve a problem and trying to guess what the user really wanted based on his initial request. It is not uncommon that implementing all of the possible solutions and lettings the user choose the one that satisfies his needs would have been done in a shorter amount of time than discussing it.
I’m probably rambling but if we have a continuous build, that is releasable, we could in many of these cases give the customer builds with all of the solutions and let the customer decide.
I have quite often ended up in situations where the salesman has promised new or existing customer non-existing functions. Functions that took lots of overtime and ugly code to get done. When developers, more or less loudly, protests against this practice they are either laughed off or told they don’t understand the sales process.
Quite often these forced solutions are not tested enough so the client isn’t satisfied anyway.
Assuming you took my previous advice and created releasable daily builds, I suggest you deliver what you have at the moment and update with new functionality as it is done.
I made a guest appearance at an old client recently and found that they had a handful of critical errors that were there only because no one had read what I wrote a year ago.
As I wrote here:
It is not enough to use the wiki to cross reference all the information about the current state, we also need to write down the discussions and misshaps that lead here. That way we can turn these vast amounts of information into knowledge that is transferable.
I am by no means a security guru, but can all you developers please end your stupid habit of saving passwords in clear text to the database.
It makes my cry when I click ‘forgot password’ on a web site and get a mail with my old password in it.
Make a hash out of the users password combined with a random value, called salt. Store the salt and the hash in the database.
Share and store documents… Free.
When you do daily builds, a practice I think is essential for high quality software development, it is important to make sure the build is so complete and easy to find that the test team and sales force can choose what version, and when, to install by them selfs.
It is an accepted truth that the longer you wait to fix an error the more expensive it gets.
Howard van Rooijen has created a template for creating listeners to Team Foundation Server events. This might come in handy since I was thinking of creating a TFS Listener for logview4net.
I am about to separate the SQL and EventLog listeners to an assembly for MS listeners. A TFS Listener is exactly what that would need.
Add: Share and store documents… Free.
There’s been a hectic couple of weeks. I’ve made three releases in two and a half week so the version number is ahead of the calendar. I finally got some response from users so I’m very inspired to make logview4net even better.
Please go here to download.
The latest changes are:
7.20 Added some command line configuration. Documented in the help file. Made it possible to associate the .l4n extension with logview4net
Visual Studio Express Editions The free editions of Visual Studio are just fantastic. If you’re developing for Windows they are the best free IDE:s out there. TortoiseSVN Lets you use Subversion from Explorer. It doesn’t get much easier than that. With OpenSVN you have no excuse to program without source control. Testdriven.NET Run your unit tests from within Visual Studio. You don’t have to release buggy code because you are using free tools.
It is quite interesting to see how developers are affected by a projects perceived market value and internal company status.
When a new project is started people are usually open for new ideas and most of the involved does things to move the project forward. A direction that is not allways the same for an individual as the group, but at least it’s moving.
When the project has been going for a while and it hasn’t delivered as planned, decisions might be made to rewrite parts of the system, partly to show the market that it is able to adapt and partly to get the staff moving again.
When you have more than one project in your visual Studio Solution you often get in trouble because the information in all AssemblyInfo file is almost identical.
Here is a tips on how to use Visual Studio to manage a central file with the information that should be shared across project and project specific AssemblyInfo files.
I’m trying hard to not make this blog a place where I drop links, but some tools I just can’t ignore.
GhostDoc 2.0 has been released:
Roland Weigelt : GhostDoc 2.0.0 Released
… and there is a lot of fuzz in the cloud because of these: 09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0
We’re doing some static analysis with NDepend as part of our daily build and the cohesion measurement caught my interest.
When googling for cohesion I stumbled upon some articles discussing reading and writing normal text (normal in this case meaning not source code).
The concepts that I fell for are cohesion and redundancy.
Here is what Wikipedia has to say about these words regarding programming:
Cohesion: a measure of how well the lines of source code within a module work together to provide a specific piece of functionality.
Since I’m going to release the software as shareware I have to come up with a good incentive for the users to pay for it. At the moment I’m trying to decide if I should start showing ads when the trial period is over or if I should just make it obvious that they are using unpaid software. Ads could create som revenue, but it might equally well make people sick of the application.
I’m slapping localization on to an existing product and needed a way to have my culture neutral resources in a satellite assembly. I can’t use embedded resources because I am extracting data from the compiled assembly to use for the resources.
The solution was to use the assembly attribute: NeutralResourcesLanguageAttribute to indicate what culture should be used as the default culture and use the UltimateResourceFallbackLocation enum to indicate that it should fallback on a satellite assembly.
I’ve been hearing, reading and thinking a bit about discoverability lately.
This essay sums it pretty well. He goes into some discussion about limiting the choices by prioritizing different features and making basic decisions for the user. Like making the stearing wheel more discoverable than the fuse box.
I think that making these decisions are not only about usability they are really the decisions that differentiates you from your competition.
I’ve got a couple of ideas for other programs so I registered a domain (jsisoft.com) where I can host them instead of one domain per application which probably would be better from a marketing perspective. I will prefix all the program names with ‘jsi’ to (hopefully) avoid other peoples trademarks.
It’s probably a couple of weeks of development time left before I make it public, but I have got the plumbing with paypal from jsisoft.
I am really annoyed that there is no good way to show some HMTL in a winform. I’ve got some data and part of it is snippets of HTML. Do I need to save that on file and use the monstrous WebBrowser control?
I’ve started developing a small application that I’m going to try to sell as shareware. I don’t think it’ll make me rich, but it would be fun to have the web hosting bills paid and the ability to by an occasional toy.
There is a lot more to do when the program is to be for sale than releasing it on SourceForge. That is perhaps an unfair attitude towrds open source, but I think people have a greater tolerance for weirdness if they didn’t pay for the application.
I will make a new release of logview4net this weekend.
I have added a listener for folders andÂ the applicationÂ will look for updates in the future. I have also started to move around stuff internally and begun implementing a dynamic form for configuring the listeners. Right now the Udp listener uses an almost done version of the dynamic form.
When the dynamic listener configurator works I will probably implement a new GUI with WPF instead of WinForms.
We’ve got chickenpox in the house so I guess I’ll be home from work a lot.
I’m restructuring logview4net so that it’ll be easier to write tests for the core functionality and easier to implement a new GUI in WPF.
Edit 2012-01-17: OpenSVN seems to be down. I moved to xp-dev.com a couple of months ago. They have a free plan that works like a charm.
This was a plug for OpenSVN a free subversion repository.
I use it for keeping my university work so I can reach it from all my computers and revert to old version of reports and source code.
Sourceforge also uses subversion, but I guess my school work doesn’t really apply as an open source project.
Nightly builds are almost useless if there is no collective responsibility to keep the code in a buildable state.
Why should I even bother to make sure my code builds before checking in, when the build has been broken for a week and no one, who can/should do anything about it, cares?
Is it the responsibility of the ones who do care to be a PITA, or should we take it upon our selfs to fix all error just because we care?
When doing pc based development I think that having a working build environment that you can quickly recreate on a developers machine is very important.
I also beleive that making it possible to have more than one instance of said environment on any computer should be a prioritised goal.
save a lot of time when introducing new developers.
make it easy to do more than one thing at a time.
… or you get an ‘Object not set…’ when trying to expand the DataSource list in the properties window,it might be because you have a corrupt datasource in your solution.
Press ALT+SHIFT+D to open the data sources window.
If there is one with a yellow sign in front of it; delete it and Visual Studio should start working again.
I got a corrupt DataSource when I imported a solution to TFS.
Attrice Corporation Team Foundation Sidekicks
From the site:
Team Foundation Sidekicks is a suite of tools for Microsoft Team Foundation Server Administrators and advanced users providing Graphic User Interface for administrative and advanced version control tasks in multi-user TFS environments.
In the field of computer software the term software build refers either to the process of converting source code files into executable code or the result of doing so. Release:
A software release refers to the **distribution**, whether public or private, of an initial or new and upgraded version of a computer software product.
If your Visual Studio instance hangs when doing operations that normally show a dialog, it might be because you have multiple monitors and the one Team Foundation wants to show the dialog on is not connected or you have swapped the primary and secondary monitor. This is actually not a TFS-only problem I’ve seen the same hang in other applications too so I guess it’s Windows that hasn’t figured out that a monitor is missing.
you can find it here.
logview4net is a log viewer. It can monitor files, incomming UDP traffic, the EventLog, SQL-Server tables, Atom and RSS feeds.
logview4net needs the .Net 2.0 Runtime to execute.
FEATURES: Listens to a UDP port either in broadcast or single endpoint mode. Monitors an eventlog, uses events on the local machine and polling on remote machines. Monitors a log file. Doing a tail using polling. Monitors a table in a MS SQL-Server database.