June 2009 - Posts

Currently Pondering On…

“New request is not allowed to start because it should come with valid transaction descriptor.”

"Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction.”

“Internal .Net Framework Data Provider error 60.”

and…

“Object of type 'System.Decimal' cannot be converted to type 'System.Int32'”


Hmmm…

The first three has something to do with MSDTC, orphaned transaction and connection pooling I think…

The other one is really puzzling me.  I can’t think of anything that might result in that particular exception, but apparently something did…

My head is starting to hurt…


 

Need to figure out a different way to approach this problem…

Hmmm….

Share this post: | | | |
Posted by Jimmy Chandra | 1 comment(s)
Filed under:

Interesting JavaScript Optimization Pattern

Bumped into this a while back, but haven’t got a chance to use it so I sort of forgot about it.  It’s been floating around in the back of my mind.  I found this one pattern to be quite clever in helping with JavaScript function optimizations, especially when doing browser specific code and some other code that might only require a one time hit and sort of cache the result in the function afterward.

The code is as follow:

function A() {
    //Do some initial calculation of some sort...
    var returnValue = GetValueFromWebService("...");
 
    //Rewrite A to actually return the calculated returnValue
    //and stop going to the web service ever again
    //In essence, caching the inital returnValue for subsequent calls
    A = function()  {
        return returnValue;
    } 
 
    return A();
}

Very neat :)
Share this post: | | | |
Posted by Jimmy Chandra | with no comments
Filed under:

On Windows 7 RC (build 7100) 64 bits & Loving It!

I finally found a quiet time in my busy schedule to perform an upgrade on my Lenovo T61P work laptop.  I decided to give 64 bit Win7 another try.  Remember I posted a while back about being on Windows 7 Beta 64 bit and had some driver problems with it?  Well, I’m glad to inform you that I have all my peripherals working perfectly now under 64 bit RC :), including the ZTE 3G Modem, Fuji Xerox DC 236 printer / scanner and whatever else that thing can do, and my Gigaware webcam.  Woot!!

For the ZTE 3G modem, it’s as easy as running the software that comes with the modem.  This also applied to the Gigaware webcam.  Previously they weren’t recognized at all.

The network printer was a bit tricky since I had to manually installed it as an IP printer and chose the FX DC 236 PCL 6 driver to make it work.

Now… just need to get my RAM to 8 GB…

Share this post: | | | |
Posted by Jimmy Chandra | with no comments
Filed under:

Sprucing Up My Windows Mobile 6.1 Device (& Yours… Maybe)

Like many Microsoft employees, I was provided with a Windows Mobile device.  Mine is a Samsung Omnia SGH-i900.  Main reason for me to choose this from the plethora of choices of Windows Mobile devices was the huge… I mean HUGE storage capacity that comes with the device…. 16 GB huge :).  I chose a device with this capacity since I listen to a lot of podcasts and believe me, 16 GB is plenty of space for keeping lots of podcast around without need to get a secondary MP3 player (which is another reason… I don’t want to carry lots of gadgets on me.  So if one gadget can fulfill most of my needs, like time, phone, sms, camera, game, video and listening to podcasts and songs, the better.)

Ok, I’m digressing from the topic :).

The standard installation that came with Omnia (Windows Mobile 6.1 and some other Samsung added software), work okay, but sometimes I found them a bit lacking.  So I tried to look around for additional software that might spruce up my Omnia, and I found some…

They are:

SPB Mobile Shell 3.0

This shell is awesome and it works on most Windows Mobile devices.  You should give it a try if you own a Windows Mobile device.  The UI is so smooth that I don’t feel like going back to Omnia standard UI.

Resco Keyboard Pro

This soft keyboard is my finger friendly keyboard of choice these days.  For those that uses iPhone, it offers similarly skinned keyboard that is quite pleasant to use.

Resco Sudoku

This touch friendly Sudoku puzzle game is my favorite time waster when I’m waiting or not doing anything in the middle of nowhere.  Must have :)

Route 66 Samsung Navigator

This GPS mobile navigation system is so far my favorite.  In my opinion, it’s better than the Garmin one.

 

On another topic,  I found out that after upgrading my Omnia BIOS / ROM to DXIA5, it works much better.  It used to hang on me previously from time to time, but after the latest upgrade, my Omnia is as smooth as butter :).  I haven’t found the need to force reset it for quite some time now.

Share this post: | | | |
Posted by Jimmy Chandra | 7 comment(s)
Filed under:

Important 3 Sided Development Project Tools

