Pro's
- It would match my iPhone.
- It's shiny
- I would be cool for 5 minutes (probably in my mind only)
Con's
- No Flash
- No (real) .Net / Silverlight
- Safari on the iPhone is complete shite so I'm not hopeful a bigger version would be any better
- Shiny screen makes it useless for reading books for any duration, unless the lighting conditions are perfect
- No camera
- No USB or SD
- Small capacity - 64Gb is ok but barely
- Support for Exchange mail and calendaring is critical for work use - not likely to see Outlook for i* anytime soon
- Expensive when compared to a comparably featured notebook
- I'm beginning to hate Apple (see below)
Ok, so some of these points are very personal to me, but the point I'm trying to make is this is definately a v1 device. The OS may be slick but some critical features are missing. I have a small notebook that already does more than the iPad. It's cheaper, faster, more capable and almost as portable. But the battery only lasts 6 hours and it doesn't have fruit on the lid.
The thing that worries me the most is that the iPad is produced by Apple. They are such a closed company. They are very reticent to talk about anything that might upset their carefully crafted image and brand. They are overly secretive. They are expensive.
As Apple grows and gains even more dominance over their market slice they will inherit the title that Microsoft used to hold - that of the most hated IT company on the planet. Sure there are still those that believe Microsoft are evil. These are people that don't work with Microsoft products and people every day. Their opinion is based on ignorance and arrogance. Much like me and Apple really.
I have no desire to become an Apple techie. I see these things as consumer devices. Great for doing what they are intended to do but controlled by a maniacle tyrant who won't listen to criticism and will kill anyone who speaks out against them. Much like the Chinese government or Islam.
So now I have painted myself into a corner, I will pobably still get one. Becuase I am weak and easily attracted to shiny stuff and becuase everything Apple does is just soooo cool and fantastic that I can't possibly not have one.
I hate myself.
Day 2 began with more sizzle – lots of announcements and goodies. SilverLight 4 Scott Guthrie - as always – gets to make the best announcements. SilverLight 4 is out in Beta now and release will be 1st half of next year (probably around MIX time I’d guess). Here’s the highlights: - Support for external devices including cameras and microphones. Scott did a fun little demo using a web cam and some special effects. You can also interact with the stream – in another demo that took a snapshot of a barcode and did a lookup for the book.
- Printing. Let me say that again PRINTING!!! Awesome!! Custom print preview also.
- Multicasting support. Don’t know what this is but it got a couple of ooo’s and ahhhh’s.
- RichText, Clipboard (system or app), MouseWheel, Right Click and Drag and Drop. They demoed some of these using an awesome (so I say awesome too much?) Facebook client (the code for which is available).
- Command Manager and MVVM framework. Our SL gurus spend a lot of time getting this basic code working on every significant SL project. This will save many hours!
- HTML Control. Totally awesome! You can use this to display any old HTML including plugins such as Flash. In this demo they played a Rick roll video off YouTube in a HTML control that was embedded in a SL app. Then they chopped up the ‘page’ into a jigsaw and shsuffled the pieces. All this while the video was still playing! Incredible stuff!
- Shared Assemblies. No more sharing of code and recompiling. Assemblies compiled in .Net 4 will be able to be used from SilverLight and non SilverLight apps. Another big timesaver there.
- WCF & REST enhancements including support for TCP Channels!! OMG!
- Intellisence for data binding.
- COM automation via the DLR. They demoed this by creating items in Outlook. Very easy and natural.
- Implicit Styles.
- Keyboard in fullscreen mode.
- Profiling support.
- CHROME support. Ha! Take that Google.
- And best of all – fully trusted applications outside the browser!! WICKEDLY AWESOME!
- Oh and it’s still only ~5MB and it’s twice as fast.
The relevance of WPF is in question now I think. SilverLight 3 now has a 45% install base (that’s 45% of all PC’s on the planet I think). SharePoint and Office 2010 Apart from watching an awesome SharePoint and SilverLight demo involving a racing car that looked strangely familiar there wasn’t a lot of stuff shown. Highlights were using the new tools in Visual Studio 2010 to create SharePoint Solutions. This has improved the experience by several orders of magnitude. Main features I caught: - Sandbox deployments
- F5 compile and debug – no more compile, deploy, activate, run, attach blah blah.
- Can develop without SharePoint installed locally.
Beta is out now. Goodies They demoed a bunch of the latest hardware and some of the cool new things you can do with this gear. Stuff like HD, MultiTouch and many cores. Then they announced that every attendee at PDC would get a free notebook! AWESOME!! I didn’t think this would include me – given the nature of my attendence – but I asked and I recevied! Woo hoo. I love Microsoft.
I’m sitting in a session at PDC 09 on SQL Azure futures. Here’s some notes for me and anyone else who cares. Backups and Clones - Backups are coming. Can now(?) create a clone of a database. Something like CREATE DATABASE fred AS CLONE OF bob.
Operations - API for provisioning – useful for SaaS providers. Great for Multi-tenant too.
- Better deployment and upgrades.
- Data Sync.
- Upgrade and downgrade options between db sizes (1 & 10 GB).
Scale-Out - Woa! TicketDirect mentioned again!
- Dynamic database splits. And merge back of course.
- Additional db size options. Maybe up to 50 GB.
- Multiple db connections.
- Fan out query for multiple db’s.
Other - Support for profiler
- Full Text Search
- CLR
- BI
Sensitive Data - Codename Vidalia – woosh – this went over my head.
SQL Azure will throttle your connections to protect resources in the data centre. When SQL Azure does this is non-deterministic – or at least, Microsoft cannot specifically tell you when it will do this because there are many complicated factors. It could be the number of concurrent requests, the CPU or IO usages, the weather – who knows! In the end it doesn’t really matter – you, THE DEVELOPER, must but be aware of this and deal with it. SQL Throttling is manifested by a dropped connection. This may appear as a Native Error 10054 when you try to open a connection or some other error if the connection is dropped after being opened. To cope with this throttle a retry will normally be all that is required. At the connection and command level this is easy but it can be complicated by unstructured code. So, having a nice clean data layer will make the solution much easier to implement, but this applies equally to ‘messy’ code :) We reused the Retry Policy mechanism that is provided with the Storage Client. In the old sample storage client the syntax was a lot simpler but in the interest of less confusion I wont talk about that. The new November SDK works just as well, but you need to do a tad more work. The following sample is a connection manager that is used by the data layer. using System; using System.Data; using System.Data.SqlClient; using Microsoft.WindowsAzure.StorageClient; namespace MyApp.DataLayer { public class ConnectionManager { /// <summary> /// Maximum number of retries /// </summary> private const int MAX_RETRIES = 3; /// <summary> /// The retry policy for operations that can be retried (sql etc) /// </summary> private RetryPolicy RetryPolicy { get; set; } /// <summary> /// Wait 5 seconds between retries /// </summary> private const int WAIT_BETWEEN_RETRIES = 5000; public ConnectionManager() { this.RetryPolicy = RetryPolicies.Retry(MAX_RETRIES, TimeSpan.FromSeconds(5)); } private SqlConnection OpenConnection(string connectionString) { SqlConnection con = null; try { DieHard.RequestWithRetry(RetryPolicy, () => { SqlConnection connection = new SqlConnection(connectionString); connection.Open(); con = connection; }); return con; } catch (Exception ex) { throw new Exception("Error connecting to " + connectionString, ex); } } } } The interesting part is the DieHard helper class. using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.WindowsAzure.StorageClient; using System.Threading; namespace MyApp.DataLayer { public static class DieHard { public static T RequestWithRetry<T>(RetryPolicy retryPolicy, Func<T> action) { ShouldRetry shouldRetry = retryPolicy(); int retryCount = 0; while (true) { TimeSpan delay = TimeSpan.FromSeconds(0); try { return action(); } catch (Exception ex) { if (!shouldRetry(retryCount, ex, out delay)) throw; } retryCount++; Thread.Sleep(delay); } } public static void RequestWithRetry(RetryPolicy retryPolicy, Action action) { ShouldRetry shouldRetry = retryPolicy(); int retryCount = 0; while (true) { TimeSpan delay = TimeSpan.FromSeconds(0); try { action(); return; } catch (Exception ex) { if (!shouldRetry(retryCount, ex, out delay)) throw; } retryCount++; Thread.Sleep(delay); } } } } DieHard has 2 variants of the same Retry invoker – 1 for void actions and the other for a generic return value. There is a couple of points to mention. The timeout and the number of retries to attempt may vary depending on your situation and other factors – don’t use my 5 second 5 retries settings as the best possible option for you. You need to be aware of transactions. Retries should encapsulate the transaction as dropping a connection will rollback the transaction. So, except for this example of retrying the open connection you should use the retry mechanism at the higher domain level. Enjoy!
This is something I have wanted for a while now. Today I finally got around to doing something about it. I created a simple console application that can execute a SQL script file that you would normally use in Management Studio or SQLCMD. You might well ask why I would do such a thing. - SSMS and SQLCMD is not always available or in the right place
- I don't have the code for SSMS and SQLCMD so I cant change the way they work
In you read my previous post on deploying to SQL Azure then the first point will make sense. The next step is to make this script processing code work in Azure so I don't have to create databases from my client. Hopefully this will speed things up a little or a LOT. Anyways, since I've always wanted someone to write this code and never found any, here it is in case you are in the same boat. class Program { static int Main(string[] args) { string connectionstring = args[0]; string sql; try { using (FileStream fs = new FileStream(args[1], FileMode.Open, FileAccess.Read)) { byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); sql = Encoding.UTF8.GetString(bytes); } } catch (Exception ex) { Console.WriteLine("Unable to read sql script: " + ex.Message); return 1; } string batchTerminator = @"##GO##"; //Regex regex = new Regex(@"(^|\s+)" + batchTerminator + @"\s", RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled); string[] strings = sql.Split(new string[] {batchTerminator}, StringSplitOptions.None); using (SqlConnection con = new SqlConnection(connectionstring)) { con.Open(); SqlCommand cmd = new SqlCommand(); cmd.CommandType = System.Data.CommandType.Text; cmd.Connection = con; for (int i = 0; i < strings.Length; i++) { Console.Title = "Processing " + i.ToString() + " of " + strings.Length.ToString(); //if ((!regex.IsMatch(strings[i])) && (!string.IsNullOrEmpty(strings[i].Trim()))) if (!string.IsNullOrEmpty(strings[i].Trim())) { Console.WriteLine(strings[i]); try { cmd.CommandText = strings[i]; cmd.ExecuteNonQuery(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("O.K."); Console.ForegroundColor = ConsoleColor.Gray; } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Error: " + ex.Message); Console.ForegroundColor = ConsoleColor.Gray; return 2; } Console.WriteLine(); Console.WriteLine(); } } return 0; //Console.WriteLine("Press ENTER when complete"); //Console.ReadLine(); } } } Ok, so it’s not the prettiest or most bullet proof code on the planet, but it works. The RegEx is the key to the process. It’s not perfect – it expects GO commands to separate the batches and you need to have GO on a line by itself. It’s easy to extend this should you wish. [Update] Regex don't work! It’s just too hard to find all the GO’s accurately. Instead, I manually search and replace Go with ##GO##. This is a lot easier/safer to split with. I also removed all PRINT statements from my scripts but you could easily parse these out when processing and have then display as progress messages (no need to send them to the server). Enjoy!
Moving data from one SQL Server to another is a fairly trivial task these days. You have many options – backup/restore the database, SSIS, detach/copy/attach, ADO.Net, BCP, blah blah blah. Moving data to SQL Azure is more challenging. Here is my experience and some details of the solution. The Scenario The application we are creating has a master application database and database per ‘client’. The per client database will be partitioned into many smaller databases – each being a replica of the source database with a filter on one or two tables. The creation of the partitions will require the client application to be shut down for a period of time – not ideal but acceptable. SQL Azure does not (yet) include any support for partitioning or sharding so we knew we would have to create the solution ourselves. Options We wanted to have a flexible partitioning solution so from the outset I thought that SSIS would provide a mechanism that would allow the client to create their own partition rules as required. When I started creating the solution BCP was not available. Trials and Tribulations Before partitioning of the database could be performed it was necessary to move the source database to SQL Azure. Before moving the database it’s necessary to have a script that will create the empty database schema. When I first did this there where no tools so I used the database tools in VSTS to import from the local database and then manually tweaked the script to make it compatible with SQL Azure. These days there is the Migration Wizard on CodePlex which does pretty good (but not perfect) job of migrating your schema and optionally data. Problem 0 Executing the schema script is very very slow. Locally it takes seconds. In SQL Azure it can take up to fifteen minutes. We have tested this from several connections (inside and outside our network and with different service providers) and it’s never been less than eight minutes. Our contacts at Microsoft can run the same script in three minutes. I have some ideas why this is slow and a possible solution… more on this later if I solve it… but for now this is a big problem – 15 x 42 (the number of partitions) = way too long! It’s been a long time since I’ve had to do anything with SQL Server beyond creating databases for SharePoint or EPiServer and SSIS was completely new to me. However, I managed to piece together a package that copied the tables from one database to another. This package called other packages – 1 for each table – that would truncate the destination table and copy the records. Problem 1 Because there we 30 or so packages I used xml package configuration files to specify the database connections so that I could change the source and destination in one place. When running the packages in Visual Studio this would constantly remind me that the connection had changed (when it hadn’t) so I had to turn this off. Not a big problem but annoying. Problem 2 Running each separate table copy worked fine most of the time but running all of the packages in sequence (see problem 3) would fail in different places for various reasons. Sometimes I would get duplicate key errors – which was theoretically impossible. Problem 3 All but two of the tables have identity columns. To move the data I had to SET IDENTITY_INSERT ON for the destination table. OLE DB Destination tasks in the dataflow let you specify identity inserts but these don't work in SQL Azure – you must currently use ADO.Net source and destinations tasks. You can only have a single SET IDENTITY_INSERT ON per database so this means I had to run all these identity table packages sequentially which makes the whole process very slow. Problem 4 Reliability. SSIS in Visual Studio seems to me to be very unreliable and flaky. I was plagued with performance issues and crashes. In the end, frustration got the better of me and I gave up on SSIS. Thankfully, BCP for SQL Azure became available last week so that provided an option with more control and visibility. ADO.Net includes a SQLBulkCopy class. This will let you move data from many different sources to a database table. It provides a few options to control the behaviour of the operation and this seemed like the best option – the last time I used command line BCP was back in ‘95 with SQL Server 6.5 I think – or it might have been Sybase (which in those days was pretty much the same thing). I whipped up a simple unit test and some classes to test SQLBulkCopy and it didn’t take long to realise that this wasn’t going to work either. Problem 5 I kept getting errors about not having SET XACT_ABORT set ON. Binging for this led me down the DTC path. This is the same path that leads to hell! I couldn’t understand why DTC was getting involved because I had not invoked any transactions. I thought that BCP or my source data reader query was doing something funky so I just added the following SQLCommand query before I started the bulk copy: SqlCommand xact = new SqlCommand("set xact_abort on", dst); xact.ExecuteNonQuery(); This seemed to work, for a while. (It turned out that the base class for my unit test was declaring a TransactionScope that wrapped everything in my unit test. I didn’t spot this until I have up with SQLBulkCopy so it may well be that this is not necessary now). Problems 6, 7 & 8 I’m not exactly sure when I decided to give up on SQLBulkCopy but it was somewhere around the problems with timeouts, lockups and random results. My options were now reduced to a short list of one – command line BCP. After a few false starts (I don’t read instructions as well as I could) I managed to get something working quite well. Success! Moistly… I created a batch file to test the various options with BCP. It’s really pretty simple to use but I wanted the simplest possible solution that would be easy to support and maintain. Using the native option (-n) provided this but it does mean that should and destination tables need to be almost identical. When creating the schema script I had re-ordered the columns on one table. This was enough to cause a problem for native mode which generated some cryptic errors. Thankfully the error file (-e option) provided enough clues to figure out what was wrong. Throttling SQL Azure will drop connections when/if there is a heavy load on a database. This it to enable high availability – which sounds silly – how can it be highly available if the connections keep dropping? – but in reality this just means you need to be prepared for a connection to drop and transactions to fail if the load on the database / server is exceeded. Determining what the threshold is for throttling of the connections is difficult. So difficult in fact that one might say impossible. Throttling is triggered by activity by all users of a server. The server is also virtual (not as in a virtual machine but as in a virtual connection to one or more virtual machines). My BCP commands on one table (the largest) would consistently cause the throttling to kick in. This table has about 230,000 rows – not huge by and stretch of the imagination. Thankfully, BCP allows to to specify the batch size and the first and last rows to use. For this table I found that 10,000 rows per batch worked most of the time and executing BCP on chucks of 50,000 records seems to have stopped the throttling. Using the first and last row options also provided the opportunity to retry a chuck of records should throttling kill the connection. The final (so far) code for running command line BCP in a mode that SQL Azure can handle looks like this. This code is far from complete but should be sufficient to explain the process. Please feel free to adopt and enhance as you see fit. private void copyTableWithCmdLineBCP(string sourceServer, string sourceDatabase, string sourceTable, string sourceRule, string sourceUserName, string sourcePassword, string destinationServer, string destinationDatabase, string destinationTable, string destinationUserName, string destinationPassword, int rowsToCopy) { string ofile = Path.GetTempFileName(); string sourceQ = getSourceQuery(sourceDatabase + ".dbo." + sourceTable, sourceRule); string countQ = getCountQuery(sourceDatabase + ".dbo." + sourceTable, sourceRule); string args; // export to a temp file if (sourceUserName == null) { // no user name so use trusted security args = string.Format("\"{0}\" queryout \"{1}\" -S {2} -T -n -E", sourceQ, ofile, sourceServer); } else { args = string.Format("\"{0}\" queryout \"{1}\" -S {2} -U {3} -P {4} -n -E", sourceQ, ofile, sourceServer, sourceUserName, sourcePassword); } execProcessAndCheck(Properties.Settings.Default.BCPCMDPath, args, "Bulk copy export failed for table " + sourceTable); // import the file one chuck at a time for (int startRow = 1; startRow <= rowsToCopy; startRow += MAX_ROWS_PER_BATCH) { int tries = 0; if (destinationUserName == null) { // no user name so use trusted security args = string.Format("{0}.dbo.{1} in {2} -S {3} -T -n -b 10000 -E -F {4}", destinationDatabase, destinationTable, ofile, destinationServer, startRow); } else { args = string.Format("{0}.dbo.{1} in {2} -S {3} -U {4} -P {5} -n -b 10000 -E -F {6}", destinationDatabase, destinationTable, ofile, destinationServer, destinationUserName, destinationPassword, startRow); } int endRow = startRow + MAX_ROWS_PER_BATCH - 1; if (endRow < rowsToCopy) { args += " -L " + endRow.ToString(); } // execute with retries while (!execProcessAndCheck(Properties.Settings.Default.BCPCMDPath, args, "Bulk copy import failed for table " + destinationTable) && ++tries <= MAX_RETRIES) { Logger.WriteLog(LogCategory.Error, "Operation failed due to connection failure. Will retry."); Thread.Sleep(WAIT_BETWEEN_RETRIES); } } } This uses a couple of helper methods. getSourceQuery and getCountQuery simply return queries for a specified table name and ‘rule’ The rule is a string which defines how to partition the table. A switch statement is used to determine the WHERE clause for a table based on the table name and rule value. execProcessAndCheck executes a command line with arguments and captures the output. private bool execProcessAndCheck(string cmdLine, string args, string errorMessage) { _processOutput = new StringBuilder(); ProcessStartInfo psi = new ProcessStartInfo(cmdLine, args); psi.RedirectStandardError = true; psi.RedirectStandardOutput = true; psi.UseShellExecute = false; psi.CreateNoWindow = true; Process prs = new Process(); prs.OutputDataReceived += new DataReceivedEventHandler(prs_OutputDataReceived); prs.StartInfo = psi; prs.Start(); prs.BeginOutputReadLine(); if (prs != null) { prs.WaitForExit(MAX_PROCESS_TIME); if (!prs.HasExited) { prs.Kill(); throw new Exception(errorMessage + " - command has exceeded the maximum allowable time and was exterminated."); } } return checkProcessResults(prs, errorMessage); } The output is captured by a simple event handler: void prs_OutputDataReceived(object sender, DataReceivedEventArgs e) { if (!string.IsNullOrEmpty(e.Data)) _processOutput.AppendLine(e.Data); } _processOutput is a class scoped StringBuilder. The results from the process are checked by checkProcessResults: private bool checkProcessResults(Process prs, string message) { if (prs.ExitCode != 0) { // look for error 10054 - this means that SQL Azure has throttled and we should retry string output = _processOutput.ToString(); if (output.Contains("NativeError = 10054")) { return false; } message += ": Error Code = " + prs.ExitCode.ToString() + " : Message = " + output; throw new Exception(message); } return true; } This is all very specify to the way BCP.exe and SQLCMD.exe work – if you want to use this for other command line tools then some tweaking will no doubt be required. Summary SQL Azure is an extremely powerful platform - despite the issues described above. It will definitely get better as the product gets closer to release. Most of my problems are caused by my recent inexperience with SQL tools and the general nature of an unfinished product. Learning how to do this stuff now will provide a better understanding of the realities of cloud based computing as opposed to hosting a SQL Server on some internet connected remote server. Performance of the database creation, upload and partitioning could be enhanced in several ways. Threading could help enormously when creating the partition databases but throttling may reduce any benefit when it comes to uploading the data. Using multiple SQL Azure servers would also help a little. Moving the functionality into the cloud could be possible if SQLBulkCopy would work betterer and if I had a mechanism for creating the database schema other than SQLCmd.exe. All of these options are possible given more time – but PDC09 is our hard deadline - so what I have so far will hopefully be good enough for a wicked kick-arse sexed-up demo of what is possible with this awesome platform! I’ll talk more about this application when I can… :)
It’s been a while since I’ve blogged anything about EPiServer – 2 reasons - 1) I haven’t done an awful lot with it lately and 2) it’s just so easy it seems silly to blog about. However, over the last couple of weeks I’ve been helping out on a web site replacement project and one of my tasks was to install and configure the various servers – development, staging, UAT & production. So, me thinks it’s time to talk about it. SuperDeploy Normally EPiServer installation is performed manually using the EPiServer setup and Deployment Centre tools. However, for this project we attempted to script the entire process using PowerShell scripts. We have created a deployment tool with PowerShell – aptly named SuperDeploy – that we use for SharePoint installation and database creation. This is very useful for creating fully automated installations that we can use during development and when we need to install on the clients environment. So, it seemed natural that we should extend this to work with EPiServer. SuperDeploy uses a simple XML file to define what to install and where - the how is hard coded into PowerShell functions in the script. Anyways, SuperDeploy works very well and provided a nice repeatable installation for all servers – up to a point. With a bit more work it could do everything but time is.. you know what, so some manual steps were needed to finish off the production server. The final production installation had 2 web servers identically configured. The EPiServer site files were installed to a folder on F:\ and this folder was mirrored between the 2 servers using Windows DFS – so changes to files on one server were automatically and instantly copied to the other server – essentially meaning we had a single set of files for both servers. We could have had the files on a external drive array of some sort but this would mean a single point of failure. Replicating the files between servers provides an extra level of redundancy. The EPiServer virtual file system (VPP) was also replicated using the same DFS mechanism. The SQL 2005 database was on a third server and this was mirrored using log shipping to a forth server. Load Balancing I’ve come to notice over recent years than when something looks hard and not very well documented – it turns out to be obvious and simple. Such is the case with the configuration of EPiServer load balancing. Documentation of the setup of EPiServer load balancing is hard to find. In fact the only documentation I could find was a single blog post. This worried me somewhat as there isn’t a lot of detail in this post and it wasn’t an official EPiServer document. But I needn’t have worried – 5 of the 6 steps were correct but step 4 is applicable to IIS 6, not IIS 7 which we were using. For IIS 7, httpModules must be specified in the <system.webserver> section of the web.config – not in <system.web>. You can also configure these in IIS Manager. The setup of Microsoft NLB was already done for us and the tool linked to in the above post proved that the network was indeed setup correctly. The hardest part was testing that the servers were actually load balanced. Fortunately – a mistake by me editing the IIS config meant that one of the sites would not run. Browsing from a test client machine gave me an HTTP 500 error from IIS. It was impossible to know which server was failing so we disabled one of the servers from the load balancing by turning off the NLB agent. When the client browser was able to see the site correctly we new a) which server was broken and b) NLB was working. Crude? Yes, but good enough. Some better testing is still required of course, but that's another story. Even the smoothest installation can have surprises. When we ran the site, we were prompted to login to view the home page – which is strange as it’s a public web site with anonymous access enabled. We compared the production server configuration of IIS and web.config to the other servers and these were identical – we thought. In the end, we configured the IIS anonymous access user to be the application pool account rather than IUSR and the setup was done. Morals of the story EPiServer installation is easy – even for multiple load balanced servers. If you do have multiple server then ensure they are identically configured – Virtual Machines are a life saver! Mirroring or sharing the site installation folder will help with this (but it also means a mistake on 1 server will potentially be a mistake on all servers – instantly!). Script your installation as much as possible. It make repeating your installation simple. Install often and early – preferably as part of your development cycle. Don’t wait till the end of the development to test your deployment – YOU WILL REGRET IT – trust me! If you can, have your automated build cycle run your deployment script every night. Be pragmatic. Perfect is great if you can afford it but customers and bosses are rarely willing to pay for this. Good enough is usually good enough!
So far, so good. Twitter has not taken over my life. I’ve tweeted and chirped a little this week and have found a few colleagues to follow and vice versa. It’s also been a little useful and has helped me solve a couple of problems quicker than the usual methods (forums and web searches). It’s interesting to see Twitter going main stream. When one of our sales guys asked which twitter client to use I thought ‘oh well, twitter is surely dead now!’ but then I read that CRM 5 will have a Twitter interface and I’m guessing (truly – no insider info anymore) we will see similar functionality in Office 2010. Google Wave has this too. I’m not tempted to create the next killer twitter client yet. Tweetdeck works well enough for me at this stage but I can see that I will soon run out of screen real estate. Best thing about twitter? It’s go me blogging again :)
PowerShell takes a while to learn – especially if you have an aversion to manuals as I do – I prefer to learn on the fly. So, when I wanted to convert a variable containing a comma delimited string into an array I was lost. After a bit of playing and ‘binging’ I found that it was actually very very easy: # start with a string $roles = "db_owner"
# now it’s an array of 1 element $roles = ,$roles Sweet!
I searched for a while to find an easy way to run a command from a PowerShell script and wait for it to finish. Most of the example I found use Invoke-Expression but this wont wait. In the end I resorted to the tried and true .Net Fx: # run a command line and wait for it to be done function RunAndWait([string] $command, [string] $arguments) { $proc = New-Object System.Diagnostics.Process $proc.StartInfo.FileName = $command $proc.StartInfo.Arguments = $arguments $proc.Start() $proc.WaitForExit() } You need to seperate the command (aka FileName) from any arguments, but otherwise this seems to work nicely. However, PowerGui doesn’t always wait when you are debugging so be careful if you are stepping through your script and expect it to stop in logical places.
Having a blog is like having a nagging wife – not blogging makes me feel guilty. The thing is, I just don’t have the time to to write the type of blog posts I like to write – long and accurate. Not that I’m ever very accurate, but well … Anyways, I’ve been ranting about how stupid twitter is and what a complete time waster it is without actually trying it. Then it occurred to me that twitter might actually be a useful alternative to long exhaustive blog posts. So, I’ve signed up again and am tweeting a little about very development focused things. You wont catch me tweeting about the weather or Michael Jackson etc. Currently I’m into Azure dev so I’m finding lots of little things to chirp about. I haven’t found a lot of tweets to follow yet apart from the obvious candidates – scottgu etc – but I did get my first reply today when I sent a message to a Microsoft tweet. Very sweet! Follow me if you love me :) jonesienz
MSDN are testing a new version of the Library pages that are designed for low bandwidth connections. If you browse to any library page you will see a link under the breadcrumb, e.g:

