Label Cloud

Wednesday, May 30, 2007

New version of Windows Live Writer is available

Beta 2 of Windows Live Writer is available. Great new look. Tons of new functionality

From the WLW website


New Authoring Capabilities

  • Inline spell checking
  • Table editing
  • Ability to add categories
  • Page authoring for WordPress and TypePad
  • Support for excerpts and extended entries
  • Improved hyperlinking and image insertion
  • Paste Special
Integration and Compatibility
  • SharePoint 2007 support
  • New APIs enabling custom extensions by weblog providers
  • Automatic synchronization of local and online edits
  • Integration with Windows Live Gallery
  • Support for Blogger Labels
Plus...
  • New look and feel
  • Available in 6 languages
  • Improved accessibility and keyboard support
  • Many other frequently requested enhancements!

Get it at http://writer.live.com


Share/Save/Bookmark

Tuesday, May 29, 2007

LogParser

I just added an essential tool to my toolset. Microsoft LogParser. This great tool allows running of SQL queries against a variety of log files and other data sources. Here's an example query

 

SELECT date, REVERSEDNS(c-ip) AS Client, COUNT(*) FROM IISLOG.log WHERE sc-status<>200 GROUP BY date, Client

The same can be ran against event logs, registry, csv, xml files, and much much more.

The link to Microsoft download site is: http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

There is also a great helper site: www.logparser.com with a large collection of scripts to help with the more complicated admin tasks.


Share/Save/Bookmark

Tuesday, May 22, 2007

ScriptDB

I was looking for a free utility to script database objects from command line. There aren't that many of them out. However, I did find one that was very good at getting the job done and came with full source code. ScriptDB from ElsaSoft.

I made a few changes to the code to make it easier to use the ScriptDB in the build scripts and accept more options from the command line. I was spoke with the original developer Jesse Hersch and he agreed to publish the new application to on an open source repository.

So now: Please check out the openly available ScriptDB on CodePlex at http://www.codeplex.com/ScriptDB. The application does almost everything I need from a command line tool, and now that it is easily available to the community, hopefully it will be improved farther.


Share/Save/Bookmark

Thursday, May 10, 2007

Upgrading application settings

.NET 2.0 has a very nice support for storing custom application settings. It provides a read-only access to the application level settings and read-write access to the user-level settings. For more information check out http://msdn2.microsoft.com/en-us/library/8eyb2ct1(VS.80).aspx

One of the bugs I had to deal with in QueryExPlus is that whenever a new version of the application was released, the settings would get reset to their defaults. The culprit is that settings are stored in the C:\Documents and Settings\\Local Settings\Application Data\\_Url_\\user.config

The location includes the location hash and the version of the executable. The code to keep the old settings is pretty simple.

Add a user level setting called First_Run. Make it boolean and set the default to be False

If this is a first run of the application version, call Upgrade() function, set the First_Run setting so you do not do it again and save the settings.

if (QueryExPlus.Properties.Settings.Default.IsFirstRun)

{

Settings.Default.Upgrade();

Settings.Default.IsFirstRun = false;

Settings.Default.Save();

MessageBox.Show("Settings Upgraded");

}


Share/Save/Bookmark

Monday, May 07, 2007

Asynchronous ForEach and Funky Anonymous Delegates

I was working with some code based on an excellent article on multi-threaded technics in the May 2007 MSDN Magazine. One of the code snippets that was provided is a ForAll routine. For my use, I simplified it a little from the article. The new code snippet is attached

private static void ForAll<T>(IList<T> data, Action<T> a)
{
CountdownLatch latch = new CountdownLatch(data.Count);

for (int i = 0; i < data.Count; i++)
{
int idx = i;
ThreadPool.QueueUserWorkItem(delegate
{
a(data[idx]);
latch.Signal();
}
);
}
latch.Wait();
}

One of the interesting points in the code is the


int idx = i;

It is required, and without it, the delegate will use the value of i that is currently in use by the for loop that surrounds it.


Share/Save/Bookmark

Friday, May 04, 2007

Some thoughts on managing the short and demanding projects

I've mentioned before that I am now a new job, and will be doing some hard core hands on development. May be the development is not really hard core, since I am not doing anything revolutionary, however, for someone who was not writing full time for over 3 years, this sure seems like it.

What makes the task more challenging, are the very different architecture, tight time frame and no time calmly sit learn and think through every detail. So how do you deliver?

I have a certain methodology that I've been using in my development and managerial career and so far it had been very successful in helping me deliver projects. A big focus is on delivery on time. If future can not be implemented on time, it is removed from the list of deliverables, but the timeframe is kept intact. To make this easier, I split the original timeframe into three sections: short, medium and long term. The deliverables are split as well.

The short term timeframe is exactly that - short term. If a whole project is a month long, it is a week. For longer projects, its 3 to 4 weeks. But never longer then a month. The more demanding the schedule, the shorter it is. The deliverables are concrete. If I am not 100% sure that I will deliver, they are not in the list and become a medium to long term deliverables. Once they are set, they do not change unless something critical happens.

At the end of the short term deliverable, the rest of the project is reevaluates almost as a new project. Only at this point, I have the knowledge that was learned during the short term timeframe. The rest of the project gets split up again into short, medium and long.

This way of managing a project allowed for constant on time delivery. If I am not sure I will deliver in the short term, I don't promise it day one. And the item will get reevaluated a short time later. The business is usually happy with the on time delivery that is on time, then a larger promise that is not delivered.

This also allows for reevaluation the priorities. The more dynamic the project, the tighter the timeframe's - the more often the priorities are reevaluated.


Share/Save/Bookmark

Switching gears

I just switched jobs, and my new environment and responsibilities are very different from what I had over the past few years. So my next few posts will be on the switching gears and the differences that are felt.

Here's the preview


Share/Save/Bookmark