Label Cloud

Monday, November 19, 2007

Slacking around with slacker.com

A great music service is Slacker.com

Slacker.com provides an Internet radio with a few great twists.

  1. It is customizable. You can create your own radio stations by flagging favorite artists.
  2. You can play it through the Web Page or via a installed music player
  3. It lets you take the radio with you by letting you buy a portable music player.

This is definitely something that I am looking forward. Some things from my wish lists are

  1. Ability to tap into an ITunes music library for extended selection
  2. Ability to use a cell phone network for data transfer, so I am not tied to the WiFi or their proprietary DJ Technology (Can someone please explain that to me)
  3. Bluetooth in the portable device

So far, I am loving it.

Technorati Tags: , , ,


Share/Save/Bookmark

Wednesday, November 07, 2007

Windows Live Writer is out of Beta

The excellent tool that I am using to write blog entries is finally out of beta. Get it now.

http://windowslivewriter.spaces.live.com/default.aspx

Technorati Tags: , ,


Share/Save/Bookmark

Tuesday, November 06, 2007

Compiling an empty project from Command Line (Compiler Error CS2008)

I've encountered an interesting issue compiling a WebSite Project from command line using msbuild.

The project did not have any .cs source files because the pages referenced assemblies from a different project. Compilation was successful in Visual Studio, but using msbuild, I was getting a compiler error CS2008 - No inputs specified

Apparently, Visual Studio handles an empty project properly, but command line csc compiler does not. To solve the issue, just add a blank .cs file (I actually placed the comment explaining the issue in the file)

Technorati Tags: , , ,


Share/Save/Bookmark

Tuesday, October 23, 2007

Removing (Uninstalling) ClickOnce Web deployed application from Application Cache

I keep looking up a command to completely uninstall a ClickOnce application form the Application Cache. If the application is deployed using "Run from the Web" method, it is not available in the "Add/Remove Programs" control panel. To remove it, you have to clear the application cache. An important note: this will remove ALL applications from the cache. That is usually not a problem, since the next time you run them, they  will be downloaded.

To clear the cache, run the command "mage.exe -cc" from the Visual Studio command prompt.

Mage is using an API call to accomplish this functionality

CleanOnlineAppCache from Dfshim.dll

You can achieve the same functionality by using a command line tool RunDll32.exe

rundll32 %windir%\system32\dfshim.dll
CleanOnlineAppCache

Or create a batch file with the above command

Technorati Tags: , , ,


Share/Save/Bookmark

Wednesday, October 17, 2007

SecureString class

I found a reference to an interesting class while reading MS blogs. System.Security.SecureString might come in handy in whenever you want to keep strings in memory securely.

Technorati Tags: , ,


Share/Save/Bookmark

Monday, October 15, 2007

Software Quote

I am rereading the Code Complete book again. And this quote is just perfect

There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. -C. A. R. Hoare

Someone should write a book "Refactoring to simple" or "Designing so you don't have too"

Technorati Tags: ,


Share/Save/Bookmark

Saturday, October 13, 2007

Providing multiple endpoints for the WCF service

I had to implement compression for an internal WCF service. A requirement however is to make sure that older version of the service is left as is. To achieve that we've added another endpoint to the an existing binding

Here's the original Configuration File for the server.

<services> <service name="Repositories.Clients" behaviorConfiguration="DebugBehavior"> <endpoint name="Clients" contract="IClients" binding="basicHttpBinding" /> </service> <services> <behaviors> <serviceBehaviors> <behavior name="DebugBehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors>

The URL for the service is http://hostname/Clients.svc

Here's the new file

<services> <service name="Repositories.Clients" behaviorConfiguration="DebugBehavior"> <endpoint name="Clients" contract="IClients" binding="basicHttpBinding" /> <endpoint name="ClientsCompressed" contract="IClients" bindingConfiguration="compressedConfiguration" binding="customBinding" address="compressed"/> </service> <services> <bindings> <customBinding> <binding name="compressedConfiguration"> <compression compressionMode="GZip" compressionLevel="Normal"/> <httpTransport/> </binding> </customBinding> </bindings> <behaviors> <serviceBehaviors> <behavior name="DebugBehavior"> <serviceMetadata httpGetEnabled="true" /> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors>

The new URL for the service is http://hostname/Clients.svcc/compressed

The old service works just like before. But the new one requires compressed data. It is serviced by a completely separate binding and has independent configuration.

 


You can follow the same above example to specify multiple client endpoints as well. However, if multiple endpoints exist, the WCF Proxy has to be created by specifying an endpoint name.

 

localhost.Clients1Client client = new localhost.Clients1Client("compressed");

Technorati Tags: , ,


Share/Save/Bookmark

Tuesday, October 02, 2007

Working with Java (pure Java)

