Rob Chartier ~ Contemplation...

.NET, C#, Work, etc.

News






www.flickr.com
This is a Flickr badge showing public photos from Rob & Kat Chartier. Make your own badge here.


Even Quicker Links

VB.NET Conversions

 

There was some discussion around the office which touched on the topic for the best method for object conversion in VB.NET. 

Given this (typical) pattern:

   1: Dim sneakers As Cat = CType(Factory.GetObject(someKey), Cat)
   2:  
   3: If (sneakers Is Nothing) Then
   4:  ...
   5: End If

I personally have always felt that CType was not the preferred method, so I decided to do some digging.

Lets start with the basic performance test, the sample code…

   1: Dim max As Integer = 1000000
   2: Dim sw As New System.Diagnostics.Stopwatch
   3: Dim duration As TimeSpan
   4: sw.Start()
   5: For index As Integer = 1 To max
   6:     Dim MyObject As Object = "Hello World"
   7:     Dim MyString1 As String = CType(MyObject, String)
   8: Next
   9: duration = New TimeSpan(sw.ElapsedTicks)
  10: Console.WriteLine("CType Value Type to Object:{0:0.00000}", duration.TotalMilliseconds)
  11: sw.Reset()
  12:  
  13: sw.Start()
  14: For index As Integer = 1 To max
  15:     Dim MyObject As Object = "Hello World"
  16:     Dim MyString1 As String = DirectCast(MyObject, String)
  17: Next
  18: duration = New TimeSpan(sw.ElapsedTicks)
  19: Console.WriteLine("DirectCast Value Type to Object:{0:0.00000}", duration.TotalMilliseconds)
  20: sw.Reset()
  21:  
  22: sw.Start()
  23: For index As Integer = 1 To max
  24:     Dim MyObject As Object = "Hello World"
  25:     Dim MyString1 As String = TryCast(MyObject, String)
  26: Next
  27: duration = New TimeSpan(sw.ElapsedTicks)
  28: Console.WriteLine("TryCast Value Type to Object:{0:0.00000}", duration.TotalMilliseconds)
  29: sw.Reset()
  30:  
  31:  
  32: sw.Start()
  33: For index As Integer = 1 To max
  34:     Dim MyObject As New Cat
  35:     Dim MyString1 As Cat = CType(MyObject, Cat)
  36: Next
  37: duration = New TimeSpan(sw.ElapsedTicks)
  38: Console.WriteLine("CType Ref type to Object:{0:0.00000}", duration.TotalMilliseconds)
  39: sw.Reset()
  40:  
  41: sw.Start()
  42: For index As Integer = 1 To max
  43:     Dim MyObject As New Cat
  44:     Dim MyString1 As Cat = DirectCast(MyObject, Cat)
  45: Next
  46: duration = New TimeSpan(sw.ElapsedTicks)
  47: Console.WriteLine("DirectCast Ref type to Object:{0:0.00000}", duration.TotalMilliseconds)
  48: sw.Reset()
  49:  
  50: sw.Start()
  51: For index As Integer = 1 To max
  52:     Dim MyObject As New Cat
  53:     Dim MyString1 As Cat = TryCast(MyObject, Cat)
  54: Next
  55: duration = New TimeSpan(sw.ElapsedTicks)
  56: Console.WriteLine("TryCast Ref type to Object:{0:0.00000}", duration.TotalMilliseconds)

 

And the output it yields:

CType Value Type to Object:3.95910
DirectCast Value Type to Object:1.17570
TryCast Value Type to Object:1.07470
CType Ref type to Object:7.62320
DirectCast Ref type to Object:6.41400
TryCast Ref type to Object:6.58750

Notice that CType consistently performs worse than both DirectCast and TryCast in both usage scenarios (By Value and by Reference).

Ok, so now we all know to avoid CType and prefer either DirectCast or TryCast.  The next logical question is…

What is the difference between DirectCast and TryCast and which one should we use for this situation.

The answer will come from the documentation for VB.NET.  At the time of writing this, the URL for the answer can be found here: http://msdn.microsoft.com/en-us/library/zyy863x8%28VS.80%29.aspx

Here is a snippet of the page, I bolded the significant portions:

If an attempted conversion fails, CType and DirectCast  both throw an InvalidCastException  error. This can adversely affect the performance of your application. TryCast  returns Nothing (Visual Basic), so that instead of having to handle a possible exception, you need only test the returned result against Nothing.