Been eating and hawking stuffs related to Application Lifecycle Management lately, especially Microsoft Solution Framework, Visual Studio Team System and Team Foundation Server.  During the workshop that I delivered, I often mentioned certain things that seem to be very useful to know.

Amazingly, they all have 3 sides to them.  I’m sure you all have heard about it somewhere during your career as a developer or what not, but nevertheless, I think I’ll share what I’ve learnt and I’m sure you can benefit from this if you don’t already know them.

1. The Iron Triangle of Time, Scope and Cost


Most development project owner will want to control all three sides of this “Iron Triangle” and they sometime can be unreasonable about it.  It’s your job as the development team to educate / reason with the project owner that in all eventually, they realistically can only control two out of three and will have to sacrifice the third to achieve the other two.

So, if the project owner want all the features implemented and at a fixed monetary cost, they will have to compromise on time needed to complete the project. 

If he / she chooses to have the project completed with all the scope specified and within a fixed time (according to their schedule, not what is estimated by the development team), then they will have to pay extra cost (it will be more expensive since you might need to get a more proficient team member or tooling).

Another variation of this triangle is Cheap, Good, and Fast (heard it from Chad Hower in TechEd SEA 2007).  If you want it done Cheap and get it done Fast, then for certain you won’t get a Good product.  If you want it Cheap and Good, then be prepare to wait for it (perhaps due to your cheap labor will need to ramp up on the technology to deliver your product first).  If you want it Good and want it delivered Fast, then be prepared to pay a lot more (it’s not going to be Cheap).

One other note on this, adding more human resources in a middle of an ongoing project will NOT help you speed up the delivery time most of the time since the new resources will need to time to get up to date on the current project situation, technology, etc.  There will be some knowledge transfer time incurred when you do this that will impact the deadline.

In most development project, it is often suggested to cut scope in favor of paying additional cost and time (Cost & Time are fixed, since most of the time it will be a fixed cost contract and the client have certain timeframe in mind).

Amazingly, one promise of Scrum (heard from Jeff Sutherland’s InfoQ Root of Scrum presentation) is the ability to break this triangle and basically offer the project owner the ability to “have the cake and eat it too”, so to speak.  Some people argued whether such thing is really possible or not, but I’ll leave it out to you to decide if it’s true or not.

2. The Three Legged Stool of People, Process and Tool

Ridi wrote about Distributed Extreme Programming not too long ago, in there he mentioned a model of Tools, Method and Process.  He also mentioned something about communication being important, etc. (which I think is also important… the people aspect).  So let’s put them together….

1. Tools

2. Method & Process (I often think these two are actually one and the same)

3. People

Each of these three can be viewed as the each leg of the three legged stool.  If any one of them is not present, your stool will certainly become unbalanced and will fall down.

For example, you have the best tool and the best process in the world, but the people doesn’t want to use the tool or the process (too complicated or what not).  Your project will not be successful.  Or you have the best people and the best tool in the world, but your process is a mess, you will also fail, etc.

As one of my mentors said to me, keep them in your pocket and pull them out when you need them :).  I hope you can use these two three sided tools / knowledge to your advantage and success of your project.

Share this post: | | | |
Posted by Jimmy Chandra | 1 comment(s)
Filed under:

BizTalk and SAP Adapter and Head Scratching…

Note to self…

 

When you see this Application event log entry:

 

Event Type:     Warning

Event Source: BizTalk Server 2009

Event Category:          (1)

Event ID:         5743

Date:               6/26/2009

Time:               8:06:42 PM

User:               N/A

Computer:      CSD-Labs

Description:

The adapter failed to transmit message going to send port "SAPPortBilling" with URL "sap://CLIENT=999;LANG=EN;@a/99.99.99.99/00?RfcSdkTrace=False&AbapDebug=False". It will be retransmitted after the retry interval specified for this Send Port. Details:"System.ArgumentNullException: Value cannot be null.

Parameter name: key

   at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)

   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)

   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.CreateChannelFactory[TChannel](IBaseMessage bizTalkMessage)

   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2.InitializeValues(IBaseMessage message)

   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfClient`2..ctor(IBaseMessage message, WcfTransmitter`2 transmitter)

   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfTransmitter`2.GetClientFromCache(String spid, IBaseMessage message)

   at Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfAsyncBatch`2.BatchWorker(List`1 messages)".

 

Make sure you have entered something in the Action part when configuring BizTalk SAP Adapter Send Port.

Share this post: | | | |
Posted by Jimmy Chandra | 1 comment(s)
Filed under: