So I've heard about Twitter, read about Twitter, but still have not figured out what all the hype about Twitter is about. Had Scott entitled his post about Twitter this week "Twitter", I probably never would have read it, instead he entitled it "Twitter: The usefulness of Micro-blogging", and I thought to myself, micro-blogging sounds interesting, let's have a read. I wanted to try to define what Twitter is. This is something I've been struggling with for awhile (along with what can I use Twitter for). So far, the best I can come up with is a cross between IM and Text Messaging and Blogging. I say IM and Text Messaging because of the short messages in Twitter (140 characters) and the conversation style of the messages. The blogging part comes in because the posts on twitter are for all the world to see, with a key difference being that the Twitter service hosts all of the content. So I have spent a couple of hours now looking at this Twitter thing, and I'm still not sure I understand it. I installed TinyTwitter on my phone and sent my second ever tweet. I tried installing Witty, but it's crashing on startup, so I'll need to look for another client. So I am making an effort to try this out at least. I think I will follow Scott's tweet feed for awhile and see what that brings. One thing I'm not entirely comfortable with is the idea of sharing certain information with the world. Now of course I can control what I tweet, and I share information all the time, so let me try to qualify my statement with some examples. Looking at what people tweet, I came up with some examples of stuff that I could tweet based on stuff I've done the past couple of weeks (I didn't count out 140 characters). - Played UltraZone for the first time in many years with some old friends and had allot of fun
- Lost our play off game for roller hockey
- Just won another copy of Windows Vista for some comments I made during the UW EBC RFID workshop
I was actually kind of excited by the prospects of Twitter when I thought up these examples, but then a little paranoia set it. Since most people seem to tweet in near real time, and that makes the most sense, you could start to construct a pretty accurate picture of someone's day to day (hour to hour) activities. As I said, you can tweet whatever you want, and can just choose not to tweet something. I don't think I have any stalkers out there, but you never know ;) My twitter feed is www.twitter.com/asalvo and we'll see if I end up using it or not.
Both ScottGu and Scott have blogged about the IIS 7 Bit Throttling module for IIS, and it is available for download on iis.net (see this announcement by Vishal Sood). I had been looking past these announcements this past week and while looking for Scott's article on Twitter, decided to read thru his write-up of bit throttling. The bit throttling module for IIS is just one of the first of many (assumed) modules to be released as add-ons for IIS. I think that you will also start to see community (they are probably already out there) and commercial modules for IIS. The modularity of IIS 7 is just starting to show off what it can do. So what can you do with the Bit Throttling module? In Scott's post he shows off two demos. The first, shows what you get out of the box, and is similar to ScottGu's post. You can select a file type and set two options, fast start and throttle rate, and they differ slightly based on if you choose the Media or Data option. Media - Fast Start (in seconds) - Download at full speed for the specified number of seconds
- Throttle rate (as a percentage) - Download as a percentage of encoded bit rate
Data - Fast Start (in kBytes) - Download at full speed for the specified number of kBytes
- Throttle rate (in kbps) - download the remaining data at the specified speed
So you get allot of functionality out of the box. This is extremely useful if you are streaming allot of video thru IIS, and want to manage your bandwidth better. The real power of this module can be shown (very simply) in Scott's second example. Scott's second example extends the bit rate throttling thru custom code by implementing an IHttpModule. Scott notes that he wrote this in notepad and just dropped the .cs file into a App_Code folder where his media files were stored, how simple is that? The demo shows how you can simply look at a query string value and toggle bit rate throttling. While simple, Scott goes on to explain how you could do a more complex handler in which registered users, or paid subscribers could get faster downloads.
I was planning on watching all of the Mix videos on Silverlight for Windows Mobile, and some other content as well, but I have not gotten around to it. I had written up the following while watching the first video and wanted to get it posted before I forgot about it. As I "predicted", Silverlight for Windows Mobile was announced at Mix 08. In conjunction with the announcement at Mix was an announcement by Nokia to make Silverlight available on S60 for Symbian OS. A CTP version of Silverlight for Windows Mobile is due out sometime this year (Q2 2008) Mix Sessions T12 - Mobile Devices and Microsoft Silverlight: A Primer on the New Technology. Presented by Amit Chopra and David Kline Silverlight for mobile will be the 1.0 version, not 2.0, running as a IE Mobile browser plug-in with java script support. Initial support is for Windows Mobile 6 standard and professional (and Nokia Symbian). There will be a device specific media stack. The first demo showed a Silverlight application running on a HTC device, loaded from the local file system. Demo applications included a analog Clock, Donkey (remember the Bill Gates Donkey.Net?), and a media player written by channel 9 which was ported to Silverlight mobile. Amit made a comment during the demo saying that he replaced the managed code for the channel 9 media player with a scripting equivalent because that is what they support. That will be disappointing if the compact framework isn't available in Silverlight (managed code support comes in 2.0 for mobile) There are some guidelines for moving existing Silverlight applications to the mobile device. - ScaleTransform (utility?) to resize content
- Use device supported encodings
- Avoid large content files
- Be aware of device resources
- Be mindful of scaled object size
- Mobile network connectivity is improving but you still have to take into account limited connectivity.
- Design apps for touch and non-touch input
- Design UI (XAML) for each form factor \
Roadmap (keep an eye on www.silverlight.net): - Silverlight 1.0 for mobile CTP Q2CY08
- Silverlight 1.0 for mobile RTM Q4CY08
- Silverlight 2.0 for mobile CTP Q4CY08 (managed code support)
- Silverlight 2.0 for mobile RTM Q2CY09
Contact Amit (achopra@microsoft.com) via email to discuss TAP opportunities. At the end they opened it up for questions: - Reiterated the www.silverlight.net site as your one stop to get all information about Silverlight for developers, including what the optimum development environment would be (VS version, blend version, etc)
- When asked if Silverlight could interface with a camera built into a device, the answer was no. However, you could use/write an ActiveX control that interfaced with the camera or gps, etc, and as long as it's on the same page as the Silverlight application, you can exchange data. In 2.0, additional support for interfacing with the device may be made available thru the inclusion of managed code.
- Support for Windows Mobile 5? Not planned due to limitations of the browser.
- Silverlight 1.0 for mobile is the same Silverlight 1.0 as the desktop.
- Someone asked if there were any plans to go to a wpf (my word choice) style approach. The answer was that not for 1.0, but possibly in the 2.0 timeframe depending on customer need. Amit stated that they have been hearing quite a few requests for this, so there is another reason to email him and let him know if that's something that you want.
Well the Beta 2 expiration period is fast approaching, so it was time to upgrade our TFS server from Beta 2 to RTM. It was pretty painless, but took the better part of an afternoon to get thru everything. - Notify users that upgrade process was begging
- Using windows firewall, disable access to:
- The Sharepoint site (port 80)
- TFS web services (port 8080).
- TFS Web Access (port 8090)
- Execute schedule job to backup all databases (local) and copy backups to another computer
- Shutdown TFS server so we can snapshot the TFS Server (we're running ESX Server). While you don't have to shutdown in order to take a snapshot, I prefer too.
- Uninstall TFS Server and other components that are not covered by the uninstall script (see step 6)
- Microsoft Visual Studio 2008 Team Foundation Server Beta 2 - Enu
- Microsoft Visual Studio 2008 Team Foundation Sever Build Beta 2 - Enu
- Microsoft Visual Studio 2008 Team System Web Access
- Microsoft Visual Studio 2008 Team Explorer Beta 2 - ENU
- Microsoft SQL Server Compact 3.5 Beta ENU
- Microsoft Visual Studio 2008 Premier Partner Edition - ENU
- Run Beta 2 Uninstall script (there is a link at the bottom of my VSTS upgrade to RTM post)
- There were some left over folders which I deleted to clean things up
- Program Files\Microsoft Visual Studio 9.0
- Program Files\Microsoft Visual Studio 2008 Team Foundation Server
- Program Files\Microsoft Visual Studio 2008 Team System Web Access
- I checked to see if Share Point was still working, and it was. The virtual directory for reporting services was no longer around, which was interesting.
- Reboot the TFS server
- Install Team foundation server
- Run Setup.exe from DVD
- Choose Team Foundation Server from the setup menu and click install
- Change destination folder to E:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\ (IT Requirement)
- Type in the name of the database server (after clicking next it took about 1 minute to validate the databases)
- System health check is run
- Enter account and password for tfs server and reporting services
- Setup TFS Alerts by specifying a SMTP host
- And go!
- Got 1 error complaining about the reporting services URL (see #8). I clicked retry and it seems to have fixed itself!
- Installation finished and prompted for a reboot, which I did.
- Share Point and Reporting Services (Report manager) tested successfully
- Install Team Explorer
- Run setup.exe from the dvd
- Select Team Explorer and choose install
- Change destination folder to E:\Program Files\Microsoft Visual Studio 9.0\ (IT requirement)
- And go!
- No reboot required, so I didn't reboot. I did test out TFS locally using the Team Explorer I just installed
- Install TFS Build
- Run setup.exe from the dvd
- Select Team build and choose install
- Change destination path to E:\Program Files\Microsoft Visual Studio 9.0\ (IT requirement)
- Enter TFS service account and password
- And Go!
- Reboot TFS Server
- Remove firewall restrictions and test remote access
- I noticed we had the Red X's next to the reports and documents folders in Team Explorer on remote machines. The cause was that TFS doesn't use FQDN by default. I found this post on Buck Hodges's blog about enabling FQDN. This wasn't a result of the upgrade to RTM and was broken before hand, I had just never had the need to fix it.
- I followed steps 1 thru 4, except the registry key for my TFS 2008 install was HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\TeamFoundation\ReportServer\80\sites
- You may need to clear out your cache on your workstation. Under Vista, the cache is at C:\Users\USERNAME\AppData\Local\Microsoft\Team Foundation, and under XP it is at C:\Documents and Settings\USERNAME\Local Settings\Application Data\Microsoft\Team Foundation
- Send out success email to users.
- Note: I didn't have the media for Visual Studio Test Edition on the ESX server, so I couldn't install that for the build server. It is something I will have to do later.
I finally got around to installing a new Windows Server 2008 instance using the server core option. As with a standard Server 2008 install, the install procedure itself is extremely easy and straight forward. You get asked for your language, keyboard layout, and what drive you want to install and off it goes. That's it, when it's done you're ready to start configuring your server. One thing to point out, is that you must have 512MB of ram in order to proceed with the install. I was able to change the amount of memory to 256 after install without issue. Another thing to point out is that you are not prompted for a product key. By default you are allowed 60 days to enter a key and activate. See my section below on product activation. So the first thing I noticed was that you still get a Server 2008/Vista style logon prompt. At first I thought I had accidentally selected a full install instead of server core, but after logging in, I got the expected command prompt window. I guess I was expecting a *nix console login. One thing that people might be wondering is how much disk space and memory does server core use out of the box. I have 5.9GB of a 8GB partition free, so simple math gives us 2.1 GB. Task manager shows that I have 171MB of RAM in use. So now what? I got a command prompt, and, well, yeah. If you remember Server 2008 is supposed to be secure by default, so the firewall should be on, and the network card should be disabled to allow you to configure your server before exposing it on a network. As I mentioned before about logging in, there is still some GUI. The task manager is available by pressing Ctrl+Alt+Del, and when you install applications (i.e. VMWare tools) you do get dialog box prompts. In case you close your command window, you can do Ctrl+Alt+Del and start a new command window by going to File\Run and typing cmd. Some web sites you might find useful are: VMWare Tools I needed to install the VMWare tools on the version of ESX server I was running before the network card would show up (netsh interface ipv4 show interfaces). - Manually mount the cd-rom image for the VMWare tools
- Browse to D:\ and run setup.exe
- Follow on screen prompts
Setting the IP Address (From Michael Kleef) - At a command prompt, type: Ipconfig /all
- Record the relevant information or redirect it to a text file (ipconfig /all >ipconfig.txt).
- At a command prompt, type:
Netsh interface ipv4 show interfaces - Verify that there is an interface list.
- At a command prompt, type:
Netsh interface ipv4 set address name="<name of interface from interface list>" static address=<preferred IP address> <mask> <gateway address> 1 - Verify by typing Ipconfig /all at a command prompt and checking that there is the IP Address you configured
Setting the DNS (From Michael Kleef) - At a command prompt, type:
Netsh interface ipv4 add dnsserver name=<name of interface from ipconfig /all> address=<IP address of the primary DNS server> index=1 - At a command prompt, type:
Netsh interface ipv4 add dnsserver name=<name of interface from ipconfig /all> address=<IP address of the secondary DNS server> index=2 - Repeat as appropriate to add additional servers.
- Verify by typing Ipconfig /all and checking that all the addresses are correct.
Rename the Server (Step by Step server core configuration) - Use hostname to determine the current computer name
- At a command prompt type:
netdom renamecomputer <ComputerName> /NewName:<NewComputerName> - Restart the computer - shutdown /r /t 0
Join a Domain (From Michael Kleef) - At a command prompt type:
Netdom join <ComputerName> /domain:<domain> /userd:<domain>\username> /passwordd:* - Note: The value ComputerName should match the current name of the server core instance you are working with. Rename the computer before attempting to join the domain.
Enable Remote Desktop - At a command prompt on the server core install type
cscript C:\Windows\System32\ Scregedit.wsf /ar 0 Product Activation - View current activation status: slmgr.vbs -dli
- Add a product key: slmgr -ipk <ProductKey>
- Activate: slmgr -ato
- Note, if you are installing from MSDN like I am, you must enter your MSDN product key using slmgr. Also, some of the commands take awhile to run, and you should see a window popup for commands like -dli.
Active Directory Install - You must use a answer file with dcpromo: dcpromo /unattend:<fileName>
- If you have another W2K8 member server (not server core), you can run the dcpromo gui and at the last step there is an option to save the options as an answer file. I didn't have this luxery, but I found a sample file from this article. Use notepad on server core to create this file.
[DCInstall] ; Replica DC promotion ReplicaOrNewDomain=Replica ReplicaDomainDNSName=techmentor.com SiteName=Default-First-Site-Name InstallDNS=No ConfirmGc=Yes DNSDelegation=No UserDomain=techmentor.com UserName=* Password=* DatabasePath=C:\Windows\NTDS LogPath=C:\Windows\NTDS SYSVOLPath=C:\Windows\SYSVOL ; Set SafeModeAdminPassword to the correct value prior to using the unattend file SafeModeAdminPassword= ; Run-time flags (optional) ; CriticalReplicationOnly=Yes ; RebootOnCompletion=Yes TransferIMRoleIfNecessary=No Commands: - Shutdown - shutdown /s /t 0
- Restart - shutdown /r /t 0
- LogOff - shutdown /l
- netsh - Networking command. This needs it's own post.
- notepad
- regedit
One of the most interesting pieces of information I took away from BizTalk solution days was a comment made by Xterprise during their presentation where they said that the next version of BizTalk RFID would have features specifically for mobile devices. Based on Anush's reaction, I thought this was really super secret information. Turns out that the fact there is a BizTalk RFID Mobile isn't all the super secret, although the feature set has not been released yet to the best of my knowledge. BizTalk RFID Mobile Sightings: An interesting note. The BizTalk RFID for mobile devices is part of the Windows Embedded track, but it only listed under TechEd for IT Professionals.
Sometimes I have to take a step back and think about how far technology has come in the last 5, 10, 15 years. Today I was working on balancing my checkbook using information downloaded from my bank. Sometimes all I get from my bank is an address, which isn't all that helpful. In the past I have used various online mapping resources (I don't remember when these first became available, but I didn't start using the WWW until '96) such as map quest. I decided for what ever reason to use http://live.local.com to look up this address. By default it shows up in standard map mode, so I clicked on the birds eye view, and it's pretty apparent that it's a McDonalds. Bird's eye has been around for a couple of years I think, but I wasn't aware how much coverage has expanded, as Oregon, WI isn't exactly a booming metropolis. I took the time to look up some other addresses, like Terso Solutions (map) which is where I currently work. The bright yellow car in the parking lot is mine ;) I think it's interesting to look at the picture and try to figure out additional details, like from the shadow of the building I can tell that this picture was taken in the early afternoon. Looking at the condition of the construction of our parent companies building to the E/NE, I can estimate that this picture was taken last summer. Where will we be in another 10 years?
CLSA 3.5 is getting closer to release, with a beta announced this past weekend. CSLA 3.5 will be for .Net 3.5 and Visual Studio 2008 only. There is a 3.04 maintenance release which still targets .Net 2.0 that is coming out soon. Announced earlier today, is a new way to write properties in CSLA, which Rocky refers to as property code reduction. Having worked with CSLA since version 1.0, I see this mainly as a welcome relief. My hesitation is in the fact that Rocky identifies a performance hit when using the fully reduced property declaration code. Adding an additional line which declares the backing variable (member variable, field, etc) alleviates this somewhat. Another way in which code is reduced is in the addition of child property management by CSLA. In the past you needed to override IsValid and IsDirty, and now CSLA handles this for you. I love less code, truly I do, but I have attempted to implement stuff in the past with the good intention of less code, only to create something that didn't work out so well. Usually this involved an over use of reflection, where code generation would have worked just as well. I'm certainly not trying to compare my code writing skill to Rocky's, but I wonder if this is a case of programmers getting lazy? Well, I use code generation, so I guess that could be considered lazy as well. I guess the best thing to take away from this is, make sure you evaluate and inform your users (which Rocky has) of changes that save you, the programmer time. In the end the customer doesn't care if it took you 5 lines or 10 lines to implement a property, they just want their application to work.
I am safely back in Madison, having returned from BizTalk RFID Solution Days 2008, held in Bellevue/Redmond Washington. You can read my four previous posts for some day by day coverage: Day 0, 1, 2, 3, 4. Overall I enjoyed the conference and training. It was apparent that the conference was defiantly for management and the business types, and while the training was more technical, it still felt slightly biased towards non-technical people (more in the training later). The logistics were pretty solid with the location working out nicely. Had I know about the free Microsoft shuttle to the Microsoft Campus from the Westin hotel the first day, it would been even better. I can appreciate the abundance of electrical hookups at the tables in the main conference hall, but the lack of free wi-fi was like a punch in the stomach. As I mentioned in a previous post, actual guests of the Westin might have gotten free Wi-Fi, but I don't know why this wasn't extended to all conference attendees. At a minimum, they could have brought in a couple of hubs and added some wire drops to a portion of the main conference hall for those of us left out. In the end it was a minor inconvenience, although my EDVO reception inside was a little lacking at times on my smart phone. I can't say enough about the Ogio backpack we all got. It's easily a $50 backpack, well built and survived the flight home as checked baggage (had too much stuff to bring back to fit in just the one bag I brought out with me). While it won't fit my 17" laptop, I have found another use for it. My wife's birthday was on Friday, and has been wanting a nice backpack for her new job, so guess what she got for her birthday? What can I say, I love my wife, and the fact that she is perfectly happy getting my conference backpack as her "gift" :) I found great value in the key note presentation by John Fontanella, as well as good value in some of the other presentations. Specially, Cathexis, Freedom Shopping and Impinj. There was one thing lacking, and that was what we can expect from the next version of BizTalk RFID. A member of the Xterprise team did let a little piece of information slip which definetly caught my attention, and that was that the next version is going to have features for mobile devices (ka-ching). Also, a display showing off BizTalk RFID was strangely absent. Just because people attended the conference doesn't mean they are going to make use of the product, and I think alot of people were there to evaluate BizTalk RFID itself. Why not have a mock warehouse setup with some RFID readers and label printers running off BizTalk RFID? Moving onto the training, I would like to say that I did learn a great deal of information. The concept of developing a "solution" starting with the first lab exercise and continuing to expand upon it for the duration of the class was an excellent idea and should be used more often. Instead of wasting time watching progress bars advance, having an environment already setup saved allot of time and allowed us to concentrate on actual substance starting with the first lab. That first lab which showed were stuff was installed, including log files, saved some time in later labs when I had to trouble shoot. I would like to note that it always seems like BAM gets shafted in BizTalk (and related classes), so I would almost like to see that brought forward for a change. There were some disclaimers stating that the code implemented was not up to best practice standards. My question is, why isn't it? That is, why not show what best practice code looks like? Maybe for the parts that we had to type our selves you could cut some corners, but there were large portions of code that was done already for us that could have been implemented better and had complete unit tests. It's a perfect opportunity to show how to write decent code. Instead, the business type people and managers got to see how "easy" it was to get stuff working. Mick did make a couple of statements to try to avoid this incorrect conclusion, but I feel sorry for some poor developers out there who will get a line like "I got it to work and I'm not even a developer". While the physical RFID reader we got for use in the lab was nice, it did create an issue with the solution we were developing. We really needed two RFID readers in order for the solution (parking garage with an entry and exit ramp) to make more sense. The retail price listed for the DLP-RFID1 is $119.95, but as you can see from this site, there are several lower cost options available, which if bought in bulk, might allow for 2 readers per student. Either that, or design a solution that only requires one reader (either change the solution, or add additional processing logic to make the solution work better with a single reader). The Microsoft Conference center was top notch, but I might have been biased by the enormous cooler full of free beverages (soda, milk, juice). While I already mentioned it once, it deserves a second mention, and that is the free shuttle that runs Monday thru Friday from 7am to 8:30 PM between Lincoln Square (Westin Hotel in Bellevue) and the Microsoft Campus.
ScottGu posted over the weekend about Silverlight 2, and even though I will be away from the web scene for awhile while working on my current project, I am still excited. There are links to 8 Silverlight 2 tutorials. Key features include: - WPF UI Framework: This is a compatible subset of the WinForms WPF framework. You should be able to re-use controls written in Silverlight 2.0 in your WPF projects. Some WPF controls may not be compatible, and hopefully control creators will try to target both frameworks.
- Rich Controls: TextBox, CheckBox, RadioButton, StackPanel, Grid, Panel, Slider, ScrollViewer, Calendar, DatePicker, DataGrid, ListBox were listed in Scott's post.
- Rich Networking Support: Out of the box support for REST, WS*/SOAP, PX, RSS and HTTP. You can access resources on the web, and there is also built in support for sockets.
- Rich Base Class Library: A compatible subset of the base class library including collections, IO, generics, threading, globalization, XML as well as LINQ and LINQ to XML.
Now the question is, what ever happened with Silverlight on the Compact Framework? If you remember from Mix 07, during the MLB demo, the presenter showed off a "Silverlight" application running on a Smart Phone (see this blog post for some details). Is it any coincidence that this Silverlight 2 announcement happens only weeks before Mix 08 and painfully leaves out any compact framework details? Scott uses the phrase compatible subset in two places when describing the features of Silverlight 2.0. Compatible Subset is an interesting choice of words, as you could describe the Compact Framework in that way as well. Should I really be getting this excited in thinking that Silverlight 2 will be released for the Compact Framework when we having even seen a 1.x build that runs on it? Yes. Maybe I'll be disappointed, but I will be keeping a very, very close eye on the Mix 08 conference. Larry has a great post up entitled 5 things to do if you are not going to MIX. If you are stuck in the middle of a frozen wasteland like Larry and I (well maybe not wasteland, but compared to Vegas, the upper Midwest leaves something to be desired right now), or can't attend MIX for any reason, I suggest you read up on how to make the most of MIX as a "virtual" attendee. So set your outlook calendar to out of office for Mach 5-7th.
Today was the 2nd and last day of the training/conference on BizTalk RFID (See here for Day 0, 1, 2, 3). Module 7 - Business Rules Now we're starting to get somewhere interesting, business rules. However, before I could start the module, I needed to redo some previous steps as my VM was reset to a clean state over night. Thankfully, as like other classes I've been to, solution files are provided for each module, so I started more or less from module 6. One step of my rebuild process I wanted to point out was importing a process. In Module 5 and 6 we were working with a process called Parking Event, so I went to import this process in the BizTalk RFID manager. The import process asks for a XML file which specifies the configuration for the process. Now this was imported successfully, but when I went to validate I got a FileNotFound exception, and as I expected, the import process does not import/move the necessary binary files. Under the BizTalk RFID folder, is a Processes folder which has a folder for each process configured. The import process created a ParkingEntry folder (C:\Program Files\Microsoft BizTalk RFID\Processes\Parking Entry) and other required files, but the bin folder was empty. All I had to do was copy my binary files (.dll's) from the solutions folder to the bin folder, and the validation succeeded. I am very grateful for module 2 (see day 3) in which we walked thru the folder structure of BizTalk RFID, as it made fixing this error very easy. Now I will return you to our regularly scheduled Module 7. Due to some missing instructions in the Student Manual, we were instructed to use the Business Rules deployment wizard to import a policy file which defined the rules themselves. The rules are pretty simple for this exercise and this is more about BizTalk RFID as a whole then how to manage BizTalk rules, worthy of it's own multi-day class. We also imported the Microsoft.Rfid.OobComponets assembly which contains several static classes with useful utility functions. For this exercise, we make use of the RfidRuleEngineContext class. I would recommend you review the MSDN documentation to familiarize yourself with the methods and properties exposed. My SQL server somehow got completely messed up, and I needed to take a break and fix it before proceeding. I have posted a separate post on what happened and how I fixed it. During the lecture portion of this module, Mick showed a simple example of invoking the BizTalk rules engine directly from a .Net Application. You could easily expand upon this idea to expose the BizTalk rules engine as a WCF service available to your entire enterprise (service bus). Given the fact that the rules engine comes with the branch edition of BizTalk which retails for $1800, this could very easily speed the adoption of the BizTalk rules engine. This raises an interesting decision, BizTalk rules or WF Rules. Previously I have been looking primarily at the WF rules engine. I feel that it was a little easier to use, and since it's freely including with .Net 3.0, it seems to have more community support. Module 8 - WCF Services Module 8 involves sending tag data from BizTalk RFID to a Windows Forms application via a WCF web service. To start off, we create a new custom event handler which invokes the WCF service. At this point I really started to understand the power behind the process and event handler model that BizTalk RFID is built on. The WCF event handler uses a standard WCF service proxy to invoke the service, and is setup to use the TagReadEvent as the sole parameter to the method call. This is an important design decision to point out. Instead of creating a new data contract, you use the TagReadEvent which "everyone" should know how to use. A question I have is, what other objects are setup for use as DataContracts, and are there any predefined ServiceContracts defined for exposing services? The TagReadEvent object is passed to the Windows Forms Application, and a new key is added to VendorSpecificData and is returned to the caller. The caller, if you remember, is our custom event handler, which returns the modified TagReadEvent which in turn, makes that object available in downstream event handlers. Again, I have come to realize some of the potential available in BizTalk RFID. However, after spending the past 2 hours working on this module, I have come to the conclusion that BizTalk RFID is as finicky as BizTalk proper, and requires some serious debugging skills. The problem, 'IN' versus 'IN '. Somewhere I was getting extra spaces (probably from the database and the way we are reading) which was causing havoc with my rules, or rather in how I expected the rules to evaluate. I went back to one of the previous labs and modified the assembly which handled looking up data from our simulated LOB database to trim strings. One other note, it looks like if you replace files in bin, or modify the web.config file, the process will automatically restart, and log the reason and a stack trace to shutdowns.log. The good news is that there is some decent troubleshooting facilities available using the built in logging mechanism. This was how I was at least able to see where my problem was. Log files for processes are stored in the Process Folder, and are named [ProcessName].log. Module 9 - BAM Someday I will sit down and figure out what BAM is all about, but it wasn't today. Class was pretty much cut short due to people flying out today instead of tomorrow. Miscellaneous Notes - Enriching Data: This is a term used to define a process by which you take the raw tag id and add additional data from your LOB database for example. This information was usually added to the VendorSpecificData property bag which is a property of TagReadEvent and was covered in Module 6.
- Device Simulator: c:\Program Files\Microsoft BizTalk RFID\Samples\Device Service Provider\Contoso\ContosoEndToEnd\ContosoDeviceSimulator
- There is other stuff in the Samples folder so check it out.
So if you have been following along, I am currently at the BizTalk RFID Solution Days Conference and Training. Yesturday I noticed that some of my databases on my training VM were marked as suspect and the BizTalk services such as SSOP and the actual BizTalk service would not start. Upon further investigation in the event log, I was getting alot of errors indicating a corrupt msdb database. Now the easy way would have been to ask for a new VM hard drive image, but this was too good of a learning opportunity to pass up. Better to figure out how to fix this in a low stress environment then on my production environment at 3am. My first step was to fix the msdb database. I found this article on how to rebuild your msdb database from a script. The script is called instmsdb.sql, and you can run it if you have or do not have a msdb database defined. In my case my database was defined so it just rebuilt it. That fixed all of the corrupt index errors for msdb in the event log and was left with the SSO service failing to start. Here is another case of where you need to read more then the first event log message. I thought the issue was with the SSO DB, but in fact, it was with the BizTalkDb database (being suspect). Once I isolated the actual problem, I could move on to repairing the database. I found several posts on different work around's for fixing a suspect database, but this one, was the one that finally worked. In essence, you run the following sql script: 1: EXEC sp_resetstatus 'yourDBname'; 2: ALTER DATABASE yourDBname SET EMERGENCY 3: DBCC checkdb('yourDBname') 4: ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE 5: DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS) 6: ALTER DATABASE yourDBname SET MULTI_USER
There were some errors displayed when fixing both the BizTalk and BamAlerts database, but in the end, everything is working now.
Today was the first day of the training portion of BizTalk RFID solution days (see day 0, 1 and 2). The instructors are Mick Badran of Breeze Training, and Ram Venkatesh from S3 Edge (Ram was the software architect for BizTalk RFID and recently left Microsoft). The class is held on the Microsoft Campus in the Conference Center, Building #33. This is my first time at Microsoft and I'm impressed with the campus so far. We started out with the obligatory introductions and moved right into the student manual to go over the agenda for the class. We will be designing a solution for a "parking garage" with enough features to get a good understanding of BizTalk RFID. Similar to other classes I have taken, we will be using virtual machines for the labs, and there are already completed solution files for each lab. We have been provided with a HF (13.56 Mhz) RFID reader from DLP Design to use in the labs and to take home with us. Module 1 - Introduction to RFID and BizTalk RFID This was an introduction to RFID, RFID technologies and BizTalk RFID. The first couple of slides were designed to make sure everyone had at least a basic understanding of RFID. I would wager that this was review for most people. The remaining slides went into an overview of BizTalk RFID. RFID Tags: - Low (< 135 Khz) - Short range, more reliable for liquids and metals
- High (13.56 MHz) - Short range, less expensive, reliable, slow bps
- UHF (868 to 915MHz) - Good balance between range and performance and pretty cheap.
- Microwave (2.45 GHz, 5.8 GHz) - Fast but expensive. Example is highway tolls.
Microsoft RFID Goals: - Encourage widespread RFID adoption
- Standards
- Best Practices Architecture
- Build an RFID infrastructure
- Event Processing
- Device Abstraction and Management
Key Benefits of BizTalk RFID: - Abstraction of device handling
- Rich RFID event processing model
- Reduce data "noise" and increase data relevancy - Use the BRE to create filters, alerts and transformations
- Robust framework to support agile processes
Additional Notes: - The DSPI has both an application and management contract interface.
- Ram brought up the LLRP in response to a question about standards based protocols between hosts and RFID readers. I talked briefly about this in my Day 0 post. LLRP is a EPC standard, and I would expect to see more and more readers beginning to implement this. As such, it should be pretty easy to find a DSPI that will work with multiple readers. I know Impinj is using LLRP, or is planning to.
Module 2 - Installing BizTalk RFID Services The student manual contains some basic slides on minimum requirements and installation stuff. Nothing really exciting there. The lab was very interesting and provided some great information. Instead of having you waste an hour installing BizTalk RFID, the VM comes pre-loaded with it already. The lab focuses on showing you where things are installed, command line tools, configuration, registry settings, etc. - Default install directory is %Program Files%\Microsoft BizTalk RFID\bin, I will refer to this as %App%.
- It looks like everything you can do in the RFID Manager MMC, you can do from the command line RFIDClientConsole in %App%\Bin
- We were shown how to export the server configuration to XML and and import from xml.
- Server listens on port 7891
- Notable stuff in %App%\Bin
- clusrfid.vbs - Script that returns health of BizTalk RFID service
- RfidServices.exe - Main application which run as a service
- RfidTray.exe - Monitoring utility which runs in the SysTray
- Web.Config - Mainly defines WCF configuration
- Registry
Module 3 - Examining Physical Devices This module was focused around an introduction to the DLP Design's RFID1 HF reader. We setup the USB redirector software which will enable us to connect to the USB based reader in our VM for all future labs. We were also supposed to write a .Net Application using the native drivers in order to illustrate how difficult it is to program devices. I decided to skip that example and move onto lab 4. Module 4 - BizTalk RFID Device Providers This was a pretty easy module where we went thru, registered a provider and established a connection to our DLP RFID1 device thru BizTalk RFID. A sample application was written to "register" a customer with a RFID tag for use in our parking garage solution. So far so good, so far so-so. I would have preferred writing the provider versus the .Net application. An extra lab was provided in this module which showcases the "flexibility" of the provider model. The extra lab implements a file system provider, that is, it "reads tags" from the file system. Basically the tags are just files in side a directory tree. I don't remember the exact story told, but apparently a race team wanted to be able to capture sensor data from a race car. Looking at how the example is implemented, it's trying to force the solution in the BizTalk RFID domain (square peg into a round hole). Don't get me wrong, it's a cool implementation, but it just doesn't seem right. Module 5 - Building BizTalk RFID Processes Processes are respond to events raised by devices in an asynchronous manner. In the lab we created a process that dumped event data into a sql database. This is out of the box functionality and was pretty easy to configure and setup. Once that was done, we created a very simple report in reporting services. Module 6 - Custom Event Handlers One thing you would notice if you were completing module 5 yourself, is that while the storing of data to SQL is powerful, as implemented, it wasn't practical. You stored pretty much the same tag read data 100 times by just holding one of the test tags up to the reader for 1-2 seconds. This is were custom event handlers come in. From the student manual, lab 6, custom event handlers can: - Filter duplicate events (terminate event processing)
- Enrich events with custom data
- Cleanse event data before further processing takes place
- Integrate with downstream processes and services
- Insert tag events into a database and/or call a downstream service.
All of the out of the box functionality in BizTalk RFID at the process level is implemented on top of the EventHanlder model. This model is fully exposed as indicated in this module, and is the supported way to add additional functionality. There are some samples in the SDK and a Code Plex project started by Microsoft with additional event handlers (MSMQ, File, etc). In this lab we created a custom event handler component, add the custom component to an existing BizTalk RFID process and finally explore the use of the Import Process feature. Again, the programming was pretty straight forward. Naturally the incorporation of DAL code in my component brought a frown to my face. While I understand this is just a simple lab, since the DAL code was already written for us, adding it as a separate assembly to promote n-tier design would have been welcome. I finished up the lab with my tag read events getting queued into a Message Queue after getting enriched (matching tag Id to customer information in our customer DB). Now I'm sure we'll get to this at some point, but I wanted to go a step further so I implemented a simple CBR scheme in BizTalk to dump the data to a file location. Miscellaneous Notes - BizTalk RFID server uses MSMQ for "routing" events to processes
- What is ALE - Application Level Events, part of the EPIC standard? A way to publish and subscribe events. Doesn't sound like there is ALE support out of the box, you would have to roll your own.
- Using a piece of 3rd party software called USB Redirector to bridge the USB based reader plugged into the physical host to the VM.
- Review functionality of BizTalk branch edition. It's only $1800 retail down from $8500 retail.
- There is a device simulator in the full SDK of BizTalk RFID.
- Computer Specs used in the class:
- Dell Optiplex 745 (Vista Experience rating of 4.5)
- Intel Core 2 - T6600 @ 2.4 Ghz
- 3 GB of RAM
- ATI X1650
|