Tuesday, March 28, 2006

Feedburner Rss Feed

I added a Feedburner feed to my blog.  Hopefully I’ll be able to automatically redirect any of the other feed links to the feedburner one, so I can track my readers.

If you subscribe to my blog, please change the feed url to http://feeds.feedburner.com/flux88

Monday, March 27, 2006

My current music solution

People who know me can tell you that I have about zero patience for software.  Especially software that is so integral to my day-to-day use of the computer.

One such program is my media player.  I have tried pretty much every single one out there, and I haven’t been too impressed with any of them.  I constantly evaluate these programs and usually just end up settling. 

(I should also note that I’m probably the only person on the planet that doesn’t have an iPod.  Heck, even the Pope has one!)

  • Windows Media Player – The library integration is weak and not very usable for me.  The built-in cd burner is piss-poor, and I generally don’t like the interface.  I usually just use this for viewing temporary media (like my phone’s voicemail or little video clips).  The built-in taskbar toolbar is KICKASS and more media players should do this.
  • WinAMP – Fantastic for a file-based collection, but I have grown to need more.  My library was out of control and I was tired of manually tagging/renaming.  The media library didn’t suit me.  The visualizations are top-notch and the skin community is HUGE.  I like the interface, but again, I needed more control over my library.
  • MusicMatch – As much as I’d like this one to work for me, it still didn’t feel right.  I didn’t get a good view of my music, and I was sick of it trying to get me to subscribe to it’s mp3 download service.  I uninstalled it.
  • iTunes – I have chosen to stick with this one for now.  The interface is pretty well thought-out and I really like the smart playlists.  The ability to share music on the local network is very nice, though I’d like this to be able to stream over the internet as well (authenticated, of course).  It has decent support for podcast subscriptions, though a bit-torrent-aware plugin would be nice for this.  I also like the ability to rate songs easily.

I gathered some tips on generating some good smart playlists from Andy Budd.  Basically this keeps my playlists alive and I can rate songs to help shape the playlists.  I can un-check songs that I don’t want to be included in ANY playlist (like stand-up comedy, podcasts, or 0:20 long tracks that are skits or preludes to other songs on the same cd).

So now that the media situation was settled, I needed a nice way to keep my music in sync from my desktop and laptop (at work).  I’d still like streaming ability over the internet, but these are the machines I use most, so they’ll have to do.  At the advice of Scott Hanselman I decided to give FolderShare another go.  This time around I noticed that 2 things changed:

  • Microsoft bought them out
  • Now it’s FREE!

This definitely got me interested.  I decided to setup my mp3 folder as my share folder and installed FolderShare on both PCs.  When I get new music in, I import it using iTunes (which copies and renames the files) and will automatically be synchronized with the other PC.  That means I can import music on either my laptop or my desktop and everything will stay organized.  This is a big plus for me.

So far this is working out fairly well.  If I rename or change the tag of a file, then the whole file has to be transferred back to the other PC, so this can use up quite a bit of bandwidth.  I haven’t run into any issues with this so far.

Some other cool music links are:

  • MusicBrainz Tagger – This open-source free service is a GREAT idea.  Basically it will scan your mp3’s, make a digital footprint of each one, then try to match it with the online database.  It will give you a percentage of confidence so you can setup to automatically tag those files that are 90% or greater and sift through the ones it wasn’t sure about.  If it cannot find a match, it will ask you to help the community out and supply some tag info.  This can run in the background to automatically organize your mp3s.  Very cool.
  • iTunes Registry – Upload your iTunes playlists and get suggestions based on data from the other uploaded playlists.  See what other people are listening to.
  • music mobs – Mark songs that you like and see what other people suggest.

Are there any other helpful media links that I might add here?

UPDATE:  I recently saw some issues when synchronizing the folders that iTunes manages on both ends.  If one iTunes collection modifies a filename or adds a file to the list, the 2nd iTunes will not pick it up, since I am not sync’ing the iTunes .xml files.  To fix this, I found a script that will scan your folder and re-import all of the songs.  Best of all, this will *not* reset your playcounts, ratings, or tag info.  This includes songs that were not already in your library, so it’s perfect for me.  If you use it, make sure and edit it to include your music directory.

Click here for the iTunes Folder Sync script.  Thanks to Garreth Farrington for this.  (Anybody want to wrap this script in an easier-to-use app?)

 

Wednesday, March 22, 2006

Hard Drived Burned Up

Oy.

My hard drive that stored my subversion repository burned up.  No, really.  It burned up.  I saw smoke coming from one of the ICs on the PCB.

The drive is still under warranty, but I don’t care about the drive.  Hard drives are cheap.  This contained three large personal projects, a boatload of mp3s, tax documents from the last 3 years, and unfortunately something non-replaceable:  A recording of my mom singing a lullaby that she wrote.

I spoke to some data recovery people, and I got prices ranging from $1000 – $2500, and they are pretty confident in getting the data back.  The problem is that I am trying to save money for my wedding, and shelling out a grand for data recovery is out of the question at this time.