You use the TryCast keyword the same way you use the CType Function and the DirectCast keyword. You supply an expression as the first argument and a type to convert it to as the second argument. TryCast operates only on reference types, such as classes and interfaces. It requires an inheritance or implementation relationship between the two types. This means that one type must inherit from or implement the other.

Method Types Throws
CType Any InvalidCastException
DirectCast Any InvalidCastException
TryCast Reference Only None

 

So, since our specific scenario deals with reference types, our preferred method would be to use TryCast.  In any other case we will be forced to use DirectCast and remember to watch out for that costly InvalidCastException.

Side Note: If you noticed that we are actually using a String (value type) with TryCast and we are not seeing any compile time error, this is due to the fact that since the ToString() method is defined for all objects, you will always be able to cast to a string.

DotNetNuke Development Methodology

Recently I joined the DotNetNuke Engineering team, specifically as the Director of Engineering where my primary focus will be on NEW development; that would include both new features, and enhancements to existing features and enhancements at the core level. What this means is that my team and I will be responsible for soliciting feedback from our various customers and producing feature/functional design specifications, transitioning those to technical requirements and eventually pushing those features into a future release of the product.

Side Note: Joe Brinkman will be taking on Support and Maintenance of the product moving forward. There will be a natural flow of information and events from my team into his team.

In the interest of being transparent with the community I want to open the door to the community and allow us to discuss these items openly. First and foremost I wanted to give a quick background on the development methodology and the high-level points which we my team be adopting.

Second I will cover the current progress made to date so far, within that methodology.

And finally I wanted to cover off things what YOU can do, as a community to help grow the product.

Development Methodology

Scrum

The plan, which is in its early adoption phase, is to follow the Scrum methodology. We are now just taking our first baby steps into our first official sprint within the organization.

Shaun Walker, Joe Brinkman, Charles Nurse and I have gathered to examine the complete list of items on our Product Backlog – which Shaun currently maintains, and have decided on this feature set to be delivered in the next sprint.

I recently gave a presentation to my team, and here are the high level points which the team needs to understand:

1. This process is currently limited to the Engineering / Development team

a. This, for now, excludes the product support and maintenance team

2. We hold a daily scrum at 10:00am

3. If you cannot attend physically you are required to call in (we have a VOIP based conference room setup)

4. We enforce strict penalties for tardiness ($1.00 into our beer fund, or 10 pushups)

5. The newest hire is responsible for:

a. Taking Scrum notes

b. Updating the Burn down chart

6. The ScrumMaster, for now, is me

7. The person who currently represents the Key Stakeholders is Shaun

Schedule

Some of the key dates to take note of include:

1. Scum meetings happen at 10:00am, all to attend

2. We have month long iterations, which follow the general guidelines of:

a. Day 1: Sprint Planning Meeting

b. Day 2: Task breakdown, accept work (duration is tentative)

c. Day 3 to Day 21: Development effort

d. Day 22: QA Hand off

e. Day 22 to Day 30 : QA Effort – end result is a potentially shippable product

3. Quarterly Feature Releases (Maintenance releases are monthly)

It is important to note that although we have monthly sprints, we only release quarterly. This means we are going to try to make available these interim feature builds to the community. The exact nature and plan for this is still tentative. This also allows for the sales cycle to pick and choose their build for demo’s and trade shows – fully tested and stable vs. latest and greatest feature set.

As a side note, we have officially adopted Olympic City names for our development sprint names. For the first sprint, which has already start has a code name of Vancouver. The next sprint will be named Sydney.

Our timeline of events, at a very high level is as follows:

1. 5.3 - Vancouver Sprint is due

2. 5.3 - Vancouver Beta Customer Release

3. 5.3 - Sydney Sprint is due

4. 5.3 – General public release

Planning/Tasking

In the past I have had much success in implementing the usage of Sticky notes for project tasking and tracking. What this means is that as we gather to break down each major feature set down into its various bits we keep track of each task with the help of sticky notes. On each note, we indicate the Sprint (5.3/Vancouver, etc). Which component which is being worked on, the task name (Create table to store xyz) and the approximate “size” of the task (1-4). If the task is larger than a 4, we simply break it down even further.

