Tuesday, September 2, 2008

A nifty program...

Here is a very nifty site for formatting code for HTML:
http://www.manoli.net/csharpformat/

what makes this really good, is that you can nest the css into the document, so for sites where you can't link the css, you can still use it.

I use the output of this for our internal wiki with sql.

Here is a screenshot of the output : (unfortunately, blogger is overriding the css)



So, hopefully someone can tellme how to override the css in blogger, so that it works. However, for the Sharepoint Wiki that we use, it's great.
And the source is available, so that you can fix some of those bugs, such as no space after a -- causes the comment to not be formatted.

Monday, June 9, 2008

remote webservice debugging

I was given this link by a friend, that shows how to enable the debuging forms for webservices in an app: http://geekswithblogs.net/juang/archive/2005/11/28/61437.aspx

All you have to do is add:

<configuration>
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
</configuration>


to your web.config and now you can call the webservice from a different machine and get the test form. Now you don't have to have fiddler installed on your servers to view info.

Wednesday, April 9, 2008

Vista USB Drive Annoyances and a Solution

I'm not sure if it's Vista64, VMWare, Maxtor, or something else entirely, but over the past 9 months, I've had an working, not working issue with the "Safely Remove Hardware".


I run VMWare workstation on my External Maxtor Turbo edition Drives. They run all my development tools in xp. And my base os of course is Vista 64 Business edition. Well, depending on the version number of VMWare, for a while, I was always able to Safely remove the drives after shutting down all of my vms and exiting the program. However, a couple weeks ago, I installed an update to VMWare as well as SP1 to Vista. Oh, and I added a docking station to the mix as well.



Now it seems that I can't ever safely remove the drive. To remedy the situation, I closed down all the programs I had open, killed tasks but to no avail, it still doesn't work. The only way to remove it is to shutdown the computer.


Are there alternatives out there? Appearently there are. I found a nifty program called USB Safely Remove at http://safelyremove.com/ and their program actually does what Microsoft should have offered in the beginning. It tells you what programs are running against the drive if it's unable to remove the hardware. That is a really nice feature.






What I also like about it, is that it hides itself in the task bar, replacing the windows remove icon, so I don't have to run a separate program. The interface is a lot cleaner, and fewer clicks to find what devices I want to remove.


With the program, I was able to find that my Maxtor drive had a process using it with different admin level that what's current running has access to the drive. And that's why I'm not able to remove it. My other USB devices show up fine and can be removed without a problem. And I don't end up with the generic "This device is in use" message. I actually get something kind of handy.


Here is a link to their usage guide. http://safelyremove.com/scr_guide.htm


Another thing that I like, is that they have a ton of options. You can force a device to shutdown. And you can even build command line scripts! You can change icons for each of your devices, hide or show devices in the list, and it tells you how many are currently hidden. The interface is intuitive and clean. They also appear to be updating every month or two, so you know the developers love there program, and are constantly trying to improve it (that means a lot to a fellow developer like me).


So, if you find yourself often getting the can't remove device now, use this program. You'll be able to figure out what is causing the lock on the drive, and be able to remove it quickly.


It's pretty inexpensive, and it will save you a ton of headaches if you swap out a lot of usb devices. You can download it for free and get a 30 day trial.






Tuesday, March 18, 2008

Team Foundation Server 2008

I have a fresh install of Windows Server 2k3, just installed Sql Server 2k5 and Sql Server SP2. I'm getting ready to install Team Foundation Server 2008.

And then I get the ubiquitous error: 320000


The Commandline '"C:\...\TFRSConfig.exe" /setup /install /s "servername" /u "NT Authority\NetworkService" /buildInIdentity /l "1033" /verify /ignoreExistingIISArtifacts /instancename "MSSQLSERVER" /appPoolName "ReportServer" /reportServerUri "http://localhost/ReportServer" /reportManagerUri "http://localhost/Reports" /h "servername"' returned non-zero value: -2147022676.

I've seen other sites with this, tried the click retry 4 to 8000 times, and nothing. I finally killed the install. Then I remembered, when I was installing Sql Server and IIS i had switch a flag for some other error I was getting in IIS:

The fix was to go to open IIS, right click on Web Sites, select properties, select service tab, then check Run WWW service in IIS 5.0 isolation mode.

Figuring that there wasn't much else I could do, I unchecked that field, and went back through the TFS install.

What do you know? It worked. (oh and I had to restart IIS).

So, at least I've gotten it installed. Now to play with it.

Tuesday, March 11, 2008

1 old and 1 new feature of Gmail.

Official Gmail Blog: 2 hidden ways to get more from your Gmail address

I just found on the GMail Blog two neat features you can do with your gmail addresss. One I've known about for years, and that is using a period in your email address. so example@gmail.com is the same as ex.amp.le@gmail.com, and you can use that to figure out where spam is coming from, if you place the period in different places of your email. That's of limited use, unless you want to be spiffy any have a period separating words in the email address. The other item that I didn't know about and was really interesting was using the + in your email. So you can send email to exampl+orders@gmail.com. Then create a filter for the +orders and have all your orders labeled. I've started using +spam, +orders, etc. I then know if someone starts to sell my email address to other companies, I can just start blocking the +.