My other option is to buy an identical drive and just replace the PCB.  It looks easy enough, but I need to make sure that the PCB is the exact same one.  From what it looks like, there’s only 4 solder points, going directly into the drive controlling the heads. 

What should I do?  Should I attempt this ghetto-recovery?  Should I pay the $1k?

 

Wednesday, March 08, 2006

I'm an uncle (again)

My sister had her second child today (a boy)!  His name is Preston.  I’m very proud and I can’t wait to meet him!

Photo 17

Podcast - Ben Day on NHibernate

Benjamin Day spoke at Visual Studio live this year and was interviewed by Channel 9.  He talks about NHibernate.  If you don’t know what NHibernate is, it’s an object-relational mapper aiming to reduce/eliminate common data access code.  It’s based on the mature Hibernate for Java, and has growing community support.

Anyway, Ben Day and I used to shoot ideas back and forth and talk about NHibernate patterns and limitations.  He mentions me in the podcast (!), which you can download here.

Thanks Ben!

Developing for a Domain Environment

Internal applications commonly utilize Active Directory to manage their user-base.  With this approach organizations can define the users and roles in one central location, and have that information available to many applications.

For intranet websites, this is accomplished by using Integrated Windows Authentication.  But what happens when you are developing on a machine that does not have the same accounts as the target environment?  Case in point:  say you have some Active Directory domain groups that define who the “readers” of an appliciation are and who the “editors” are.  The simple solution is to make these groups configurable through the web.config, and you can have something like this for development:

<add key=”adminRole” value=”Administrators” />
and something like this for production:
<add key=”adminRole” value=”DOMAIN\ApplicationAdmins” />

This gives us the benefit of using a local machine account for debugging the different roles, and allows for Integrated Windows Authentication to work properly.

Here’s another concern.  What if your code accesses a secure resource like a database or web service that requires valid Windows credentials and authorization?  A test database can easily be configured to accept SQL Authentication provided via connection string, but a Web Service that requires integrated Windows authentication?  Would you really want to mock a complex external dependency like this (Especially if it is a read-only dependency) ??  If you do you end up spending a large portion of your time just setting up the environment to develop in. 

I was dealing with a scenario just like this and I wanted to do use the web.config’s impersonate=”true” feature where I can supply a username & password to run as (You can even configure it to encrypt this data and store it in the registry using aspnet_setreg.exe… see here).  The problem here is that if I give it a valid domain account to impersonate, my local machine cannot authenticate me unless I join the computer to a domain.  For a lot of scenarios this is way too much to ask, and may not even be an option.