The goal of this is, is to get a broad picture and “size” of each deliverable and how much the team can deliver in a fixed amount of time. For example if we add up the size of all of the tasks, across the team, and it adds up to 100 and we deliver that early, then we know that next time we should consider adding more items to the Sprint Backlog (work to be delivered). If we can’t meet the deadline then we have over allocated and will need to adjust accordingly. Over time what happens is, as the team matures, the amount which we need to adjust for each sprint is reduced and we have a very predictable method for estimating how much work to take on during each Sprint.

Now that we have each of our tasks broken down and on stickies we have a large board in the office which we place of them on, under one of the following columns/categories:

1. Backlog

2. In Progress (and each person has an In-Progress column)

3. Deferred

4. QA

As each developer begins a task, and moves it along to completion they are to also move the sticky. This gives everyone a very obvious indicator of progress. Take for example the QA team; they know what features are coming in the near future and when. Shaun can take a look at the board and see the progress being made by the team.

It is very important for me to have this exist in the physical world. It needs to be out there, just like our dirty laundry. It keeps us in check and on the ball, not to mention being extremely transparent with the rest of the team.

What can you do?

If you do not already have a channel into DotNeNuke and you want to get involved drop me an email. If I can’t handle your request directly I will do my best to put you into contact with the correct person on our team! Feature requests, glaring issues that are just killing your adoption, comments/feedback on our process and methodology, or if you just want to pick my brain feel free to get in touch with me.

XBMC and X10 – Home Automation on your TV

As some of you may remember I upgraded my Home Theatre PC to the Ubuntu/Live version of Xbox Media Center.  Its a free and open source Media Center application.   To get an idea of what the UI looks like, see here.  Here is the current skin which I use, Confluence.

So anyways, I have been meaning to finally integrate X10 directly within XBMC in the form of a Python script, which is natively supported in XBMC.  This article describes how I was able to accomplish this.

Note: Items starting with “>” can be interpreted as command line commands via SSH

Hardware

For the XBMC base setup and configuration see my previous post here.  Now we need to add in the X10 components.  In the past I have been a big fan of the X10 modules.  What you need is a Firecracker (CM17a) module with a USB to Serial Adapter.  The specific USB to Serial Adapter is pretty important, because of the Linux drivers available.  Mine, which obviously works, is listed as…

Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC.

To be safe I do recommend using the same sort of device (at least the FTDI Chipset – Ubuntu seems to agree with it).

Once you have both of those simple components plug them in and allow your system to recognize the device.  This may require a reboot.

To determine if it has been detected or not, you will need to SSH into your XBMC device and execute the command:

> lsusb

You should see something like...

Bus 004 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

Since this is the first USB device on this rig, it is using ttyUSB0, so we must change permissions for that device via the command line:

> sudo chmod go+wr /dev/ttyUSB0

 

Software

Installing heyu

The software side of things is fairly easily done, with an existing tool called “heyu”.

Step by step..

1. SSH into your XBMC

2. > cd ~

3. > mkdir x10

4. > cd x10

5. > wget http://www.heyu.org/download/heyu-2.8.0.tgz

be sure to get the latest revision of heyu, I'm assuming 2.8.0 is the latest, but please do check.

6. Ensure the build-essentials are installed for your distro

> sudo apt-get update

> sudo apt-get install build-essential

7. Untar/gzip the heyu library

> tar -xvzf heyu-2.8.0.tgz

8. cd heyu-2.8.0

9. Build heyu (as documented in “INSTALL” file)

> sh ./Configure  [option]   (As a normal user)
> make                         (As a normal user)
> su                         (Become superuser)
> make install               (As superuser)  (choose 1)
> exit                       (Revert to normal user)
> heyu info                  (As a normal user, to test installation)

10. Start the heyu engine

> heyu start

11. And finally test; send firecracker (CM17A the All Off Command, for house code A)

> heyu falloff A

 

If that works, your now 1/2 of the way there!

The next set of steps will install the heyu engine to run at start up, by editing the rc.local file, here goes…

1. > sudo nano /etc/init.d/rc.local

2. Add the following lines:

chmod go+rw /dev/ttyUSB0
mkdir /var/tmp/heyu
chmod go+rw /var/tmp/heyu
/usr/local/bin/heyu start

(putty supports copy and paste, paste with the right mouse button)

3. Save, exit  (ctl-o, ctl-x)

