Feeds:
Posts
Comments

This is a very simple case of saving a list of settings to Silverlight Isolated storage during an Application Exit event:

    IsolatedStorageSettings.ApplicationSettings[key] = settings;

When the application restarted, the ApplicationSettings were empty.     I did not received any errors until an explicit save was added:

    IsolatedStorageSettings.ApplicationSettings[key] = settings;
    IsolatedStorageSettings.ApplicationSettings.Save();

The save is normally not needed since the application settings are saved implicitly by the IsolatedStorageSettings class.  After the save was added, the following helpful exception was thrown:

The collection data contract type ‘System.Collections.Generic.List`1[[… ColumnSetting, … ‘ cannot be deserialized because it does not have a public parameterless constructor. Adding a public parameterless constructor will fix this error. …

Well, (duh) it turns out the problem had nothing to do with Isolated Storage.  Rather, it was the inadvertent omission of the public constructor that was causing the problem.

 

image

My Outlook PST file recently reached 3GB in size and, while Outlook will still performing ok, I needed to reduce the size of the file to keep the size of my nightly backup reasonable. 

I removed old and large messages from the Sent and Deleted messages folders and estimated that I freed up at least 1/3 of my used space.  I tried compacting the file through Outlook and through the Control Panel Mail applet.  The compaction finished too quickly and the file remained the same size.

This was solved by rebooting and going directly to the Control Panel Mail applet (double click Personal folders line and click the Compact Now button) before opening Outlook.  My PST file is now 1.2GB.

I hope this helps someone else.

I recently moved a database to a new Sql Server installation for a pro-bono client.  They have a legacy Microsoft Access application (adp file) which needed to be re-pointed to the new server.   Since they do not use domains, I simply entered the IP address and Sql Server credentials for the new server on the connections page and it worked.

image

Well, it worked for users that had an id on the server and had elevated privileges.  Everyone else was getting the infamous “Sql Server does not exist or access denied message “ message.   There are many things than can cause this message but they did not apply in this case.

How could user authentication be getting in the way of connecting when I am specifying Sql Server credentials and forcing the connection to use tcp/ip instead of named pipes?   

The answer is that this instance of Sql Server is running on port 5000 instead of 1433.   The authenticated users were able to connect because, during the connection attempt, the client software queried the Sql Server Browser service and determine that the correct port number was 5000.  The anonymous clients did not have this advantage and therefore tried to connect on port 1433 and subsequently failed.

The All tab on the Data Link Properties page has a Property were the port number can be specified.  This solved the problem for everyone.

image

One really handy feature of Microsoft Sql Server is the ability to link to non-Sql Server databases, such as Oracle.  This allows you to write simple queries in Sql Server against the other database.

For example, to link to Oracle, you would use the following commands:

EXEC sp_addlinkedserver   ‘ServerAlias‘,  ‘Oracle’,  ‘MSDAORA’,  ‘TNS_NAME’
EXEC sp_addlinkedsrvlogin ‘ServerAlias‘, ‘FALSE’, NULL, ‘OracleId, ‘OraclePwd’

Then, in theory, you should be able to write queries like the following in Sql Server Management Studio:

select * from [ServerAlias]..[OracleSchema].[TableName]

When I first tried this, the following error message was given:

Msg 7319, Level 16, State 1, Line 1
The OLE DB provider “MSDAORA” for linked server “XYZ” returned a “NON-CLUSTERED and NOT INTEGRATED” index “TABLE_IDX2” with the incorrect bookmark ordinal 0.

The solution to this problem is to force the Oracle Indexes to be ignored by changing the “Index as access path” option on the MSDAORA provider (not the link).

image

 

The next problem I ran into was:

Msg 7356, Level 16, State 1, Line 1
The OLE DB provider “MSDAORA” for linked server “XYZ” supplied inconsistent metadata for a column. The column “NUMBER_FIELD” (compile-time ordinal 39) of object “”SA”.”TABLENAME”” was reported to have a “DBTYPE” of 130 at compile time and 5 at run time.

Microsoft’s proposed solution to this problem requires recreating the tables on oracle to fix the inconsistency.  But what if you only have read only access to the Oracle server?

The workaround is to use the OPENQUERY function to execute the sql in pass through-mode on Oracle.  So, if you rewrite the query as follow, the inconsistency error goes away:

SELECT * FROM OPENQUERY(ServerAlias, ‘SELECT * FROM SA.MYBADTABLE’).

Two other important points:

  • The Oracle table names must be upper ciase.
  • The queries should be relatively simple.  The optimization of these linked queries is relatively limited so keep it simple!

Hope this helps.

Looks simple enough but it took a few tries to get the SMTP servings right for a “Google for Domains” account:

image

Remember that Google limits each mail account to sending 500 messages a day to foil spammers.  If you have a higher volume than that, then you will have to look elsewhere for an SMTP server.

As a bonus, when you use GMail for your SMTP server you can see the history of emails sent from DotNetNuke in your GMail Sent folder.   This really helps with debugging email notification issues.

For example, I could never figure out where the Test messages were going until I saw them in my Sent Folder.  By looking in the Sent folder, it was very obvious that they are sent to the Host’s Email address which I still had set to the default value of support@portal_domain.com.

image 

Let me know if this helps you out.

tabbedbrowsing.jpgtabbedbrowsing.jpgtabbedbrowsing.jpgtabbedbrowsing.jpgWhenever I set up a new machine for myself, I immediately go to Internet Explorer tab options and check the “open home page for new tabs instead of blank page” option.  However, it does not automatically take effect.  

 You need to then check the (less than obvioTab OptionsTab Optionsus) “Never show this page again” box on the “Welcome to Tabbed Browsing” page.  Hope this helps!

A different, yet not unexpected starting lineup was used tonight.  Given the size and offensive force on the front line of Detriot, Eddie House would not have been a good fit. Enter Mikki Moore in place of the injured Nenad Krstic.  The has been due to Mikki given the solid numbers has put up since Cliff Robinson went out four weeks ago with a knee injury.

Q1:  Except for minutes 9 – 10, the Pistons had their way with the Nets (just like the Bucks the previous game).  The Nets found them self trailing 31-20 and not doing anything to get give the fans hope.

Q2: Encouraging signs as one good defensive stand followed another.  Adams, Boone and Moore fought for every loose ball and created a number of second opportunites.

Q3: Defensive flow continued plus, now, Vince Carter starts to get it going.  A couple of drives, a couple of assists, and the Nets are back in the game.   Doesn’t take much to get me on the edge of my seat again.  The Nets build the lead to 7 as the fourth quarter starts.  The problem though is that Jefferson, Carter, and Kidd all need a blow.

Q4: I knew it was going to be tough against Detroit in the fourth and wondered if the good flow from Q2 would continue.   The Nets were in the game until the last seconds and and if not for a very questionable non-call on the last drive (and a couple of poor calls a few minutes earlier), this would have been the Nets night.

Overall:  First game in a while where I saw signs of improvement and hope that it will continue tomorrow night against the Yao-less rockets. 

Player Reviews and Observations:

Jason Kidd B+ Excellent game overall;  Forced the Nets to push the ball quickly in the second half of the game and it made a huge difference in how Detroit set up ther defense; First time in a while, his 9 rebounds did not lead the Nets; expect to see his minutes increase as Lawrence shortens the bench in hopes of establishing a defensive identify
Richard Jefferson B+ Good defensive effort on Tyshaun Prince; Solid numbers; Anyone else this he is holding back because of his ankle?
Vince Carter B- As Vince went so did this game … miserable shooting and defense early first half; turned it up mid-way throught the second.
Jason Collins B Another very good defensive game; had some lift on dunks in the first half; finished with 14 points and 4 rebounds; almost if if Hassan and Boone’s enrgy us infectious.
Mikki Moore B- Some key free flows; just doing what Mikki does best … energtic, good hands …. having fun out there.
Josh Boone B The source of HOPE for the Nets in the coming months. Seems to have his hands on or near many rebounds.

 

Technorati tags: , , , ,

Life has been getting harder for owners of small mail servers on the internet.  Costly software upgrades and restrictive anti-spam policies at the major servers have made running your own mail server a very expensive proposition.  Yes, there are many companies providing outsourced e-mail services, but they are either expensive or very limited.  Then, along comes Google for Domains!  Free & feature rich, it makes you wonder why you bothering with the hassle of maintaining your own server.  Key features that we needed in order to switch:

  • The maximum file attachment size is 10Gb
  • Reliable spam filtering
  • Nicknames or aliases for each account name
  • Domain aliases (e.g, harriergrp.com can be aliased to harriergroup.com)
  • 2 GB mailbox limit
  • Access from Outlook via POP3/SMTP
  • Web based accesss
  • Option to include all domain users in mail address book
  • Import/export contract lists into web tool
  • Personal lists in web tool
  • Mail lists
  • Virus scanning

Plus:

  • Personalized startup page makes it easy to set up an quick intranet
  • Shared calendars (browser managed)

The only question is who to contact when (if?) you have problems.  It is nice to go onto your own server and see exactly what happened to a message.  Then again, we may never have that need again!

Live Africa Video

A friend recently passed on a link to a live video/audio stream from a South African watering hole.   I have seen all kinds of animals in the last few days and have become addicted to the relaxing sounds of birds and bugs.  The best time to watch is early morning (which is 10 pm – 2 am EST) and late afternoon (which is 6 am – 10 am EST).  During the day, there is often someone monitoring the camera and zooming in on the interesting critters.  The feed is also available at night.

http://live.wildlife.wavelit.net/451OK

The cam is located at Nkorho Bush Lodge in the prestigious Sabi Sands Game Reserve, bordering the Kruger National Park, in South Africa. The Sabi Sands Game Reserve is named after two rivers that cut through this area, namely the Sabie and Sand River systems. The area is renowned for its wildlife and in particular the big five, lion, leopard, elephant, rhino and buffalo. It is rated as one of the best reserves in Africa to see these large animals in there natural habitat and in particular leopard. Its not all about the big animals and the Sabi Sands has plenty of other smaller animals that call this place there home.

Nkoro pan is located in the North Eastern corner of the Sabi Sands Game Reserve, and about 1km (0.62 miles) from the unfenced boundary with the Kruger National Park. The Pan is situated at the bottom of an open plain, about 250m from Nkoro Bush Lodge and is frequented by a number of resident animals, in particular is the resident herd of wildebeest and impala and a family of warthogs that can often been seen drinking and wallowing in the mud at the pan. The camera is located on top of a termite mound on the Eastern side of the pan and looks Westerly when viewing the pan.

Some people have taken snapshots from the video feed and uploaded them to flickr.  Amazing!  If you do the same, please tag them with “nkhoro”.

Unlike stored procedures, one cannot simply omit a parameter (with a default) to a Sql Server 2000/2005 user-defined function.  For example, if you had a function such as:

    create function fn_just_do_it(@a varchar(10), @b varchar(10) = ‘xyzzy’)

You would not call it like this:

    select dbo.fn_just_do_it(‘Hi mom’)

Instead, insert the word DEFAULT as a placeholder:

      select dbo.fn_just_do_it(‘Hi mom’, DEFAULT)

From Sql Help:

When a parameter of the function has a default value, the keyword DEFAULT must be specified when calling the function to retrieve the default value. This behavior is different from using parameters with default values in stored procedures in which omitting the parameter also implies the default value.