I use this with my google domain email, and it works great!

Monday, February 25, 2008

cwbx info on connection pooling

Well, I talked on the phone with IBM's .net Support. And the cwbx definitely does not do any kind of pooling. It's a batch/queue setup. So multiple calls into the dll will stack up one after the other until they are all done.

To get around this I created a simple Object Pool, that would instanciate the object's connection to the 400, and then when I need the object, get it from the pool, use it and return it. Pretty slick!

As for the connecitons on the 400, they just sit in a status of TIMW until they are used. I do have a limit on the number of connections in the pool, so if I get too many in there, I close the oldest one down.

Thursday, February 14, 2008

cwbx help files

Well, I wrote an application that I was getting the objectdisposed exception in, and that was using IBMs .net provider to talk to the as400, call a stored proc which called a program.

Unfortunately, that wasn't fast enough for me, so I started searching around for help on calling programs directly. I found a dll, that you can reference in your project, which will give you access to calling 400 programs directly. This opens up a whole new world because you can start passing complex types back and forth (suposedly, I haven't tried this myself). The downside, is that there is only one real other blog that actually has info on it.
http://www.netsplore.com/PublicPortal/blog.aspx?EntryID=13

And the program works great. However, I needed to know what some of the values mean, because even though this method is faster than the .net provider, i'm still slower than running websphere for the same calls.

It took some reasearch, but for all you out there, who need to know, you can find the cwbx.dll help files in the following directory on your windows system:

C:\Program Files\IBM\Client Access\Mri2924\cwbx.hlp

that last directory having to do something with the version of your client access.....

This basically a help file on what all the values, types, methods, objects, etc mean for that dll.

objectdisposedexception Fixed!

I found the problem, and posted the solution on a comment field in one of the previous posts. But here it is. Our server was running the latest fixes, however, my client access was not updated to the latest service pack. Our Operations manager, gave me this link to IBMs site to install the service pack on my local windows machine, and it works.

ftp://ftp.software.ibm.com/as400/products/clientaccess/win32/

Then select v5r4m0 (or what ever version you are running), servicepack, and si29771.

Download si29771.exe and run it on your system. Poof! Now you no longer get the objectdisposedexception, and no more errors with ThreadPool.RegisterWaitForSingleObject

Hope this helps!

Tuesday, January 22, 2008

web.config appsettings and updates

Well, I finally figured it out. If you're like me, you have some settings in your website that you want to be able to update, but you don't want to bounce the app domain, yet, your values need to be displayed as changes.

I figured out how to do it. First, give the section of your web.config a config source. This will point your web.config to a separate file that you can use to store your settings. Since, it's this other file that is updating, your app domain shouldn't bounce every time you change a setting



Once you've added that line,

then add either in a separate class, partial, or wherever the following:

private void SaveSetting(string SettingName, string SettingValue)
{
//connect to the webconfiguration file
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");

//get the setting that you want to update
KeyValueConfigurationElement setting = config.AppSettings.Settings[SettingName];

//assign the new value to the setting
setting.Value = SettingValue;

//save the configuration changes
config.Save(ConfigurationSaveMode.Minimal, false);

// Force a reload of the changed section.
ConfigurationManager.RefreshSection("appSettings");

}



This will get the key that you are looking for, update it. You can actually see when this happens, if in Visual Studio you have the file open. It will prompt you that a change has been made to the file, and ask if you wish to reload it.

Edit: Note, that even when you force the RefreshSection, from what I understand, that'll only refresh the web.config section to reload. Appearently, it won't always refresh external files. So your changes may not show up right away. ARG.

If anyone has a solution to this, I'd appreciate it.

Thursday, January 17, 2008

.net framework debugging

It's finally out. On ScottGu's blog, he posted information on how to read the .net framework source code!

.NET Framework Library Source Code now available

You do still have to enable it, but at least it's available.

Free Microsoft books.

I just found 3 free microsoft books that you can download as a PDF:

Microsoft Press

Once signed in, you can download Introducing LINQ, Introducing ASP.NET AJAX, and Introducing Silverlight 1.0

You can preview a couple of chapters, or download the whole book in PDF format.

Enjoy!

Friday, January 11, 2008

SSIS, AS400 and the System.Byte[]

So, I have an SSIS package that I'm wanting to create. When I use the ODBC connection (similar in the DTS), I can pull everything over fine. I have 2 fields, one is a Char(3) the other a Char(13) on the 400. I've made the exact table in my sql server db.

The problem is that if I use the ole for .net instead of odbc, I get the following Error when I switch the provider in the SSIS package:




I'm using the IBMDA400 OLEdb\IBM DB2 UDB for iSeries when I get the error

I'm not having this problem with any other of my SSIS packages... wierd.