If for some reason you cant save the document, you probably missed the “sudo” portion of the previous command.  Exit without saving, and start from Step 1 again.

4. Reboot (sudo reset)

Upon boot your XBMC installation will have the heyu engine started and ready for your commands.  If you SSH back into your device and issue the commands:

> heyu fon A1

>heyu falloff A

> heyu help 

      will give you the full help documentation as usual

XBMC Scripting with heyu

XBMC scripting is pretty straight forward if you go down the WindowXML route.  There are a decent amount of examples online, and I have attached here my sample, working code.

In the sample, if you work your way down to the path, and edit the file:

\X10\resources\skins\DefaultSkin\pal\HomeAutomation.xml

You will see the layout. Consider this XML is the main control structure and positioning that you can use.

Next edit the file:

\X10\default.py

This is the python script responsible for initializing the UI and handling the events.  Scroll down to about line 80 and you will see this block of code:

   1: if (controlID == 1001):
   2:     print "------------------executing A1 on------------------"
   3:     os.system('heyu fon A1')
   4: elif (controlID == 1002):
   5:     print "------------------executing A1 off-----------------"
   6:     print os.system('heyu foff A1')
   7: elif (controlID == 1003):
   8:     print "------------------executing restart-----------------"
   9:     print os.system('heyu restart')
  10: elif (controlID == 1004): 
  11:     print "------------------exiting-----------------"
  12:     self.close()

Notice that we are matching the “controlID” variable with the same control id=”1001” variable in the XML document.

As a final step, upload your edited script and XML document to your XBMC installation and give it a try.

Problems encountered so far

The heyu engine setup might need tweaking, especially when the XBMC device goes to sleep.  Upon waking up it seems that I need to force the heyu restart command, and even then its not 100% reliable.  I typically have to reboot to get it working just right.

Sometimes the receiver of the X10 signals is jammed.  My module is pretty old so I plan on grabbing a new/better model.

Let me know if you have any further questions, comments or concerns.

Undo Emails instead of retracting them in Outlook 2010

If your now used to the way that GMail puts an automatic delay on all outbound emails, you might want to set this up for Outlook as well.

This is based on these instructions for an older version of Outlook.  Here is the equivalent for 2010:

1. Switch to the Home tab

2. Click “Rules” on the right

3. Choose “Manage Rules and Alerts”

4. New Rule

5. Under “Start from a blank rule”, choose “Apply rule on messages I send”, and hit Next

6. Hit Next again, you should be prompted with a dialog.  Choose Yes or No as you see fit.  I chose Yes, to apply this rule to all outbound emails.

7. In the next step hit the checkbox for , “defer delivery by a number of minutes”

8. In the bottom area click the section of the text “a number of minutes”, enter your delay duration (I chose “5”), and hit OK.

9. Hit next twice, and finally give your rule a name, I chose “Delay Send by 5 Minutes” and then hit Finish

Now all of your emails that you send will sit in our outbox for about 5 minutes.  Initial testing shows that it is about 5 minutes and it is not perfect (probably a delay with the UI, or exchange or some where in between).

DotNetNuke.com & Performance

In case you missed it we upgraded http://www.DotNetNuke.com last night; which also includes a brand new build of the Forums.  Along with the new naming scheme for our Forums, you should immediately notice the performance improvements.  In fact, in our lab,  the page load times dropped from 4.68 seconds to 2.25 seconds -  under heavy load.

The entire site is actually running the 5.2.1 build, which is expected to be released to the public in the next few hours.  Watch for the download on Codeplex!

Let me know of any feedback you have on the site or the Forums and I will forward it off to the team.

Thunderbird Search Folders & Starred Items

If your like me and like the “Star” feature in Gmail and now in Thunderbird to mark items for follow-up then you will probably notice that in Thunderbird for non-IMAP/Gmail accounts you don't get this out of the box.  Here is a quick tutorial on how to get it working.

1. Bring up the “Search Messages” dialog

Go to Edit, Find, Search Messages or Control-Shift-F

SearchMessages

 

2. In the “Search for Messages in” drop down, choose the appropriate account which you wish to search within. 

3. Ensure that Search subfolders is Checked

4. Ensure that "Run search on server” is unchecked

5. Match all of the following is Checked

6. In the filter area, choose:  Status     is    Starred

 

StatusIsStarred

7. Click the “Search” button on the top right

8. You should notice that the “Save as Search Folder” is no lit up.  Hit that button

