Friday, February 29, 2008

Grok talk on Business Rule Engine Essentials

I have presented a grok on BRE essentials tonight at our monthly Solutions Group meeting.  The main focus on my presentation was to give a quick glance at what is available to developers when they enter the realm of BizTalk.  Some smart guy once said that knowing what's available out there is half the battle.

Anyways, the main points of my talk was to show how you can interface with the BRE (from BRE to .NET, and from .NET to BRE).  I have found the BizTalk rules engine to be very efficient and fast.  In the last project we have, we had over 450+ policies, and each policy had an average of about 5-7 rules on each of them.  On top of that I had an orchestration that call the vocabularies, determine the policy that needed to be executed, and then execute that policy.  The time for all of this to happen, is between 1-2 seconds from the time the message enter BizTalk to the time it gets send back to the calling routine.

How do you show this much functionality in 20 minutes or less?  Well, I came out with this fictitious company that had the following requirements:

image

The first thing that you do in BizTalk is that you need to define the schemas that will contain the inputs and output of the message that you are dealing with.  So a simple schema:

image

Next, I have implemented those rules in the BRE composer

image

So now that I have the rules implemented, we need to get a way to call them and executed them.  Here is the sample solution code that will call this policy.

I have also included some code that shows how to call the vocabulary.  And some code to show how to implement a .NET assembly that can be called from the BRE.

image 

 

Feedback [good|bad] is always welcome.  Hope this help someone get a small peek into the vast universe of BizTalk.

Friday, February 22, 2008

How does a BizTalk guy pack?

From Brian Prince's questionnaire, here is my response.

A BizTalk guy knows that the whole world could be fit into a set of enterprise patterns (scatter/gather, aggregator, resequencer, etc).   So, we don't pack, we orchestrate the moving of all of the other so called *entities*.

Moving is what BizTalk does best.  A BizTalk guy will correlate the moving to a scatter/gather pattern application.  Each crate will be considered a message, and the content of each crate will be the message content. Since BizTalk is all about messages (your stuff),  each crate will be labeled (just like a promoted property) and it will be marked with a GUID (Angie...;). 

Once the contents are inside the Crate, the labels will be used for routing and destination.  As each crate is handled by different external entities, the content will still be private, yet still managed to be transported to the correct destination.

A BizTalk guy does not care what's inside each crate (Message content), all it cares is that it is delivery correctly to the final destination.  The order of the crates departing the old office will not be the same order as they arrived to the new office.  But it is OK, since a BizTalk guy knows how to handle asynchronous messages and knows about scheduling, service window, failed delivery and re-routing.

A BizTalk guy will set a pipeline component that will take all of the inputs and translate them to a canonical message (Crate). A BizTalk guy will take all of these crates from different sources (admin, sales, recruiting, pmo, app dev, management, etc) and orchestrate a smooth move by processing them by their labeled information and not their content.

Being BizTalk of course, this crate will have a guarantee delivery that the contents are the exact same that when it was submitted.  The BizTalk guy will create an orchestration that implements the scatter/gather pattern.  All boxes are then send out in no particular order, to different locations, but they will be find their target destination correctly.

Since this is going to be an asynchronous transportation, the BizTalk guy will make sure that a single receive port location will handle the gather pattern and a confirmation receipt will then be issue. A confirmation receipt can then be handled and after the identity is confirmed a FAB key can be issued.

Of course, a BizTalk guy will create an orchestration:

image 

and then attach another orchestration to it

image

so while other entities talk about

  1. Some Borat character(Uzbekistan) and/or browsers add-ins ,
  2. how cool is to stay late coding for free ,
  3. about boxes and their colors ,
  4. color boxes labeled v.2.0 that are not yet delivered,
  5. how to pack a box in 5 minutes, versioned it, and then unpack it and repack it on changesets,
  6. how to move your stuff by writing random xml code,

only a BizTalk guy does know how to move and in the process deliver quality  :P

Not only a BizTalk guy will deliver all crates and their contents to its destination, but it can also get real time monitoring (BAM) on the moving process and then once the move is done, we can provide with KPI's on the whole process as whole, bringing meaningful reports for ROI.

yeah, that's right... ;)

Thursday, February 14, 2008

How to restore TMM settings

If you have deleted the TMM settings from your task scheduler as I have mentioned on my previous post, and need to get them back, here is the xml. Create an xml file and copy the following xml to it and import this file into your Task Schedule under the MobilePC hive:

image

---- Cut here 8<----

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Source>MobilePC Display Handling</Source>
<Author>Microsoft Corporation</Author>
<Description>Microsoft Transient Multi-Monitor Manager</Description>
<URI>Microsoft\Windows\MobilePC\TMM</URI>
<SecurityDescriptor>D:(A;;FA;;;BA)(A;;FA;;;SY)(A;;FR;;;AU)</SecurityDescriptor>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<Enabled>true</Enabled>
<Delay>PT00M02S</Delay>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Users">
<GroupId>Authenticated Users</GroupId>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<IdleSettings>
<Duration>PT10M</Duration>
<WaitTimeout>PT1H</WaitTimeout>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<MultipleInstancesPolicy>Parallel</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>true</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Users">
<ComHandler>
<ClassId>{35EF4182-F900-4632-B072-8639E4478A61}</ClassId>
</ComHandler>
</Actions>
</Task>

------ cut here 8<-----

Wednesday, February 13, 2008

WSS 3.0 studio extensions not working on x64 Vista

One more of those little annoyances. I can't play with this new set of tools on my laptop: Windows SharePoint Services 3.0 Tools: Visual Studio 2005 Extensions, Version 1.1, because it does not support 64bit.

image

bummer. Time to fire off my Windows 2003 Virtual machine.. :(

Tuesday, February 12, 2008

Amazon Web Services and Ruby

I have been using Amazon Web Services for quite some time.  I have a large collection of DVD's, and a fairly amount of eBooks.  I have written applications against the aws to get detail information for specific books and stuff.  My user interface skills are much to be desired  ;), but the important thing in here, is that Amazon, make it very easy to connect and query their services.

image 

Today, I attended the Ruby user's group meeting.  The presenter was Mike Culver from Amazon.com, his title is Web Services Evangelist. How cool of a title is that.?  During his presentation, he mentioned how Amazon is empowering developers to come out with creative ideas on how to use these services.

He showcased 2 websites that are kind of unique in the way of their approach using the AWS.  One of them created a full front end to amazon.com, so that they can get referrals:  www.tvmojo.com

The other site that is more impressive is www.zoomii.ca this one is really neat.  The user interface is very visual, and for what I saw seems to be very resource intensive.  Unfortunately, the site is still in Beta, and it is not open for the public, but trust me, it is very interesting.

In all, I did learned quite a few things out of this meeting about Ruby. One of these days I will write my first hello world on Ruby, or maybe I might take the challenge like Steve Harman suggested and write my own blog engine using Ruby... :P

Thursday, February 07, 2008

Data Dude for Studio 2008?

Does DataDude works for Visual Studio 2008?  The answer can be found on this blog post by Gertd:

visual-studio-team-system-2008-database-edition.aspx

Awesome, so it is time to create a new DB project.

SQL Server 2005 project

I get this dialog box:

Connection to Local Express Instance

going back. I have followed the instructions and set my options to use my SQL server instance:

Tools - Options - Database Tools

and my data connections is set to my local instance as well

Tools - Options - Database Tools

since I don't have SQLExpress running, I decided to follow the instructions on it. I click CANCEL on the previous dialog box, and I get this error:

Remote Server Connection

---------------------------
Microsoft Visual Studio
---------------------------
An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

I remember this error from before.  I has something to do with having the SQL Server Browser running for it to find it.

image

I go and turn this service on. I usually have ALL services stopped and I only run the services on demand when I need to use them. Yes, I do have lots of batch files that the only thing they do is to start/stop services... :D

humm. I still getting the error about not being able to connect.

I wonder if this has anything to do with the fact that I am running the 64-bit version of SQL server? Just for kicks, I delete the name of my instance on the tools-Options

Tools - Options - Database tools

BINGO.  It works like a charm.  I went back and turn that SQL Server Browser service off.  It still works... :D [one more service that I don't need to run.!]

My environment is Vista  Enterprise 64-bit, SQL Server Developer Edition 64-bit, BizTalk 2006-R2, Visual Studio Team Suite 2008.  I don't know if this has anything to do with it, but by leaving the instance name blank, Studio 2008 was able to connect to my local SQL Server instance.

 

oh well.

Tuesday, February 05, 2008

70-504: Windows Workflow Foundation 3.5

Part of working in the Solutions Team for Quick Solutions, Inc., is that we get special offers for all kind of Microsoft stuff. The latest one was an invitation to participate in the Beta Test for the exam 70-504- MS .Net Framework 3.5 Windows Workflow Foundation.

In order to study for this beta test I have to install vs2008.

Microsoft Visual Studio Team System 2008 Setup

Since I am not doing any C++ programming, I decided not to install any of the C++ components. By unselecting it, I saved almost 2GB in space...!! However, when I open Studio 2008 for the first time, I've got this error:

Package Load Failure

Package Load Failure

Package 'Visual C++ Resource Editor Package' has failed to load properly ( GUID = {74AAD8B2-3294-49CB-BB5D-E9BAB132BFD5} ). Please contact package vendor for assistance. Application restart is recommended, due to possible environment corruption. Would you like to disable loading this package in the future? You may use 'devenv /resetskippkgs' to re-enable package loading.

Selecting Yes, got rid of this dialog box. Now I went and try to create a sequential workflow application, and this is what I got:

Error Loading workflow .NET 3.5

An error occurred while loading the workflow. Please correct the following error and try reloading the document to view the workflow.

The designer could not be shown for this file because none of the the classes within it can be designed.

Using my 2nd brain, aka Google, I came across a lot of other post relating to this error, but none of them applied to my configuration. My configuration is Vista x64, with BizTalk 2006 R2, and Visual Studio 2005 Team System installed. I have installed the SDK for .NET 3.0 some time ago.

I can create workflow projects in 2005. However, using the .NET 3.5 does not seems to work.

image

When I compare both projects VS2005 and VS2008, the only differences I've found is that the 2008 reference these assemblies: System.WorkflowServices .Net 3.5, and the System.ServiceModel. The new assembly points to this location:

c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.WorkflowServices.dll

Then I started to dig out more information on the Event Logs. Then I found the culprit:

The Windows update "Update for Windows (KB929300)" was successfully installed. (Command line: ""C:\Windows\system32\WUSA.exe" "e:\setup\..\wcu\dotnetframework\dotnetmsp\x64\NetFX3.0-KB929300-v6000-x64.msu" /quiet /norestart")

It seems that after the setup has finished installing, it needed to reboot my machine. However, the /quiet and the /norestart flags did not report anything back to me. So I did not know I had to reboot for the workflow application 3.5 to work.

Now I can get back to reading Pro WF Windows Workflow in .NET 3.0, and try to run some samples out of the SDK before my test.

Sunday, January 20, 2008

Agile methodologies and Spelling bee?

Yes, I am the proud father of a little walking dictionary. My oldest son qualified to be part of the team that might be representing his school to compete against other schools for the Scripps National Spelling Bee Competition. Now, how do you study those 870+ words needed for the competition with a 11-year-old whose parent's first language is not English?...

Geek time.! I have an old iPaq 5555 that is pretty much sitting collecting dust. So I decided to write a program that will allow him to practice those words. A pocketPC seems to be the perfect platform for it, since it has built-in support for hand-writing and sound. So it is like having an interactive flash card.

My idea is to have the word being pronounced by a native speaker, and then have him write the word. This is my first take on this idea:

image

I also put a show button for studying/reviewing. So that as he moves around the list of words, not only he can click on the PLAY button and hear it, but he will be able to see: language, definition, sample use.

One of the trickiest part of the program was getting it to play those wave files.! Yeah. My Google skills are either fading out, or there was not that many people writing media applications for the pocketPC. :( I have to admit it took me longer that I expected to find the right information.

Here is the link to MSDN to the article that I use http://msdn2.microsoft.com/en-us/library/ms229685.aspx

Basically, it uses the CoreDll.dll library to accomplish this

[DllImport("CoreDll.DLL", EntryPoint="PlaySound", SetLastError=true)]
private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags);

In true agile fashion, I have written the alpha 1.0 and tested it with my *end user*. Feedback is always good when you are writing an application with so little requirements. This version 1.0 is very crude, but it accomplishes the primary objective. Now while he is *testing* the first iteration of the application, I am working on features for the 2nd iteration.


Then I have shown the program to the PM of the Wing's house(aka. Wifey), and now my feature list has grown by 2x, and of course my deadline is still the same... :'(


I have put this program on Codeplex/FlashBee. It is more of a rough 6hr-POC. The cool thing is that he and me sat down and wrote the application together (not all 6hrs). Anybody said pair programming? ;)

Monday, January 14, 2008

KidzMash @ Codemash

CIMG5353 I had an opportunity to volunteer some time for Kidzmash at Codemash. This is a great way to try to influence young minds to stay on a technical career.
The slides and sample code that I was "planning" on using can be downloaded here.


Jim Holmes, told me that he did not know how many kids will come or what the ages were. Well, I have volunteered before at my son's school, and I had 30 kids in the computer lab [previous post]. Of course,the kids at school were 10-13yr-olds that knew how to read and type on a computer..... ;)


Hello KidzMash..!! I had like 10+ kids with their parents showing up. Oldest one? 9-year-old.!! Youngest one? 5-month baby... yikes..!! I asked who knew how to read.? like 4-5 hands went up.

After about 5 minutes of Kids Programming Language (KPL), where you could hear crickets on the background, I decided to dump KPL, and I switch to Scratch.

Scratch is programming tool developed by MIT, to teach kids about programming concepts. I have download Scratch about 2 weeks ago, and I have put it to the test with my kids and they were able to use it within 5 minutes. Since this program is aimed at a younger age, I decided to use this program.

image
Kids were more receptive to this program. Thanks goodness.!! Here is the link for Scratch:

http://scratch.mit.edu/



Doodle Game included:

image The intuitive editor for some of the graphics is just plain simple, they were able to draw, and play with this one character all of the time.!!

I have asked for volunteers helpers, and they were all raising their hands to take a turn at using the laptop. :D


Once again, this was just another way to influence young minds to the wonderful world of programming.

Thursday, January 10, 2008

Codemash - Day One.!!



Brian decided to dress as the head gear dude from the Codemash logo.






So this great company I work for: Quick Solutions is giving away a Rock Band set for the Xbox 360 after Codemash. During the conference they are running a special contest to see who can score the highest point in Rock Band. Even Scott Hanselman got into the competition (singing and/or playing the drums).





Today was a blast. Neil Ford and his Poliglot programming keynote was very thought provoking. However, it was Scott's presentation about himself that just got everyone laughing very hard.

Favorite keynote moments:
1 Test = 1000 opinions
a VI version of clippy...!!!
looking forward tomorrow sessions.

Tuesday, January 08, 2008

Bill Gates Last day at Microsoft video.

This is hilarious... :D

http://on10.net/blogs/larry/Bills-Last-Day-CES-2008-Keynote-Video/Default.aspx

favorite part? Seen him playing Guitar Hero.!!!


One of the most influential person in the IT industry shows everyone that he still has a great sense of humor.!

Monday, January 07, 2008

Codemash...




So there is this new unique conference that will take place THIS week. It is a nice, well thought out conference unlike anything I have been before. It has the feel of a CodeCamp but with a wider selection of topics.

The main theme is not to hear Microsoft talk about how great are its products (which they are..!!!) or to hear about how Java is so awesome that it is everywhere. No. The conference is about learning other technologies. Seeing what else is out there. Learn something outside your comfort zone. That's the key to this conference.

Last year's Codemash was awesome, it was nice to see how people were embracing the new paradigm of learning something new.

This year we were promised a lot more quality sessions by great speakers, not to mention the keynotes... (Scott Hanselman, Neal Ford, Brian Goetz).

And the Kalahari resort is an awesome place to see a real-live herd of white-pasty-oversize-developers with their offsprings... ;)



Dan and Matt build this cool Session scheduler..!! Here is my agenda for Codemash: Agenda for Arnulfo Wing.

I am looking forward seeing some Eyebrows being shaved this year (shaved heads is not cool anymore... ;)

Thursday, December 13, 2007

COM Interop with .NET 2.0

For the month of December I am working on this small project (3-weeks) involving making some information available to end users through a mobile device. Yeah, that's cool. However, the code that grabs the information from the backend was all written in good old VB6 and classic ASP.

I am running into this one issue that is driving me nuts. I am trying to assign a class object to a property in the COM object. While it works for some properties/methods, it does not seem to be working for some other.


VB6 code that works:
[
    1 Private mAuthor As clsSomething
    2 Private mAuthorID As Long
    3 
    4 Public Property Get Author_ClassParam() As clsSomething
    5     On Error GoTo handleError
    6 
    7     If mAuthor Is Nothing Then
    8         If mObjectID = 0 Then
    9             Err.Raise 111, , "xxx item not initialized"
   10         End If
   11 
   12         Set mAuthor = New clsSomething
   13         [--- deleted stuff---]
   14 
   15     End If
   16     Set Author = mAuthor
   17     Exit Property
   18 
   19 handleError:
   20     mError.Raise Err.number, "[xxxxHistoryItem]" & Err.Description, False
   21     Set Author = Nothing
   22 End Property
   23 
   24 Public Property Set Author_ClassParam(ByVal value As clsSomething)
   25     Set mAuthor = value
   26 End Property
]

VB6 code that does not works:
[
    1 Private mAuthor As clsSomething
    2 Private mAuthorID As Long
    3 
    4 Public Property Get Author_VariantParam() As clsSomething
    5     On Error GoTo handleError
    6 
    7     If mAuthor Is Nothing Then
    8         If mObjectID = 0 Then
    9             Err.Raise 111, , "xxx item not initialized"
   10         End If
   11 
   12         Set mAuthor = New clsSomething
   13         [--- deleted stuff---]
   14 
   15     End If
   16     Set Author = mAuthor
   17     Exit Property
   18 
   19 handleError:
   20     mError.Raise Err.number, "[xxxxHistoryItem]" & Err.Description, False
   21     Set Author = Nothing
   22 End Property
   23 
   24 Public Property Set Author_VariantParam(ByVal value As Variant)
   25     Set mAuthor = value
   26 End Property
]


this is the .NET code that calls that VB6 COM object:
[
    1 public void ClassAssignment_COM()
    2 {
    3     clsSomething oAuthor = new clsSomething();
    4     oAuthor.AuthorID = 15;
    5 
    6     clsTransaction oTrnx = new clsTransaction();
    7     oTrnx.Author_ClassParam = oAuthor;
    8     Trace.WriteLine(String.Format("bts- ClassParam.AuthorID: [{0}]", oTrnx.Author_ClassParam.AuthorID));
    9 }
   10 
   11 public void VariantAssignment_COM()
   12 {
   13     clsSomething oAuthor = new clsSomething();
   14     oAuthor.AuthorID = 15;
   15 
   16     clsTransaction oTrnx = new clsTransaction();
   17     oTrnx.Author_VariantParam = oAuthor;
   18     Trace.WriteLine(String.Format("bts- VariantParam.AuthorID: [{0}]", oTrnx.Author_VariantParam.AuthorID));
   19 }
]

I get this error message at compile time:
Error 3 Property, indexer, or event 'Author_VariantParam' is not supported by the language; try directly calling accessor methods 'xxxx._clsTransaction.get_Author_VariantParam' or 'xxxx._clsTransaction.set_Author_VariantParam(object)'
C:\vsProjects\Tests\mock.cs 168 27 xxxx.yyyApplication.Web.Test


I have not found a solution to this problem. I know that variants are not supported in .NET, but com'on, there's got to be someone out there that knows a workaround this issue...

Wednesday, November 21, 2007

How to edit rich text in SharePoint 2007 forms

Since I have been using Window Live Writer, I have not had the need to write all of that html code (what is HTML?). I edit using Live Writer, and then I switch to HTML view, copy and paste the formatted text into the SharePoint text box. I thought it was weird that Microsoft will only give a blank text box and you need to go and figure out all of the markup tags.



Then I saw on this other developer screen that his text boxes look a lot different from mine..!!



Clicking on the
Click for help about adding HTML formatting.
just take you to the normal help, nothing useful there.

Well, I found out that it was just another x64 vs x32 bit kind of deal. Since moving to the 64bit bandwagon, I almost exclusively use Internet Explorer (64 bit). It is a great way to get to the Microsoft sites without being bogged down by all of the flash advertisement (oh yeah, those flash do not work on 64bit... ;)

However, there is a whole new world out there if you use the 32bit version of Internet Explorer.!!

yikes.

Friday, November 16, 2007

How to install assembly to GAC on build event

I keep forgetting this line, and end up having to dig it out from other projects. I am putting it in here so that I can access it faster.

Basically, every time you build/rebuild your .NET assembly, it needs to be in the GAC for BizTalk to be able to use it. So, I put this code on the Build Events to move the assembly to the GAC.


"C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i $(TargetFileName)
there. Now I won't forget.

Thursday, November 15, 2007

Enum.Parse

I had this issue, in which in one of my C# class, I had a enum type. Then I wanted to send a string to a method, which will populate this object. The problem was that the enum type was an integer, and I was passing a string down to the object.

    1 public enum ProductTypeEnum : int 
    2 {
    3     blue = 10,
    4     red = 20,
    5     green = 30
    6 } 

Here is the class that I was using to populate with values:

    1 public void GetDiscountTest_BLUE_Preferred()
    2 {
    3     OrderDetail inOrder = new OrderDetail();
    4     inOrder.ProductType = (Int32) ProductTypeEnum.blue;
    5     inOrder.Quantity = 100;

Now, I wanted to replace the code with something like this:

    1 public void GetDiscountTest_BLUE_Preferred(string sColorName)
    2 {
    3     OrderDetail inOrder = new OrderDetail();
    4     inOrder.ProductType = ConvertToEnum(sColorName);
    5     inOrder.Quantity = 100;


Here is the code to accomplish that:
    1 public void WorkingDiscount(string sColorName)
    2 {
    3     OrderDetail inOrder = new OrderDetail();
    4     inOrder.ProductType = (Int32)Enum.Parse(typeof(ProductTypeEnum), sColorName);
    5     inOrder.Quantity = 100;

now I will remember this.

Tuesday, November 13, 2007

Biztalk 2006 R2 Upgrade gotchas?

I just finished upgrading to R2 on my Vista x64. So far everything seems to be running fine, except....

Business Rules Engine:

There is a new location for the assemblies now. On Biztalk 2006, the location for the BRE assemblies was this

c:\Program Files (x86)\Microsoft BizTalk Server 2006\Microsoft.RuleEngine.dll

However, after removing my 2006 version, and freshly installed the R2 version, I have to go and recompile all of my assemblies that had a reference to the Microsoft.RuleEngine. The new location is

C:\Program Files (x86)\Common Files\Microsoft BizTalk\Microsoft.RuleEngine.dll

Other than this, everything seems to be running smoothly (Orchestrations, pipelines, etc...) so far. I will update this post as I find any more gotchas (if any... ;)

Tuesday, November 06, 2007

My Biztalk Tools

For our group [Connected system] we started talking about what each of us was using to develop on BizTalk.

We come out with a list of tools. Here I am going to publish the tools that I have installed and that I used most of the time.

DebugView: of course this is the number one. ;) I like to use it with a filter, so that I only see the trace information that I send. For instance I pre-append the word: bts- to all of my trace.writelines.
System.Diagnostics.Trace.WriteLine(String.Format("bts- args: [{0}]", args));

DTC Tester Tool: this will test the configuration of your Distributed Transaction settings. It will come in handy when you have to setup BizTalk in multiple environments.


Biztalk Best Practice Analyzer tool: this will evaluate the installation of BizTalk. Helpful in those cases that you come into a client that has pre-installed BizTalk on their environment.

It not only analyzes your BizTalk installation, but it also give you the documentation as to why this is important. It also gives you the steps to go about fixing any problems that it find with your configuration.


SmartPaster: this is one of those ideas that one person implements, and now after using it a few times, I can't live without. Nice work.


CopySourceAsHtml: I use this add-in to html-encode my source code before I post it on my blog.



Biztalk Documenter: This tool out of codeplex is a good addition to that *finish* touch on your projects. One thing that I like about it is that it takes a snapshot of your orchestration and create the MSDN style documentation. It is also a great tool to document those BRE's. It creates a treeview like view of all your rules and their predicates. I run this during and at the end of the projects to document my artifacts and Business Rules Policies and Vocabularies.


Notepad 2: Another free tool that is in my list of AWESOME tools to use. No installation required and it provides all of the functionality needed from a simple editor. One of the features that I like the most of this editor is the fact that it can format XML and it has the Always On Top option.!! I love to be able to copy long xpath's from the Biztalk schemas and paste on this editor. Keeping it on top of the other windows, make it very useful.

FoxitReader: I am a big fan of NOT installing tools. Specially when I am at a customer site, and have to use their equipment. I love to put my thumb drive in and be able to use any of the the tools in there without having to install them. FoxIt has a small footprint, and it lighting fast to open any PDF document.

Process Explorer: Yet another jewel from SysInternals. This one is a better task manager. it is very useful to see some of the process that are running on the background, and some of those *hidden* programs on the network.

WebService Studio: I have talked about this tool in the past here. It is still my favorite tool to quickly test an asmx web service.

Database Publishing Wizard: good to get data to and from different sql servers. I used it primarily to get schemas from the customer environment to my vpc sandbox, so that I can reproduce whatever condition/data that they require.


XML Spy: Although it is a commercial tool, I love their grid representation for xml schemas and just plain xml data. I have been a fan of this product since XML Spy version 3.0...!!

vs

Another cool feature of this tool is that it can instantiate Soap request into a web service.



HyperSnap: my screen capture tool of preference. I like the fact that you can capture a region and then you can save that snapshot to any of the major picture formats out there.

Beyond Compare 2: Windiff is child's play when you compare it to Beyond Compare 2. Download the 30-day and try it yourself. It allows you to visually pinpoint differences in 2 files down to the character that is not equal. It also provides editing within the comparison main screen, and it allows you to synch any changes from either of the files into the other one.

ReSharper 3.0: Last but not least my FAVORITE add-in for visual studio 2005.!! I started using this product back on DotNet 1.1, and I have been hooked on it ever since.


Sunday, October 28, 2007

How to create your own industry...

Recently, I was in my native Panama on a personal trip. Being raining season, the best way to get around is to get a 4x4, so I rented a 2008 Land Cruiser. Driving on the rain forest of Chiriqui made me realized that this 4x4 was the right choice.

Everything was dandy and fine, 'till Tuesday. That day I came to find out that there is a whole new industry that has exploded in the past 10yrs: Trading of Car logos.!

Yes. Those precious logos we don't even pay attention in the US, are the striving goods in Panama. This is how the story unfolds. I parked in front of a well lit, populated commercial area. It is 2:30pm and I am talking to a veterinarian inside the clinic. Next thing I know, some guy walks in and tells me that he saw this other guy stealing my car logo. WTF?

As I walked outside, I see 2 guys running about a block away and turning into this open market. So I decided against chasing them into the public market. With a regular screwdriver, they have popped the front logo of my brand new rented car while walking by.




So what's one to do? call the policy of course.!! I waited for about 1.5hrs for the policy to arrive. They checked my US passport and they told me that this is quite common and that there is nothing they can do. If I had caught the guys that have stolen the logo, then they could arrest them and file charges. (hummm... am I missing the point?, I thought that was their job.!!

They wont even give me a police report for the insurance company. I have to go to the local county office and filed a complaint. So here I go to this building that everybody goes to. They *investigate* robberies, assaults, murders, stolen goods, etc. It was awesome to see some of the stuff that they have recovered: (check out the portion of fence against the wall...)




Yes, those are toilet seats that were stolen, and have been recovered.!! [...honey, let's save some money and buy a used toilet seat. ;)

Well, after my grievance was officially filed, I call the insurance company and they told me that this kind of things do happen regularly. However, they do NOT cover partial thefts... WTF? Yeap, if the car have been stolen completely, then I did not have to pay anything. However, now I am responsible to pay $85.00 that the manufacturer charges to replace the logo.!!

Talking to some guy walking by, he suggested that I checked the local Chinese Autopart that sell replicas for about $8-$10. However, the car being rented and all, I decided against it.

The very next day, talking to a customer of the Vet, she mentioned that she knows someone that knows someone that could get me an original logo for cheaper that I could pay the dealer. hummm. She goes and give me her cell phone and tell me to give her a call the next day at 9am.

This is getting very interesting. Of course I call the next day, I talk to her, and yes she said that she was able to get me an original Land Cruiser 2008 logo for $40.00.



After some haggling over the phone, we settle for $25.00. She was to drop off the logo at the vet clinic with the secretary there where I am supposed to leave the money (cash only of course.!) and that will complete the transaction. Funny, this sounds so fishy. I get my logo stolen in front of the vet clinic, and then 3 days later, I am paying $25.00 to a completely stranger for an original logo... ;) But, under the circumstances, I rather pay that $25.00 that trying to explain and haggle with the rental agency, which I know will make me pay for the replacement.

Then I start noticing on the other cars, that their logos have either been stolen or that they have paid someone to make sure no one steals their logo:




I have also heard that some transportation buses pay $3-$4 per logo, no questions asked. I was not able to get a picture of these buses, but they told me that they use the logos as decorations, just like trophies, and they display them all over inside the main cab.

No, I did not place the logo back on the car. One hour before I drop off the car at the airport, I pop the logo back onto the car and drove straight and returned the car.

Supply and demand at its best.!