This will display a vastly stripped down version of the usual pages. 
You will be returned to normal mode if you navigate to any other library page or use the persist option at the top right of the page.
The speed of MSDN in this mode is great. The only thing I miss is search.
Enjoy!
I haven't used WIX a lot so I'm no expert, but I do know that is way better packaging solution than anything else that ships with Visual Studio currently. Version 3 of WIX had progressed to the point that MS were helping to have it included in the VS 2010 out of the box. Which is slightly ironic if you know the history of WIX. However, it appears than plans and people have changed and WIX will NOT ship with VS2010. This is very sad for us poor developers who are left with little out of box choices for solution packaging. Sure you will still be able to get WIX yourself but many shops don't like to let developers help themselves to open source tools and are even meaner when it comes to paying for tools. Inclusion of WIX with the VS2010 release would have moved WIX to the mainstream and finally put a nail in the coffin of VDPROJ packages. For the full story, read here. If you think this is a mistake then it may not be too late. Microsoft always listen to customers. If enough of us talk about this and express opinions then they may change their mind or at least offer WIX as a Power Tools or some such thing. If you would like to have your say then either blog about this yourself or send an email to Soma (VP of Developer Division) via his blog: http://blogs.msdn.com/somasegar/contact.aspx
It's been a fantastic time being an MVP for the last 6 years. I've really enjoyed being involved in the community and doing what I can to spread the good work that Microsoft do. However, all good things come to an end. I've had a year off presenting and organising to concentrate on personal projects so have not been re-awarded this year. I'm going to miss the comradeship of the fellow MVP's and the occasional 'secret' that we got to hear. No doubt I will lose my sanity again before too long and get involved in some community activities. I'll be back :)
Here's my grand conspiracy theory. It's 2007 and you realise that your
puppet Bush & co is not going to be in office forever and that wars
eventually end. Your next pet President is a has-been who is unlikley
to get power. Your oil producing, weapons manufacturing empire is
under threat. What do you do? Well, how about an old
fashioned recession? Its worked in the past, right? You can make a
few quick billion on the stock market and use that to invest in the
bargains that will follow the crash. Rattle a few cages and the price
of oil will go up. Make sure your President pardons a few friends and
free's up some land for development before he goes. Then make a bit of
a mess for the next do-gooder President to keep him busy enough so that
he leaves you alone for a while. Hey, this would make a great
board game! Call it Global Domination or Get Richer Quicker. It could
work like Monopoly, except you would start with 400 hotels and $12
Billion. The idea would be to steal as much money off the other
players as you can by manipulating politicians and the media, buying up
the hotels and killing off the employees. It's very hard not to be cynical but I believe that the current global financial crisis has largely bypassed New Zealand - or it may just be that the IT industry is more sheltered from it than other industries. I have plenty of work. I'm not worried about being laid-off any time soon. My employer is doing pretty well this year. Other IT companies I know have plenty of work. There are still lots of jobs available in IT. Basically, everything is pretty much the same as it always is. The main difference I can see is that people are slower at paying bills and the news media are constantly reminding us of the doom and gloom. Recessions are great for some people. There is a lot of money to be made for those that are prepared and there is no better way to be ready for a recession than to start one yourself! I have no doubt that this has been created for the benefit of a few individuals and companies. Fortunately, New Zealand is small enough to be ignored most of the time.
Microsoft have release ASP.Net MVC RC 1 last week - twice. The first release was quickly refreshed to fix some issues so if you downloaded early last week, you may need to get the download again. Check here.
I have had a quick attempt to upgrade my 1 project and it all worked pretty sweetly and the upgrade process was very SIMPLE.
However. Several of my crud views use FckEditor for long text fields. A post-pack of these views triggers page validation:
A potentially dangerous Request.Form value was detected from the client
Normally, turing off page request validation in the page and / or web.config will fix this :
< pages validateRequest="false">
but for me and others (see comments at Phil Haack link above) this does not help.
So, looks like I will be rolling back to the beta until this is resolved.
Update:
RTFB! http://haacked.com/archive/2009/02/07/take-charge-of-your-security.aspx. I haven't tried this yet, but it is almost certainly the solution.
Reading Paul a post on Hacked.com I saw mention of a new thing - the Web Platform Installer. This is a nifty tool that can be used to install the .Net Framework, ASP.Net, Visual Web Developer, ASP.MVC, Silverlight tools and other bits and peices. All from one very convienient and SIMPLE interface.
Using Virtual Machines for development these days I am often setting up new machines. This will save me a bit of time there. It's also great for helping friends and noobs get started with web development and will reduce the amount of time I spend on emails and awkward phone calls.
Well done Microsoft!
It's sad but understandable that Rod has decided to through in the blogging towel. While I haven't been following a lot of bloggers lately, Rod's posts were always insightful and often inspiring and I always tried to keep up to date with his feed. You will be missed Rod - which seems impossible now that I say it.
I'm loving MVC. In fact, it is my new love. SharePoint is out - that was a bad relationship anyway - too sadistic. There are however, a few things in the current beta that require a workaround or two. Here's one. To create a dropdown list in MVC you use the HtmlHelper thus: <%= Html.DropDownList("CityID") %>
then in your controller you add the following before calling the view: ViewData["CityID"] = new SelectList(from c in someDataContext.Cities orderby c.Name select c, "CityID","Name", selectedCityID);
where selectedCityID is the item you want preselected in the list. Note that the ViewData key and the control name all match. And this just works. Easy as cake. But now, suppose you want an option at the top of the list such as "[select a city]" when you are adding new records. Again, this is a peice of pie, just do this : <%= Html.DropDownList("[select a city]", "CityID") %>
The dropdown list will now contain this extra option at the top of the list of city, and it's value will be blank. BUT.. the specified selectedvalue of selectedCityID will not be selected any more. If you look a the page source generated by the HtmlHelper you will see that none of the options has selected=selected. I dont know if this is a bug and/or if it will be fixed by the release candidate (due any day) but as a workaround I have used the following jQuery code to pre-select the default option: $(function() { $("select[@name='CityID'] option[@value='<%= ViewData.Model.CityID%>']").attr('selected', 'selected');});
Hope this helps someone else :)
I've been writing a small app using the latest ASP.Net MVC Beta and JQuery - for fun and for work - and got caught out by a problem I'm sure Ive had before.
When ever you have a script tag dont self close it like this:
<script type="text/javascript" src="Scripts/jquery-1.2.6.min.js" />
For me this would stop all subsequent scripts from executing and sometimes result in a completly blank page. I had the same result in Firefox and IE 7. Instead, allways have a seperate end tag:
<script type="text/javascript" src="Scripts/jquery-1.2.6.min.js"></script>
Happy New Year :)
I've been tasked with cleaning up a few remaining bugs in a system that is about to go live. I spent most of last week trying to figure out this one.
A page in a site included an asp:FileUpload control. This was working fine but then suddenly stopped. When the user submitted the form the FileUpload control would be cleared and nothing happened - no postback, no file uploaded, nothing. Ah, but only in IE 7 (we didn't have 6 to test with), FireFox works fine.
So, to cut a very long story short and to save anyone else from murderous thoughts, here is the reason and solution (at least for me).
After turning on script debugging I could see an exception on the ASP.Net postback event:
function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } }
The message displayed was htmlFile: Access Denied.
After much googling I found a few forum threads (heres one) that indicated that this was a security feature introduced in XP SP2, the idea, I think, was to prevent files being uploaded without the user knowing about it. Unfortuately none of the suggested solutions apply or work for me.
After winding back the source day by day to a version that worked I was able to determine that the inclusion of an onload event handler in the body tag of the page was the cause. Removing this fix the problem immediately.
Conslusion? Well, I think IE is thinking that the onload event handler could be doing something dodgey so it enters a hightened state of alert and locks out the upload control.
Parting Shot: Why the frac is this behaviour not documented by Microsoft and the IE team? Maybe it is and google can't find it... but I doubt that.
Heopfully you wont waste 3 days like I did trying to solve this.
Tommorow I leave Christchurch for (up to) 6 months work in Sydney. I'll be working for Intergen Solutions Pty - the Oz version of Intergen NZ - on an EPiServer web site for one of our customers, but I'll be back in NZ as required, probably monthly.
I'm really looking forward to:
- doing some coding again - seems like I have not done any real coding for a year but I'm sure that's not strictly correct
- decent weather - winter has been long and cold and as I get older I enjoy it less and less
- the Sydney lifestyle - beaches, booze and babes :) (hope the wife isn't reading this!)
- getting involved with the Sydney .Net community. I'm already booked to do the Office Dev Con and to see Steve Balmer at some MS event.
- doing stuff that is worthy of blogging again
but I worry about:
- the heat - it was 31c there on Monday - that's about my limit. It will take me a few weeks to get used to that again
- the cost - finding accommodation is hard, finding cheap accommodation is very hard. Plus, my 20yo daughter will be joining me in a few weeks for the summer so I need 2 bedrooms. If you happen to have or know of a 2 bed furnished unit in Sydney that is available soon then please drop me a line!
- homesickness. I normally enjoy the first 3 days in a big city and then want to be back in my own bed. Being away from the family for up to a month at a time will be a challenge for everyone.
And I'll be missing Code Camp :( which sounds like it is going to be a great event.
Mainland Code Camp 2008 - Keeping It RealAnother Code Camp is being organised for Christchurch (see details below). I'm taking a back seat this year with the organisation but I will be presenting a session or two. I'm thinking: 100% Pure Javascript - All script and no controls
This session will demonstrate how to create a rich client application using javascript that uses an ASP.Net application for server side functionality - without using any (or at least very few) ASP.Net server controls. I guess you could call this hand-crafted AJAX.
Whats it all about, TFS? Team System and Team Foundation Server are not particularly well understood. In this short session I will attempt to explain (and possibly demonstrate) how the features of Team System impact & benefit developers and the project life cycle on a day to day basis.
Date: Saturday 1st November, Christchurch. 9am - 6pm Location: Trimble Navigation, 11 Birmingham Drive (map) Cost: Free! (Lunch provided)
Theme: Keeping It Real The sessions
are designed to showcase .NET related tools and techniques that will be
useful to you as a developer, focusing on real-world topics that will
be of immediate use.
Featuring mostly local presenters it's a
time to talk and socialise and connect with others in the
local community. An optional dinner in the evening is an ideal way
to finish the day (the great restaurant last year is still being talked
about!)
Speakers: Looking at getting into speaking? Email christchurch@dot.net.nz to register your interest. It's a great opportunity to give a talk on anything .NET related. We have plenty of options
- 5mins (Lightning) - Powerpoint only (no live
code). Aim at getting a single point across - demonstrating a product,
feature, tip, technique etc. These sessions are a hit with audiences
at other DNUG groups and code camps - fun and lightweight!
- 15mins (Thunder) - Enough time to show a
single concept or demo without getting into too much detail. eg
Interesting practical code, fun side projects, favourite dev tool/trick
, LINQ to XML example etc
- 30mins, 60mins - Useful for when you have something larger to demonstrate or feel really passionate about and need to spread the word!
Contact Details: If you have any questions, suggestions or want to offer sponsorship, please contact us at christchurch@dot.net.nz.
It's been a while since I've blogged about anything interesting - or had anything very interesting to blog about - so this is a bit of proof that I'm still alive and a catchup of what I've been up to. iPhoneI succumed to the hype and was sucked into buying a new 3gesus phone. This was also prompted by my realisation that my iMate SP5 was actually a peice of fecal matter. iPhone rocks! The UI is fantastic and so easy to use. I was worried when it arrived without any sort of manual - a slim pamplet is all you get. However a manual is unnecessary. There's been some negative comments from people about drop-outs and slowness, but I haven't had any problems that I didn't cause myself. The latest 2.1 OS patch has made the phone faster and the battery life does seem a tad better. I did use the jailbreaking WinPwn on the phone pre-2.1 but this made the phone very slow and I really can't seen the point of doing this unless you really need to hack it to death. My only complaint is Safari - it locks the phone and crashes very easily. However, I dont really use it much so this is no biggy. Windows Server 2008I updated my dev desktop to 2008 server x64 without much forethought or planning. The upgrade painless but I've spent a lot of time getting all my VM's converted to HyperV. Its faster then 2003 server and it seems more stable, but this might be more to do with 64bits and a cleanup of installed rubbish than anything else. HyperV is great. It's certainly a step up from Virtual Server. Snapshots are a life saver! I've been doing some work with Active Directory schemas so it's a peice of cake to make a change then roll back to a previous snapshot and try again. Like all good Microsoft software there are a number of really annoying little quirks, missing features and unwelcome changes: The HyperV VM Connection console doesn't do clipboard across machine so you still need RDP, which impossible if you only use the internal network connection. The event viewer now has 4 hundredd thousand gazillion different nodes - finding a simple error in an event log can take a long time. UAC still sucks and is unnecessary for anyone with an IQ above 12. ChromeFor a version < 1 browser Chrome is excellent. I use it in preference to FireFox which I use in preference to IEeeek (any version). It's very fast, work on just about everything and has the typically clean Google UI. Like Firefox though it's not the best for Windows authentication - IE still works better there. EPiServer EpiServer have released a new CTP of version 5.2. It's hard to find exact details on what is included in this release but it does support Visual Studio 2008 SP1 and .Net 3.5. The new Installation Manager is way better than EPiServer manager. SharePoint & PowerShellMost of my time is spent diddling around with SharePoint. Most recently I've been heen helping out on a large MOSS project with a few small PowerShell scripts. The entire MOSS site and migration of content from a SharePoint 1 site is scripted with PowerShell. This has shaved months off the development time. Code CampIt's coming soon! Stay tuned... HolidaysSpring is hear at last - on and off - which is great cause I've had the winter from the cold part of hell. We are packing up the kids and taking 2 week in Sydney and Queensland from next week. Can't wait - and I may not come back until after the election!
Thanks Matt. I cringed when I first saw this, but it’s actually quite challenging remembering the past in any detail. How old were you when you started programming? My first computer was a ZX80 but I didn’t do much with it. In fact, I think it turned me off computers for a while. The first real programming I did was at high school in the 6th form. Burnside didn’t have any computers in 1980-ish so we used to cycle to the university and submit our coding sheets or collect the punch cards and ‘run’ our Fortran 77 app’s on the PDP.
Later we discovered the DEC VDU’s where we could spend 30 minutes entering the code directly and see the results on the line printers. I don’t know if it was the ozone or the clacking sound but I really miss using line printers as a terminal – they also had keyboards! There is something very satisfying about mechanical interactions with a computer.
How did you get started in programming? I had a friend at Christs College and being a private school they could afford lots of cool stuff. They had a small PDP. Alex created some pretty nifty graphical applications on the this. After I left school he introduced me to PC’s and it wasn’t long after that I had my own – 8086, 4.77 Mghz, green screen, 256K RAM I think and twin floppies! – no HDD. What was your first language? Microsoft Basic Compiler – BASCOM – v 6 I think. I created some large applications with that but gee, it was slow. Before that I tried to learn COBOL via correspondence school. That was like learning to drive without a car so I can’t really count that. I guess the first real language I used was C which I learnt at Christchurch Poly night classes. I soon realised it wasn’t for me though and discovered dBase and then Clipper. Clipper is/was a dBase compiler (pcode only) and if you don’t know what dBase is then think Access for DOS. What was the first real program you wrote? With Clipper I created my first applications that I actually got paid for. It was a system for managing club memberships. I formed a partnership with a friend of a friend and we sold about 20 of those I think mostly to Working Men’s clubs. The last of my Clipper apps was only decommissioned about a year ago – 15 years from a DOS application is pretty good I think. What languages have you used since you started programming? Fortran, MS Basic, C, dBase, Clipper, Pascal, VB, Forte (4GL), Delphi, C#, VB.Net, Java, JavaScript, English, Geek and a little Klingon. What was your first professional programming gig? My first real programming job was with a very small 1 product company. The product recorded output from telephone systems and calculated usage and cost. It was called CAPP Plus (CAPP, the original was written in Turbo Pascal and became unmaintainable – for various technical and personal reasons! I re-wrote it with Clipper). It was through this job I met my wife and when the company karked we took over the product and sold it for a few more years until Telecom decided to get out of the business. If you knew then what you know now, would you have started programming? When I was young I always said I had no regrets and while that’s still true – give or take a few stupid ideas that I shouldn’t have acted on! - I just wish I’d started sooner. In the famous words of Oscar Wilde - ‘youth is wasted on the young’. If there is one thing you learned along the way that you would tell new developers, what would it be? If you love it, programming is easy, it’s humans that are hard. Spend as much time learning the business as you do learning your craft. Developers are easier to find than developers with real business knowledge. If you don’t understand the business then software bombs are also a good way to get promotions – or legal trouble. What's the most fun you've ever had... programming? I get a big kick hearing that an application you wrote years earlier is still being used every day and you never hear a word from the customer, but the best thing about this career is the opportunity to work with great people and maybe even marry them :) I Choose Hmmmm. The people I choose either don’t have a blog or their site is not working. I’ll try to update later…
Is it just me, or does anyone else find themselves driven to buy funny stuff? 
A couple of weeks ago I upgraded our Team Foundation Server from 2005 to 2008. This is my story… I was very nervous about upgrading the server as the installation procedure requires un-installation of the existing TFS2005 version and an install of TFS 2008 over the top. The source code and work items are very important asset for us and loosing them, even for a day, would cost us a lot of money (and be somewhat embarrassing). So, I was very careful about the process. Preparation I needed to ensure that I could recover our current TFS installation should the upgrade go pair-shape so I created a Virtual Server image on our main domain with a clean install of TFS 2005. I then restored the TFS setup to this new server, which had a new name. Microsoft provide detailed instructions on how to move a TFS install here: http://msdn.microsoft.com/en-us/library/ms404860(VS.80).aspx. This process also taught me how to do a disaster recovery – a very useful and necessary skill! The creation of the VM, getting it on the domain, installing TFS, migrating the databases and reconfiguring the server took me the best part of 3 days. I took my time and followed the instructions precisely. If I had to do this again it don’t think it would take more than a day. I also migrated the SharePoint content to the new server. This is documented in the above MSDN article. I tested this new install, and while it was slow, it all worked and developers could connect and do work. The testing highlighted a couple of issues. I had installed Conchango’s Scrum Template on TFS but it was not being used so I had uninstalled it. Unfortunately it had made some changes to the TfsWarehouse database that did not get removed during uninstall. The test scrum projects were deleted but I didn’t want to futz with the database directly so the scrum stuff had to stay. Doing it for real After all the preparation, the upgrade process was somewhat anti-climatic. It took an hour and half to uninstall TFS 05 and install TFS 08. Again, the instructions provided my Microsoft are precise and simple to follow. I next updated Team Build and Web Access with the latest versions, Again, this was very simple and painless. Problems On the Monday morning following the upgrade I found that the Warehouse cube was not being updated. In fact, some of the dimensions were empty. It turned out there was a permissions issue with the analysis services. The error in the event log was : Some or all identity references could not be translated. A bit of Googling around quickly solved that one: http://blog.salvoz.com/2008/01/26/TFSWarehouseIssues.aspx During my test run I had a lot of trouble with the SharePoint Services upgrade. As we don’t use the project portals very much. I made the decision to stick with WSS2 for now. Next time one of our SharePoint config guru’s is in town I may get it updated, or we might just switch to using the corporate MOSS platform. I’ve now also notices that some Team Builds are failing. It appears that projects using our custom Work Items are having a problem building. I haven’t had time to investigate this yet, but I don’t expect it will be too hard to solve. Recommendations If you need to do any work with TFS read the MSDN documentation first – it’s exhaustive and complete. For any issues or problems Google first then post a message on the MSDN TFS forums – you will almost always get a quick answer from a Microsoft expert, MVP or other similarly brainy person. Put your hand up if you can afford to lose all your source code – for even a day. Hmmm, I thought so. Create a disaster recovery plan and test it. Yet again, Microsoft provide all the documentation you need for this on MSDN, but here’s what I did: - Create a VM with Windows Server installed on it.
- Add the server to the same domain as your current TFS install.
- Install TFS and all the same bits you have on your production system.
- Backup the VM.
- Now test the DS plan on the VM using the move instructions from MSDN (above).
- If you update your production server then remember to update and test the DS system again. In fact, test the DS system regularly - once a year or more often.
In summary I found the upgrade a very pleasant experience, aided greatly by the detailed and copious documentation from the tireless TFS team at Microsoft and the large volume of community blogs and forums.
Have you ever wanted to share your desktop with another user somewhere on the Internet or in another office? There are a few tools available to do this but I recently found Microsoft SharedView. This is great free utility that works everytime.
You can share your whole desktop or just a single window with as many users as you like. You can grant control to any of those users and chat with them online. Users connect via HTTP over port 80 and are authenticated with a Live login so it's pretty safe.
I've found this a life save several times recently, most recently today when I needed someone in our Wellington office to configure a VM on my local machine. Access through the domain wasn't working for some reason - firewall issues or something like that - but SharedView just cut through the noise brilliantly.
Check it out!
Yesturday Microsoft announced the Visual Studio 2008 version of Visual Studio extensions for WSS (v 1.2). It is available for download now! This took me by surprise as I thought it was scheduled for next month - but earlier is better!
Also, checkout the spunky new site for SharePoint developers: http://www.mssharepointdeveloper.com/. This is a great central resource for getting started with SharePoint dev. It contains a bunch of FREE learning material - 10 Virtual Hands On Labs to be precise - and links to other goodies.
FYI: A gang of kiwi's were heavily involved in creating some of this material, including myself and some other's at Intergen and of course Paul Andrew.
So here is how to loose a server off the domain without even touching it.
- Grab any old machine (or VM in my case) that is in a WORKGROUP and give it a name the same as a machine on the domain. Reboot.
- Rename the machine but dont reboot.
- Join the machine to a new workgroup but dont reboot.
- Join the machine to the domain.
- Bingo! The real machine with the old name will be removed from the domain! Cool eh?
In my case this was bad. VERY bad as the VM in question had the same name as our TFS server. After joining the newly named VM to the domain our devs started whining about TFS being down. There was a brief OMG moment. But then it got worse when we found that the local machine account password wouldn't work. To cut a long story short, phycially disconnecting the server from the network allowed us to login with my domain account (using cached credentials) and from there we were able to rejoin the machine to the domain.
Phew!
Rod makes some interesting observations and suggestions for Microsoft. While there is less chance of me being CEO at Microsoft than there is of Helen Clarke being PM one more time (might live to regret those words...) here's what I would do. 1) Forget office. It's not going anywhere. With the new Office Xml and ODF file formats there is plenty of room for any coding monkey to whip up a compatible niche product. These apps will chip away till there's nothing left. 90% of Word is never used, web based mail does a better job than Outlook for day to day mail needs - or at least good enough, Excel - I guess a few people use it but does it do anything that any other spreadsheet app can't do - AND - people use regularly? The Office dominance is mostly due to the Office dominance and unless they do something radical about the rediculous licensing cost then it will dissapear faster than an litre of $1.99 petrol. 2) Branding is nothing without good product. I'm sure I'm more gullable thant most at the subconcious level but dont get me started! I'd sack the whole Marketting department (and shoot Apple's, Google's and any other Marketting guy in sight). Brainwashers all of them! Hire a few talented artists and just state the facts, eg: 'Word - use it to do stuff - $99'. 3) Open Source if you have to, but it's far less relevant than good WELL DOCUMENTED, SIMPLE product. I love SharePoint now but if I have to work that hard again for another enterprise product, I'll be changing careers (oh crap, another burnt bridge). 4) Forget the aquisitions. Microsoft is stacked with exceptional talent already. Free up the brains and let them loose on creating something new and extraordinary, like... 5) Create a new OS that throws out all the old bagage. You dont need to start from scratch - we need something this century - but dump support for the old shit. 90% of the OS should be SaaS'ed. And there has to be zero maintenance. My TV, fridge, phone, oven and toilet work with very little maintenance. Why should I have to spend so much time keeping my PC working?? And I dont want to have to upgrade every 3 years. My cars are 15 years old and get me from A to B just as well as anything else. 6) Make products my mother could use. As an industry we are all guilty of missing the small picture. By all means, cater for the enterprise geeks but remember the noobs too. Imagine if you had to go to night school to learn how to use a TV . Computers need to be made simpler. 7) Consistancy please! The box-of-choclates strategy may have worked for Forest Gump, but it fails misserably for software. Users/developers dont like surprises. It feels like the different teams at Microsoft are not aligned very well. Need to mix things up a little more often. 8) Make licensing simpler. If you need a computer to figure out the license cost then it's too complex. Instead, set a realistic per user/server price for each market and let the regional offices do deals. 9) Don't become the next IBM! Stay away from hardware and services. Stick to what you know best - creating innovation and integrating it. 10) Linux is not a threat to the desktop so ignore it. For the server, concentrate on making it easier and more fun for developers and administrators. And when I say easy, I really mean SIMPLE. For example, you should be able to explain every technology on a single white board in less than 10 minutes, well enough for an intermediate level techo to run with. If you can do that well then Linux for the server will also die it's well deserved death. 11) Buy Apple and cancel the iPhone. I dont have one so no-one else can either! 12) Social networking sites are just a string of uselsss fad's. They do nothing to improve the human race. Dont get sucked in! Unless of course you do it with a decent mobile device... maybe something like an iPhone... but much better. I did say up front I would never be CEO of Microsoft :)
The Team System and .Net User Group are having a combined session next week.
Ron Jacobs!!!
The Perfect Pattern Storm, where Test Driven development (TDD) meets User Experience (UX) and MVP Christchurch 20/05/2008 Gather at 5:00 pm, starting at 5:30 pm
Presented by Ron Jacobs
As long time host of ARCast.TV, Ron Jacobs has a front row seat to observe the constantly shifting architectural landscape. In this session we will consider what happens when the force of test driven development (TDD) collides with the demand for better UX.
Ron Jacobs is a Sr. Technical Evangelist in the Microsoft Platform Evangelism group based at the company headquarters in Redmond Washington. Ron's evangelism is focused on Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Since 1999 Ron has been a product and program manager on various Microsoft products including the .Net Framework, Windows Communication Foundation and COM+. A top-rated conference speaker, author and podcaster, Ron brings over 20 years of industry experience to his role of helping Microsoft customers and partners to build architecturally sound and secure applications.
RSVP via the link on the .Net User Group Site. Space is limited so get in early. Note, this session is at Intergen rather than the usual venue.
I often spend a lot of time trying to find stock images and fluff for sites. Luckily our office has a talented chap who normally does all this stuff before we need it. However, occassionally he's not around or I need something at home.
I just found this site: http://www.ajaxload.info. You can use this to generate a stack of spinny progress indicated thingies. Very useful!
A few people have been doing some great things in the community and it's fantastic to see them get recognition.
Congradulations to :
JD Trask (ASP.Net)
Ivan Towlson (Windows Client - WPF) (having an MVP award will soon be a pre-req to getting a job at Mindscape! :)
Zachary Smith (Sharepoint)
Somehow I also managed to scrape in for another year.
Keep these dates free if you can afford it:
May 20 in Sydney May 22 in Melbourne
Booking open from 7 April ish.
More details soon.
I'm not very good at managing my daily tasks. The only way I am half reasonable is to create todo lists. This works for a day or until I lose the peice of paper I scribble the tasks on.
Luckily, there is a better way: ActionThis!
Use ActionThis to help you and your team work together more effectively, using the power of the web combined with Microsoft Office.
Thousands of people worldwide use www.actionthis.com to manage the tasks small businesses, teams and their partners need to complete to succeed. Delegate tasks from Microsoft Outlook, connect with your team on the ActionThis task management website, track progress and take action with live reports delivered to your email inbox. ActionThis is free to try, and simple to use. Less time following up, more tasks completed, your business is more productive. ActionThis was designed and developed by Intergen in New Zealand and will help you and your team get things done.
How ActionThis helps you get stuff done
· Use Microsoft Outlook to create and assign tasks to yourself, your team, your partners
· Organize and access these tasks from anywhere using Microsoft Outlook or the www.actionthis.com website
· Keep track of progress, projects, and workload with reports emailed to your email inbox
· Keep on top of overdue tasks with live alerts designed to help you take action quickly
· Export and analyze your progress with Microsoft Excel
· Telephone and email support is free
Try it for free. Sign up for a one month free trial at http://www.actionthis.com/product/trial.aspx and use this referral code: INT531.
I'm often asked 'How do I get to be a great programmer like you Pete?'. Well not quite, I added the last bit, but Tokes provides a better answer than I ever could.
I completely agree with Tokes, being a (Microsoft) developer is getter way harder. But it's not Microsoft's fault. It's those pesky users. I always said that being a developer would be a piece of cake if it wasn't for users! They seem to want more and more every year and are less impressed by coded coolness. In fact, I think there is a formula to calculate coolness:

(C is Coolness, loc is lines of code, si is systems integrated, To is time overrun)
Time seems to be suffering too. As systems and requirements grow in complexity there seems to be some sort of temporal distortion reducing the amount of time available to a developer. I think Stephen Hawking discovered this when he ran out of budget for his black hole simulator (SimHole).
Developers must also share the blame for increasing complexity. We are always chasing the next best thing without much regard for using what we already have. Microsoft's job is to create temptation - it's us developers that can't keep our hands out of the cookie jar. Visual Basic 6 is still a great tool. Visual Studio 2008 just looks prettier!
It's no wonder that fewer and fewer kids are taking up IT as a career. Although, with both parents in the industry my 3 kids seem to be heading in the right direction. Maybe we as developers should procreate more?
Rod is a frequent poster on the subject of broadcast TV. I agree totally with his latest comments and suggestions, but I'd just like to add my little bit.
I dont have an AppleTV or an iPod or iTunes stuff but I do have a Media capable PC connected to a 42" LCD TV. I dont use Media Center as a) I dont have TV tuners in the PC and b) there are no guides for TV programmes (yes you can hack it but Ive tried and got too frustrated) and c) Media Center just gets in the way when your downloading stuff - you still have to revert to Windows Explorer and a browser.
I also dont like the idea of paying for TV so I dont have Sky (plus all the repeat screenings and self promotion drive me nuts).
However, I do pay for RapidShare which is were I get all my downloads from. Yes, this a moral disgrace and while I can't legally justify it, in my defence I would like to say that I mostly download TV shows that are (or one day might be :) free to air in New Zealand. I also don't give away stuff I've downloaded - at least not too often, maybe 10%.
So, it occurs to me that if TV NZ, or whoever has the balls, wants to charge a reasonable amount for access to full legal ondemand TV then I'd probably sign up. I might even consider tollerating a few advertisements - like 1 per half hour. And they should also have a great selection of program - not the usual crap that passes as quality TV (CSI, Boston Legal, Lost etv (OMG dont get me started)).
Of course 'reasonable amount' is a very subjective term. For me this would have to be a lot less than Sky but could be more than RapidShare - say $15 or $20 a month. I think this is very unlikely in over priced New Zealand so I'll continue to infringe copyright until broadcast TV dies and/or I run out of disk space or bandwidth.
Today I received a correction to a post I did on SharePoint last year. My erroneous statement was causing a few queries to be sent to Microsoft. For this I am truly sorry, but in my defense I did check my facts first - like all good reporters I blame my sources!
Anyway, that got me thinking about correcting blog posts. I've seen debate about this in the past and my philosophy has always been:
- correct only factual errors but leave the original text intact
- never delete a blog post unless under court order
- be careful what you say BEFORE you post
My temper and inpatients often get me into trouble so there are a few blog posts here that I could remove or edit, yet, I wont. Better to see me warts and all I think.
What do you thnk?
Lately, I often find myself repeating a little mantra:
Keep it simple Keep it simple Keep it simple
Ohhhhmmmmmmmmm.
This usually happens when it's too late, when I'm bogged down 5 layers deep in SQL or CAML, when Ive spent 3 hours googling for a solution to a problem and only found half answers in Polish.
Some observations:
- Complexity is often the result of too much simplicity.
- Too much abstraction moves you away from a solution.
- Everyone is busy.
- You can't polish a turd.
I'm working towards a point here so stick with me. I'll be more specific. SharePoint.
SharePoint is big. Really big. "So big that you can't even imagine it" big. It's not bad, just big. Big things tend to be more complex. Complex is harder. Harder takes longer and therefore costs more.
At the other end of the scale is NotePad. Anyone who can use a computer should be able to use NotePad. It's functional, uncomplicated, stable(?) and I think elegant.
Here's some more observations:
- The world is a complex place. It's full of complex human beings.
- Business often needs solutions for humans. These tend to be complex too. SharePoint is designed to solve complex solutions. I'm not going to use NotePad for anything other than to edit a occasional text file.
- Clarity can only be acheived when all solutions are explored.
- Complexity and Simplicity are relative and not mutually exclusive.
My point is this. We should not be scared of complexity. Simlicity is an admirable goal but not when its at the cost of solving a problem. We need a way of managing and dealing with complexity. I'm sure there are many people much smarter than I devoting themselves to exactly this problem, but here is my small contribution.
- Avoid complexity but don't be afraid of it.
- Compartmentalise complex solutions into managable chuncks.
- Focus what is infront of you.
- Be patient but follow the 20 minute rule (see below).
- The next version will always be better but the previous version is often good enough.
My 20 Minute Rule
You can adjust the time up or down to suit, but my 20 minute rule is this: If I can't figure out how to use/do something in 20 minutes - without a manual - then it's too hard or complex.
This doesn't mean I give up, it just means I need to learn more before attempting it again.
If you are a regular reader of my blog - and I think there is still one person - Hi Mum! - then you will have noticed that my blogging frequency and quality has been very low for quite a while. The truth is I have lost some enthusiasm to blog. I've often started to write blogs and think "what a load of twaddle" and hit cancel.
My choices are to continue on drip feeding or pull finger and start writing about something useful. My ego still enjoys seeing my face and words on the Internet so there is not way I'd pull this site :) The only sensible thing left to do is commit to doing some regular posting.
So, to that end, I hearby declare my intention to post at least twice a week. Topics will include anything I'm working on - Sharepoint, EPiServer, general .Net, SQL etc - community activity - user groups etc - and an occassional option or rant about something that gets me wound up - which is pretty easy to do.
If you are a regular reader (Hi Mum!!) and you noitce me slipping again, please feel free to remind me of my pledge or publically humiliate me in some non-photoshop way.
Now... off to do my first one.
I guess it's going to be a while yet before we need to memorise al these new tags, but there are some major changes and a lot of nice new things coming along in HTML 5. Definately worth a read. I particularly like the things they have left out - especially framesets!
I was commenting the other day at the office that 3 months ago, no-one was doing anything with SharePoint and now there are five of us. Sadly, I am one of them :( As per previous posts I tend to either love or hate SharePoint. The cycle of mixed emotions is continuous and ever increasing in velocity. Fairly soon, it will be a blur and I will feel either suicidal or manically happy. However, over the last month or so I have learnt a lot about MOSS, InfoPath, Forms Services, Workflow and other related stuff. This is the project: - MOSS is exposed to the Internet and the UI is customised with SharePoint Designer so it looks half decent.
- User logs into site - site is configured with custom membership and role providers that uses a SQL database. The database contains data from MS CRM and other stuff. Someone else in the office has created a membership provider that talks directly the the MS CRM web services but in this case we didn't want to do this - the customer does not have the CRM Internet connector license.
- User browses the site and clicks a button to view an InfoPath form in the browser.
- The form displays data from web services and lists.
- User can save a draft of the form or submit it. The form is submitted to a form library in SharePoint.
- A workflow attached to the form library sends the form's xml via a custom Workflow Activity to a web service.
- The Web Service inserts the XML into a Word DOCX file and emails the file to a couple of address.
Along the way, I've discovered a few things so I thought it was about time I documented and shared a few tips. Today's tip follows...
Another Code Camp bites the dust. Things that went well: - Great speakers and topics. It never ceases to amaze me that these guys will give up their precious weekend and pay for themselves to travel all over the country to speak at community events like this.
- Attendance. This was the first 'mainland' Code Camp so our expectation were not high for a huge audience, but I was very please with the turn out. We had 130 registrations and only 20-ish no-shows. Anything less than 20% for a free event is pretty fantastic I think. I also expected a lot less attendees on Sunday, but most suck around and were rewarded with some great sessions.
- Catering. Subway was a big hit and the cost was very competitive - much cheaper than anything else we have used before.
- Volunteers. I spent most of the weekend listening to speakers and making sure everything was running sweetly. I had plenty of time to relax thanks to the fantastic job done by a great bunch of volunteers. Thanks again to Dan, Bryn, Chris C, Chris F, Simeon, Dave & Gary.
- Weather. Despite predictions of rain, the weather was lovely.
Things that went badly: - Only thing I can think of - we ran out of milk late on Saturday :)
So, on balance, I think that was pretty successful! I think a repeat next year will be possible - but I don't want to think about that just yet.
JB & JD are up on Channel 9, talking about MindScape and Lightspeed with Ron Jacobs. Maybe I'm mistaken but it seems like there are a lot more Kiwi's doing great things with software and getting noticed more often.
I'm not a very good googler. Others in the office seem to find the right answer quickly when I can spend an hour searching and not finding what I want. Today I spend 2 hours trying to solve this problem. When you have a secondary data source that uses a web service, InfoPath lets you specify the input parameters. You can set the value here to any simple data type. However, it's not immediately apparent how you would set the value to a variable data item. In this case I wanted to fetch some data for the currently logged in user. This data is then used to pre-populate the form. InfoPath has a username() function. To use this to specify the value to the web service you need to create a rule for the Form. - Select Tools/Form Options.
- Select Open and Save.
- Click Rules.
- Add a new rule.
- Add an action to set a field value.
- For the field, select your web service as the data source and the input parameter you want to set.
- Set the value to a function or some other calculated value.
- Add more actions if you have more input parameters.
- Add a final rule to submit the query for the web service.
Ensure that the data connection for the web service has the "Automatically retrieve data when form is opened" option turned off. The complete instructions for this were located here.
There is not a day goes by where I don't use a virtual machine for development or testing. Same goes for Remote Desktop. I couldn't work without either. However, remoting into a machine - be it real or virtual - means I lose the benefit of having dual monitors. VMWare supports dual monitors I'm told but we use Virtual PC and Virtual Server. But, never fear, /span is here! Yes, if you launch Remote Desktop aka MSTSC.exe (Terminal Services Client) using the command line switch /span then it will extend the desktop across both monitors. This is not the same as dual monitors - it's really just making 1 really wide desktop - but it's good enough for me. Now I can develop on virtual machines almost as well as real machines. Oh, and in case you didn't know, you can also use /console to connect to an existing session on a remote machine. This is as close to a real login as you can get. You may also find this necessary when installing software. Some application installs will tell you it cant run when your logged in remotely - /console will bypass this.
I've been doing a bit more walking these days, trimming up for summer and saving on gas. I decided I would walk faster with some sounds. I already have my iMate SP5 with a 2 gig flash card and media player on it. However the standard ear plugs that come with the sp5 look and feel like giant silver bolts. Then I saw these blue tooth stereo headsets. SP5's sourced from VodaPhone in New Zealand don't include the stereo blue tooth features that the SP5 is capable of. For these to work, your phone must support A2DP - whatever that is. What you'll need - Get the instructions and discussions here: http://forum.xda-developers.com/showthread.php?t=263735&highlight=a2dp. The download (tornado_a2dp.zip) is linked from the first message in this lengthy discussion.
- Open the zip and read the readme.txt.
- You can get most of the tools listed in here from http://wiki.xda-developers.com/index.php?pagename=ApplicationUnlocking.
- You may need to unlock your phone. You can get those tools and instructions from here: http://www.spv-developers.com/forum/showthread.php?threadid=620.
- The tornado readme says you can import the .reg file using MobileRegistryEditor, but I couldn't see how to do this - there is only an export option. So, I had to manually edit the registry. BE CAREFUL - BE VERY CAREFUL! Do an export of the registry before changing anything. I neglected to do this or even write down the original values before changing them but I got lucky.
Now, I'm completely confused by most of this but I can follow instructions and thankfully, once you find the correct information and tools this works pretty well. I did have one scare. After restarting my phone at the end of these instructions it froze while loading the SIM card pin number input. A battery removal restart fixed this though. Phew! The headset has good quality sound, is very easy to use and the battery has lasted for 2 days so far. You charge them with a USB cable and they include a nifty charger with a USB connecter and cable - useful for many USB devices I think. The right hand ear has controls to play, pause, answer call, go back and forward a track and change the volume. They do cut out occasionally while I'm walking around town, but I find that if I have my phone on my right hip or in a top pocket then this doesn't happen nearly as much. Sitting in the car or at my desk listening to music is just fine. I've also found that if you answer a call using the button on the headset then music will not resume after the call ends. In fact, starting the music from the phone does not work either. It seems to loose connection to the headset for music only. When this happened the first time I turn off blue tooth on the SP5 and the music started playing through the phone speaker, so it was in fact running all the time. However, if you use the phone to answer and end the call then the music restarts as you'd expect. The quality of phone calls is also pretty good. I do feel like a complete dweeb talking without holding a phone to my ear, but you quickly get used to this. People I have talked to on the phone say they can hear me ok, but there is a bit of transfer or wind and traffic noise. You can get the i.Tech BlueBand R headset for $160 from flashcards.co.nz, who, by the way, have a fantastic service. And thanks to the guys at GeekZone.co.nz - it's the best resource for this sort of phone hacking.
Update: I Love SharePoint
A lot of people seem to think that Sharepoint and MOSS are wonderful things - a joy to behold! As of today, I am not one of them.
I've been handed two jobs that require the use of InfoPath forms. The first is to create a Leave Application form for our intranet. The other is a bigger project of about 30 forms for a local government site.
As these seemed relatively straightforward things to do I thought it would be a good opportunity to learn and dispel my bad impressions.
So, this is a dynamic post of the issues I have with InfoPath, WSS, MOSS & Forms Services. As I find solutions or overcome my frustrations I will update (and apologise where necessary). I'll also include a summary at the end and my current mood.
InfoPath Issues
Contact Selector.
This is an ActiveX control that is used on InfoPath forms to allow users to select a user from ActiveDirectory. It requires inclusion of a custom data source (xml file) and creation of fields with very specific names.
- To use more than 1 contact selector on the page requires you to create reference fields - which currently confuse the hell out of me.
- Because you can only have a single Context data source in the form, all contact selectors will work against the same domain.
- There is no way to filter what the user can select. I want a contact selector to only allow groups to be selected. This is not possible.
- Contact selector does work on browser enabled forms. It is the only ActiveX control that does this and it appears as though it's hard wired to work. According to the InfoPath blog there is absolutely no way to create your own ActiveX control that will work in browser forms.
- Setting a rule on drop down lists will get you 6 level deep in modal dialogs. This is a very bad UX.
Lookups
I can attach a drop down list to Sharepoint list very easily but I can only set the display and value fields. The list I'm displaying has 3 values - ID, Team Name and Manager Email. I store the ID in the form, display the Team Name in the drop down and I need to find the Managers Email from the Workflow when the form is submitted.
Designer
- Moving tables is impossible. You can't drag and drop a table and cutting and pasting will trash the contents.
Sharepoint Designer Issues
Getting pretty picky now.
- When editing a workflow, you can't right-click the Workflow item and select New workflow. You have to go to the file/new menu option for that.
- Cannot change the format of emails sent from the workflow. The emails are pretty ugly really.
- Workflow Lookups are very confusing.
WSS Issues
- All to often you fall off the edge of the Sharepoint world and are required to use command line tools - the horrendous STSAdm.exe mostly. This has more options than a Linux command shell! I understand the need for a command line tool but why-oh-why isn't here a GUI version?
- Publishing an InfoPath form to Sharepoint is pretty easy until you want them browser enabled. This requires an admin install of the template. An admin install requires 1) access to the central admin site, 2) an upload of the file from a hard drive (not from a Sharepoint list), 3) activation of the template in a site and 4) configuration of a list to use the new content type created for the form, 5) local machine administrator group membership. This is bloody ridiculous when you consider that publishing a non-browser enabled form works from InfoPath with 3 or 4 clicks of the mouse.
- The help is complete rubbish. It's either far to simple or vague or blank.
Workflow Performance
You cannot have more than 10 workflow's active on a single list and submitting 3 forms with workflow concurrently to the same list kills the server. This was proven for another site we did recently. If I was paying the (huge) bill for MOSS, this would be a show stopper. Thankfully there is K2.
Update: I've been informed by someone much more informed than I (thanks Paul) that there is no 10 workflow limit. In fact there is a WSS property that can be set to specify the event delivery throttle. I wish we had know about this a lot sooner - it's too late for 1 customer :(. Full details here: http://technet2.microsoft.com/Office/en-us/library/93a3282e-00d2-4d03-9721-df42b5aa7cfb1033.mspx?mfr=true
Deployment
I have yet to do this but from what I have seen - don't go there. Create your forms and content directly into your production environment.
- You can't package forms in a STP file. You have to deploy these separately. This will probably require hacking the raw XML files of the form. You also need to generate a .JS script file or MSI using yet another command line tool.
Summary
There are sooo many holes in WSS & MOSS & related tools that it's a wonder anyone is using it. When you consider that this is the 3rd version of Sharepoint - albeit a massive re-write - it's woefully inadequate. It's much more like a v1.0 product.
If you need to create InfoPath forms that require any custom code - DONT! Just create a windows or web app that talks to Sharepoint lists.
If you have complex workflow requirements or require high performance - use K2 or host workflow's in your own service - DONT use Sharepoint for it.
Current Mood: Tony says I'm Indifferent but I feel reluctant. Not nearly as grumpy about SharePoint as when I wrote this but reticent to withdraw the post completelty.
Word has leaked out already (not that is was a big secret) so I had better blog about it myself. We are organising a .Net Code Camp for November in Christchurch. Currently details are a little sketchy, but I can tell you this:
Name: Code Camp Boot Camp
Theme: Next generation, back to basics. New releases of C#, VB, .Net, ASP and SQL are iminent. This code camp will focus on getting up to speed with all of this, plus cover migration stratigies and many non-technology specific topics such as Architecture and Development Life Cycle. Hopefully something for everyone - noobs, gurus, young and old.
Date: We don't yet have a fixed date, this is highly venue dependend - see Venue - but it will be a weekend (Sat/Sun) in or around Christchurch. This excludes Show Weekend (17/18th) which is a very busy time here.
Venue: We don't yet have a venue, but are looking at a couple of strong possibilities. There are many likely venues but finding one that is comfortable for a whole weekend and free is tricky.
Speakers: Presenters will be mostly mainlanders with a few imports from north of the Kaikouras. If you would like to present then please contact me ASAP.
Sessions: We have a list of possible topics that we want to see covered, but this is very dependent on the speaker and their area of expertise. More details once we know who the speakers will be.
We have a great team of volunteers (some of whom don't yet know they have 'volunteered' :) and lots of great ideas so I'm sure this will be a very memorable event.
We are unsure of the level of attendence we can get so if you are at all interested in attending it would really help us if you pre-registered. For this and other details see http://codecamp.net.nz.
I'm late to the debate (here, here and here amongst others) and I don't have anything very intelligent to offer, but that has never stopped me before.
It occurred to me that since Microsoft has already released a major product (Office 2007) reliant on Open XML that it doesn't matter which way the vote goes. Open XML IS a standard. Get over it already. Endless arguments and debates over it's technical or political merits are pointless. Microsoft won't be adopting some other standard any time soon - they stuck with the previous closed standard (.doc etc) for many years and only changed it when they had to / wanted to. At the very least they are now trying to do what everone has been nagging them to do for so long. We should be grateful!
I was waving a quick meeting in a local restaurant last week about some user group activities when we were interupted by someone from the next table. He asked if we worked for Microsoft. We laughed and I said something like yes, but we dont get paid for it. Well it turns out the crowd at the next table worked for a local Open Source development shop and the person who approached us was one of the most 'open source' of them. When I realised this I made a lame joke about how we get paid for our software.
Yes, it was a very lame joke but it turned out he didn't think so. In fact I think he may have taken it a little to personally. So, if your reading this, I'm sorry. I was just attempting a mild wind-up.
However, I really dont get it. Why are so many open source advicates so incredibly sensitive? I have never agreed with the open source fundemantal mantra that many part-time developers is better than a few well paid brialliant ones. Yes, maybe software can cure cancer, foster global peace and be the eternal source of future happiness, but that doesn't mean we all need to have the right to change the code for this to happen.
And will someone please explain to me why they think Microsoft is so anti open source? What a complete crock! Nearly every day I use source code provided free and openly by Microsoft. Ok, so I can't recompile Windows, but do I give a frac? No. In fact I'm sure it would be a much worserer world if every nerd and his pc could modify and recompile KERNEL.EXE. I have no argument with Microsoft making money from software. Sometimes I think they ask too much for their software - especially in this part of the world - but I hardly ever have to pay for it so I dont care that much.
From my very limited field of vision it's all about productivity. If someone can show me a platform that is as productive, powerful, flexible and open as Microsoft's, where it's possible to make lots of money, then I will be happy to consider retraining. Until then, will all you open source preachers please take a pill and calm down!
When I was at the MVP Global Summit back in March we saw an early preview of a SearchDataSource. This looked really cool, but something I would probably not use. Oh, how quickly things change! I've been doing a couple of sites lately that use MondoSearch - Internet and Intranet. It's a great product and very powerful, but it takes a little while to figure out the best way to use it. There are a few different api's you can choose from (cgi, ActiveX, .Net Provider and .Net Web Service) and each of these provides different features and supports different scenarios. After a bit of experimentation I found that the web service offered the simplest solution and best features for my particular problem. Anyway, I was very interested to see if the SearchProvider in the May release of ASP.Net Futures would make things simpler. So I created a MondoSearch provider and this is what I found. Creating the provider This is extremely easy, especially if you already have some code to talk to MondoSearch. My provider looks like this:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Preview.Search;
using System.Data;
using System.Collections.Specialized;
using System.Configuration.Provider;
namespace Jonesie.Search
{
/// <summary>
/// An ASP.Net search provider for MondoSearch
/// </summary>
public class MondoSearchProvider : SearchProviderBase
{
private string _licenseKey;
private string _url;
private string _mql;
private string _lang;
private bool _preview;
/// <summary>
/// Initialise the search from web.config settings
/// </summary>
/// <param name="name"></param>
/// <param name="config"></param>
/// <remarks>
/// The web.config should contain values for:
/// licenseKey - License key
/// url - Web Service URL
/// mql - MQL options
/// language - language to search on
/// preview - Use preview database
/// </remarks>
public override void Initialize(string name, NameValueCollection config)
{
// Verify that config isn't null
if (config == null)
throw new ArgumentNullException("config");
// Assign the provider a default name if it doesn't have one
if (String.IsNullOrEmpty(name))
name = "MondoSearchProvider";
// Add a default "description" attribute to config if the
// attribute doesn't exist or is empty
if (string.IsNullOrEmpty(config["description"]))
{
config.Remove("description");
config.Add("description",
"MondoSearch Provider");
}
// Call the base class's Initialize method
base.Initialize(name, config);
// Initialize licensekey
_licenseKey = config["licenseKey"];
if (string.IsNullOrEmpty(_licenseKey))
_licenseKey = "";
config.Remove("licenseKey");
// Initialize url
_url = config["url"];
if (string.IsNullOrEmpty(_url))
_url = "";
config.Remove("url");
// Initialize mql
_mql = config["mql"];
if (string.IsNullOrEmpty(_mql))
_mql = "";
config.Remove("mql");
// Initialize language
_lang = config["language"];
if (string.IsNullOrEmpty(_lang))
_lang = "";
config.Remove("language");
// Initialize mql
string pv = config["preview"];
if (string.IsNullOrEmpty(pv))
{
_preview = false;
}
else
{
_preview = Convert.ToBoolean(pv);
}
config.Remove("preview");
// Throw an exception if unrecognized attributes remain
if (config.Count > 0)
{
string attr = config.GetKey(0);
if (!String.IsNullOrEmpty(attr))
throw new ProviderException
("Unrecognized attribute: " + attr);
}
}
/// <summary>
/// Perform a search against the mondo web service
/// </summary>
/// <param name="searchQuery"></param>
/// <returns></returns>
public override SearchResult[] Search(SearchQuery searchQuery)
{
List<SearchResult> results = new List<SearchResult>();
DataSet msds;
MondoSearch.SearchService ms = new MondoSearch.SearchService();
ms.Url = _url;
msds = ms.Search(_licenseKey, _lang, _preview, searchQuery.Query, _mql);
// loop through the pages and add them to the results
foreach (DataRow dr in msds.Tables["pages"].Rows)
{
SearchResult sr = new SearchResult();
sr.Title = (string)dr["title"];
sr.Description = (string)dr["description"];
sr.Url = (string)dr["linkdisplay"];
results.Add(sr);
}
return results.ToArray();
}
}
}
The web.config section for this is:
<microsoft.web.preview>
<search enabled="true">
<providers>
<add name="MondoSearchProvider" type="Jonesie.Search.MondoSearchProvider, Jonesie.MondoSearchProvider"
licenseKey="xxxxxxxxxxxxxxxxxxxxxxxxx"
url="http://mysearchsite.com/SearchService/SearchService.asmx"
mql=""
language="EN"
preview="false"/>
</providers>
</search>
</microsoft.web.preview>
Using the Provider Using the new provider couldn't be simpler. Drop a SearchDataSource on the page and set the query, attach your repeater to it. Bind the repeater. Done. Here's mine: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> <style> body { font-family:verdana; font-size:12px; } .result { background-color:white; } .title { font-weight:bold; } .description { font-style: italic; } </style> </head> <body> <h1> MondoSearchProvider Test</h1> <form id="form1" runat="server"> <asp:SearchDataSource ID="SearchDataSource1" runat="server"> <SelectParameters> <asp:ControlParameter ControlID="queryText" Name="query" PropertyName="Text" Type="Object" /> </SelectParameters> </asp:SearchDataSource> <div> Search For: <asp:TextBox ID="queryText" runat="server" Width="250" Text="" /> <asp:Button ID="searchButton" runat="server" Text="Go!" OnClick="searchButton_Click" /> </div> <asp:Repeater ID="rptResults" runat="server" Visible="false" DataSourceID="SearchDataSource1"> <HeaderTemplate> <h3> Search Results</h3> </HeaderTemplate> <ItemTemplate> <div class="result"> <div class="title"> <a href='<%# Eval("Url") %>'> <%# Eval("Title") %> </a> </div> <div class="description"> <%# Eval("Description") %> </div> </div> </ItemTemplate> </asp:Repeater> </form> </body> </html>
The code behind for the button is: rptResults.DataBind(); rptResults.Visible = true; Limitations & Successes The main issue I see with the provider is the loss of some of the advanced features of MondoSearch. For example, security filtering, highlighting, multiple languages - there is nowhere in the SearchResult to store this extra information. However, using this provider does make it extremely simple to add simple searching to your site.
I can't think of a more worthy MVP Candidate than Alex James. His recent contributions to the Auckland and NZ .Net community have been huge! Congradulations Alex.
It's been a long time between posts. I'm currently finishing up a project and moving on to a new client so I thought it would be a good time to document a few things I've (re)learnt along the way. The project I've been working on is for a large travel web site. In 6 months we have : - Replaced the backend web services with WCF services and connected these to new external providers and databases
- Upgraded the site from .Net 1.1 to .Net 3
- Replaced 60% of the pages and changed the rest
- Added significant AJAX functionality and lots of client scripts (JavaScript)
- Fixed numerous issues and bugs
Here's a list of my lessons in no particular order. MS AJAXThe new pages are composed of many integrated user controls, some of which use ajax functionality. UpdatePanels can cause grief to client side functionality and tracing the interaction can be a nightmare. Tip: Keep it simple! Only put update panels at the page level. Only have PageMethods and WebServices called from the page. Use properties and events in user controls to bubble up control to the page - or better yet use a strong MVP or MVC pattern. ASP.Net server controls can also frack with your brain. I would love to try creating a site totally without server controls and just use AJAX. I Love JavaScriptI could do it all day! Langauges like C# & VB.Net are certainly rich and powerful but JavaScript is small and elegant. Of course, you wouldn't want to debug a 5000 line JS file too often (and we had a few of those!). WCFWCF is very easy to use and configure but you can end up with some huge network traffic issues very easily. Try to keep your data contracts as small as possible. Compression helps. Visual Source SafeDont use it if you have any choice. Don't get me wrong, I actually like VSS for small 1 or 2 developer projects. My biggest issues are: - Exclusive checkout is a real PITA with devs in another room or building. Sure, you can do non-exclusive checkout but...
- It still doesn't play nicely with Visual Studio at time.
- It's slow
- I don't trust it because it does some really weird things
Task TrackingThis project would have benefited hugely from having Team System available. I really miss not being able to create work items when I find something wrong or need to remember something to do later. We are suffering at the end of the project because a few issues had been forgotten or deferred. Of course, you don't need VSTS to track your todo's but make sure you have somewhere to record things on the fly. Don't use email to tell your BA or PM - they are just as forgetful as you are! EnvironmentAlso take the time to setup a decent development and test environment BEFORE you start coding. We lost many days due to problems with the development server - too many projects using the same server, poor performance, lack of control etc. Web Application Projects
The file based web projects are ok for simple things but Web App Projects give you settings and properties and a few other nicities. I'm stuffed if I know why MS ever dropped them from VS 05. CSS & HTML Must Die
There has got to be a better way. CSS & HTML are ridiculously imprecise. I'm yet to meet anyone who can sit down and design a web page from scratch that is gaurenteed to work on all browsers and look like they expect it to (except for the simplest of pages). I'm sure there are a few genius designers out there you can do this, but they are few and far between. FireFox & FireBug
FireFox with Firebug is an awesome development tool for client side debugging. You can use FF to debug from Visual Studio by specifying it as the external startup program in your project web settings. Be Stong. Stay TrueSometimes you are asked to do things that you know are wrong. A good argument does not always convince a closed mind. Stay true to your beliefs but do what they want anyway - safe in the knowledge that you will have the last laugh.
Creating deployment documentation for .config file changes is a freek'n nightmare and something that should be automated as much as possible. I haven't found a tool that does this completely as I want but there's a number of XML Diff'ing tools around that do the hardest part of the job. I just found this one on MSDN. It's a little old now but it comes with source and it's fast and simple.
Ideally I'd like to be able to have XMLDoc comments in .config files and then generate some help from this - much like you can do with NDoc or Sandcastle for your code files.
We are still hiring like crazy - or at least we would be if there were enough suitably skilled developers around. It makes it really hard to hire with so many great employers - now is a fantastic time to be looking for a development job!
If you are interested in working for Intergen then please don't be afraid to give me a call or email and I'll tell you what a fantastic company Intergen is.
Highlight: Utah - most any part of Utah is stunning and truly awesome. The desert is beautiful and quite unique to a Kiwi - we don't really have any deserts here. Bryce, Glen Canyon and Zion National Parks are very pretty but I wouldn't want to be there in busy season. Lowlight: Las Vegas. It takes about 1 hour to realise what a scummy place it really is. On the outside it looks interesting but as soon as you walk into any of the hotels on the strip they all look identical - full of sad pathetic losers glued to brain washing machines. I just hate all casinos... Highlight: The people are friendly and actually quite normal! Highlight: Apart from Seattle the weather was clear and hot - which is apparently unusual for March. Lowlight: San Francisco - I feel violated! For a big city it's not bad but we had a hotel in a very seedy part of town and we were constantly pestered by street bums, beggars and people trying to sell stuff. Waiting in line for a cable car we were hassled by 'entertainers' and beggars - not my idea of a great time. Highlight: Seattle - despite the weather I like Seattle. It has a nice feel to it despite having it's fair share of street people. I didn't feel as taken advantage of as I did in San Francisco. The pace seems more relaxed there too. Lowlight: Grand Canyon. From the air this is breath taking but like most of the USA, it takes more time to absorb than most people have in a life time. We only had 2 hours to spend looking over the edge but I felt it was too commercially exploited compared to Bryce or Glen Canyon. Lowhighlight: It's not that expensive. It's a lot cheaper than Europe or the UK for a holiday and certainly very easy to get around. Highlight: Driving in the USA is a joy. The roads in Utah, Nevada and Arizona are long, wide, mostly straight and not too busy. We drove about 1100 miles from Salt Lake City to Las Vegas in 6 days. Our biggest trip was about 450 miles on the first day which was a very leisurely 8 hour drive. Sticking to the wrong side of the road was a lot easier than I thought it would be. We spent most of our time in the Utah desert so overall, it was very happy experience - the lowlights of Las Vegas & San Francisco where very minor in comparison. We are thinking about Vancouver and/or Colorado for the next trip - once we pay for this one.
I’m a little late blogging about the MVP Summit – it finished on the 15th – but I’ve only arrived home yesterday. The wife and I took the opportunity to do some tripping around – more on this later.
The Summit this year was great. It was very well organized, the venue’s – Seattle’s Convention Center & Microsoft – were spacious and accessible. Transportation was very easy and well organized this time.
As usual, we also got to here from some great & famous speakers, including: Bill Gates, Anders Hejlsberg & Scott Guthrie – all of which were highlights in one way or another. We also got to learn about a few upcoming products and new releases – much of which I cannot repeat here – but here’s a few teasers.
- Orcas – there are a lot of nice new features and enhancements in this – particularly around testing, Javascript, AJAX, design etc. Debugging and development Javascript is a place I am very keen to see enhancements on and we saw some nice demos of improvements in these areas (including a fix for a long running complaint from many people). I think the March CTP has some or all of these features included already so check it out.
- ASP.Net v Next – Scott talked about and demo’d a few new features of the next version of ASP.Net in Orcas. Again, I think this stuff is probably in the March CTP but without looking I’m not willing to risk the lawyers! Lets just say that you will see more code-less provider model type things a some new controls that will save you a LOT of coding.
- LINQ – Anders did a great demo of LINQ for Objects & SQL. If you have been living in a cave and not heard of LINQ or have been ignoring it then RUN – don’t walk – to your nearest search engine and learn as much as you can about it now! LINQ will change the way you work with objects and data in ways you may not have realized… eg PLINQ.
- AJAX – Scott demoed some of the new Orcas features for AJAX. He also detailed some features of the current release I was unaware of, including pageLoad(). There’s a great blog post here that shows how to use this and some other nifty features.
- Team System – Rosario is the code name for VSTS after Orcas. There’s not much public information on this so I can’t say anything but the very few tidbits I did here about it sounds intriguing. Use your imagination and look at some of the research and tools the team has been talking about and you will get a fair idea of where they are heading.
- Lastly, some estimated delivery schedules were mentioned for Orcas & Longhorn… and I’m certainly not going to repeat those but it’s safe to say – I think – that by this time next year I’ll be blogging about Orcas SP1 :]
Here's the sample code from User Group demo I did this week on using JSON & ATLAS to create lightweight asynchronous web pages.
Enjoy!
JSON.zip (20.48 KB)
If you are into small devices in a big way then you should take a look at the new .Net Micro Framework, which will be released very soon. You can run this on your watch or similarly tiny devices as long as you have 300k RAM and 1M flash. There is a LOT of stuff missing from the MF but you generally wont want to do most of that sort of stuff - e.g., database access. As with the compact framework you can use Visual Studio to create, compile and debug via emulators, then deploy via USB or serial connections.
One aspect of this I find very intriguing is that the MF is self bootable - i.e., you don't need and OS.
Can you think of a use for this?
Next month I'm off to the Global MVP Summit. This is a semi annual event for MVP's and provides the opportunity to meet with the product teams - yes real Microsoft developers and managers - plus some of the top execs. This year, Bill Gates is presenting the keynote - last time, Oct 2005, it was Steve Ballmer.
So, I've been thinking a lot about what I want to see and say during this 4 day pilgrimage. Here's my list thus far. I'd love you to add to it! Tell me what is important to you and I will endeavour to ask the right people and get an answer.
Orcas
- anything about Orcas, esp. Team System. At the 05 summit we where asked about some of the wizz bang new stuff they were thinking about putting into Orcas and beyond. It will be interesting to see how much of these ideas made it to a real product. At the time I was very excited by some of these ideas, particularly in the debugging area.
SQL Server v next
- it's hard to see how they could improve on SQL 05 in any major way but apparently the next version is under development.
- what's the future for WF, WCF & WPF?
- the expressions tools are very impressive. How will these fit in a development team currently using Visual Studio? Yes, I understand the promise but it would be good to here about the reality. I seriously worry about mixing developers and designers :)
Languages
- C# 3 is changing in many ways. The language gods are certainly taking note of functional and dynamic languages. It's hard to separate the language from the tool some times - i.e., what is C# like if you only have Notepad ? Will it be impossible to use C# 3 or VB 9 without Visual Studio or one of it's spin offs? Not that I would dream of doing this you understand, but I think it's an indication of the level of purity in the language.
AJAX & JavaScript
- I have a few issues with AJAX and the Asp.Net platform. I need to know if this is just me or not. Also, I have an idea for working with JavaScript in Visual Studio - I'd like to see if Microsoft have the same idea. I'd like to have Visual Studio provide better support for js files - the intellisence is not as good as it could be, but more importantly I'd like to have .JSX files - these would be JS files but with the ability to include server controls and markup (<% %>). So you'd have a CS or VB code behind file for them - this could also be the same code behind as the ASPX/ASCX that uses the JSX file.
Software Factories
- we have software factories for web services, web sites, smart client. What's next? What about EFx? I'd like to see this in action.
Can you add to this list? Please comment and let me know.
Oh, just remembered. Most of what we discuss and see at the summit is provided under a non disclosure agreement so I can ask your questions, but I may not be able to tell you the answer - at least not precisely :)
Well, not really free, but a great way to get Vista or Office is to attend the 2007 Technical Briefings. There are some good looking sessions there for developers. I'd reccommend attending the Sharepoint sessions in particular. This is a fantastic platform for back-ending many types of applications - it's not just for departmental intranets.
It's also a great event to smooze with local devs and business people. Unfortunately, I'll be out of the country for most of March so will miss it.
Go get it now!
ASP.Net 2.0 AJAX Extensionis officially RTM.
There's a few minor
changes from the release candidate, most notably the removal of the validation
controls, but it's a pretty simple upgrade.
Yet another reason
to use IIS and not the built in web server in Visual Studio (Cassini). I
have some PageMethods I'm calling from the page that tell me the progress of a
search. In Cassini these calls queue up while the async search methods are
running becuase it does not know how to handle multiple requests
concurrently.
Also, Cassini always
has Windows Auth turned on. It ignores the NTLM Auth setting in your
project.
I do find Cassini
fine for simple web pages though and I use it on my notebook for small site
development without problems.
Well, the ‘5 things about me tagging game’ has finally caught with me, thanks Darryl. I did miss your link though as I’ve been spending a lot of time lately getting Vista working sweetly, working on a couple of web sites and preparing a presso for the local .Net User Group - which conveniently gave me plenty of time to think about the 5 things – just in case I got asked. So here goes.
-
I lived in Sydney for a while in my youth and drove a cab for a year. Famous fare’s included Tim Finn, Barry Humphries (thankfully not in costume) and Yana Vent (spelling?) (but you have to be Australian to know her). Other interesting jobs include TV Aerial Installer, Bakers Assistant, Storeman, Egg Collector, Night Porter, Barman, Bouncer, Telephone ‘Operator’.
-
I live about ½ an hour out of Christchurch and have a lifestyle block with 500 or so olive trees, 3 kids, 8 chickens and 2 cats. Oh, and a wife :]
-
I seem to get sucked (?) into starting user groups and community ‘things’. I started the Christchurch Clipper User Group back in the early 90’s and I STILL think Clipper is a great development language.
-
Most exotic(?) place I’ve been to would be Brunei. My most favorite city? Have to be Florence. I spent a few days there about 18 years ago. Definitely want to go back and see more of Italy. Scariest place I’ve been? Johannessburg at night.
-
I hated school. I’ve never attended university and didn’t get UI either. Consequentially, my kids get off too easy from homework.
I’ll need to do some research to see who hasn’t been tagged yet. I’ll update this post later.
I've been doing a lot of fun JSON stuff lately using ASP.Net AJAX (aka ATLAS). This really is Fun with a capital 'F' but I struck a small problem today.
Given the following C# class:
public class PageData {
public string Name;
public string Address;
public DateTime DOB;
...
}
I serailize this to the page thus:
C#
protected void getPageData() {
PageData pd = new PageData("Peter Jones", "New Zealand", DateTime.Now());
return "(" + JavascriptSerializer.Serializer(pd) + ")";
}
ASP:
<DEFANGED script type="text/javascript">
var pagedata = eval('<%= getPageData() %>');
</script>
Now this works fine for all data types except DateTime. When you serialize a DateTime you get a value in JSON like this:
@7895678963897@
This is the number of milliseconds since 1 Jan 1970. When this is de-serialized with eval() you just get a string.
Instead of using eval() you need to use Sys.Serialization.JavaScriptSerializer.deserialize().
Update
This appears to have changed in the RTM release. Dates are now serialized thus: /Date(millseconds)/. However, I cant get this to deserialize using Sys.Serialization.JavaScriptSerializer.deserialize() so have reverted to using a string in yyyymmddThhmm format, which Date.parse() will happily convert.
Heros by peter@jonesie.net.nz
I watch more TV than I really want to and I
generally hate most of it (note to self – get a life!) but one show I’ve
been watching recently (downloaded rather than live) is Heros. I see TV3
is playing this from next week. If you can’t get the clean HDTV
downloads then bear the pain of the advertisements and watch this show.
It is excellent – a great story with lots of twists and turns.
Holidays are great. You get lots of time to do all the work you don’t normally have time for. Yesterday I finally got around to upgrading my notebook to Vista from XP. Here are a few things I did that made the job easier.
-
Upgraded the RAM to 1 Gig. Previously I only had 256 + 128. How I have 1024 + 128. This cost $279 from Global PC. The tech in the local shop fitted it for me. I’m sure I could have found something cheaper on the Interweb but given the usual no return policy on RAM it’s sensible to let someone else take the risk.
-
Used the Vista Upgrade Advisor. This told me that I would have some compatibility issues with Visual Studio 2005, SQL 2005 and a few other items but that I could install anyway. It also told me that Aero wouldn’t work with my Graphics card which surprised me a little.
-
Downloaded Vista from MSDN. Thanks to Telecom’s Go Large / Go Slow plan this took 10 days for 2.5 GB. Thankfully though, the MSDN downloaded ensured that I had a clean uncorrupted download. Burnt this image to DVD.
-
Installed Business edition using the upgrade option rather than a full install. I figured I could always do a clean install later if I wasn’t happy with the performance or setup.
The upgrade took about 2½ hours. Once finished I uninstalled a bunch of stuff including Visual Studio Team Suite, SQL 2000, SQL 2005. For the small development work I do on my notebook I find that Visual Web Developer Express and the new Expressions tools work just fine – in fact, Web Dev Express is much easier and faster to use than the full VS 05. I also configured the standard windows components – removing IIS and installing Games – what’s the point of a home computer without Spider Solitaire???
At first, the hard drive was grinding for a long time and the whole install seemed very slow. However, I used a 1GB memory stick to provide some Readyboost and over night the search indexes completed building. Now the machine works very well. Outlook even manages to seem speedy! I’m very happy and not having Aero does not seem such a bad thing.
I switched my Xtra account to the new unlimited Go Large plan 2 weeks ago and have found that for anything other than surfing it is incredible slow - dialup slow. Yes, I know it's managed for peer to peer and bit torrent type stuff, but even basic file downloads over HTTP are rediculously slow. At the current rate, downloading Vista from MSDN will take 3 or more days. Now I can fully understand having some sort of restrictions but I live in an semi-rural area where there are not too many users and I do my big download at non peak times - from 6am to 6pm usually. Prior to Go Large I was getting about 5-8 times the performance.
There's a few others complaining about Xtra and reccommending a switch to Orcon or others which is a great idea for some people but where I live, Telecon are the only cable providers so while switching will not reduce Telecon's monopoly or profits it may restore my bandwidth.
The other option is to switch back to the previous 5Gb plan I was on. In most months this was sufficient but with school holidays 5Gb usually lasts about 2 weeks.
So, all I can really do is moan about it here and make sure I cross link as much as possible to get up the google hit list.
Oh, crap, just found this, I should have checked more before switching plans.
Ah, cancel that, just found this. However, it really does show how incompitant Telecon & Xtra are. I really feel sorry for the people that work there - and I know a few. It must be hard working for a company that is so hated by so many people, but really this is the fault of senior exec's and a few idiots in marketting. They will be the first against the wall when the revolution comes. Viva le revolution!
I just spotted this excellent set of posts. If you want to learn about MSBuild then this is a great starting point. You should probably also subscribe to the MSBuild teams blog here.
It never ceases to amaze me how hard it can be to sell good software development practices to business people. All they see is the dollars or increased delivery times. As a 20 year veteran(vintage?) programmer, analyst and amateur architect I like to think that I know a little about creating good software and how to do it well. However, I'm not so good at creating a business case for this.
I'm now working for a company that care about doing things the 'right way', or at least the Intergen way. We care passionately about professionalism and doing what is right for the customer - even if that means saying no occasionally. This is an ongoing battle however, we are not perfect at it. We are still subject to the whims of business requirements and real world financial constraints.
I'm currently assigned to a customer with a team of about twenty internal and contract developers. The code base for the current systems is being migrated to an SOA model using .Net 3.0 and some external components from 3rd parties. The business is driving hard for delivery on critical requirements, some of which are driven by regulatory agencies.
There are a number of issues with the project that I'm sure are common to a lot of other businesses. The existing code that I am working on is, shall we say, challenging, very challenging. It was created rapidly with little care for future requirements or expansion and has been patched by many developers for about three years. There is little or no documentation. Teams working on similar projects are separated physically and logically. There is no real architecture plan that I have seen. Testing is at the bottom of the cliff. There is only lip service paid to agile practices. The list goes on but despite the issues, the team still produces quality solutions that service the business requirements, to a certain degree at least.
As a fan of Team System I am very keen to see this introduced but I understand that it's a big task and may not offer a speedy fix to these issues. It's also hard to sell. Why is this? I think there are several reasons:
- It's hard to describe. Business doesn't want to hear about improved source control, work item tracking and unit testing. They want to know about reduced cost and increased profits. Describing how Team System aids in these areas is hard. The intangible benefits, like improved communication, are hard to estimate because they are very subjective.
- The perception is that it's expensive. This is clearly crap and I'm sick of people saying that it's expensive. What is the real cost of a software defect that takes eight passes through QA to be fixed? What is the cost of a defect in a shared library that stops twenty devs from working for three hours? What is the cost of not tracking defects at all? These are things that are easily measured. A few thousand dollars per developer is NOT expensive. If you think it is then you are in the wrong business.
- Developers don't want to work in a factory. We like to be creative and have freedom to work on what we want, when we want and how we want. The thought of being controlled by a large system and spoon fed tasks to complete on the production line is disturbing. Some developers take this to extremes and refuse to follow any common best practice such as writing comments, documenting systems or proving their code works. This attitude is not prevalent but it is something I encounter occasionally. It is very naive and must be stamped out! If you want to be that free, go work for yourself. Most businesses demand that you work at work and deliver something occasionally. Team System helps you focus on the work without dictating how to do it. You can configure as many or as few rules are you like.
I'm not saying that Team System is the only solution to bad practices, far from it, but it's one solution that I have seen work and feel passionate about.
So, if you've read this far then I'm hoping you agree with me, at least in part. What can we as developers do to sell good software practices? Like any expense or investment, it must be justified. You need to make a case for it. Show the bottom line. Record and measure the failures and use these as weapons. Set good examples by following good practice - unit testing & TDD does not reduce productivity, it increases it. Read and learn. Talk to your managers - if they don't listen, look for a new job - if they don't care about losing your skills then you are better off somewhere else. There are plenty of great companies out there and some of them even respect your opinion!
This is the first weekend in several months I’ve had time to catch up on geek stuff. It’s a nice rainy day (geeze, the weather sucks this year) so I plan to keep my dressing gown on and read and write blogs all day. Apologies for the sickening image of that.
WPF/E was released in CTP last week. If you don’t know what it is, think Flash, but for .Net & XAML. I haven’t had much time to do more than test out the samples so far, but the runtime is only 1mb and is available for Windows & Mac already with good support for the 2 main browsers.
There are as many applications for this as Flash but my feeling is that WPF/E will attract a bigger market than Flash because:
-
XAML for the desktop will translate painlessly(?) to the browser or device
-
Javascript is still used so no huge relearning curve for the hard stuff
-
The runtime is small but very powerful
-
It’s targeted at devices of all sizes and configurations
-
It’s 8(?) years newer
-
It will have great developer tools available from day 1 (Expression, Visual Studio etc)
-
It has Microsoft behind it
My dream is that XAML will kill HTML & CSS. Now wouldn’t that be a great day?
Noticeably absent from the list of supported platforms is Linux. It’s not even planned. The stated reason for this is the lack of Linux clients. If you take a look at some public browser & platform stats, e.g., then this is in fact true- < 5% is hardly worth a mention :]
More interesting in the W3School stats is the trends in screen resolution, javascript acceptance and browser usage. If you are coding public web sites then you should keep an eye on these sort of stats, but do remember that these are for the whole planet and your particular market segment is likely to be quite different. For example, the stats from the www.dot.net.nz site are very heavily biased towards Windows platforms and browsers with high resolutions and 100% javascript acceptance – as you would expect from a highly intelligent Microsoft focused developer community. I’m sure the stats for SlashDot are considerably different.
I think David Kirk made a mistake. TradeMe is doomed and he wasted $700m on a web site that can’t survive with a radical change.
Why?
Because everyone I talk to about TradeMe has been burnt to one extent or another – either by not receiving the goods/money, getting the wrong goods, being slagged off by a buyer or seller, etc. TradeMe is unwilling and probably unable to provide anything more than rudementary protection to it’s users – it’s no better than the notice board at your local supermarket.
Sooner or later the number of pissed off users is going to exceed the satisfied users. Sooner or later, the number of dodgey dealers is going to exceed the genuine dealers. Sooner or later people are going to get bored with idiots trying to sell crap for rediculous amounts – it’s just not funny any more. The joke is over. Time to move on to something that gives a better service to traders.
This is new for me -
maybe for you too. To debug a javascript block from Visual Studio, add the
following to your script block:
debugger;
Make
sure your IE advanced settings have Disable Script Debugging turned off.
When the browser hits the debugger statement it will display the page source in
Visual Studio and allow you to step over the code, examine variable values and
do all the lovely debugging stuff you need to do.
Wish
I'd know about this a few years ago!
Darryl and others have mentioned recently about the impending doom that is IE 7 :] If you are like me and decided not to use it - for one reason or another - then beware that it is very likley to be automatically installed on your favourite computer weather you want it or not.
Now, dont get me wrong, I like IE7 but during the early betas I had an issue with it and Visual Studio Team Suite so I haven't used it on my work machine since then. I do use it at home though and it works fine, but from a user POV I don't think it works any better than IE6. From a dev POV I've just realised that I haven't done any testing on my sites (personal or otherwise) so I should probably stop blogging and get testing!
Anyways, my main gripe is that this is rolling out as a critical (or at least high priority) update so most users will get it without asking for it. I can understand the justification for doing this - it does fix a lot of potential security issues so it would fall into that category - but I can see this causing some problems for a lot of people.
We (actually my wife) purchased a camera on the weekend. It's a Nikon D80. We got it from Photo & Video International in Merivale Mall and I must say that they are without doubt the best camera shop in Christchurch - if not the whole of NZ. Very professional, very friendly, efficient and knowledgeable. It's so refreshing finding real service again!
As for the camera, it appears to work very well. It has a quick shutter speed, is not too heavy - we got the 18-135mm lens so it's a bit heavier than the smaller lens - and comes with all the features we want in a SLR. The previous model, the D200 is a little faster if you are taking lots of rapid shots but otherwise the D80 is identical - same lens and chips - but is also cheaper by a few hundred bucks.
Alex has just released Base4 version 2.1.
I haven't been following the progress of Base4 that closely but it appears that it has matured into a very stable and innovative product - take a look at the 15 minute video if you doubt my word! I can't see how any other product could be simpler to use than Base4. It's awesome.
Alex: it might be a good idea to do some benchmarks like the NHibernate v ADO one I saw recently - sorry can't find the link now. It would be interesting to see the comparison. I'm thinking that Base4 would stack up very well against NHibernate :)
My work PC has been
performing very poorly ever since I installed Office 2007 TR2. Last week I
removed this and it didn't seem to help very much. After a few calls
to our support people and some monitoring of the running processes in Task
Manager I managed to figure out that the MacAfee Virus scanner was the
problem.
IT'S A PIECE OF CRAP
- NEVER USE IT! At least, not if you want to do any work. Luckily I
could uninstall it so my machine is back to full speed again - Visual Studio now
takes less than a minute to open a file.
Phew, glad to get
that off my chest.
Not trying to sound
desperate here but Intergen are still looking for talented people.
In
Christchurch we currently need :
- Project Manager /
Business Analyst
- 1 Senior .Net
Developer
- 2 Junior /
Intermediate .Net Developers
- 1
Tester
Initially this is
for a new initiative working closely with a major customer on some big
systems. It's a very desirable team to be in (for Intergen) and will
involve working closely with the customer supporting existing systems and
creating new systems. The customer is very successful in their space and a
great organisation to work with.
Looking on Seek at
the weekend there was 140 or so IT vacancies in Christchurch and I'd say 90% of
these were for developers and a good majority of these were for .Net or
Microsoft technologies. So given the huge demand and
fantastic choice you have at the moment, why would you want to work for
Intergen?
Well, for me, it's
about the people and the work. We have some really smart & fun people
working for us - people that can make your working day an adventure. The
work is varied and leading edge - we have no fear of using the latest
technologies if it fits the requirement and we understand the risks - things
like .Net 3, Office 12 etc.
If you are at all
interested in chatting about the opportunities - or know someone who might be -
then please send use your CV or contact me on 021 583 793 or contact me via
email.
There's been a few
comments here and there about the lack of support for Visual Studio .old on
Vista. I was reading bharry's
post on this and it makes perfect sense to me - anything that takes time
away from future versions is a bad thing in my book.
However, Microsoft
are definitely going to extraordinary lengths to provide compatibility for as
many applications as possible. For example, VB 6! There is still a
heck of a lot of VB code out there and it's not going away soon (btw, have you
noticed the investment Microsoft have made in VB6 <-> VB .Net migration
and tools since the big stink last year?). I don't know how anyone
can say that Microsoft don't care or don't listen - that's just patently
wrong.
I installed Vista
RC1 on a fast machine over the weekend so that I could work on a small
DotNetNuke web site (for a moonlighting job - don't worry, the boss knows
:). During the process I had to install SQL Express. Vista gave me
an interesting warning message that told me I needed SQL Server 2005
SP2. Now after a bit of hunting around I finally realised
that SP2 doesn't exist yet. Hmmmm, this could be a problem.
However, I then noticed the Application Compatibility icon on my desktop and in
about 1 minute I had SQL Express running in XP SP2 mode.
Now I don't know
about you, but I can't remember ever knowing enough about the future to tell
users of my applications that they should get a patch that does not yet
exist. Frankly, I find this to be amazing that Microsoft would go to these
lengths and a clear demonstration that of their commitment to delivering a great
product.
So, now I really
want Vista at work - not because it's necessarily any better - but mainly
because it's new and shiny. New is good because it will have the latest
goodness (and sure, the latest bugs). Shiny is good because I spend 10-12
hours a day looking at computer screens and I need a bit of a change to keep me
interested. Oh, and I guess it's faster and easier to use and all that
boring stuff too.
This is a great
industry to be involved in.
I’ve been very quiet on the blogging front since
starting work for Intergen. The change seems to have sucked all my
creative juices so that by the end of the day there is little left for anything
else. The state of my garden is more evidence of this. It’s a
shame really because there has been some great blogversations and campaigns
going on lately. I haven’t really even had time to read blogs.
However, spring is upon us and I’m feeling a but more
invigorated these days, although I still don’t have much to blog
about. In the past I’ve tried to keep to technical subjects as much
as possible and I don’t want to change this, but I really should blog
more about NZ .Net User Group activities. So, here goes… (next
post).
Voting is now open for the New Zealand .Net Blog of the Year. You can cast your vote from the Links page of the User Group site.
You can vote for me if you like, but as I’ll be counting the votes then I guess I’m ineligible :{
If you want your blog to be included in the voting then you need to be in the OPM list - just following the instructions on the page linked above. You can also post a shortcut to vote for you blog thus:
http://www.dot.net.nz/blogvote?blogname=MY Blog Name Here
Votes will of course be filtered for obvious fraud!
Like Rod I am completely baffled by the game of Football. I'm sure it takes considerable skill to perform some of the elegant goals you occasionnaly see in the Readers Digest versions we get on the sports news at night, but for the life I me I cannot explain why anyone can sit through the remaining 89 minutes of utter boredom.
To make it worse, I've been surrounded by devotees of the "Beautiful Game" for the last month - either at work or socially - and even the most ardent of these fans will admit that it can be a tad tedious at times.
On the odd occassion that I have been tortured with more than a glance at the action it has inevitably been 0-0 in the 83rd minute, or some mumma's boy has tripped on a blade of sharp grass and ruptured his spleen.
Xenu gave us hands for a very good reason. FFS - just pick the damn ball up and run with it!
I’ve been at Intergen for 1 whole week now and I feel like Neo after taking the blue pill – or was it the red one, I forget. While I enjoyed working at Airways and the University of Canterbury anyone would be hard pressed to describe them as high pressure work environments!
Intergen has a large team by New Zealand standards and we are producing some great solutions for large and small organizations. It’s great to be working with such a large team and the environment is fun.
I’m currently working on a small community portal site (for about 30,000 users) using EPiServer. This is an ASP.Net CMS from a Swedish company. Yes, I’d never heard of it before Intergen but I’m beginning to like it a lot. It’s very quick to create sites with and it performs very well. There’s a lot to learn though so progress has been slow this week, but I’m getting there.
Intergen are currently looking for more talented people to join the team in Auckland, Wellington or Christchurch. If you are thinking about a change then I highly recommend that you checkout the web site and send your CV along. If we like you and you sign with Intergen before the end of August you get to take home a free 19” LCD monitor. Sweet little bonus (that I unfortunately just missed out on :< ).
Here’s today’s Dilbert for my last day at Airways.

If you have been living in a cave this week, you may have missed the announcement about the demise of WinFS. On the face of it, this post seems reasonable but like some of the respondents I'm a tad disappointed and worried.
We have been hearing for many years about the new file system based on SQL that would let us do all sorts of cool things. It never seemed to happen until WinFS came along. Now that WinFS is gone(ish) the future seems very uncertain.
At least it looks like ObjectSpaces might actually happen in the form of ADO.Net Entities but Microsoft are very late with something that has been done by many others already - e.g., WORM, nHibernate and Base4. I think Entities will succeed only because of LINQ - without that, it's no better than the other players in the ORM game.
Vista & Longhorn were supposed to deliver the fantastic new file system. After using Vista for a few weeks I'm now inclined to think that Vista is just a fancy XP. I'm sure MS will sell lots of Vista to home users via the OEM channel but I'm yet to see one valid business reason for Vista and if there is to be no WinFS then what will be the point of Longhorn Server? Security? - sure but it's not like XP/2003 will stop being secure when Vista/Longhorn ship. Performance? - maybe, but at a hardware cost. Wizbang? - it has plenty of that but apps won't look much better until they have been redsigned for Vista, a simple recompile won't make them look like Vista apps. WinFX / .Net 3? - well I can do all that on XP/2003 and as most users are still going to be using legacy OS's I'm probably not going to be writing apps for Vista/Longhorn any time soon.
I think Microsoft have reached a cross-road in the development cycle. Products are getting pretty solid, features locked down, integration is coming together. The final picture is starting to become clear. I haven't lost faith in Microsoft - far from it - but they are going to have to pull something convincing out of the marketing hat to reassure the congregation.
The 2006 .Net Blog of the Year competition is underway!

This year the contest will be run slightly differently.
- Bloggers will need to register their site for voting to be counted.
- Voters will place their SINGLE vote after logging in to this web site**
- Prizes are planned...
To be eligible, blogs must:
- Be authored by someone resident in New Zealand
- Preferably include a large proportion of content relevant to .Net programming or the .Net programming community
Sites should be registered as soon as possible - the later they register the less time they will have to attract votes - but there will be no cut-off for registration.
Voting will commence from July 1st and run until Sunday 20th August. Results will be announced at TechEd in Auckland and via this web site.
To register a blog, visit http://www.dot.net.nz/Default.aspx?tabid=78
The worst part about changing jobs is having to setup a new dev machine with all the tools I like. So, to help me remember, here’s a list of all the stuff I’m currently using and where to get it. You may also find some of these useful.
Free Stuff
Base4 BlogLines Notifier – For my blog reading CopySourceAsHTML – VS05 addin to copy source code to the clip board as HTML Cropper – Fantastic screen capture tool Daemon Tools – Virtual CD mounter thingy DebugView - Great for capturing trace (Ta Nic) DPack – a big bunch of addins for VS 05 IIS6 Manager for XP ieSpell – Spell checker for IE 6 Paint.Net – More than adequate image manipulation for my level or artistic ability. PowerShell Reflector - Dont use it often but when I do I love it (Ta again Nic) Ruby On Rails – Ha, ha. Just kidding Tim :] Snippy – Useful for creating Snippets. Spike – Network clipboard SQLPrompt – RedGate’s Intellisence type thingy for SQL. This is only free for a limited time so remember to backup a copy. Synergy – Mouse & Keyboard sharing for multiple machine setups XP Power Toys – Command Prompt Here, Alt-Tab Replacement, Image Resizer and others
Team System Goodness
Admin Tool – Manage users across all 3 servers. SideKick’s – Handy utils for MSBuild, Workspaces & Status. Team Edition for DB Pro’s - CTP
Plus all the WinFx – sorry, .Net 3 stuff – have this on disk though
Not Free Stuff
SQL Bundle – RedGate Tools – ESSENTIAL
I’m sure there’s more but that’s all I can find at present.
There’s a great – but somewhat confusing – video up on Channel 9 covering the new Concurrency & Coordination Runtime – otherwise known as CCR (not to be confused with those ancient rockers!). My definition: it lets you coordinate multiple threads and events without using nasty locks and semaphores and shared memory etc.
These guys are certainly passionate about it and it looks like one of those lovely little elegant libraries that makes you really happy to use. One day soon I may actually need it. Actually, I’ve been having problems with UI threading and async web service calls recently. CCR makes this sort of coordination trivial.
Rod Drury just announced that Archive Manager (aka Aftermail) just won the Best Exchange Product Award at TechEd USA. This is truly fantastic and yet another indication that Kiwi’s really can create world class products. Well done Rod – you and you team are a great inspiration.
Now we just need about 20 more Sam’s & Rod’s and we can make a takeover bid for Microsoft :]
.. you know who!