9. Give it an appropriate name and be sure the “Create as a subfolder of” is correct.  It will be the Parent of the new search folder which you are creating, so put it within the correct account.

 SavedAsSearchFolder

10.  Hit OK and your done.  It should be in your Navigation Tree, as a folder of a different color.

Folders

My HTPC – XBMC

Recently we had a little bit of a Halloween party at our new house, and a few people commented on my HTPC rig.  That along with a few other inquiries I have decided to put together a parts list and some basic instructions I followed to get XBMC (Live) running on one of those little Mini-ITX Boards.

Here is a screen shot of the UI, this one is specifically showing how you browse your Movies in your Library.

mstream3

 

 

So here is the parts list:

(All costs were as of 19-Sep-2009)

Enclosure

MINI-BOX M350 Universal MINI-ITX Computer Case Black 1X2.5INT Works with Pico PSU – Black

Cost:$39.93

Comments:

Very small box, just large enough for the Motherboard (Zotac IONITX, see below).

Zero noise, small footprint and low power
The M350 is Industry's smallest universal enclosure (192 x 210 x 62mm , 2.5L) capable of housing mini-ITX boards ranging from tiny Atoms to fully featured desktop or mobile CPUs. The M30 permits fanless operation (natural air convection via hundreds of tiny holes) for TDP < 10 watts and CPU-only fan for TDP <= 65watts.

Photo:

37788

 

RAM

Patriot Extreme Performance PDC24G8500ELKR2 4GB 2X2GB PC2-8500 DDR2-1066 CL5-5-5-15 Memory Kit

Cost: $84.99
Comments:

Given that this machine has no hard drive, and really just boils down to a processor and video output you really dont need much RAM at all.  It will not be used for any serious processing.  I went with the 4GB option because I’m greedy, but have seen this same rig work just fine with only 2GB.

Patriot Extreme Performance (EP) Enhanced Latency line is engineered to provide PC enthusiasts and gamers the power to perform. It is capable of operating up to PC2-8500 (1066MHz) and at timings of 5-5-5-15. It is equipped with Patriot Aluminum Bladed?Heat Shield Technology to improve module stability and performance while operating under extreme overclocking conditions. Available 4GB Kit capacity, the Patriot Extreme Performance Enhanced Latency Line is the ultimate solution for gaming and extreme overclocking.

Photo:

30492

 

Remote Control

Mediagate Windows Vista MCE Infrared Remote Control for Home Premium & Ultimate Black 

Cost: $22.74

Comments:

I actually have a Harmony remote which I love, but needed to get this kit for the IR receiver.  If you already have a standard USB IR Receiver then you can safely skip this item. 

Photo:

29147_1

 

Boot Device

OCZ Rally 2 High Performance 8GB USB2.0 Dual Channel Flash Memory Drive 

Cost: $27.49

Comments:

The OCZ’s are well known for the awesome speed.  I did some serious shopping around and read enough reviews to find that this device is probably one of the fastest USB Flash drive on the market.  In the past, I have had a negative experience with OCZ Drives, but decided to not learn from that mistake and move forward with this purchase.  It is actually holding up very nicely.

The OCZ USB 2.0 Rally2 Flash Drive is the sleeker and more ergonomic version of the original Rally. The redesigned Rally2 features a more stylish housing accompanied by a new signature OCZ ultra-bright orange status LED and still houses the renowned OCZ dual channel technology that made the first Rally the choice flash drive among enthusiasts. Thanks to the implementation of leading edge Dual Channel technology, the Rally2 puts data transferring in the fast lane and leaves the competitors in the dust.

Photo:

24400

Motherboard

Zotac IONITX-A MINI-ITX Intel Atom N330 NVIDIA Ion DDR2 GBLAN 802.11N HDMI Audio 90W PSU Motherboard

Cost: $204.82

Comments:

These little motherboards are amazing in size.  It comes with the wireless networking and full gigabit nic and of course 1080 HDMI output.  All of the bare minimums you need for streaming 1080 in your LAN.

Experience fluid and vivid high-definition video playback with the ultra-compact ZOTAC® ION platform. The mini-ITX form factor ZOTAC® ION combines a high-performance NVIDIA® ION graphics processor with a power-efficient Intel® Atom processor for the ultimate eco-friendly platform that has no troubles handling regular web browsing, e-mail, & productivity and HD video playback tasks.

Photo:

38918_2

BALANCE DUE:     $425.57

 

Networking Upgrade

So the previous owner of our house actually just dropped a bunch of cash into upgrading the home’s cabling, including running CAT5E drops to basically every room in the house.  What this means is that I can actually stream at GB speeds, which you will need for the higher end videos. 

Based on my simple observations, if you just want to do 720 or lower, 10/100 connection (10MB/s or slower) is usually good enough.  You might experience some buffering in video playback.  If your looking for full 1080, then upgrade to a GB network.  This means you will need at least CAT5E on all of your network points, and you will need a full GB switch to sit in-between all of these points.

What I have is my external ISP is wired into my old linksys 10/100 router, which I will never see over 2MB/s from them either way so its good enough.  Out of that I have a single line to an unmanaged GB switch which serves the rest of the house.  You can pick one of these up at your local shop for about $100 to $150 if you like.

Software

The last piece of the puzzle is what software to run.  Given my parts list above includes no hard drive, I obviously went with a pretty minimal setup.  Xbox Media Center (XBMC) has a LIVE CD version available for download.

All the Live CD is, is XBMC running on top of Ubuntu.

Personally I run the MediaStream_Redux Skin, here are some screen shots:

mstream1

 

screenshot068d

 

More screen shots can be found here.

Installing DotNetNuke on Windows Home Server

So I’m a newbie when it comes to Windows Home Server but I’m quite seasoned when it comes to DotNetNuke, IIS, and that entire stack.  I wanted to cover off a the topic of installing DotNetNuke onto your Windows Home Server.

Windows Home Server is essentially Small Business Server, just tweaked for network attached storage (NAS).  There are many other NAS solutions available, but I find this one superiour (at least for me) is the fact that it is built on top of the Microsoft solution.  I know ASP.NET, I know IIS, I know .NET, etc..  When I first heard of this product I was pleasantly surprised.

Here is a shot of my Acer Aspire Home Server H340 physical machine.

h340

 

Enough about me, on with the install!

Throughout this installation I will not be using the WHS Console.  I prefer simple RDP (remote desktop).  If you want the best RDP client, check out my Terminals project on CodePlex.  Once you have RDP access to your WHS installation, continue with this article.  All of the subsequent steps will be performed directly on the WHS machine, unless otherwise specified.

Microsoft has genrously provided us with a Tool which automates this entire process for us, its called the Microsoft Web Platform Installer (WPI). 

WPI is…

The Microsoft Web Platform Installer 2.0 (Web PI) is a free tool that makes getting the latest components of the Microsoft Web Platform, including Internet Information Services (IIS), SQL Server Express, .NET Framework and Visual Web Developer easy. The Web PI also makes it easy to install and run the most popular free web applications for blogging, content management and more with the built-in Windows Web Application Gallery.

Download and start the installation process now.

Now, since I’m running a pretty clean WHS install it is also complaining that it requires Visual C++ 2008 SP1 prior to my install, specifically for Sql Server Express. 

WPI with VC++ Error

Lets do that now. After a quick Bing search, here is the download.  Its only 4MB and took all of 5 seconds to install, one wonders why Microsoft couldn't have just included it with the WPI tool – or at least link out to it.

Once that is complete you will need to restart the installation process; if you have the WPI open, exit it now.  To re-launch the tool, notice the shortcut in your Start->Programs menu.

Take time to browse all of the tools which WPI brings to the table.  Notice that under the “Web Applications” tab on the left, we see “DotNetNuke Community Edition” as one of the options.  Do NOT check that item right now.  Lets just focus on getting Sql Server Express installed prior to getting DNN installed.

2009-10-29_02-38-52

Next under the “Web Platform” tab, you will see “Database” on the right.  Choose the “Customize” link in that section.

2009-10-29_02-41-13

I chose the Sql Server Express 2008 with Service Pack 1, the Management Studio Express and the Management Objects – maybe I’m greedy, but having the additional tools available will only help later with development and/or troubleshooting.

Lets go ahead and hit install. You are now prompted for confirmation of the installation.  Review this list, make sure it is want you agree to, and hit the “I Accept” button.

The first action it takes is to install Sql Server Express.  I left it on the default “Mixed Mode” and punched in my super secret password.

Let the Sql Server Express product install, along with the other various bits it will proceed to install.