Last couple of weeks I was writing a lot of code for a Proof Of Concept project. Having to switch from my "native" C# to Java brought out a very interesting experience. Here are some high lights

  • Java is not as evil as it might seems at first. - It is fast, clean and has LOTS and LOTS of libraries and tools available to support your work.
  • It is very possible port logic from GOOD C# code to java code. I am talking about server side code, not WinForms. The development style is very similar. The APIs and Frameworks are so similar, that often the difference in code is only the casing of the function calls.
  • Eclipse Rocks! - So far, I've worked in eclipse, and am totally loving it. One one hand it is a very easy to understand UI with great support for development. On the other hand, it has more options and variations then any other development tool I've ever seen. I wish someone would have adopted it for .NET development.
  • Some things I still don't understand and / or miss. For example - Properties definition instead of using Getters/Setters. Ability to write services. I am still not sure how to run Java daemons in a Unix environment, but for Windows they have to be wrapped into 3rd party tools.
  • It seems that Garbage Collection is implemented better in .NET. I've never had to worry about maximum and minimum heap sized, or freezes within my application for GC run. It seems that those are often the topic sand concerns of the Java world. I've hit the "Out of memory" exceptions on multiple occasions so already. The only time I've ever received one in .NET was with a recursion bug.

Overall. The experience of writing in a different language is excellent. It gives you a very different (and often the same) perspective on software development. I probably would have the chance to learn a new language if I can't apply it, however, if there is a way to apply a new language - I would say - Go for it.

Technorati Tags: , ,


Share/Save/Bookmark

Monday, September 17, 2007

System freeze and SATA Command Queuing

After building the new PC, I've been experiencing constant system freezes. Windows would freeze for about 30 seconds - all keys including CTRL+ALT+DEL or CTRL+SHIFT+ESC that usually switch to the appropriate utilities would work. 30 seconds later, the system would go back to its regular state, like nothing would happen. All actions that where queued up during the 30 second "freeze" would fire up. This was happing during performance intensive operations as well as when the computer was relatively free, on average around twice an hour.

After upgrading all drivers, motherboard BIOS and removing disconnecting all peripherals - I finally found a solution on Google that worked. Apparently - NVidia SATA drivers enable Command Queuing by default even though many drives do not support it. Disabling the option seem have fixed the problem. I've been "Freeze" free for 4 days now.

To see uncheck the option:

  • Right click on computer, select "Properties
  • Select "Device Manager"
  • Find "Storage Controllers"
  • For each "NVIDIA nForce Serial ATA Controller" select Properties, and uncheck "Enable Command Queuing" option

DeviceManager

SATA


Share/Save/Bookmark

Thursday, September 13, 2007

Grouping emails by Conversation

When reading emails in GMail, they are organized by conversation so related emails are easy to see. Follow the following steps to create the same view in outlook.

  • Select View -> Arrange By -> Current View -> Define Views
  • Select "Messages" and click "Copy..." button
  • Rename the new view to be "Messages by Conversation
  • On the new view, select "Modify...", then "Group By..."
  • Select "Conversation" in the first group by drop down.
  • Hit OK to apply the view

 

Technorati Tags: ,


Share/Save/Bookmark

Asynchronous ForEach (Part 2)

I wrote about creating an asynchronous ForEach method before. Apparently, there is a going to be a TPL (Task Parallel Library) available that will do the same type of functionality (and more I am sure)

Parallel.For(0, 100, delegate(int i) { a[i] = a[i]*a[i]; });

Technorati Tags: ,


Share/Save/Bookmark

Wednesday, September 12, 2007

Building a new PC

Recently, the Hard Drive on my old Dell Dimension 3000 died, and I've decided to upgrade. Seeing that Scott Hanselman just recently got a PC upgrade, and Jeff Atwood wrote a few great articles on building that PC, I've decided to build a PC as well.

Here are the specs with NewEgg links (I got everything from NewEgg)

 

Mobo

MSI P6N SLI Platinum LGA 775 NVIDIA nForce 650i SLI ATX Intel Motherboard - Retail
Item #: N82E16813130081

$139.99
CPU

Intel Core 2 Duo E6550 Conroe 2.33GHz LGA 775 Processor Model BX80557E6550 - Retail
Item #: N82E16819115030

$176.99
Video

MSI NX8600GT-T2D256EZ GeForce 8600GT 256MB 128-bit GDDR3 PCI Express x16 SLI Supported Video Card - Retail
Item #: N82E16814127293

$109.99
Hard Drive

Western Digital Caviar SE16 WD5000AAKS 500GB 7200 RPM SATA 3.0Gb/s Hard Drive - OEM
Item #: N82E16822136073

$109.99
RAM