I could end up just constructing a NetworkCredentials object with the credentials I need to access the secure web service, but I don’t like that approach either.  It requires me to specify an account in plain text (either in code or in web.config… both of which are bad ideas.

Any thoughts on this?

Thursday, March 02, 2006

Webhost Hiatus

Well my webhost crashed and I lost a month of posts.  I’m trying to see if I can find a more recent backup, but for now this will have to do.

I moved over to webhost4life.  They have pretty good hosting for $10/month for:

  • asp.net 2.0
  • sql server 2000
  • sql server 2005
  • mail

The only downside is that you have to pay $15/year for each domain that points to a folder other than your root.  So if you have 2 sites, you’ll have to put them in their own subdirectory, and pay a little extra to get the domain to point there.

Still not a bad deal for 2 sites, $150 for a year, including mail.

Sharepoint Portal Server Installation

I was installing Sharepoint Portal Server 2003 at a client site this week.  During and after the install we were getting very strange errors, eventually leaving the site useless until we could figure them out.  Installing WSS Service Pack 2 and SPS Service Pack 2 helped get through the installation, but even after the site was completely installed, we still received lots of errors.

It turns out that IIS didn't have script maps for ASP.NET 1.1, so only 2.0 showed up in the list.  Though the updates are supposed to work with 2.0, my experience tells me otherwise.  Sharepoint Portal Server 2003 *definitely* has issues if you run it in 2.0.  To add the option for 1.1 in IIS, you can run:
c:\windows\Microsoft .NET\Framework\v1.1433\aspnet_regiis -i
This will reinstall the script maps for that version into IIS.  I changed the SPS site to use 1.1,  but I still received errors. 

A reinstall put the site back on 2.0, which was quite odd...  I got the same errors as before.  Finally, to fix it I disabled 2.0 in IIS 6.0's Web Service Extensions section.  Then I reinstalled SPS, which was then forced to use 1.1.  All was well with the world after that...
Sunday, January 08, 2006

SqlExpress connection under Remote Desktop

While developing a small website this week I ran across an unusual error. 

When on my lapop, I generally remote into my desktop PC because it has Visual Studio and all the tools I need.

I decided to use a SqlExpress file as the database, since there won’t be much data for the application.  This worked for about 2 weeks until I got this error upon opening a connection:

Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.

This error has to do with the fact that I am using remote desktop to develop.  When I access a file-based sql express database, the data is actually copied locally, which is why it takes so long to start up. 

Kevin Jones says:

SQLExpress creates a directory per user in "c:\Documents and Settings\[user]\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS" that it uses to store information. Deleting this directory has fixed both of my problems.

I’ll update this with my results.

Update:  It worked!  How weird.  This fix definitely looks temporary but it’s working for me so far.

Thursday, December 08, 2005

I'm all banged up!

On Thursday, I was involved in a serious car accident.  I hit a dump truck head on.

My car was mangled beyond belief, both airbags deployed, and I was in bad shape.  My right leg was obviously broken; it looked like a pillow doubled-over on itself. (Ouch!)  My left arm was also obviously broken.

Paramedics arrived quickly, they pulled me out of my car (quite painfully) and I was laid on a stretcher.  I heard someone say “be still, this might hurt,” and then followed the most painful thing I have ever encountered.  He pulled my leg to re-set my femur.  My leg popped loudly 3 times while I begged him to stop.

I was put on a helicopter and flown to the hospital.

Later that evening I had surgery on my arm and leg.  On my right femur, they inserted a titanium rod to fuse the bones back together.  For my left radius, they inserted a few pins to fasten a loose piece of bone.

I stayed in the hospital until Tuesday evening.  I am home now, basically immobile for I assume quite a while.

I guess I should consider myself lucky.  I am thankful for all my friends and family who showed support and came to visit or called during this tragedy.

Tuesday, November 29, 2005

Adding Javascript to ANY CommandField control

In the previous post, I mentioned how annoying it is to have to treat an ImageButton separate from a Button and separate from a LinkButton when they are all essentially the same thing.

The answer here lies in the IButtonControl interface, (whose name strongly suggests that it should be a direct parent, not an interface, but oh well)…

Here’s how you’d add javascript and tool tips to those CommandField button controls, without having to write specific versions for all three:

    1 protected void gvCrews_RowDataBound(object sender, GridViewRowEventArgs e)

    2         {

    3             //grab last column (the command column)

    4             int cmdCol = gvCrews.Columns.Count - 1;

    5             foreach (Control ctrl in e.Row.Cells[cmdCol].Controls)

    6             {           

    7                

    8                 IButtonControl btn = ctrl as IButtonControl;

    9 

   10                 if (btn != null)

   11                 {           

   12 

   13                     if (btn.CommandName == "Delete")

   14                     {

   15                         ((WebControl)ctrl).Attributes.Add("onClick", "return confirm('Are you sure you want to delete the crew and its ENTIRE history?  This cannot be undone...');");

   16                         ((WebControl)ctrl).ToolTip = "Click here to delete";

   17                     }

   18                     else if (btn.CommandName == "Edit")

   19                     {

   20                         ((WebControl)ctrl).ToolTip = "Click here to edit";

   21                     }

   22                 }           

   23             }   

   24         }

 This way I can still change the look & feel of the GridView CommandField and I don’t have to recompile to support it.  Unfortunately the IButtonInterface doesn’t allow for javascript attributes or tooltips, so I have to cast the control as a WebControl to add those in.  Setting CausesValidation=true still causes an exception for the ImageButton though, so I haven’t figured out a way around this yet.

Now playing: Nine Inch Nails - The Hand That Feeds

GridView CommandField Validation woes

Today I was working with a simple form, a single textbox at the top with a button for adding items, and a gridview below for editing/deleting.

With 2.0’s validation groups, we can have validation on the “Add” form by setting validationgroup=’AddGroup’ and we can have our CommandField column of the GridView have validationGroup=’editDelete’.  Ideally this will separate the 2 actions into their own validation groups and they won’t bother each other.

Well, if you are using ImageButtons instead of LinkButtons for your CommandField, there is a slight problem.  The ImageButton actually gets instantiated as DataControlImageButton, which cannot use the CausesValidation property.  Here’s what happens:

DumbException

Now why does this generate a NotSupportedException?  This is a perfectly valid scenario for validation?  In this particular case I do not care about the edit/delete validation, but I do care about the Add validation. 

If I change this scenario to work with LinkButton or just Plain Button, it all works out fine.

I have another rant regarding this same concept.  The above screenclip is showing the RowDataBound event handler, and I am looping through the controls in the last column of the GridView.  Now the last column is going to be the CommandField, so I know that there will be some commandcontrols in there.  At this point I should not care whether it is a Button, an LinkButton, or an ImageButton because I will be treating them all the same:  I will compare their CommandName properties to see what they are doing.  So why can’t I just cast the control as Button?  Well ImageButton doesn’t even derive from Button!  I am sure there are reasons for that, but I don’t see them.  This means I have to recompile my code if some UI guy decides they want a link instead of an image for their Edit command.  Dumb, I say.  An ImageButton, by nature, is a button, not an image.  It’s behavior is a button.  The way we treat it as developers is just like a button.  It’s view or representation however is an Image, just like a standard button has a raised, rounded rectange as its view.  Someone please explain to me why I’m wrong….

Now playing: Jimi Hendrix - Red House

Sunday, November 27, 2005

Engaged!

I proposed to my girlfriend, Silvia, on Thanksgiving in front of her entire family.  She said yes!  It was quite an occasion.  We aren’t yet sure when the date will be.

I’ll post some pictures of our trip to upstate New York soon, one of them has me on one knee .

Credit - Renegade motorhomes - Personal Loan - Credit Counseling