2009-10-29_02-48-08 

Note: You may want to pause any downloads you have (Torrent/NNTP/what have you).  Having a slow connection during this process will ultimately delay you getting online in short order.  WPI does not ship with all of the independent applications.  It needs to download them on the fly.

Sit back, go get a coffee, relax for a bit.  On my machine it took about 45minutes to get past this step.  Even when the installation seems to just sit there, please be patient.  My install sat at the “Finished Downloading”/”Installing” screen for a long long time.

While your downloading, take time to explore the WPI website.  I was interested in how often it is updated, specifically with DNN.  Should I use WPI to install DNN, or should I do it manually?  Here is the DNN specific page which, at the time of writing this, lists 5.1.4 Community Edition as the build.  Checking out the DNN CodePlex downloads page, that is indeed the current recommended release.  Quite pleasing to see that Microsoft is actually maintaining this resource for us.

If you have any issues with this installer at this point, you might want to actually try hitting cancel, then re-launch WPI, and validate which components did and did not get installed.

Ok, so we now have Sql Server Express installed.  Lets verify that it is running.  If you right click on My Computer, and choose “Manage”, then expand “Services and Applications” you will see a node for “Services”  Click that node.  Scroll down until you find the “Sql Server (SQLEXPRESS) service, take notice if its status (should be Started), and Startup Type (should be Automatic).  Notice in the screen shot below, it is the item just under the selected service.

2009-10-29_03-54-58

So now that we have Sql Server Express properly installed, lets shift our focus to DotNetNuke.  If you closed WPI, launch it.

Navigate back to the “Web Applications” tab, and check “DotNetNuke Community Edition”, and then hit install.

So during the DotNetNuke installation you will be prompted for all the basics which is needed to configure IIS and DNN so they play together, here are the values which I used:

Web Site: “Default Web Site”
Web Site Name: dnn
Physical Path: c:\inetpub\
IP Address: All Unassigned
Port: 80
Host Name:myservername.homeserver.com  (do NOT put http:// prefix here)

2009-10-29_04-21-10

Now, the above setup is pretty strange and not exactly 100% clear as to what is happening in IIS and on the File System.  You may need to crack open IIS Management (Right Click My Computer, Manage, Services and Applications node,

 

Step 2 of 2 includes pointing the DNN Installation to your fresh Sql Server Express installation. Take a second to review the page, you will notice it needs specific login details for the administrative and user accounts.  Lets jump into the Sql Server Management Studio to setup those accounts.  (Start, All Programs, Microsoft Sql Server 2008, Sql Server Management Studio).

As you launch the application for the first time, it will setup help and other stuff, let that happen.  Once it is complete, you will be prompted to login to the default instance of Sql Express, all you should need to do is hit Connect, do not change any values here.

You should now see a tree on the left, expand the Security node, and then right click Logins, New User.  Here is what I used:

Login Name:DBAdmin
Sql Server authentication
Password: another super secret password
I unchecked the password policy rules as well.  I don't want to be hassled.

2009-10-29_04-35-46

Under Server Roles, give the user “sysadmin”.  (Both public and sysadmin should be checked).

Hit OK and feel free to exit the Sql Management Studio, and lets get back to Step 2 of 2.

Here is what I used:

Choose Your Database: Sql Server
Create a new or use an existing database:Create new database
Database Administrator:dbadmin
Password:that same super secret password
Database User Name: dnnuser
Database Password/Confirm: yet another super secret password
Database Server: leave it alone (.\SQLExpress).  Thats the default instance of Sql Server Express
Database Name: leave it alone (DotNetNuke)

Now you may hit Continue and let the installer work its magic.

2009-10-29_04-42-02

Finally (and hopefully) you should see…

2009-10-29_04-42-51

 

Finish, and exit the WPI tool.

Browsing our DNN site for the first time is critical to get it setup right.  Open your web browser and point it to your public facing url.  http://someserver.homeserver.com/dnn

Please be patient.  The first time a ASP.NET application is hit, it needs to do a bunch of startup tasks, this will take some time.  Avoid hitting refresh until the page fully loads.

With any luck you will see the DNN Install wizard:

DNNInstallWizard

 

Now lets go through the “Custom” install.  Be sure to actually change the option to “Custom” and then hit next.

First step is to check the file security permissions, this should just work.  Click the “Test Permissions” button, and hopefully you will see green!  If you do NOT see green, and there is an error simply read the information near the top of the page to resolve the issue.

Once permissions gives you all green, hit Next.

So you are now prompted with another screen asking you for the database credentials.  This is because DotNetNuke is typically installed WITHOUT the WPI tool.  Use the same details as you used previously.  Always “Test Database Connection” prior to proceeding.

Finally it goes ahead and performs the actual database installation.  The majority of this work is done via a bunch of Sql Scripts being executed against the database.  Let it take its course and complete.

DBInstalled

 

Now its time to setup the default Host and Admin credentials.  If you are unfamiliar with DotNetNuke, essentially the HOST account is global to all portals (web sites).  The ADMIN account i limited to the single portal which it is available on.

If you want to set your portal up to use GMail, use..

Server: smtp.gmail.com:587
Authentication:Basic
Enable SSL: Checked
Username:youruser@gmail.com
Password: your password

Test the SMTP Settings, and if you get a green light, hit next.

You now are presented with a plethora of modules to install.  Here is my recommended list:

Documents  - easy way to share documents with friends and family
Links  - nice way to setup additional navigation for your site
Media – easily expose media content
Map – Hey, why not allow friends and family to always be able to get your home address?
Blog – Use it, create a home blog!
IFrame – Handy for linking in other stuff, like the standard WHS Console
Survey – Survey your friends and family!

Hit Next, once you have made your selection. 

At this point your browser will sit and spin for a little while.  Let it work itself out; do NOT hit  refresh, do NOT load up a new browser and hit the site.  It is going through the process of installing all of the modules you have chosen.  The more modules you picked, the longer it will take.

Installing Skins and Containers – Defaults are fine, just hit next.

Language Packs and Languages – this revision did not include any, so just hit next.

Authentication Systems – Since your using WHS, you most likely do NOT use a Domain Controller (Active Directory).  Keep the defaults and lets move on.

Install Providers – Keep the defaults, and hit next.

At this point your probably thinking, holy crap there are so many steps to install DotNetNuke.  So many things to configure, and so many extensibility points.  This is a massive advantage DotNetNuke has over all of its competitors.  It has had such a long and healthy life in the community that there are literally thousands of developers contributing to the project.

We now are presented with the initial Portal Setup.  Each portal needs an administrator account, so plugin your details for this.  Typically, if you are only going to use one portal, I usually avoid using the Admin account and actually forget the password. I will just use the Host account.   With that said, if you plan on delegating any web admin to anyone else, this would be a great account to do that with.

The most important piece here is the Portal Title.  For consistency I would probably give it the same name as the actual homeserver.com domain. 

For example, if your homeserver URL is:

rob.homeserver.com

I would go with

Robs DNN Home Server

Template, well there is only one option.  Skip it and hit next – oh, and play the waiting game once again.

Congratulations, your finished!

CodePlex Servers & Multiple Projects

If you have worked with the CodePlex site for managing at least a few of your projects you will soon have a list of servers which a variety of your projects may or may not exist on.  For the 10 or so projects that I contribute to or own I need to connect to three different servers this is annoying.

Since I use Team Explorer and it is simply not smart enough (hopefully - YET) to have multiple connections open to different servers at the same time, I need to switch servers depending on the project I want to work on.  Visual Studio, and the process of switching servers via Team Explorer (at least on my laptop), is pretty slow.  So this process of multi-tasking/project swapping is painful and time consuming.

What I recommend is:

1. Team Explorer gets the much needed upgrade to support multiple server sources.  There is still the use case of working with local TFS and CodePlex Project simultaneously.

2. CodePlex gets a project redirection enhancement – a proxy.  I should be able to add just: Projects.CodePlex.com:443, plug in my credentials, and it gathers up all of my projects across all of their nodes into one single server source. Single endpoint == good.

Tintii Photo Filter (Samples)

Here are my top 11 before and after samples that I put together with Tintii

First, what is Tintii?

“tintii takes full colour photos and processes them into black and white with some select regions highlighted in colour. The technique is known as colour popping or selective colouring – tintii makes it easy.”

Flickr Set Available Here.

 

1Before1After

2Before2After

3Before3After

4Before4After

5Before5After

6Before6After

7Before7After

8Before8After

9Before9After

10Before10After

11Before11After

12Beforetintiied

More Posts Next page »