I just watched this video on Channel 9 with Anders Hejlsberg and Sam Druker talking about LINQ & ADO.Net Entities.
If you are like me and you spend way too much time writing crud code and data layers then this is a MUST WATCH video.
Financial Tip: Don’t invest in any ORM products. I forsee many of these becoming redundant in next year - but maybe not all :]
Typical! Take off one weekend and the whole world shifts under your feet.
I woke this lovely Sunday morn to find that .Net is now 3.0. Like JB & Nic, I’m not too fussed on this name change. It’s very confusing that .Net 3.0 will still include the same .Net 2.0 CLR. Didn’t Sun do the same thing with Java 2?
Nic’s idea of a SE and EE version seems like a more sensible solution. I wonder if they considered this? And what are they going to call it when they do need to update the CLR to the next version? Will it skip to 4.0? I suspect there will be yet another name change post Vista/Longhorn as I get the impression there are factions in Microsoft that don’t like the .Net name.
Oh well, never mind. I’m sure we will get used to it. As long as it ships as a single install I’m happy.
The other thing that sneaked out via Soma’s blog was the announcement of the MSDN Wiki Beta. I’ve been biting my tongue on this for about 9 months – since the Summit last October. Basically this lets ‘anyone’ add extra content to MSDN Online. This can be used to provide more real world code samples, small corrections and most importantly new language versions. It’s a fantastic idea that I’m sure will be of great benefit to many people but there are a couple of issues:
1: Vandalism. Like all wiki’s there is a certain element that just love to futz with stuff and ruin it for others. Microsoft is a very big easy target and MSDN has many nooks and crannies where you could hide some naughty words. Moderators and contributors will police contributions to reduce the time that vandalism is visible but a few subtle things may slip through.
2: Ownership. How will anyone know if the code someone posts as a sample is theirs and not something they have copied from a protected source? Does this make Microsoft liable? If I then use this copyrighted content in my application does is make me liable too? These are questions only a lawyer can answer I think but the content is protected by the same or similar licenses that many other community contribution sites use. In the end, I doubt we will be any more at risk than we are now using Google or MSN to find code snippets.
The current beta wiki site is a separate beast to MSDN with a limited subset of the content but the RTW version will include everything. Take a look, sign up and start adding some code samples.
I thought I was pretty settled at Airways but an opportunity presented itself a while ago and after thinking about it for a month, I applied for and was hired as Senior Consultant for Intergen here in sunny (but chilly) Christchurch. I’ve not worked for a commercial consulting company like this before but it has always been something I have wanted to do so I figured it’s now or never. I’m really looking forward to working on many varied and large projects with an excellent team that includes – amongst others – Jeremy & Kurt.
Intergen are a Microsoft Gold Partner and provide solutions & services for many well known New Zealand and International companies. They specialise in integration solutions for many Microsoft products including SQL Server, Biztalk, Dynamics (CRM, Navision etc) & Sharepoint. They also design and develop Windows and Internet applications on the .Net platform.
It’s always hard leaving somewhere you have enjoyed working and at Airways I have made some good friends and learnt much. Hopefully they will remember me for a while :}
I start at Intergen in July.
A short thread on our local .Net UG mailing list has prompted me to document why I don’t use ClickOnce and how I do No-Touch deployment of internal applications . I thought I had blogged about this in the past but I can’t find anything totally relevant. So, here goes.
ClickOnce v No-Touch
As I see it, the benefits of ClickOnce over No-Touch are as follows:
- You can give the user the choice of upgrading or not.
That’s it. And really, you can do this with No-Touch also but for internal applications where you have a fast local LAN and complete control of the environment I think ClickOnce just makes this way more complex than it needs to be. Plus, creating ClickOnce deployments is not an easy thing to do outside of Visual Studio so if you want to automate this you need to learn MAGE.
How I do No-Touch Deployment
Here’s a condensed step by step that may help someone else.
- Create a virtual directory for your deployment – probably in IIS but other web servers are supposed to work.
- Make sure the new VDir is configured as an Application in IIS.
- If you are using IIS 5 (Win 2k) then you probably need to allow .config files to be served. To do this you need to have a web.config file in the VDir (or it’s parent) that contains this:
< system.web> <httpHandlers> <remove verb="*" path="*.config" /> <add verb="*" path="web.config" type="System.Web.HttpForbiddenHandler" /> </httpHandlers> </system.web>
This tells IIS to allow any .config file EXCEPT web.config to be served.
-
Copy your client files in the root of the virtual folder – including all DLL’s, EXE’s and EXE.CONFIG files.
-
If your application loads DLL or other files dynamically at runtime then use the VDir url to point to those files.
-
Configure a Security Policy Code Group for the URL – giving full trust or any reduced level you can get away with.
-
Export the Security Policy to an MSI.
-
Provide a web page or something for users that includes a link to the client EXE in the new virtual, plus a link to the .Net runtime installer and the new security policy MSI.
Using IE the users can launch the application once they have installed the framework and configured permissions. Alternatively you can create a launcher application.
Now you can simply replace the contents of the VDir with new versions and the users will automatically get the updates next time they execute the app. If you want to have multiple applications or multiple versions of the same application available at the same time, then simply create a new VDir for each app or version.
If you have web services or remoting components that are tied to a particular version of the application then these can live in a sub-directory of the VDir. For Remoting there are a few extra tricks involved which I have document elsewhere if anyone wants to know.
If you have a database backing the application then you may run into problems supporting multiple concurrent versions of an application accessing the database. This is probably more trouble than it is worth so I tend to force updates to all users rather than supporting multiple versions. So you really need to ask users to shutdown while you upgrade the database and VDir deployment. I don’t see how ClickOnce would make this any easier though.
Enjoy
Rob Caron noted that Attrice have released a new free SideKick for MSBuild. I have just downloaded and installed this. If you are wanting to learn about MSBuild then this is a great way to get started. The thing I really like about it is you can quickly view inherited targets, which for Team Build is great!

For complex builds with many imports and custom tasks this is a great way to visualise and tidy your build projects. It’s well worth the small download.
I made the mistake of telling my boss I didn’t have much to do so I’ve been using Word 07 for a week to create a user guide – gee I love writing manuals :} Word 07 has made the task a bit more fun – but not much.
Overall, I love Word 07. The Ribbon Bars do make things a lot more accessible but I’m not sure if it makes things any quicker. There are a number of small bugs that are a tad annoying (table headers settings don’t stick, style preview sometimes stops working etc) but nothing that has caused me to switch back to Word.old.
It appears as though MS has relented to the pressure from Adobe to remove the PDF support from Office. Checkout Slashdot if you want the full debate. If I was a serious Adobe shareholder I’d be wanting someone’s head on an platter for this stupid decision. What the heck are they thinking? If PDF is truly an open platform like Adobe says it is then why would they ask the world’s biggest and most successful software company to pull support from one of its’ best selling products?
Well, I guess it might have something to do with the laser sight that Microsoft have for Adobe at present – e.g. WPF = flash killer, Expression = Dreamweaver and PhotoShop killers, XPS = PDF killer. By reinventing the platform (with Vista & Live and .Net / WinFX) Microsoft can drive, or at least, steer users to their own products – the products that actually earn them real money – i.e. Windows & Office. Personally, I don’t have a problem with this – it’s far preferable to the madness of having a multitude of different interests driving the platform.
But now I’m babbling again.
Finally managed to get back to doing some more Wix things this week. Since the last post I have added components to :
- Prompt the user for windows groups of valid users (5 of them)
-
Create a blank SQL Database
-
Add the groups to the SQL Server users
-
Add the groups to the appropriate database roles
-
Configures the web application for .Net 2
I’ve also added this into my Team Build project so that I get a nice new clean MSI for every successful build.
Today, I’ve extracted a few Wix snippets and I’m making these available to anyone who wants them. There’s not much in there yet but hopefully it will save someone some time. Do with them as you will! If you have more and would like to start building a library of snippets then I’m more than willing to act as a librarian for these – unless someone else has already done this – in which case you can have mine.
Download: Wix_20060526.snippet
Darryl has just posted that TechEd NZ 2006 is open for registration already! I've been softening up ... ah sorry, I mean informing my boss about this for a while so hopefully we will have some budget for it this year :}
I think it's a great idea to open the labs on the Sunday - I never get time for them during the normal session time. Scott Guthrey is another big feature of course - and I'm not talking about his body size! I'm sure the MS crew will be working hard on getting the agenda and speakers finalised over the next couple of months.
Tim & Nic have been having a few thoughts about browsers and home pages of late and it got me thinking about how I do things. I'm mostly like Nic - I open IE 6 about 20-100 times a day and I often have 4 or 5 instances running. Yes, I've tried IE 7 but for work it was too unstable. I've also tried MSN toolbar for tab pages and Google toolbar but all they do is get in the way. I don't do any web dev work so IE 6 is more than adequate for me. At Home I use IE 7 as I can put up with a few issues there.
My typical usage pattern is to open IE, go to Google and search for something technical about a development problem I'm having. No custom home page is going to make that any easier than Google. I use BlogLines for RSS feeds so that I can read stuff at home and work - I used to use NewsGator but it broke a while ago and I didn't like any of the other aggregators I tried - they were mostly too slow and buggy.
I'm also not very good at saving favorites - mostly because I have too many, it's just easier to search each time. Sometimes, I wish I had saved a hard to find link in my fav's but usually I just have to repeat the 12 searches it took to find the page the first time.
If I was to have a customisable home page it would have to be:
- FAST. I mean REALLY FAST - like INSTANT - therefore local and static
- Editable in the browser
- Synchronisable with my other machines
If I was able, I'd create a one page wiki in Java script that I could quickly edit and upload to a server somewhere. The search box in the IE 7, Google & MSN toolbars is as good as using Google for a home page and if I had the space I'd also have the address bar on my desktop like Nic.
As for Live I've commented on this before. It's definitely NOT fast. Even the default non signed-in page is slow. At work, I'm lucky to get 100k for Internet and home is worse (so much for Telecom's BS about next generation broadband). At modem speeds Live is Dead. I just did a quick test- with a blank Live page and NO gadgets it loads as fast as Google, maybe a little faster. This is good, but then what's the point? Your left with a page with just the search bar, much like Google. MSN search is as good as Google but it's not better than it.
I look forward to seeing the final non beta version of Live but currently, it's not for me. The current offering barely equals Google and as it's all about destroying.. sorry, competing with Google then Microsoft have a long way to go. But I'd put good money on them doing it. If I was a Google share holder, I'd be pretty nervous.
Now if Live had a gadget that gave me my one page wiki then I'd be very interested.
I've seen a couple of posts recently (Nigel & Xtramalt) regarding advertising and Microsoft's move into this market. I'm not sure how long this has been going on or exactly where it is going, but I'm worried, VERY worried. In particular, I'm worried about unsolicited advertising appearing on my own or kids desktops. It's bad enough that subliminal advertising is so prevelant in TV programs (including News), Movies and Games. The 8 hours (or more) I spend in front of a PC screen is the one place I am isolated from the marketing persons lies and brain washing.
Let me state now that if Microsoft intends to deliver advertising to my Vista desktop then I wont be using Vista. In fact, I'd be inclined to not use Windows at all - given that I hate Linux that only leaves Mac or a change in career. I might move into the PC demolision business.
Can someone please tell me that I'm unduely worried about this possible future?
Hmmm, does having a few Google ad's on my web site make me a hypocrit?
Update: Darryl & Nigel have assured me that I am worried about nothing - it's just my over eager paranoia at work! Phew. You have to keep a very watchful eye on these marketing people tho :}
I've been getting a lot of spam at work lately that is getting through our normally very efficient filter. It gets through because the senders address 'looks' valid, isn't black listed and the content of the email is a single jpg. For the spammer this is not so great because they can't put hyper links in the message so even if I was inclined to read the drivel they promote then I'd have to manually navigate to some stupid web site. I'd be very annoyed if I was paying for these emails to go out.
However, the real issues is how to block these. The simple answer is to use gray-listing - not sure if this is the correct name but this is what my wife does - I think it goes something like this:
- Email is received. Receiving server check's it's white-list of senders and finds that the email address is unknown.
- Receiving server pings the senders domain email server and asks it to verify the address.
- If the senders server doesn't respond at all then it's most likely spam and email is gray-listed
- If the senders server responds with an OK response then the email is let through - at least to the next level of checkinig.
- If the senders server responds with an error or BAD then the email if gray-listed or blocked.
Users are able to view gray-listed messages and unblock senders or whole domains.
This sounds very simple and logical but it's very suprising how few ISP's do this. Despite the advertising campaign Telecom don't do spam checking of any consequence. My wife used to use Xtra but when she found out that they will allow through emails from non-existant Xtra accounts that didn't come from one of there own servers, well this was the last straw I think.
For my personal email I have my own server on my hosted domain. It uses spam assassin which does a reasonable job - I get about 5 on a bad day. What's your ISP like?
I've spent about a day and a half creating a MSI to install my project using Wix. I wanted to use Wix because the MSI has to be built during my build process automatically. After a confused start I now have a working installer that:
- Displays a nice splash page
- Displays a license agreement with a checkbox for confirmation
- Checks for minimum OS version and .Net 2 Fx
- Lets the user choose a Typical, Custom or Complete install. Under custom they can choose Client and/or server components and specify directories for each.
- Prompts the user to enter config parameters for the client and server and updates the corresponding exe.config and web.config files
- If the server components are installed it creates a virtual directory in IIS
The next step is to add an option to create the SQL database but given my progress so far I don't expect this will be too hard. Then I need to figure out how to send out patch installs - I suspect this might be a tad harder.
Along the way I've discovered a few things about Wix so here's a list of stuff that might help others (and probably myself when I've forgotten this in a few weeks time :).
- Use the v 2 latest revision. I used 2.0.4103.0. Get the source code and binaries - you'll need the source to create custom dialogs.
- Use the Tutorial. It's a bit vague in places but just hack something together and you can usually figure out the options.
- Google 'wix anything' and you will find an answer quickly.
- Join the wix-user mail list. The chaps there are very helpful and friendly.
- Creating a custom dialog is a piece of cake if you follow the tutorial but a GUI tool to create the dialog layouts would be nice. Maybe there is one ?
- There is a Visual Studio addin for Wix projects but I had problems with this - maybe my fault - so I just used the tried and true command line method and Visual Studio to edit the raw wxs files. You should add the provided schemas to your VS schema directory and create a CMD or BAT file to compile and link your MSI.
- Updating config / xml files from Wix is easy but you have to escape the xpath expression correctly, e.g.:
ElementPath ="/configuration/applicationSettings/Airways.SUMS.Properties.Settings/setting[\[]@name='FirstDayOfWeek'[\]]/value"
-
The syntax can be a little wordy in places but in general it all makes sense. A ComboBox control in a custom dialog looks like this:
< Control Id="FirstDay" Type="ComboBox" X="115" Y="70" Width="190" Height="15" TabSkip="no" Property="CC FIRSTDAYOFWEEK" ComboList="yes" Sorted="yes"> <ComboBox Property="CC FIRSTDAYOFWEEK"> <ListItem Text="Sunday" Value="0" /> <ListItem Text="Monday" Value="1" /> <ListItem Text="Tuesday" Value="2" /> <ListItem Text="Wednesday" Value="3" /> <ListItem Text="Thursday" Value="4" /> <ListItem Text="Friday" Value="5" /> <ListItem Text="Saturday" Value="6" /> </ComboBox> </Control>
- You can edit the supplied Bitmaps to include your product or company logo. In fact you can customise everything.
So, I don't know how this compares with InstallShield, Wise etc but I'm quite taken with Wix and I found it quite fun to use. I'm certainly no expert on installers and MSI's but I've managed to create a slick installer with minimal effort. Most importantly, Wix passes my 20 minute rule: I have to be able to produce something useful in 20 minutes or it's no good for me.
Tell me what you think.
I've been signing my project assemblies this week and today when I ran my Team Build, it failed with the following error:
error MSB3323: Unable to find manifest signing certificate in the certificate store
It turns out that this is caused by a bug in Visual Studio or Team Build or MSBuild - take your pick. If you ever turn on signing of Click Once Manifests in your project properties, the project file gets updated. Turning off the setting does not completely remove everything it should remove - at least, not as far as MSBuild is concerned. The solution is to manually edit the csproj or vbproj file and remove some settings. For a full disclosure of the fix, read the forums thread.
I've spent a lot of
time lately - far too much in fact - getting DotNetNuke 4 setup for module
development. On the face of it, it seems very simple - install the start
kit, create a DNN project and press F5 - but that will only give you
grief.
For future
reference, the most useful thing you can read is this post by Shaun
Walker. Follow the instructions there EXACTLY! If you can't be bothered
then here is my shortcut version:
- Download and
install the DNN 4 Starter Kit.
- Create a
VB Web Site project in VS05 (Express or other) and select the
DNN Project.
- You MUST specify
and HTTP web site - don't use FILE - Cassini is not up to
it.
- Add the new
database.mdf to the App Data directory (or create on elsewhere and change the
config files connection string).
- Give Network
Service or ASPNET Modify rights on the new web site folder.
- Rename
release.config to web.config.
- Run
If you follow all of
these steps you shouldn't have any problems.
Other
tips:
- Don't create
modules in C#. You are supposed to be able to and I did manage to create
one once, but the 2nd time around it gave me all sort of stupid errors.
Just accept that DNN is VB and your modules should also be VB. (It's not
that bad really :)
- Use SQL Express if
you can. The integration with VS05 is fantastic.
- Make sure you have
a decent machine to develop on. My notebook is a 3 gig P4 but it only
have 500mb RAM and VS05 grinds like a meat mincer full of
concrete.
Rod just blogged that ERWin was recently (?) purchased by CA. What a shame! I never actually used ERWin in anger - I'm a code first, diagram later kind of guy - but it looked good.
Does anyone remember Nantucket Clipper? In the late 80's and early 90's it was THE database development language for DOS (a lot of FoxPro users may be laughing about now). Nantucket created some wonderous stuff that we have only recently seen in Windows tools - things like code blocks,eg:
LOCAL block := {|var1, var2| DoSomething(var1, var2) } LOCAL res res := ExecThing(block)
? res
FUNCTION ExecThing(block) LOCAL v1 := 1, v2 := 2 return eval(block, v1,v2)
FUNCTION DoSomething(x,y) return x + y
It also included the best preprocessor I have ever seen, you could create user define statements to the extent that you could create your own language. Very cool and very dnagerous. I once heard someone describe Clipper 87 as a tool that let you shoot yourself in the foot and Clipper 5 as a tool that would let you shoot yourself in any part of the body you wanted.
Anyway, Clipper still lives on - I have one customer that I still support with 12 year old code.
But I digress. CA purchased Nantucket not long before they were due to release the long awaited Windows version of Clipper. And that was about it. CA did ship Visual Objects and a small upgrade for Clipper 5 but essentially CA killed it.
So, if you like ERWin, then be warned.
I was tired of my old Dilbert desktop today so went searching for a snazzy new image. In the process I found a blog post to few sites with some lovely images that work well on dual monitors. I remembered that UltraMon allows you to span an image across two monitors or have different images on each. I downloaded and installed it and now I wish I had tried it out a long time ago. If you have dual monitors you must get UltraMon.
One of the sites I browsed tells me that IE Sux and I should use FireFox. There is no way of browsing the site at all with IE. To the the owner of http://www.guikit.com I'd like to say that if you believe that 75% of the world is wrong then go ahead and block your site, I don't give a rats. Everyone is entitled to thier opinion and you may well be correct but it's like saying that people who drive on the right hand side of the road are wrong and I'm going to drive on the left no matter where in the world I drive.
Then I discovered the brilliantly named site http://www.killbillsbrowser.com. How f'ing ridiculous can you get? OMG, get a life. What about all the corporate users who don't have a choice? I've seen this sort of campaign before - from OS/2 users, from BetaMax fans . Didn't work then, won't work now. FireFox is a great browser and IE 6 does have it's problems (to put it mildly :) but this sort of religious clap trap doesn't make anyone want to change. Just get over it!
Phew. That feels better.
A few people have had some negative things to say about Microsoft Live & Vista of late. While I'm certainly no expert on either of these I'd just like to offer my observations.
Live is a google killer. From what I have seen so far, and from past experience, Microsoft will have a superior product based on one thing: Integration. No one does integration as well as Microsoft. Google is currently all over the place. Some things looks the same, some things work the same, but in general it's 'messy' :}
Sure, Live is very messy also but it's not even v1 yet. When the integration with Vista is working and Live is more Live, I think people might be less harsh.
HOWEVER, I don't like Live either and its not becuase it's buggy or evil, but becuase I've seen web portals before and adding a splash of Ajax is not going to spin my wheels. PORTALS JUST DON'T WORK. This whole Web 2.0 Mashup BS is just that - complete marking hype. Give it a year or two and we won't be any further ahead than we are now.
I beleive that Microsoft have a grander vision than Live and I think it is this: "The web does not work. Smart client applications are where it is at. Let's create a medium that will leverage both platforms and drive people back to Windows - but with an open implementation that will encourage development and adoption".
If I had my way I'd make HTML & JavaScript illegal. Sure it has it's place but everything in Web 2.0 is just a catchup to what Smart Client apps (or whatever you want to call them) have been doing for years.
As for Vista, that's a different story. Most people haven't seen the real power of Vista yet - and it's not anything you can see through the glass UI. The best parts of Vista are under the hood. I remember a lot of similar statements about XP 3 (?) years ago but look at it today - it's the domenant desktop UI by a huge margin.
I may be completely wrong on all of this - I often am - but one thing is certain - we love change. Sooner or later we will embrace it in one form or another.
As you've probably seen elsewhere our Code Camp is done for 2006 and yes, it was a great success. I've been collating the eval sheets and we got a very high average score on presentations, speakers & venue. I think the only thing really missed was some sort of social event. You can bet that it will be on the agenda for the next Code Camp, but this year there just wasn't time to do everything.
When we started the initial planning for Code Camp, I estimated that 80 people would be a good size audience. In the end we had 150 registrations and of these about 20 no-shows. For most of Saturday there was in excess of 110 people in the main room.
Some people would like to have another Code Camp this year, but it's taken me three days of rest to regain some level of equilibrium so I'm not yet ready to think about that.
While I didn't have a lot of time to sit and absorb the presentations the highlights for me:
Rod, Chris and Mauricio's Business Forum
They had some great tips and background info for budding entrepreneurs. If I was younger and riskier I would be very inspired to have a go. Sadly, I'm too old and stayed in my ways for that sort of malarky.
Ivan on WPF
Ivan was a great presenter and gave a good overview of WPF with plenty of wizzie demos. I'm sure Kirk will be calling on him again to present.
Tim on Ajax
I think this was Tim's biggest audience but despite a few nerves he did a great demo of Ajax & Anthem. He made me wish I was doing web stuff.
And all the other presenters were great too - but some required more brain cells than I had to spare over the weekend. That's the big problem with running these type of events - you miss out on most of the good stuff. Oh well, maybe next year.
5 Days till Code
Camp! I can't wait.
When I first thought
about organising a community lead developer-only event I realised it
would be a lot of work and I wasn't wrong. However, it's been a lot more
work for everyone else than me. So before things get crazy, I'd just like
to publically thank The Team - Kirk, Sue, Brenda, Tim, Chris, Nic, Phil, all the
presenters and everyone else who contributed some time or ideas to this
project. Now we just need to make the event happen. See you all
soon.
I was just catching up on my long overdue blog reading and saw on ScottGu's blog that MS have released the source for all (?) the ASP.Net 2 providers. This is awesome! If you want to create your own providers then this will be a fantastic resource to help you do it 'The Microsoft Way'.
It would be great if they extended this philosophy to more of the Framework. Borland used to do this with the Delphi VCL. I never actually used any of the VCL code but on occasion it was necessary to delve into it to figure out why something worked the way it did. Usually this was because of some strange control behavior rather than a core runtime feature. Microsoft do have shared source agreements on other products - most notably Windows (2K & 2K3?) and Rotor but you have to jump through flaming hoops to get it.
Publicly releasing the code for ALL the ASP.Net and WinForms controls would not provide any competitors with an advantage. There are plenty of public licenses around that would protect Microsoft from litigation or MS Legal could come up with something in their spare time. It would not encourage many developers to copy and enhance the standard controls. It would, however, provide a wealth of knowledge to developers that would allow them to understand why the .Net World is round and not flat.
Clearly, the Open Source movement has had some effect on Microsoft. Over the last few years - in fact ever since Steve Ballmer took over - Microsoft have been much more open - and not just in the source code kind of way. I'm sure this debate has not ever gone away and I'm also sure they are constantly being asked the same question but I've never heard a reason from Microsoft that explains why they cannot open source more products. I'm guessing many at Microsoft are also thinking the same thing.
I've had enough. Time for a rant.
Why is our state television broadcaster being allowed to waste money on digital television? Do they really think this will improve the quality of anything but the signal? Digital crap is about as usful as Analog crap. Before I shell out good money for a decoder I'd want to know that the quality of the programming was similarly upgraded and the advertising considerably reduced.
Best theory: Kill your TV - or at least, kill your antenna.
And what about the price of new TV's here? How can anyone justify spending $5k on a wide screen plasma or lcd TV? It's such a con. Wake up people - vote with your wallets. Better yet, get outside and enjoy life while you can - before Bush kills us all.
Ok, sorry, bad morning, back to work.
ASP.Net Guru and
mate Tim has just been awarded an
MVP. Well done Tim, you thoroughly deserve it. Oh yes, I was
also re-awarded this year, for which I am extremely grateful because next March
the Global MVP Summit will be keynoted by the man himself - Bill Gates. Steve
Ballmer did last years so it will be great to see the 'other' half of
the dynamic duo! Hopefully, you'll be able to make it
Tim.
I just created a new stored proc using SQL Management Studio (can I call this SMS?) and discovered the cool new templates you get for free. The standard template for a new proc looks like this.
1 -- ================================================
2 -- Template generated from Template Explorer using:
3 -- Create Procedure (New Menu).SQL
4 --
5 -- Use the Specify Values for Template Parameters
6 -- command (Ctrl-Shift-M) to fill in the parameter
7 -- values below.
8 --
9 -- This block of comments will not be included in
10 -- the definition of the procedure.
11 -- ================================================
12 SET ANSI NULLS ON
13 GO
14 SET QUOTED IDENTIFIER ON
15 GO
16 -- =============================================
17 -- Author: <Author,,Name>
18 -- Create date: <Create Date,,>
19 -- Description: <Description,,>
20 -- =============================================
21 CREATE PROCEDURE <Procedure Name, sysname, ProcedureName>
22 -- Add the parameters for the stored procedure here
23 <@Param1, sysname, @p1> <Datatype For Param1, , int> = <Default Value For Param1, , 0>,
24 <@Param2, sysname, @p2> <Datatype For Param2, , int> = <Default Value For Param2, , 0>
25 AS
26 BEGIN
27 -- SET NOCOUNT ON added to prevent extra result sets from
28 -- interfering with SELECT statements.
29 SET NOCOUNT ON;
30
31 -- Insert statements for procedure here
32 SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
33 END
34 GO
Like the comment says, you can specify values for the placeholders by pressing Ctrl+Shift+M:
You can view and edit all the templates - and there's a lot of them - by using the Template Explorer from the View menu:
This is not as cool as CodeSmith, but it's free and easy and very cool. Remember, you can use Management Studio with SQL 2K, not just 2005.
My old Jonsie.net domain is due to expire sometime soon so I thought it was about time I saved the 1 or 2 interesting posts I made there. The old site uses .Text so I could easily grab the posts from the SQL DB, but I thought it would be more fun to use RSS. I remember Scott Guthry posting recently about the ASP.Net RSS Toolkit so I downloaded it to have a play.
First thing I tried was to RTFM but for some reason this word doc keeps exploding and taking Word with it. A quick copy and paste to a new document fixed that (Word's document recovery was less than helpful!). The 'manual' is a little sparse, but it gives enough pointers to get your started.
There are several ways you can access the RSS feed. I wanted to create a simple WinForms or Console app to do this job so I tried using the Rssdl.exe tool to create a strongly typed channel feed. Unfortunately our Nazi firewall got in the way and the RssToolkit doesn't know anything about firewalls. After a bit of a search around the code I found the source of the problem in RssDownloadManager.DownloadChannelDom(). It was using WebClient to make the call to DownloadData but without first configuring the proxy. So, I changed this to:
1 // download the feed
2 WebClient wc = new WebClient();
3 wc.Proxy.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
4 byte[] feed = wc.DownloadData(url);
This is adequate for this UI application but for a more robust solution you may need to modify this to allow a user name, password and proxy string to be passed in somehow.
So, now I executed the Rssdl.exe too to create the class. This created jonsie.cs for me. I then created a simple console app to dump the title of all the items on the blog:
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 using RssToolkit;
6
7 namespace JonsieExtract
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 jonsieChannel jc = jonsieChannel.LoadChannel();
14
15 foreach (jonsieItem ji in jc.Items)
16 {
17 Console.WriteLine(ji.Title);
18 }
19 Console.ReadLine();
20
21 }
22 }
23 }
Which produced this:

Cool! Oh, crap. I only get the last 15 posts. I need all of them. Oh yeah, this is a setting in .Text. So I log to my old site and .. hang on, where's the admin options?

IE 7 has problems displaying the tabs. Fortunatly I have a spare machine with IE6. I set the Default number of posts on the home page/feed to 115 and click save. And wait. And wait. And wait. Bum. Looks like .Text is as useful as ever. Oh well, part 2 another day.
I've been tweaking a stored proc today and when using the new SQL 2005 Management Studio I spotted a new option in the query menu: Client Stats. When I execute the stored proc, I get a tab page with some interesting numbers. The really usful thing is, if I execute the same query again - after tweaking the proc - I get to see multiple results side by side:
How cool is that!
Plans are starting to come together for our Code Camp. There's a lot of work getting this organised, but it's starting to get exciting. So far we have about a dozen sessions and speakers confirmed, talking on some interesting topics like AJAX, Ruby on Rails, WWF, SQL, Biztalk, Team System and more.
Registration for Code Camp will - hopefully - be available this week. In the meantime, you can enjoy the chrome, created by Phil (The Genius) Cockfield.
.png) |
Don't miss the great kiwi Coding Getaway
Two days of hard core .Net programming demo's, workshops & discussions. Nothing but code.
Code Camp 2006, April 22/23, Porirua Wellington
Brought to you by the NZ .Net User Group |
I've started working though the Hands-On-Labs for Windows Workflow Foundation today and in Lab 1, Excerise 1 (more about that later) I discovered something old that I had never existed before: Event Accessors.
Normally you would decalre an event like this:
1 public event EventHandler<CancelEventArgs> ValidateControls;
Using Event Accessors makes this look a lot more like a property:
1 public event EventHandler<CancelEventArgs> ValidateControls
2 {
3 add
4 {
5
6 }
7 remove
8 {
9
10 }
11 }
This could be useful to ... hmmm, I'm not exactly sure if I would use it, but I imagine some people would.
FYI, this also works in .Net 1.1. Not sure about VB though.
I've been pretty critical of GotDotNet in the past so I must now give credit where it is due. The site is much faster, it seems more reliable and it even looks better. I also find the menu's a lot easier to navigate. The GDN team have done a great job. Well done!
My only annoyance is that you often have to join a workspace community to download a tool or sample code, but I suspect this necessary for legal reasons or some such thing.
I understand that there is a lot of nasty stuff around on the web that may get onto my work machine and cause all sorts of problems, but really, sometimes I find Windows too protective. For example, I downloaded an updated Compiled Help File for my TFS upgrade. When I open the file I get this:
Well, ok, someone forgot to sign the file so this is reasonable and I can untick the option to hide this next time I open it. However, when I click open I see this:
After a lot of head scratching, a colleague pointed me to this in the file properties:
Once Unblocked, the help contents display correctly.
I spend all day working with various versions of Windows and I can't figure this stuff out. How the frack is an ordinary occasional PC user supposed to understand this BS? This is a really good example of unintelligent design. Maybe it's a consequence of the Windows UI that limits the amount of useful information that can be displayed to a user. To me, it would be much more sensible to display the file differently so I can immediately see that there is a problem with it. Eg. Instead of displaying the short-cut thus:
it could look something like this:
I look forward to having a play with Vista very soon to see if it's any better.
I've been looking at some complex code that someone else wrote lately and trying to figure out how it all works (or doesn't actually). I've been adding lots of Trace statements so I can more easily follow the flow of execution.
Now, I'm not sure if this is a problem for anyone else or just my addled brain but I found that Trace statements in my Web Service don't display in the Visual Studio Output window unless I step into the Web Service code from the WinForms client. This is a real drag. All I want to do is execute the application and later examine the process steps.
A simple workaround is to use the TextWriterTraceListener. With this I can capture Trace output to a file and look at the results after execute. You do this by adding the following section to your web.config:
<system.diagnostics> <trace autoflush="true" indentsize="2"> <listeners> <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="mywebapp.log" /> </listeners> </trace> </system.diagnostics>
However, I also rediscovered that by default, Trace messages also get output via OutputDebugStr() and this can be viewed with a suitable Debug Viewer. Eg:
This DebugView is free from SysInternals.com. It captures Trace messages from .Net apps and any other apps that use OutputDebugStr(), which includes Windows. There is one problem that I noticed immediately though. Trace.Write() appears like Trace.WriteLine() so you may loose some of the nice formatting that you would get in a log file but I can live with this.
I saw from Peter Himschoot's blog that TechEd Europe has been split into two separate events, one for IT Pros and the other for Developers.
I would love to see a developer only conference in New Zealand and TechEd is now probably big enough to split into two. At least the last two TechEd's have sold out very quickly and Auckland does not have a bigger venue. I'm not sure what the mix of IT Pro / Developer is - I'm guessing it's about 40/60. A thousand or so Developers would be a good number.
TechEd is a very expensive event to hold so I suppose splitting it would almost double the cost, but here's some ideas to help reduce that:
- Scrap the vendors hall as they add nothing to the content of the event (except the vendors with Segways).
Actually, if you just get rid of the vendors hall then Sky City would probably be big enough for a few hundred more attendees.
- Scrap the party - the cost of this must be getting ridiculous. I heard the rough cost of the 2003 TechEd party. 2005 must have been more. You could buy a warehouse apartment in central Auckland and have a non-stop year long party for less!
- Splitting it will make things go a little quicker - maybe 2 days will be enough for each event.
- Scrap the hands on labs and just give people the VPC images instead.
- Make people pay for internet access. I know what this cost for one TechEd a few years ago (2003?) and it's just horrendous. Most people just need to check their email occasionally or surf MSDN. They can save the p0rn downloading for their hotel rooms.
- Reduce the full ticket price by $400 and increase the corporate price by 50%. Business can afford to pay more and send less people. I know for some organisations that this is a junket for the staff.
Ok, so some of these ideas may be a bit controversial but really, TechEd can't get any bigger the way it is. It's time to think about a change.
Habbits are a bad thing. Automatic assumptions are the root of all evil. Challenge everything.
int i = 42;
Trace.WriteLine("The answer is " + i.ToString());
OR
Trace.WriteLine("The answer is " + i);
Could have saved myself:
const double TimeToPressKey = 0.3;
string wastedKeyStrokeString = ".ToString()";
int perDay = 25;
int workingDays = 5 * 48;
int years = 3;
double savings = TimeToPressKey * wastedKeyStrokeString.Length() * workingDays * years;
Or thereabouts.
It's been a great holiday. I've done very little and I'm feeling really relaxed and stress-free on my first day back at work. Here's a bit of a catch-up of some stuff, no particular order.
Some nice Team System 3rd party stuff I'm testing. I'll report on these more thoroughly soon.
- TeamPrise preview 4 - tried preview 3 and it's not bad - but limited
- TeamPlain Web Access - haven't tried yet but it looks to be more extensive than TeamPrise
- TeamLook - integrates work items with Outlook - seems to work fine so far
From the blogsphere:
What I did on my holidays:
- Installed DotNetNuke 4.02 and used it to create 2 new sites for the NZ .Net User Group. jobs.dot.net.nz is not far off being ready. The new NZ .Net site still has quite a bit of work to do - hopefully it'll be done around February.
- Created a new site for a new user group. My wife, Trish, uses Microsoft Dynamics Nav (formally known as Navision). She is also involved with the start-up user group for this so we have created a site for this using Community Server 2.
- Did some work on DNN 3.2.2 for Tim.
- Did some gardening and extended the driveway.
- Was best man at a wedding/new years eve party (a combo deal)
- Hosted Christmas dinner and a couple of barbies for the family and friends and neighbours
- Went to a couple of barbies
- Went into work once to make a phone call and check when I was supposed to return to work
Roll on 2006. I hope to:
- Get TFS RTM installed and working
- Get other Airways Teams using TFS
- Expand my own team
- Finish 1 project! Any one will do...
- Trips to South Africa & Redmond (maybe) again
- Organise a community developer conference
- Attend TechEd (maybe)
- Organise 10 user group meetings - first one in a couple of weeks so I better get cracking on that!
- Lose 10kg
Maybe I was
expecting too much, but did anyone else find King Kong a bore? Some parts
were good, like the jungle scenes and anywhere Kong was tearing stuff up. But I
swear, if I had seen one more shot of Jack Black doing his Zoolander into the
camera trying to look shocked/concerned/awestruck, I would have thrown something
at the screen!
The thing is just
way too long. Jackson could easily have cut an hour out of the movie and
it would have been much better for it. What was the point of the side
story with the kid on the boat and his book? And what about those slow
motion shots - good grief! It seemed like he was going out the way to stretch
the movie to 3 hours.
I think it's time
Jackson did a real movie - something small and with drama and no CG effects and
real actors - then we will really see if he's a great director or just a good
project manager who got lucky.
We (Airways New Zealand) are currently recruiting trainee Air Traffic Controllers. If you are interested in pursing a life long career with a great employer then now is the time to apply. You get to work in a great environment with lots of cool techie stuff. This is not a job that suits everyone. The entry criteria are very specific and strict - you need to have the right stuff.
Despite popular belief, this is not a high stress job - don't believe the Hollywood image, it's complete garbage. If we controlled aircraft like they do in LAX (the TV show) or Moving Tin (the Movie) I would never fly again!
I've had a 'fun' weekend clearing out my overloaded inbox and mucking around with the NZ .Net Web Site.
MSDN Flash
If you don't receive MSDN Flash, then may I suggest that now is good time. Looking back over the flashes I've received over the last few months, I've just realised what a great resource it is. I tend to do a lot of surfing and blog reading of international material and often miss out on local news. Flash is an excellent way of keeping up with local happenings. If you don't get the flash, then give it a try for a while. I'm sure you will find it as useful as I do.
DotNetNuke 4
I had a go at installing DNN 4 and actually got it working on the second attempt. On the first attempt it seemed to work fine, but it wouldn't stop installing. Normally the installer creates a dnn.config file in the install folder that contains the currently installed version. This file is used instead of querying the database on each request. However, this file wasn't created for me because the default installation doesn't include the correct settings in the web.config (UseDNNConfig=true). I turned this on, after I installed, but by then I think it was too late. So, I deleted the database and ran up the site again. This time, it created the dnn.config file and everything works sweetly.
The old DNN 2.1.2 NZ .Net skin uploaded to the new DNN 4 site without complaint and it actually looks just the same as the old site. This will save me considerable hassle when I do the upgrade.
I also created the ASP.Net membership/roles/profile database separately in the hope that I'll be able to share this DB with community server. That's my next task.
There's still a number of 3rd party components that I need to replace or upgrade. There's really only one that I need upgraded ASAP so I better start nagging the vendor or figuring out how to replace it.
Ruby on Rails
I met a chap on Friday (whilst attending an all-day stag party - lots of games - no strippers or pranks) who is using Ruby on Rails for a couple of projects. "You lucky bastard" I said. I love bleeding edge and Ruby on Rails is about as bloody as you will get at the moment. If you don't know anything about Ruby or Rails or Ruby on Rails, then check out the web site.
Anyways, I'd been looking for a suitable candidate for a head-to-head challenge for a user group session and ASP.Net v Ruby on Rails sounds like the perfect solution. From everything I've heard about Ruby and Rails, this could be a very interesting contest. Stay tuned in the new year.
Windows MCE
I've had a loan Media Centre PC for a few months now and I've been doing some testing with it. MCE does offer some nice features over standard Windows XP that make it work well on a TV screen, but overall.. how can I put this gently? - I think it sucks. I know some people love it and it does certainly try to be a TV/DVD/Video/PVR replacement but, for me, it just doesn't fly. Why?
- There are no out-of-the-box channel guides for New Zealand. I tried to get XMLTV to work with it - thanks Nic - but I failed. With more effort I'm sure I could have got it to work.
- All the functions of MCE are poor cousins to the full PC equivalents.
- The quality of TV cards pictures is not as good as real TV.
- You can't rip music or video to the hard drive.
- It's hard to manage folders for large picture, movie and music libraries.
To make MCE truly useful requires quite a few hacks and a lot of switching back to native Windows. I could live with all these short comings if I wanted to come home from a hard day in front of a PC and have a hard night in front of the TV, but I'm not and this is my point - Television is an alternative to a brain. If I have to think about how to watch TV, then it's NOT TV anymore. To me, MCE seems like a great way of making a simple device that works into a complex one that doesn't.
I'm very pleased to announce the .Net User Groups have started up a new mailling list for the discussion of all aspects of Team System - including Team Suite, Team Foundation Server, Team Build, Team Test, Reporting, Process Guidance, Portal, Licensing, etc etc etc. This list is intended to be used primarily for Kiwi's and local New Zealand issues but anyone is welcome to join.
Hopefully this forum will promote some lively discussions and provide some support for users new and old.
You can subscribe to the list here.
I just spotted something on MSDN about InfoCard and not knowing what the heck it was I searched and found a good description of it. Now I get an idea of what it is and it sounds like a good idea, but really, something that uses twelve-ish WS* standards seems way to much like something you'd get from IBM!
SOAP
WS-Addressing
WS-MetadataExchange
WS-Policy
WS-Security
WS-SecurityPolicy
WS-Transfer
WS-Trust
XML Signature
XML Encryption
SAML
WS-Federation (unclear)
Phew!
There's a bug in Crystal for Visual Studio 2005 (surprise surprise!) when you have a stored procedure in your report WITH parameters AND you change the database connection at runtime. Basically, no matter what you do, it will tell you that the parameter has not been specified, when you know darn well that it has!
I found a discussion and the solution here. Wish I was using SQL Reporting :{
A friend and fellow Kiwi .Netter, Brent Clark, is repeating his popular web cast tommorow. If you want to know more than your mother ever told you about building VB6 & VB.Net applications with lots of COM & VSSS then Brent is THE MAN! Go Brent!
From a Microsoft .NET Framework build perspective, consuming evolving Component Object Models (COM) is not a trivial matter. This webcast describes how SunGard in Christchurch, New Zealand has extended its automated build processes to be able to interact with NET and COM components. Learn how SunGard was able to compile .NET solutions from Microsoft Visual Source Safe with strong naming, version stamping, and copyright stamping. You will also learn how SunGard automatically produced interoperability files for the ever-changing COM components. This webcast also describes how SunGard produced publisher policy files that allow the company to patch the minimum number of files in a client installation.
Presenter: Brent Clark, Build Process Architect, SunGard
Brent Clark manages the build process for a large 10-year-old system produced and maintained by SunGard in Christchurch, New Zealand. This system is made up of approximately three million lines of code that are written mostly in Microsoft Visual Basic 6.0 but now extend into Microsoft Visual Basic .NET. Brent's responsibilities have included the automated analysis and compilation of Visual Basic 6.0 and .NET projects. He has also worked on deployment to internal clients and also branching and reintegrating separate subproject environments.
Microsoft has published a case system of our Team System implementation.
Something to change the subject. I ordered a solar water heating system for home yesturday. When I saw how much the Chief of Contact Energy got for a pay rise and how much our power bills have gone up in the last year I thought it was about time to get some money back.
We ordered the Sola 60 system. In our new house it's a very easy install. Sola 60 use our existing hot water cylinder where most of the other vendors replace this with a new one, so this helps keep the cost down. The placement of the panel and the pitch and position of our roof make it a very easy install.
It's costing us $NZ 5074 for a 4-5 person system. Our monthly power bill averages $300 in winter - we have 3 kids who like loooooonnnnnngggggg showers! The sales man from Sola 60 told us that the average power bill is 1/3 hot water and the new system will cover 75% of the electricity cost of this in winter and 100% in summer (this equates with other quotes and comments I've seen). My rough estimate is that it will save us an average of $90 a month - call it $1000 a year. So after 5 years we are in profit. Better yet, there's an interest free loan of $3000 for 3 years so the initial expense won't hit the mortgage. I wish we had done it when we built the house.
Now all I need is a system to generate hydrogen and a fuel cell car and I can give the single finger wave to the energy merchants!
I spent last
week getting trained on Software Testing. The course was run by Software
Education and led by Don Mills. I haven't yet decided if I liked this
course or not. Don certainly knows the subject well - he has an
amazing memory for dates, names, authors, standards codes etc. I
picked up many useful techniques, tips and facts, e.g:
- Inspection provides
the biggest return of all other testing and QC techniques
- Decision Tables are a great tool for creating specifications
as well as tests.
- Test early, test
often
- If you don't know
how to test it then don't start building it
- 70% of software
faults are the result of poor specification - only 7% are genuine code
defects.
- Half of all
software project are delivered unfinished.
However, the course
syllabus is very centered around the standards and passing the qualification
exam and I would have preferred more practical examples.
The real problem
with testing is the lack of management commitment to doing it. My current
employer is much more aware of the need for this - they sent me on the course
after all - but previous employers have been unwilling or unaware of how
important proper testing is and my feeling is that this is a very common
situation for most New Zealand companies
doing software development. Given the clear cost savings that can be
made by engaging in proper testing practices and the appalling rate of failure
of software projects, this is a real concern for the future of software
development in New Zealand.
So what as
programmers can we do to make this situation
better?
I've been planning
an upgrade to the NZ .Net site for the end of the year so I
thought I should take a look at DotNetNuke 3 again. The last time I looked
was about, oh, 5 months ago. It's now on version 3.1.1 and wow! It
has progressed a lot in that time.
Installation
The installation
doesn't appear to have altered very much. As usual, I tried a complex
install and failed, then did the basic install - when will I ever learn! I
was trying to get the ASP.Net membership database installed separately from DNN
but the DNN installer runs all the scripts in the DNN database. I'm sure I
can run the scripts manually and get this working.
I want to do this so
I can test the integration with Community Server 1.2 when it's available but
with some of the new modules now in DNN, I'm not sure how much of CS we will
use.
Skins
There's a couple of
new skins in the default package, but nothing much to write home about. I
(or someone else) will still need to create a new skin.
Blogs
NewBlog is the new
default blog module for DNN but you have to download this (and all other non
core modules) separately. I suppose this makes the installation
simpler.
NewBlog has most of
the standard features you'd expect. You can create as many blogs as you like and
categories them. You can create posts online but I'm not sure if
there is an API for posting.
Forums
The new forum module
is a vast improvement over the old discussions module. This looks and
feels similar to CS forums, but without a lot of the advanced features.
It's more than adequate for most purposes though.
The forums in CS
still look a better option, mainly becuase of the new listserv functionality
coming with CS 1.2, but also because it's a more focused application that will
most likely handle the traffic better. But, skinning CS is a real
pain.
That's as far as
I've progressed today. My next step is to try and separate the ASP Membership schema
so I can test the CS integration. In theory, it might be possible to
integrate with CS 1.1 and if I'm feeling ambitious then I'll give that a
spin but I suspect I'll need to wait a couple of weeks for CS
1.2.
To upgrade the NZ
.Net site I'll need to figure out what to do with user accounts and permissions
- I'm not sure I can upgrade these from DNN 212. A manual import of these may be
possible. And then there's all the existing content. The last time I
tried an automatic upgrade to DNN 3 from DNN 212 it was less than
useful.
There's a couple of
custom modules in the existing site and some 3rd party controls. I have
XMod for DNN 3 so that covers a lot of the customisation, but there are a few
things that will probably get thrown out and replaced with standard
modules.
I thought yesterday
was going to be boring, but, OMG, was I wrong! We had a whole day
looking at upcoming and possible future features for Visual Studio - Orcas and
beyond. Basically, some of the stuff they are thinking about for the next
5 years and more. We sat through scenario demonstrations and voted on the various
elements.
Unfortunately, I can't tell you anything
interesting about any of these new features so this is just a big teaser really,
but I can say that life as a programmer over the next few years is likely to
change radically.
The really
impressive part of this day that I can talk about was the openness and trust
shown to us by Microsoft. This is the first time they have solicited
feedback at such an early stage in the design process from non-employees.
They did have some worries about doing this of course - i.e., would we knock
down something they thought was really cool - but overall, I couldn't find
anything that was bad or wrong. There were a few things I didn't care
about, but I'm sure others did.
We did have a look
at some less secret tools and technologies too. For example
Atlas. Tim: I'm sorry for not paying more attention to your Ajax
blogverstation. I can now see how cool Ajax/Atlas will be. My
impression is that I will finally be able to write web applications that behave
as well as windows applications. If you didn't know, you can get Atlas now
and it will be released soon (?) after VS2005.
One more thing,
Workflow is EVERYWHERE. Get to know it now. Start thinking about how
you can use it in ALL your applications. Download the beta from http://msdn.microsoft.om/workflow.
Get Paul's book and
read his blog for more links.
I'm certain we will be seeing some demos of this in NZ soon and probably a user
group session or two.
One more morning of
sessions and then a barbecue and the summit is over. Half a day for
shopping and then I'm on my way home. Hopefully, no more long trips this
year!
Well, here I am, schluming it in Seattle for the MVP Global Summit with 1499 other MVP's from around the globe, including a few from NZ. Yesterday was registration and the regional dinners. Today was the first real day of stuff, which started with the executive presentations by Steve Balmer (CEO), Jim Alchin (VP of Platforms) and others.
I hadn't seen Steve Balmer present (in person) before so it was a treat for me. He lived up to my expectations. There was a good Q&A session at the end of his usual lively speech, and he fielded a few tough questions and gave good answers. There was also the obligatory funny video featuring a couple of dweebs - I found it embarrassing because I think Bill G can dance better than me. Oh well, better stick to my day job.
Jim Alchin provided a great demo of Vista, which I also hadn't seen since the 1st preview. It was awesome. I may try installing it on a spare PC I have at home (Nic - found a use for it!).
In the afternoon we split into our product groups and I saw YABPOTS (Yet another bloody demonstration of Team System) plus another funny video. And then Don Box and Dharma Shukla re-presented their PDC session on WinFx, including the W*F stuff - Windows Presentation/Communication/Workflow Foundations. Don Box is hilarious and it was a great session.
Prediction: WinFx (and the Workflow Foundation in particular) is going to fundamentally change the way you write applications. But, you don't need to worry about it for a little while yet.
There was a few announcements of new services and products, but NDA prevents me giving any details. However, I think it's ok to say that Microsoft are listening very closely to feedback from the community - via things like the Product Feedback site and MVP's - and you will soon see some great innovations that will improve your life as a developer. If you have a message for Microsoft, use your MVP's to get it through - that's what we are here for!
My hotel is great, the people are great, Seattle is lovely (although weather looks like its going to pack up) and being in the company of so many "famous" people is slightly daunting.
Overall, I'd say the 1st day and a half has been pretty good. Tomorrow also looks interesting, with a couple more sessions and another party. It's tough, but I'll struggle through :}
I'm in Frankfurt
today. I was walking around town, wondering where to go and found myself
following a large group of people all heading in the same direction. I
ended up at the IAA (?) Auto show.
All I can say is
wow! Iv'e never done one of these before but always wanted to.
Darryl/Sean/Nigel, if your listening - the next TechEd should be more like a car
show! Especially the girls everywhere :}
Anyway, I found
several cars that would do nicely as my next car, but I think this is the best
one:
The first person to
tell me what it is wins it! Yeah you wish.
There was also lots
of cars like these ones:
and:
and some weird and
wonderful stuff:
I'm off for a trip
today. First stop, a week in Johannesburg to install the first cut of our
.Net 2.0 system for the customer, and to do some training. Then an
overnight stopover in Frankfurt and 5 nights in Seattle where I'll be attending
the MVP Global Summit.
The system I'm
delivering to our South African equivalent, ATNS, is a fairly standard 3
tier app, using SQL 2K, a web service wrapper around the data tier and a winform
front end. The system is not quite complete yet, but this will be our
first roll-out of a .Net application. I'm not expecting any nasty surprises, but
just in case, I'm traveling with 2 notebooks and copies of the source code and
binaries on each and CD, plus all the tools I might ever need - MSDN disks,
RedGate tools, VS05 beta 2 and August CTP, 12 pairs of socks etc etc. On
the way over I need to complete the training documentation - it's a 20 hour
flight via Singapore so as long as I can power either of the notebooks on the
flight, I should be ok.
I wasn't so sure
about the MVP Summit. I first thought this might be a bit of a talk-fest
but given some of the recent announcements at PDC, I now think it will actually
be very interesting. Paul Andrew has old me he is presenting a session,
not doubt on WWF and there's a bunch of Aussies and other Kiwis also
attending. I've also arranged to meet with my TAP contact on Team System
product group. I don't think I'll be bored!
Now all I need is
a connection so I can update my blog. The AirNZ Lounge at
Christchurch doesn't have any visible connections - wired or otherwise -so I
suspect I'll have to update in Singapore.
Here's a small review of some tools I've been using lately for SQL Server work.
RedGate SQL Bundle Developer Addition
RedGate produce a number of must have tool for any serious SQL Server developer or DBA. These come seperately or in bundles. I purchased the Developer bundle. With this you get SQL Compare, SQL Data Compare, SQL Packager, DTS Compare and the API to use these tools programatically.
SQL Compare
For my current project I have 2 copies of the database, 1 for day to day development and the other for testers. When I release a new version for testing, the test database needs to be updated but the testers get snarky if I drop and replace it as they lose all there lovely test data. This is where SQL Compare comes in.
SQL Compare lets you select 2 databases and compare the schema and other objects. After you select the relevant databases it compares the 2 versions and displays the differences.
With this window you can see the differences for each object and even the scripts necessary to synchronise from one to the other. Object types include tables, procs, functions, users & roles. You can synchronise all selected objects directly to the database or via Query Analyser.
SQL Compare works very well in most cases but I did have one problem with a table that I added a non-null column to. The generated update script was unable to add this column to the destination table as there was already existing records. It was easy enough to fix this problem myself but I would have hoped it could ask me for a default value for the column.
Overall, SQL Compare is a tool I use several times a week. If I was a DBA or specialist SQL developer I imagine I'd be using it much more. My advice is if you do any serious SQL Server work then you MUST have this.
SQL Data Compare
SQL Data Compare performs a similar job as SQL Compare except on table data. After selecting the 2 databases, you select the tables and columns to compare. You can also select the comparison key to use.
After comparison you can view the record differences and scipts.
You can then synchronise the selected tables directoy to the database or to a script.
I use this tool to make sure our deployed database it setup correctly but it's also great for debugging data issues. If I was a DBA or had to manage a large application database then I'm sure I'd use it a lot more. Either way, this is another MUST have tool.
SQL Packager
SQL Packager is used to create an installation program for your database. It generates a .Net executable or C# project that will create a new database or upgrade an existing one. I'm more than happy with the executable it spits out as we don't need to create a shrink wrapped setup, so I haven't looked at the code it generates. The executable lets you select the database server and other creation options for the database, but the UI is a little basic and bland. However, this is much more preferable than using a script or creating your own installer from scratch.
Summary
I haven't had a chance to look at the DTS Compare or the API yet and it's not likely I ever will. Overall, I'd say that this is a great set of tools for anyone using SQL Server for application developement or support. If any part of your job entails DBA type work then you simply MUST have them.
The price of the tools seems a little expensive to me but I suspect I will be getting lots of use from it. The Developer Bundle cost us $US1238 including 12 months support and upgrades. You can purchase the normal bundle minus SQL Packager and the API or other bundles or individual tools.
The secret project that Paul Andrew has been working on is Windows Workflow Foundation. It was announced at PDC yesturday. This could be a very cool technology - I will certainly be using it for a few applications. I just wish it was not so far away from full release.
I created my own worklow engine a couple of times and on the face of it I wasn't too far off what MS have done. However I didn't have a team of hundreds so there was no nice designers or languages behind it.
Looks like Paul is busy these days with something new and exciting. Checkout his post on PDC & some upcoming MSDN Web Casts. This also explains Chris's hectic schedule over the next month. I sense an announcement or two coming out of PDC. :}
It's great to see some local talent on a global platform. Show your support and watch the web casts (live at 3am probably!)
I have a large dataset that is exposed to the client via a web service. At the server end I have extended the dataset to include methods that fill it via TableAdapters, e.g:
namespace MyWebService.MyDataSet {
public partial class MyDataSet : DataSet {
public void FillEmployees() {
EmployeeTableAdapter eta = new EmployeeTableAdapter();
eta.Fill(this.Employee);
}
}
}
On the client side I have extended the proxy version of the dataset to add methods to rows and tables to manipulated data contained therein.
namespace MyProxy.MyDataSet {
public partial class MyDataSet : DataSet {
public List<MyDataSet.SomeRow> GetListOfEmployeesByName(string name) {
// blah
}
}
}
I have a few methods that I need at the client and server end. It would be nice to have this code in a shared library and just wrap this in the dataset partial class, e.g:
// ws version
using MyDataSet.Shared;
namespace MyWebService.MyDataSet {
public partial class MyDataSet : DataSet {
public List<MyDataSet.SomeRow> GetListOfEmployeesByName(string name) {
MyDataSetHelper helper = new MyDataSetHelper();
return helper.GetListOfEmployeesByName(this, name);
} }
}
// proxy version
using MyDataSet.Shared;
namespace MyProxy.MyDataSet {
public partial class MyDataSet : DataSet {
public List<MyDataSet.SomeRow> GetListOfEmployeesByName(string name) {
MyDataSetHelper helper = new MyDataSetHelper();
return helper.GetListOfEmployeesByName(this, name);
}
}
}
// shared code
namespace MyDataSet.Shared {
public class MyDataSetHelper {
public List<MyDataSet.SomeRow> GetListOfEmployeesByName(MyDataSet ds, string name) {
// blah
}
}
}
But this wont work because of the the different name spaces. What I really need it a generic helper:
// shared code
namespace MyDataSet.Shared {
public class MyDataSetHelper {
public List<R> GetListOfEmployeesByName<T,R>(T ds, string name) {
// blah
}
}
}
And I use this in the proxy and server code thus:
// ws version
using MyDataSet.Shared;
namespace MyWebService.MyDataSet {
public partial class MyDataSet : DataSet {
public List<MyDataSet.SomeRow> GetListOfEmployeesByName(string name) {
MyDataSetHelper helper = new MyDataSetHelper();
return MyDataSetHelper.GetListOfEmployeesByName<MyDataSet, MyDataSet.SomeRow>(this, name);
} }
}
// proxy version
using MyDataSet.Shared;
namespace MyProxy.MyDataSet {
public partial class MyDataSet : DataSet {
public List<MyDataSet.SomeRow> GetListOfEmployeesByName(string name) {
return MyDataSetHelper.GetListOfEmployeesByName<MyDataSet, MyDataSet.SomeRow>(this, name); }
}
}
In some simple scenarios this might actually work, but if MyDataSetHelper.GetListOfEmployeesByName() needs to manipulate MyDataSet properties then I need to have a constraint on the generic so it knows what members it has, e.g:
namespace MyDataSet.Shared {
public class MyDataSetHelper {
public List<R> GetListOfEmployeesByName<T,R>(T ds, string name) where T : MyDataSet {
// blah
}
}
}
But then we are screwed again because MyDataSet is in 2 different namespace and you can only have a constraint on a single base class. I could however set the constraint on DataSet, e.g:
namespace MyDataSet.Shared {
public class MyDataSetHelper {
public List<R> GetListOfEmployeesByName<T,R>(T ds, string name) where T : DataSet {
// blah
}
}
}
And then I'd have to use untyped methods on the dataset within the helper method and I wouldn't be able to use typed methods.
So, basically, the only solution is to include all the methods on the server dataset and create my own proxy to used a shared library where this is implemented.
Or maybe you have another solution? Or maybe I've just confused you more than I confused myself?
Day 3 was great. I got in a few good sessions and picked up a couple of useful tips plus some extra insights into some stuff I already knew about.
Sessions
Sam Spencer presented an excellent session on ASP.Net 2.0 Membership, Profiles & Roles. This is where I learned about AzMan - a priority for me to investigate now I'm back at work. I've been to a few similar sessions on this stuff now and the one thing I can say for sure, Microsoft have done a fantastic job with ASP.Net. The quantity of code you DON'T have to write is just amazing.
The next session was by Nigel Watson on System.Transaction. I've had an attempt at using the new transaction model in VS05 but foir some reason it wouldn't work. I'm not exactly sure why but I suspect it's something to do with DTC. Nigel did demonstrated that when using SQL 2K, you don't get the new LTM (Lightweight Transaction Monitor) - all transactions are automatically promoted to DTC. With SQL 05 you do get the LTM. This is a bit of a bummer. I'll see if I can get it to work easily but for my current project the old style transactions will probably be sufficient.
Derek Watson then presented on C# Internals. Again, I'd already seen this material a few times (from Dr Nigel Perry and others) so it wasn't anything surprising but I did pickup a couple of useful tidbits. 1) .Net 2.0 Fx has a StopWatch class for timing processes and 2) there has been a late change to the CLR for handling nullable types in regard to boxing - don't ask me to explain it now, I'll see if I can find a reference.
And that was it for the day. We had to bug-out early to catch a flight home so missed out on the drinkies.
Summary
Overall, I think TechEd 05 was a great success and the crew at MS did a great job. The venue was good, if a little cramped at times, the catering was excellent except at TechFest - if I ate one more mini-Mac I would have barfed.
All of the presenters I saw were very professional and knew there subjects very well. A few of the demos or slides crapped out in places, but everyone recovered very well and it didn't cause any problems.
I guess my only complaint is VS05 and Team System and SQL 05 have been coming for such a long time that a lot of the content was getting a bit tired. I see a lot of this stuff repeated so while I did pickup a few new things I shouild probably have done some sessions on stuff that was new for me, but I didn't want to get distracted from my current focus.
Will I go next year? Maybe. Every second year is usually enough but if there's something new to see, then I'll be there.
Back to work.
Here's a pic from TechFest. I took more but this is the only one that looks any good.
The second day of TechEd was just as good as the first - but longer. I'm going to need a brain vacation by the end of Wednesday.
Sessions
One of my favorite speakers and all-round nice guy Adam Cogan presented 15 Rules for better code. Here's a great quote from Adam:
"Code never rusts"
Which means, don't re-write for the sake of it. I should print this in a large font and stick it to my desk! This was the best session so far for me. Adam is never afraid of expressing his opinion which is quite refreshing. Some of his ideas are unconventional but actually make a lot of sense - like including menu options so customers can execute unit tests in shipped applications.
I'm definitely going to get a copy of his Code Auditor. It's like FxCop in some ways but it runs on the source code and you can look for things like correct Font usage, button size, form styles etc. [Adam - next time you want to do a session in Christchurch you can do any subject you like].
Fellow NZ.Netter Chris Auld presented an interesting session on Office Solutions. I didn't realize there were so many ways of interacting with Office and Office data files. It's quite a mess really. Hopefully things will improve with VSTO 2005. It did give me an idea on how I could re-write an application using InfoPath and a custom Task Pane - but then I'd be breaking my new "Code never rusts" mantra.
Jay Roxe presented another great session on ClickOnce deployment. He did lots of demos of the basic stuff we have all(?) seen before but he also answered lots of great questions and talked about how to extend ClickOnce using the System.Deployment namespace and Mageui.exe. I do like ClickOnce and it provides some great features over NoTouch deployment, but I'm not exactly sure how to use it when delivering applications off-site. At work, we don't create shrink wrapped solutions - they need us to install and configure - but we do need to be able to deliver updates in a way that anyone can install them. I was hoping I could do this with ClickOnce but essentially I need ClickOnce to deliver a ClickOnce deployment. Jay asked my to email the details to him which I will do once I'm back at work.
Ulrich Roxburg did a good overview of the SOA designers in Team System Architect Edition, and showed some new stuff I hadn't seen before (and I'm not talking about the 4398 error messages!). There's a new tool, Narrator, that give you an interactive view of your model. I found a MSDN Download for this, I think.
To finish the sessions for the day, I attended Nic Wise's session on Mobilising Smart Client Apps. This was a great nuts and bolts session on using a low level API (the name of which has slipped my mind) to detect network status changes and other information. I can see myself using this in normally connected desktop apps.
The Party
Normally, the idea of party with hundreds of geeks would be a frightening prospect. But throw in copious quantities of alcoholic beverages, loud music and degenerate comedians and you get a great event. This year TechFest was at the St. James theatre. I hadn't been there before and it was certainly an interesting venue, if a little cramped at times. Ewen Gilmore gave 3 routines that had me in stitches at times - he's certainly not for those that are easily offended. Then the Feelers rounded off the night. I snuck off early to bed so I could get up and blog this. I expect to see quite a few red eyes this morning.
I have a few photos from the session but for some reason I can't get the memory sticks to work in my notebook. I also noticed my wireless lan card has an interesting curve in it. Time for a service I think.
More tomorrow.
Day 1 went fairly smoothly at TechEd. A few of the sessions were jammed so had to be repeated at the end of the day - JB's SQL session in particular.
The food is excellent, the venue is ok and doesn't seem to packed. A couple of the rooms - particularly at the Crown Plaza could do with some more oxygen - especially after lunch! I noticed a few nodding heads at one session (including my own).
Keynote
Ross Peat (MS MD NZ) introduced the day and did the usual speel. He did announce a new incubator sponsorship for 100 small companies of $NZ 3.5M.
Ian McDonald and friends did a quick overview of new stuff coming soon - SQL05, VS05 yada yada.
The best thing about the keynote? It was short. Only 1 hour. I much prefer this format - no glitz or glam, just the facts.
Sessions
I had planned to attend a lot of Architecture sessions and I did the first one on Team System with Michael Leworthy on internals and configuration. Michael certainly knows his stuff - as you would hope - and the session gave me a bit more confidence to fiddle with methodology schemas. There will be a new tool available at RTM to make this easier but at the moment it's notepad.
Michael was also using a later release of VSTS than Beta 2. Some of the new stuff may be in the the last CTP (June/July?) which I'm note yet using. I particularly like the new Team Build output page. This is a big improvement over Beta 2.
I also went to the start of the second TFS session presented by Prashant Sridaran but left after 10 minutes. It was an overview of VSTS which I have seen a million times already - bad choice.
I then attended a session on Windows Communication Foundation (Indigo) with Ari Bixhorn. Ari is a great speaker and is always very popular. Indigo is something I know I will use but I've been avoiding it as much as possible as I know it will be a big distraction. However, a couple of my colleagues also attended this session and are very keen to do something with it so it looks like I'll probably make the leap and risk a few more bleeding edge wounds. For my next project...
I also did a session on ASP.Net Themes, Master Pages etc. I've seen some of this before but the demos were excellent and glued the whole thing together very well.
People
The best part of TechEd is always all the interesting people you meet. So far I've bumped into (shamless name dropping in no particular order) Alex James, Dave Dunstan, Brent Clark, Greg Low, Adam Cogan, Rod Drury (and yes, I tried the Segway), Nic Wise, Chris Auld, Kirk Jackson, Kurt Mudford, Lukas Svoboda... um, probably lots of others I can't recall right now.
Tuesday is party day so I'll try and pace myself, but don't expect a great post afterwards.
I've been trying to use different tools to post to this blog. Others have reccommended BlogJet, which I have tried on 2 machines at work (and get Access Violations or proxy problems) and my notebook.
It works fine from my notebook but I really want to be able to post images and BlogJet uses FTP to do this. Problem is, it always tries to create the directory and can't. It won't seem to use an existing directory.
Has anyone else got this working with dasBlog or can reccommend something else that works? I don't mind paying (unusual for me!)
I've upgraded to dasBlog 1.8. Wasn't too painful and it seems to be working well enough. Not exactly sure what has changed yet but it hasn't fixed one small bug I have. When I click Add Entry, I always get an error on the first click and it always works the second time.
I've been very slack with my posting lately but hopefully that will all change next week. I'm off to Auckland tommorow for TechEd on Monday and I hope to be able to post details of the sessions I'm attending as often as possible - or at least a summary at the end of each day.
I don't have to earn my keep this year so I'll be doing as many sessions as I can handle. I've picked mostly Architecture sessions but also a few developer sessions. I'm particularly interested in Team System (surprise surprise!), SQL 05 and Indigo.
If you happen to be attending too then make sure you pop into the MSDN Connection Lounge and say hi. I'll be there as often as I can, along with fellow NZ .Netters such as Kurt, Kirk, Chris, Nic and others.
I don't like politicians. Especially at election time. My normal approach is that, within reason, it makes f-all difference who is in power so vote as irrationally/emotionally as you like - you get screwed either way.
However, after looking www.taxcuts.co.nz, I figure I'd be $10k a year better off with National than Labour.
Flip-flop-Don is not such a bad chap really - he's just a little indecisive. But aren't we all?
The NZ .Net User Groups have launched a competition for the Blog of the Year. See details here: http://www.dot.net.nz/Default.aspx?tabid=78. But, you can't vote for me - that would be dodgy - as I'm counting the votes!