Patriot Extreme Performance 2GB (2 x 1GB) 240-Pin DDR2 SDRAM DDR2 800 (PC2 6400) Dual Channel Kit Desktop Memory Model PDC22G6400LLK - Retail
Item #: N82E16820220144

$111.99
CPU Cooler

Scythe SCNJ-1100P 120mm Sleeve CPU Cooler - Retail
Item #: N82E16835185038

$34.99
Case

RAIDMAX SMILODON ATX-612WBP Black SECC STEEL ATX Mid Tower Computer Case 500W Power Supply - Retail
Item #: N82E16811156062

$89.99
 

Subtotal:

$773.93

 

Shipping:

$32.42

 

Grand Total

$806.35

Everything got delivered in 3 days.

The whole build took around 2 hours. I had a few minor hiccups - one is that I didn't expect the CPU cooler to be as big as it was. It really is a monster. After putting it on the mother board, I could not close the case since the heat-sink would hit the case power supply. I had to take CPU cooler off, close the side of the case with the mother board, and place the CPU cooler back.

The other hiccup was that the case came with a 4 pin power cord for CPU power. The motherboard had an 8 pin socket. However, after looking on the MSI website, I aw that you can use the 4 pin plug in one side of the socket.

Here are the final pics:

IMG_0998

 IMG_1005

 

Overall, computer rocks. Fast, stable, looks cool :) The whole experience was pretty painless (if you follow the directions)


Share/Save/Bookmark

Wednesday, August 29, 2007

FireFox and NTLM authentication

I am trying to use Firefox as my main browser, and one of the annoyances is that FireFox does not use NTLM authentication by default. Here are the steps to enable the NTLM authentication

  • In the address bar, navigate to about:config
  • Filter for ntlm
  • modify the value of network.automatic-ntlm-auth.trusted-uris
  • enter comma separated list of URIs that require NTLM authentication in the format http://server1,http://intranet

That's all


Share/Save/Bookmark

Friday, August 24, 2007

Update to the Scott Hanselman's 2007 Ultimate Developer and Power Users Tool List for Windows

Scott Hanselman updated his excellent tool list. For those who never saw it, I highly recommend to go through the list to see what they have been missing. For those who know about it, see what's new.


Share/Save/Bookmark

Friday, August 17, 2007

Tweaking RuleSetDialog to Resize

I've started working with Windows Workflow Rulesets to apply dynamically apply business rules to some internal processes. This involves using External RuleSet Toolset from Microsoft samples (some more on that in a later post)

One of the biggest peeves about the RuleSetDialog is its inability to resize. Viewing a complex rule in a three line window is very uncomfortable. It is, however, pretty easy to tweak the dialog and make it a lot more user friendly.

External RuleSet editor comes in source code. Open the code using Visual Studio, open the code for the RuleSetEditor form and find the editButton_Click event. What you'll may notice is that the RuleSetDialog class used derives from Dialog. Add a new function that will adjust the dialog to make it resizable.

private void TweakRuleSetDialogToResizable(RuleSetDialog ruleSetDialog) { ruleSetDialog.FormBorderStyle = FormBorderStyle.Sizable; ruleSetDialog.HelpButton = false; ruleSetDialog.MaximizeBox = true; ruleSetDialog.Controls["okCancelTableLayoutPanel"].Anchor = AnchorStyles.Right | AnchorStyles.Bottom; ruleSetDialog.Controls["rulesGroupBox"].Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right; ruleSetDialog.Controls["ruleGroupBox"].Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; ruleSetDialog.Controls["ruleGroupBox"].Controls["thenTextBox"].Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom; ruleSetDialog.Controls["ruleGroupBox"].Controls["elseLabel"].Anchor = AnchorStyles.Left | AnchorStyles.Bottom; ruleSetDialog.Controls["ruleGroupBox"].Controls["elseTextBox"].Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom; ruleSetDialog.Controls["ruleGroupBox"].Controls["conditionTextBox"].Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right; ruleSetDialog.Controls["rulesGroupBox"].Controls["panel1"].Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right; ruleSetDialog.Controls["rulesGroupBox"].Controls["panel1"].Controls["chainingBehaviourComboBox"].Anchor = AnchorStyles.Top | AnchorStyles.Right; ruleSetDialog.Controls["rulesGroupBox"].Controls["panel1"].Controls["chainingLabel"].Anchor = AnchorStyles.Top | AnchorStyles.Right; }

Then call the function passing the RuleSetDialog before it is display from the editButton_Click event.

RuleSetDialog ruleSetDialog = new RuleSetDialog(selectedRuleSetData.Activity, null, selectedRuleSetData.RuleSet); //Tweak the RuleSetDialog TweakRuleSetDialogToResizable(ruleSetDialog); DialogResult result = ruleSetDialog.ShowDialog();


Share/Save/Bookmark
Directory of Computers/Tech Blogs