These cover a number of the features and essentially have everything to get a developer quite comfortable with the stack. In some areas they go a little deep as well. I think its an excellent way to come up to speed.
Here is a quick example of the topics covered in some of the tracks:
Win7 – how to use the Taskbar, Multitouch, Ribbon, Sensors and Location, Session 0 Isolation, etc.
Azure – Azure Overview, Azure Storage, Deployment, SQL Azure, etc.
VS 2010 and .NET 4 – F#, ASP.NET 4, Parallel Computing, ALM, etc.
I know a little bit about WCF but never really used it in anger in BizTalk and also did not get an opportunity to extend the adapter.
I was looking for something else and came across this post form Paolo which explains in a lot of detail how does one go about extending and customizing WCF adapters. If you don’t know anything about WCF the first part explains that in general before going in to the BizTalk specific things.
I encountered this interesting issue and thanks to Colin we were able to resolve it. There will be situations you will encounter when adding additional optional attributes to a Flat File (FF) schema in BizTalk will cause problems. To get around this you basically will need to set the following properties to relax the parsing of the attributes which break.
parser_optimization="complexity"
allow_early_termination="true"
early_terminate_optional_fields="true"
This got me thinking more and wanting to understand what does changing these attributes mean under the covers. Below is what I found out on each of these.
On parser_optimization:
Setting the parser_optimization to complex essentially generates a more complicated grammar (it uses both a top down and bottom up parsing); this grammar is then used to parse the FF.
The complicated grammar is better when parsing records with more optional nested options – however it still cannot handle all the layout conditions and can still break in some situations.
And given the runtime is doing more things, this will be slower than the other option called ‘speed’ (yeah no kidding Sherlock!).
The reason the ‘speed’ option is faster is because it uses top-down parsing only.
In addition you should also set lookahead_depth to zero (more on this below) to avoid validation failures (against a schema) when there are many optional nodes in the same group/record.
Changing the lookahead_depth itself is trivial but you need to be a little more aware of what this means:
This essentially tells the parser when making a parsing prediction how far ahead to look in the token stream.
Setting this to Zero essentially means ‘infinite lookahead’ which in turn means more memory will be consumed.
Depending on how busy your BizTalk servers are and how much memory pressure you already experience processing various files (and their sizes), this might be an issue.
Basically, the FF parser is a streaming parser and implemented as a leftmost derivation which takes in a CFG. Essentially when we change the lookahead_depth to zero we change do not restrict this and the parser can recognize tokens using DFA perhaps (of course we don’t know the real implementation).
For those old school like me, and have played with yacc – that is a LL(1) parser – essentially parse the grammar with one token lookahead.
On allow_early_termination="true":
When working with FF’s BizTalk expects that every line is of the same length (either because of the data contained padded with spaces). However if it finds a newline (CR + LF) character then it breaks and you get an error something along the lines of “Unexpected data found while looking for: \r\n”.
Adding the allow_early_termination setting helps fix this. Read more here.
Also note that only the right-most positional field is allowed to early terminate.
Lastly, the early_terminate_optional_fields attribute enables early termination of optional trailing fields. A couple of points to note on this:
If your schema does not have this annotation and you open that in the BizTalk editor, then it will automatically add this annotation explicitly and set it to the default value of False.
This only takes affect if you also have the allow_early_termination annotation set to True.
You should be using Bitlocker on your machine (which btw is faster on Win 7 compared to Vista). When I enabled this on my laptop running Win 7 – I did not get the option to also add a PIN – not sure if I did something wrong or by default it does not ask for it.
In any case, if you also want to add the a PIN on boot up then you can use the following command in a command prompt or power shell (with admin privileges) to enable this. Of course replace the “c:” with the drive you want to do this for.
Irrespective if you attended PDC or not and want to get your hands on the ppt’s and/or video of each of the sessions then Mike has a cool post listing each of the sessions including the friendly name instead of the non-helpful code.
No, I am not referring to any new codename or product but rather talking about the slew of new products and technologies that are in the works and coming out in the near future from Microsoft. Below is a list of things (in no particular order) which either were just released or in the pipeline.
I wish I could talk more about some of these – maybe after PDC when most of these are out in the public domain and the NDA’s are relaxed – until then all the links are only to material already in the public domain.
As I said in the last post I have been using Live Mesh for a few weeks now. Since then, Microsoft has released an update to Mesh; those of you who are using it and not updated it yet, I would suggest you do. It will restart the Windows shell once the update is finished, but I would recommend to save your work before you start the update and bounce Windows after that (even though it does not require it).
Live Mesh is now available in all English-speaking countries (not just the U.S.)
Removed the User Account Control (UAC) requirement when installing and using Live Mesh with Windows Vista SP1
Index for Desktop Search now works with Live Mesh folders
Fixed bug where an underscore in a Hotmail account name returned an "Invalid Hotmail Address" error
Fixed bug with Silverlight 2 Beta 2 failing to load in Silverlight Media View
Fixed bug where the notifier tool-tip incorrectly indicated that Live Mesh Remote Desktop was unavailable for a computer running in non-admin mode
Fixed bug where the Live Mesh folder icon was not displayed in the e-mail inviting someone to share a folder
Fixed one of the bugs that caused Live Mesh to fail to start
Fixed problem with Live Mesh returning errors when waking from sleep/hibernate
This is probably old news now, but something which has me concerned as it can cause lots of unseen issues. In .NET 3.5 the default ThreadPool count has been increased ten-fold from 25 to 250 per processor per process! ThreadPools as we know are quite handy – not only do they help when an application comes under load instead of adding more pressure in a stressful situation. They also allow us to readily "reach into" a pool of threads and "pick one" to use – saving the costly overhead of creating and destroying threads (in case you did not know creating and destroying threads is an expensive process).
Yeah OK; so why do I care? Well, most people won't but there are situations where this will cause unexpected behaviour and even lead to Out of Memory exceptions.
Essentially each thread created takes 1 Mb of stack space. Say you are creating a server app and spawn a different thread for IO and if are running on a 8-proc Win x32 box, with this change your application will cap out now at 2000 threads (8 x 250)! With each of them taking 1 mb that is a total of 2GB – which is the total addressable space in Win x32! Ouch!
Of course you can change this – for a web app this is a simple change to the web.config file; however if it is not a web app then this does require a change to the code albeit simple. So, if you suddenly start seeing out of memory exceptions, with nothing really changing, then this might be the cause.
With all the modern systems using multi-core and multi-processor systems, tapping this new power is an interesting challenge for developers. It also fundamentally starts the shift on how your "average Joe" interacts with a computer and things that he/she expects to be able to. First, check out the "Manycore Shift" paper from Microsoft. Second checkout the Parallel Extensions to .NET 3.5 which is a programing model for data and task parallelism. It also helps with coordination on parallel hardware (such as multi-core CPU's) via a common work schedules. There is also a new Parallel Computing Dev Center on MSDN. Before you download the December 2007 CTP, make sure you have the RTM bits of the .NET 3.5 runtime. There are also a number of bugs fixed in this new CTP. If you want a quick introduction then check out a few videos available.
The runtime for this is responsible for mapping parallelism expressed in an application to the actual capabilities of the underlying hardware of multi-core or multi-processor machines. The runtime determines at runtime the number of threads to create. It also monitors this to tweak this and see if any more or fewer threads are needed. The runtime also scales up as more cores become available without any change to your application.
Microsoft also says "Because Parallel Extensions exploits multiple processors, we recommended that you install this directly onto an OS. Using virtualization technologies is not recommended due to restrictions on the maximum number of processors supported by today’s common virtualization technologies." [sic]
There are several approaches you can use to expresses parallelism. Here is a brief from the documentation on these:
Declarative Data – Parallel Language Integrated Query (or Parallel LINQ) is an implementation of LINQ-to-Objects that executes queries in parallel, scaling to utilize the available cores and processors of the machine. Because queries are declarative, you are able to express what you want to accomplish, rather than how you want to accomplish it.
Imperative Data – Parallel Extensions also contains mechanisms to express common imperative data-oriented operations such as for and foreach loops, automatically dividing the work in the loop to run on parallel hardware.
Imperative Task – Rather than using data to drive parallelism, Parallel Extensions enables you to express potential parallelism via expressions and statements that take the form of lightweight tasks. Parallel Extensions schedules these tasks to run on parallel hardware and provides capabilities to cancel and wait on tasks.
Now, I just need to take out the time to play with this; does anyone know how I can rar up some hours in a day and squeeze in a bit more?
I was trying to install the Vista SDK and due to my network card having some issues I wanted to reboot. However, before doing that, I had to cancel the SDK setup (as it downloads the bits during the setup process).
Now I understand the need to warn the user not to do "close" the setup as the installations is rolling back to previous state – but the need to have a topmost window is very irritating and not required. It is not like that the SDK would be installed by a "average user" with the need to have this constant reminder "in the face".
If for some reason you wanted to know what version (and possibly license) of TFS were you running (as a fellow Avanut did in the communities), then check out this tool by Jeff.
Programmer earns $150K & isn't happy cause the software earns loads more money for the company? Isn't that his/her job? http://bit.ly/bj1AIN 4 hours ago
Are you such a big Jobs fan that you would want to get a iPhone app icon coaster? That's just too geeky even for me. http://nyti.ms/95IzBP 4 hours ago
#Azure is the fastest cloud running so far. Interestingly its slower from Seattle. :) http://bit.ly/aHnaRn 4 hours ago
#Ferrari want to move on? Of course they do! They should be stripped of all their points I think. Feel sorry for Massa. http://bit.ly/bqN0gJ 4 hours ago
#Chipotle has finally opened in London! Woot! Going to try it this evening. The 1 review I read was not too great. http://bit.ly/dl1Xsq 5 hours ago