Update: Voting is going pretty well - there was close to 400 votes last night, but only 150 unique votes - hitting the vote link 77 times in a row is sort of obivous!
This is one of those Friday afternoon problems.
In my 2005 Winforms client I have a nice fancy splash screen that displays the current version - 3.0.0.0 (yes, this is the 3rd version but the 1st .Net version) - which it retrieves from Application.ProductVersion. Under the covers, ProductVersion is actually just AssemblyFileVersion from assemblyinfo.vb/cs.
Now, I wanted to have this auto increment the build number. In VS03, you do something like this: [assembly: AssemblyFileVersion("3.0.0.*")] and the asterix is replaced with the next version on each build. Well this didn't work. All I got was "Version 3.0.0.*" in the splash screen.
Ok, fair enough, probably a beta issue or there is another way of doing it I'm not aware of.
HOWEVER, when I tried to exit the app, it crashed trying to save Properties.Settings.Default. It said there was an invalid character in the file path. Of course, there was an hour between these two issues so it took me a few minutes but eventually I figured that the version number is used in the settings file name. Removing the asterix solved this problem.
FYI
I don't want to burst anyones bubble here, but I think there's a lot of people under the impression that SQL 05 & VS 05 are going to be released on November 7th. From everything I've seen announced, this is the LAUNCH date, not the RELEASE date - they could be quite seperate things. At the very least, I wouldn't expect to see DVD's/CD's in your mail box before December.
But then, I could be wrong... and it wouldn't be the first time.
I like IE7, it's clean and fast and seems pretty stable. HOWEVER, Work Item Tracking in Visual Studio 2005 Team Suite does not like it. It causes VS to crash.
Luckily it uninstalls nicely and restores IE 6 as it was, so no harm done.
We recently had a minor incident with our visa cards - someone who shall remain nameless lost HER purse. After much searching we decided to do the right thing and cancel our joint visa card. Ten minutes after doing this, the purse rematerialised. Joy.
Wev'e been waiting for nearly 2 weeks to get replacements (they are made about 2 minutes walk from where I work) and during that time Telecom tried to charge us. It failed of course, becuase I don't have the new card number to give them.
Today, we had a call at home from an automated service. It said to call 128. Fair enough I guess, their staff must get a lot of abuse so why not have a machine do it. So, I dialled 128 and was given a choice of 5 different options, none of which matched my circumstances, so I picked 'you have been contacted by a collection agency'. Then I was given another menu with 5 options - I can't remember what that was but I selected something close enough. Then I had to select whether I was calling from the phone concerned or another phone. I was calling from work so I selected option 2. Then I had to enter my home phone number. Then it wanted the last five digits of my account number - which I didn't have. Phone home, get the lad to give me the number, repeat. Got back to where I left off and enter the last 5 digits. She says "That's Great!". Yeah right. But first, I need to enter a pin number. Arrrrrrrrrgggggggg!! Or select 0 to speak to a person. Yay! Finally.
But here's the lovely part, the lady I finally got to speak with did not have my account details in front of her so all that time I wasted entering phone numbers & account numbers was completely pointless.
Grrrrrrr.
Sean has posted about the new pricing of MSDN Universal in NZ. A 48% price drop is pretty bloody fantastic!
If you are in the unfortunate position of having to pay for this yourself - or you have to convince a penny pinching boss - then now is the best time ever to get MSDN. I'd like to know the full retail value of all the software you get in MSDN (plus the free support!) - I'm guessing it's pushing $50k but it could be a lot more. ~$3500 is a complete steal!
Darryl posted about an interview with Steve Balmer and the subsequent flood of slashdot abuse.
I watched the video. It's nice to actually see Mr Balmer speaking - albeit for such a short interview. It's gratifying to witness his obvious devotion to developers. It gave me a brief warm fuzzy feeling.
However, I also read some of the crap that slashdot posters said about his comments on open source and innovation. There's no point to replying on slashdot, no point at all, so I'm doing it here.
Open Source is good. MS knows this. They are a significant provider of open source code - just look at MSDN for a while, what about www.ASP.Net, www.GotDotNet.com, www.WinForms.net? To say that MS doesn't understand or 'get it' is just plain silly.
From a business point of view, GPL and it's ilk are the devils spawn and stiffle innovation. MS also knows this. As a large (or small) company it would be extremely unwise to use any code that is covered by GPL. For MS, this is a huge threat. There are squillions of eager lawyers just waiting for the smallest infringement.
I'm trying to format contents of a cell in a DataGridView using the following code: private void RosterGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { ShiftCell sc = e.Value as ShiftCell; if (sc != null && sc.RosteredShiftRow != null) { if (!sc.RosteredShiftRow.ShiftRow.IsForegroundColorNull()) e.CellStyle.ForeColor = Color.FromArgb(sc.RosteredShiftRow.ShiftRow.ForegroundColor); if (!sc.RosteredShiftRow.ShiftRow.IsBackGroundColorNull()) e.CellStyle.BackColor = Color.FromArgb(sc.RosteredShiftRow.ShiftRow.BackGroundColor); e.Value = sc.ToString(); //e.FormattingApplied = true; // tried this and it make no diff } }
This should set the current cell colours for some cells only.
However the result is crap:

Anyone got any ideas?
Update: I fixed this by making sure I set the background colour to something valid. Sometimes is was being set to 0 and other times it was not being set at all. Now I either set both colours or none and it works really well.
I'm not normally one to blog on political, racial or religious issues, but some things are just too incredible to resist. I refer of course to this: http://news.bbc.co.uk/2/hi/americas/4631421.stm. Ronald Regan was voted the Greatest American of all time. The rest of the list of top 10 also looks decidedly dodgy.
This survey polled over 2 million citizens so you would like to think it's pretty representative - at least amongst Discovery Channel viewers and AOL users - so this is a huge worry. Surely the intelligence level has not dropped so far? Now I'm certainly no expert on American history but off the top of my head, I can think of one or two American's who I think are greater. e.g. Henry Ford.
I wonder if New Zealand could come up with a better list or would it look something like this:
- Robert Muldoon
- Russell Crowe
- Sean Fitzpatrick
- Judy Bailey
- Micheal Campbell
- Lana Cocroft
- Edmund Hillary
- Tama Iti
- Neil Finn
- Gandi
Tim linked to a discussion on David Burkes blog about using Paul Wilson's O/R Mapper in a distributed environment. In this, Paul said:
"which in the end brings you back to the fact that distributed systems are not 'hard' but there are a lot of choices"
I certainly aggree that there are a lot of choices, but the only product I've found so far that is not hard is Alex's Base4 - which is not an O/R Mapper - but can be used to achieve the same result.
Maybe I need to have yet another look at Paul Wilson's mapper (which I will have to do soon for a small side project :) but my feeling is that if this was simple, I'd be doing it already.
I need to start working to my mantra - 'less is more, simple is better'. To me O/R Mappers are a stop gap measure until somebody comes up with a real OO solution that provides all of the distributed functionality I require in an easy to use package. So far, Base4 is the closest things I've found. deKlarit is another option that I've used in the past and it does come a lot closer to the ideal solution for me, but again, it's not simple and requires a large time investment to learn.
Maybe this stuff is never going to be simple enough for me?
I've been making some changes to a small VB6 application recently. On the weekend I received the updated source from the customer, unzipped it and opened the project. I tried to load the main form, frmMain.frm and bingo, VB6 crashed.
Hmmm, me thinks, that's weird, lets try that 15 more times and see if it still fails... yes, it does. Lets try opening the last version of the source that used to work. Hmmm... does the same thing. Strange. Backtrack. What has changed? I wonder if it was SP6 that I installed in between times? Email customer, ask them to try. Yes, works for them OK. Crap.
So, I tried to remove SP6 and that didn't help. In fact it made things worse. I then tried to remove and reinstall VB6 and it got even worse! Eventually, I managed to get VB to create a LOG file for the main form and it told me that MSCOMCTL.OCX could not be loaded. Crap! DLL hell!
To cut a long story short, I managed to get it all working again by installing the application from it's setup, which overwrote the stuffed DLL's/OCX's with the correct versions. 4 hours later I was working again.
All this got me wondering, why do some people still love VB6? Have they simply forgotten how bad DLL hell was? Do they never use OCX's? Do they never have to deploy these applications?
I must admit, that once it's working, VB6 is very quick to knock together a simple application and it's very easy to update other peoples code. I particularly like that pressing F5 actually runs the application before I can make a coffee and iron a shirt!
However, 1 day of DLL hell is enough to convince me that I made the correct decision in choosing .Net. Sure, it's more complex and I don't have to maintain or migrate large VB6 apps, but would you rather cruise down the motor way in a Model T or a BMW 7 Series?
I've switched to using BlogLines to read blogs. It's an on-line web based service, similar to many others out there I suppose. I couldn't tell you the pros and cons v similar sites but I can tell you that for me it's better than an offline windows reader.
Why? Well, in no particular order, heres why:
1) I don't get bothered by it as often as I would with NewsGator or Sauce Reader etc 2) It works. Sauce Reader has been beta for way too long. I don't care that they had to rewrite the darn thing, others have managed to get working products in much less time. NewsGator would be OK if I could get it to work at work. I don't think it likes Outlook 02. 3) Bloglines has a downloadable windows notifier that you can set to check every minutes or day or whatever and it doesn't use googleplexes of ram. 4) I can have one single place with my subscriptions. Previously I had to have the subscriptions on my work and home machine(s) and they were never in sync. NewsGator offered a way around this with their on-line service but I didn't manage to get this working. 5) Bloglines is free and very easy to setup. Plus you get a blog site there if you want it. 6) Bloglines has email subscriptions.
SQL Reporting Services SP2 should be on MSDN Downloads by now. Interstingly, it came through on the RSS feed dated May 24th but I coudn't find it in the download page yet.
SP2 includes a small number of useful patches and some new features. I wouldn't call it a huge improvement, but it's worth the download. Client side printing is probably the most useful feature.
I whipped up (or is it ripped off?) a new skin last night. If you reading this on the web page and not with an aggregator then this will be obvious. I needed to do this so I could insert the Technorati link. Tonight I'll also add in the Bloglines link. These are required so as to register a blog with them.
You can clearly see I'm not web design guru but I must say that it's very easy to create a skin for dasBlog - a lot easier than doing the same with .Text.
I wish I'd discovered this a lot sooner as I would have done things differently. My main site at jonesie.net.nz is still blank as I have been busy and I don't really know what to put there. In hindsite, I should have just put this blog there and included the few extra things I need in the new skin. I'll probably do this as my 3 regular readers probably won't get too upset with having to resub AGAIN. Sorry...
Sean has blogged about TechEd 05 and I'd like to add my recommendation as well - BOOK NOW! The early bird gets the you know what. Judging by the session planning that Chuck has been doing, it's going to be extremely difficult to decide which session I'm going to miss.
I've noticed over the years that when a new version of a product is release (or close to release) I discover features of the old version that I didn't know about - and wish I had known about a long time ago!
I just found an article by Shawn Wildermuth that describes how to annotate dataset schema to alter the generated code. This is not a new idea, the article is dated March 2003. Well worth a read if you hate the way null values are treated - especially date fields. Wish I had know about this in 2003 but I think it still applies to the new stuff.
I thought it was about time I revamped my old site and in the process get a domain that actually matched my name.
|