<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tomas Vera&#039;s Thoughts</title>
	<atom:link href="http://www.tomasvera.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tomasvera.com</link>
	<description>You know you want to know!</description>
	<lastBuildDate>Mon, 18 Feb 2013 22:49:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Getting hierarchical (nested) data from DataSets</title>
		<link>http://www.tomasvera.com/2013/02/getting-hierarchical-nested-data-from-datasets/</link>
		<comments>http://www.tomasvera.com/2013/02/getting-hierarchical-nested-data-from-datasets/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 22:49:07 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DataRelation]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[DataTable]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=479</guid>
		<description><![CDATA[The other day I was struggling with generating XML data from a database I was working with. After talking with a co-worker, he mentioned using Transact-SQL and the "For XML Explicit" options related to a query. So I looked at how to accomplish this task using the .NET Framework. <a href="http://www.tomasvera.com/2013/02/getting-hierarchical-nested-data-from-datasets/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The other day I was struggling with generating XML data from a database I was working with. After talking with a co-worker, he mentioned using Transact-SQL and the &#8220;For XML Explicit&#8221; options related to  a query. I managed to do what I needed, but it felt like I was making my way through the jungle with a small plastic knife, instead of a machete. So I looked at how to accomplish this task using the .NET Framework&#8217;s DataSet, DataTable and DataRelation classes.<span id="more-479"></span></p>
<p>I started Googling &#8220;export XML from DataSet&#8221; and found numerous examples of calling the &#8220;GetXml()&#8221; method in the DataSet class. But, virtually all of these discussions/ examples dealt with the situation in which the DataSet consisted of a single table. In the single-table case, GetXml() works as expected. But as soon as you add a second table, things get pretty messy pretty quickly. So I&#8217;ve created a tutorial on <a href="http://www.tomasvera.com/programming/generating-hierarchical-nested-xml-from-a-dataset">Generating Hierarchical Nested XML from a DataSet</a>.</p>
<p>The trick to getting all this work, is to use DataRelations within a DataSet to tie the tables together in an organized fashion. Something many do already when needing to &#8220;walk&#8221; their way down (or up) a set of tables. But, even then, there are some tricks that you will need to be aware of.</p>
<p>The DataRelation class has a property named &#8220;Nested&#8221; which you will need to set, in order to get the &#8220;GetXml()&#8221; method to generate the nested XML that we&#8217;re after. But even, then there is still one more step we need to take.</p>
<p>For example, suppose we have a 3-table DataSet: Customer -&gt; Order -&gt; OrderItem (Parents pointing to children).</p>
<p>If we choose to set the &#8220;Nested&#8221; property in our DataRelations, we get XML in which multiple <strong>Order</strong> nodes are located under the <strong>Customer</strong> node. This is valid. However, many would prefer to have a single <strong>Order<span style="text-decoration: underline;">s</span></strong> node under the Customer node. The <strong>Order</strong> nodes would be children of the <strong>Order<span style="text-decoration: underline;">s</span></strong> node.</p>
<p>Similarly, there are many <strong>OrderItem</strong> nodes under each <strong>Order</strong> node. Here too, most would prefer a single <strong>OrderItem<span style="text-decoration: underline;">s</span></strong> node under <strong>Order</strong> with each <strong>OrderItem<span style="text-decoration: underline;">s</span></strong> containing the individual <strong>OrderItem</strong> nodes.</p>
<p>The solution to this is to create an additional &#8220;layer&#8221; in our DataSet. This &#8220;wrapper&#8221; layer serves no other purpose other than to help organize all our nodes. The challenge is that each layer is represented by a DataTable. And each of these new DataTables needs relations within our DataSet in order to generate the XML that we want.</p>
<p>Once these new tables and relations are in place, we start to see the XML that we want. A bit of a challenge at first and some extra work to accomplish what we need. But worth the effort in order to produce XML that is well organized.</p>
<p>A complete working example project is provided in the tutorial: <a href="http://www.tomasvera.com/programming/generating-hierarchical-nested-xml-from-a-dataset">Generating Hierarchical Nested XML from a DataSet</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2013/02/getting-hierarchical-nested-data-from-datasets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A JavascriptSerializer twist</title>
		<link>http://www.tomasvera.com/2012/11/a-javascriptserializer-twist/</link>
		<comments>http://www.tomasvera.com/2012/11/a-javascriptserializer-twist/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 17:41:13 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[JavascriptSerializer]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=449</guid>
		<description><![CDATA[I had some trouble parsing some JSON text using JavascriptSerializer class. Here is some code that I used to parse the troublesome text. <a href="http://www.tomasvera.com/2012/11/a-javascriptserializer-twist/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today, I received an email from someone who was not able to use my <a href="http://www.tomasvera.com/programming/using-javascriptserializer-to-parse-json-objects/">JavascriptSerializer example</a> to parse out some JSON text. It took me several minutes to realize what I was doing wrong. Here is the JSON text in question: <span id="more-449"></span></p>
<pre>{
"ListFilterControl": [
 { "filterControlObject": {
 "DisplayFieldID": "20",
 "ControlDisplayName": "Country",
 "ControlType": "TextBox"
 }
 },
 {
 "filterControlObject": {
 "DisplayFieldID": "21",
 "ControlDisplayName": "automobile",
 "ControlType": "ComboBox"
 }
 }]
}
</pre>
<p>My problem was that the topmost object is an array. In my examples, the topmost object was an object that was NOT an array. Once I realize this, I was able to re-write the classes so that I could parse out the JSON text.</p>
<p>Here are the classes that I used to parse out this text. I hope you find this useful:</p>
<pre>/*------------------------------------------------
 * Classes needed for deserialization
 * ----------------------------------------------*/
 /// &lt;summary&gt;
 /// Outermost wrapper
 /// &lt;/summary&gt;
 public class jListFilterControlWrapper
 {
 public jfilterControlObject[] ListFilterControl; // Array of filterControlObjects
 }
 /// &lt;summary&gt;
 /// The filterControlObject items (there is an array of these objects)
 /// &lt;/summary&gt;
 public class jfilterControlObject
 {
 public jFilterControlProperties filterControlObject; // A filterControlObject contains a FilterControlProperties object
 }
 /// &lt;summary&gt;
 /// The properties of the filterControlObject
 /// &lt;/summary&gt;
 public class jFilterControlProperties
 { // The specific properties you want to use
 public string DisplayFieldID { get; set; }
 public string ControlDisplayName { get; set; }
 public string ControlType { get; set; }
 }</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/11/a-javascriptserializer-twist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiling C# Code from the Command Line (Updated)</title>
		<link>http://www.tomasvera.com/2012/08/compiling-c-code-from-the-command-line/</link>
		<comments>http://www.tomasvera.com/2012/08/compiling-c-code-from-the-command-line/#comments</comments>
		<pubDate>Sat, 04 Aug 2012 19:24:49 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[CSC]]></category>
		<category><![CDATA[MSBUILD]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=373</guid>
		<description><![CDATA[Compiling C# Code from the command line is a useful skill. CSC.EXE and MSBUILD.EXE are two tools which professional developers should know how to use. Here's how/why I recently had to dust off my skills in these areas. <a href="http://www.tomasvera.com/2012/08/compiling-c-code-from-the-command-line/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last Saturday, I got a text from my daughter asking me how much it would cost to replace the fan on her laptop (a 4-year-old Dell Inspiron 1420). Being the cynical cheapskate that I am, I figured that the fan would probably cost more than the laptop itself. I ended up cleaning the cooling fan filter which seems to be doing the trick. But along the way, I managed to review, refresh and use the command line C# compiler that comes <strong>FOR FREE</strong> with every instance of Windows. Here&#8217;s what I did.<br />
<span id="more-373"></span><br />
<strong>[Update: I have now provided a short <a title="Compiling Tutorial" href="http://www.tomasvera.com/programming/compiling-a-c-project-using-command-line-tools-tutorial/" target="_self">Tutorial</a> on how to do this yourself]</strong></p>
<p>Since her laptop was getting hot, I figured that I should make some tool to monitor her CPU temperature. After some deft Googling, I came across <a href="http://stackoverflow.com/questions/1195112/how-to-get-cpu-temperature">this</a> code on stackoverflow.com.</p>
<p>&#8220;Perfect!&#8221; I thought. &#8220;I will just write a small app that uses this code.&#8221; But then I remembered that there are no development tools installed on her computer (Liberal Arts major that she is, she has no need for them).</p>
<p>&#8220;No problem! To the command line!&#8221; I said, in my best super-hero voice. After all, the C# compiler that is used by Visual Studio is installed as part of the .NET Framework. So it actually resides in the &#8220;C:\Windows\&#8230;&#8221; hierarchy.</p>
<p>Once in the sweet confines of the good-ole DOS box, I launched an instance of Notepad and copied the code from the class I found in the website, above.  I then added a wrapper class which contained a &#8220;Main&#8221; function and called to the Temperature class.</p>
<p>Then back in the DOS box, I entered the &#8220;CSC.EXE&#8221; command and added my .CS file as a parameter and I was immediately met with some errors. I read the errors, fixed the items the errors referenced and ran the compiler once again. A second set of errors related to missing libraries. Hmm, time to add some more parameters to the command line. Recompile, and then&#8230;Viola! My .EXE was sitting next to my .CS file.</p>
<p>As nervous as contestant on &#8220;Who Wants to be a Millionaire&#8221;, I entered &#8220;GetTemp.EXE&#8221; into the DOS box prompt, hovered over the ENTER key, pressed it and&#8230;.</p>
<p>&#8230; it worked! There, in front of my eyes, was a glorious &#8220;43.5&#8243; (degrees Celcius) displayed on-screen. Shouts of joy echoed throughout the realm (my living room, at least) as the cobwebs were dusted off some skills not recently used.</p>
<p>So, where does one go to find out about compiling from the command line? Here are some links to the MSDN documentation regarding command-line compiling using the C# compiler:<br />
<a href="http://msdn.microsoft.com/en-us/library/1700bbwd%28v=VS.71%29.aspx">Building from the Command Line</a><br />
<a href="http://msdn.microsoft.com/en-us/library/2fdbz5xd%28v=vs.100%29.aspx">C# Compiler Options</a></p>
<p>A much more powerful tool is MSBuild.EXE (It was installed as part of Framework v2  and v3.5 but it does not appear to be installed as part of Framework version 4; However, there is a .NET 4 <a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=8279">SDK</a> which seems to include MSBuild).</p>
<p>MSBuild makes use of the C# compiler that I mentioned above. However, MSBuild uses a project file to define build packages. These packages in turn can be used to define groups of files, compiler options, pre-compile and post-compile tasks to customize the build process. This is, pretty much, what Visual Studio does for you when you press &#8220;F6&#8243; to build your solution.</p>
<p>References for MSBuild are located here:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms164311.aspx">MSBuild Command Line Reference</a></p>
<p>These are two tools which many developers (most developers?) have never used, or are even aware of. But, professional developers should know that these tools exist, and more importantly, should know how to use them.</p>
<p>So when your daughter comes to you with a laptop that is overheating, you can write a small application that tells you that the CPU is running at &#8220;43.5&#8243; degrees.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/08/compiling-c-code-from-the-command-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Olympics For Sale !!</title>
		<link>http://www.tomasvera.com/2012/07/olympics-for-sale/</link>
		<comments>http://www.tomasvera.com/2012/07/olympics-for-sale/#comments</comments>
		<pubDate>Sun, 29 Jul 2012 17:35:29 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=361</guid>
		<description><![CDATA[NBC Olympics requires a cable subscription in order to view online content. I don't have a cable subscription and neither do millions of people. So NBC has decided that those of us in this situation do not need to view the Olympics. This isn't right, but (for now) there's not a lot we can do. <a href="http://www.tomasvera.com/2012/07/olympics-for-sale/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Like many of you, I was looking forward to watching the 2012 Olympic competition taking place in London. Since I enjoy watching some  of the more &#8220;obscure&#8221; sports (e.g. fencing, rowing, etc.) I was prepared to go on-line and watch these events (replays, actually) on some website, or other.<div id="attachment_366" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.tomasvera.com/thoughts/wp-content/uploads/2012/07/nbcolympics_homepage.png" target="_blank"><img src="http://www.tomasvera.com/thoughts/wp-content/uploads/2012/07/nbcolympics_homepage_exceprt-300x164.png" alt="NBC Olympics message informing that a Cable Subscription is required for viewing" title="nbcolympics_homepage_exceprt" width="300" height="164" class="size-medium wp-image-366" /></a><p class="wp-caption-text">NBC Olympics requires a Cable Subscription</p></div></p>
<p>Unfortunately, it seems that NBC cornered the market for on-line viewing of the Olympics. Worse, you can only view these events if you are a cable television subscriber (which I am not). This didn&#8217;t seem right to me so I wanted to voice my concerns to NBC. But, being the sneaky bastards that they are, here too I was foiled.<span id="more-361"></span></p>
<p>Like all good net denizens, I scrolled to the bottom of the NBC Olympics home page and looked for a Contact Us link. It was there. I clicked the link and I was taken to a ContactUs page. So far so good.</p>
<p>I entered my concerns and got the &#8220;submit&#8221; portion of the page where I was greeted with the now-ubiquitous Captcha. Except that there was no image displayed, just the input box (or in .NET programming-speak the TextBox control). Ha Ha!! Very funny NBC. So I reloaded the page, figuring that it was probably some quirk. It was&#8230; I think. This time I saw the captcha image and dutifully entered the digits display on-screen only to be greeted with the &#8220;doesn&#8217;t match&#8221; error message.<div id="attachment_364" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.tomasvera.com/thoughts/wp-content/uploads/2012/07/contactus_nbcolympics.png" target="_blank"><img src="http://www.tomasvera.com/thoughts/wp-content/uploads/2012/07/contactus_nbcolympics_excerpt-300x95.png" alt="Missing Captcha on NBC Olympics Contact Us page" title="contactus_nbcolympics_excerpt" width="300" height="95" class="size-medium wp-image-364" /></a><p class="wp-caption-text">Where's the Captcha?</p></div></p>
<p>&#8220;Double Damn!&#8221; I thought and proceeded to re-re-load the page. Once again, the image was missing. After several re-loads I got the Captcha image to display and once again I wrote out my elegant complaint about how NBC has corrupted the spirit of the Olympics, typed in the Captcha digits and clicked &#8220;Submit.&#8221;  Once again, &#8220;&#8230; doesn&#8217;t match&#8230;&#8221;.</p>
<p>So for now, NBC has won. I will be forced to watch whatever sports NBS deems that I should be able to watch from my local NBC affiliate. No fencing, no rowing, no weight-lifting.</p>
<p>This isn&#8217;t proper. I will be contacting my U.S. Representative (although I doubt there&#8217;s anything the FCC can do). I&#8217;m still working out how to voice my displeasure, but nonetheless, I will voice my displeasure, if only here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/07/olympics-for-sale/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yet Another Change (or how Microsoft CRM got the better of me)</title>
		<link>http://www.tomasvera.com/2012/05/yet-another-change-or-how-microsoft-crm-got-the-better-of-me/</link>
		<comments>http://www.tomasvera.com/2012/05/yet-another-change-or-how-microsoft-crm-got-the-better-of-me/#comments</comments>
		<pubDate>Mon, 21 May 2012 17:47:13 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=345</guid>
		<description><![CDATA[For the last three months, I&#8217;d been doing some Microsoft Dynamics CRM administrating. If you read my previous post, you&#8217;ll see that I was not enjoying things. Well, Microsoft Dynamics CRM has won the battle of wills. I have decided &#8230; <a href="http://www.tomasvera.com/2012/05/yet-another-change-or-how-microsoft-crm-got-the-better-of-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For the last three months, I&#8217;d been doing some Microsoft Dynamics CRM administrating. If you read my previous post, you&#8217;ll see that I was not enjoying things. Well, Microsoft Dynamics CRM has won the battle of wills. I have decided to move on to more (mostly) familiar ground and do some e-Commerce programming. So&#8230; what went wrong? It&#8217;s complicated, but here goes.<span id="more-345"></span>First, let me discuss the things that I liked about my last gig.</p>
<p>I liked the people of the organization. They were dedicated to their mission and they took their jobs seriously. I especially liked the people on my team. They were <em><strong>very hard</strong></em> to make the best of a somewhat questionable situation. I even liked my project manager. He worked tirelessly to make sure that we had realistic requirements and goals. We always knew what we had to do and when it had to be done.</p>
<p>Sounds good, right? So what did I <em><strong>not</strong></em> like? Here goes&#8230;</p>
<p>My job was to replace the consultants who had delivered a Microsoft Dynamics CRM solution to the organization. They had been in place about 2 years learning our business and implementing a CRM solution. Since I have some (limited) experience with Microsoft CRM 3.0 and 4.0 I expected to learn the ins-and-outs of CRM 2011to a point where the maintenance of the system would be on my shoulders and the consultants would be out the door.</p>
<p>Well, I have managed to learn (to a good degree) how to maintain a CRM 2011 installation. I managed to learn:</p>
<ul>
<li>oData queries</li>
<li>FetchXML</li>
<li>Writing C# code to create custom Plug-ins</li>
<li>Creating Windows based, CRM-aware applications</li>
<li>and I got re-acquainted with making AJAX calls from Javascript</li>
</ul>
<p>Looks good right?</p>
<p>Unfortunately, the more I learned of this, the more I realized the the consulting company did not deliver a product that was ready for production. They did a good job (mostly) on what they <em><strong>did</strong></em> deliver. But a lot of what they did deliver was lacking in one area or another (buggy plug-ins, bad/inefficient SQL) and in some cases they completely &#8220;missed&#8221; the business requirements. In fact, about half of my tasks were to fix something that was delivered by the consulting company.</p>
<p>At this point, the consultants and I began stepping on each others&#8217; toes. On more than one occasion, mis-communication between the consultants and us caused us to both start in the implementation of something that was broken or not delivered. I have to take some of the blame for this. On more than one occasion, I would take ownership of a &#8220;trouble ticket&#8221; to fix something only to find out that the consultants had done the same, but had not updated the &#8220;trouble ticket&#8221; to indicate that they were working on a solution. I guess I should have &#8220;announced&#8221; that I was working on something.</p>
<p>What shocked me even more, though, was when I found out that this same consulting company had been hired to design and implement a very large Time and Accounting project that would eventually tie into the CRM installation. That new project team has been on-site for over two months (at a cost of over $1000/hour for the team) and have succeeded in missing almost every deadline imposed. I fail to understand how they were hired on for the second project. I guess our department manager must know something that I do not.</p>
<p>Which brings me to our department manager. He is a unique individual on whom I have failed to get a &#8220;reading.&#8221; He has a lot of meetings to attend. He likes to remind everyone who will listen that he has a lot of meetings to attend. The result of this is that he has very little time for the department he manages. This is not always a bad thing. But it prevented me from getting &#8220;on-board&#8221; with him as my leader. He is also very proud of how our CRM installation will look on his resume (his words, not mine). I guess he hasn&#8217;t had to use our CRM for day-to-day business. If he did, he would see that his &#8220;cutting edge&#8221; design has produced an installation that is slow, unreliable and fails (by design) to provide the features he sought to implement in the first place (e.g. two virtual servers on the same physical device, which are designed for &#8220;fail-over&#8221; in case of something like a power-outage). He will insist that we only work on &#8220;open tickets&#8221;, yet none of his &#8220;emergency items&#8221; are ever entered into the trouble-ticket system. So when I work on his items I get reminded that I&#8217;m only supposed to work on open trouble tickets. What&#8217;s the male equivalent of &#8220;prima-donna&#8221;?</p>
<p>As I mentioned in a previous post, as bad as I think I have it (not that bad actually) our DBA has it much worse. The Scribe tool that we use to transfer data from an outside source into the CRM on a semi-monthly basis is nothing short of &#8220;reilably unreliable.&#8221; The Scribe package that was designed by our consultants has yet to function properly. Yet we are tied to this horrible POS with no relief in sight.</p>
<p>Previously someone suggested that we should have gotten different consultants. But if you call Microsoft and ask about consultants our consultants come up first. In fact, they wrote the book on CRM. Literally. Kickbacks, anyone?</p>
<p>So, to cut though all the rambling: I liked the people on my team and the people of the organization. I did not like the consultants that implemented our CRM and I did not like the department head. In short, I did not have confidence in my leadership and the product they chose to implement. As someone once told me, &#8220;if you work for someone, then WORK for them.&#8221; Since I can not support my leadership, it is time to move on. So, I have.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/05/yet-another-change-or-how-microsoft-crm-got-the-better-of-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I hate Microsoft CRM</title>
		<link>http://www.tomasvera.com/2012/03/why-i-hate-microsoft-crm/</link>
		<comments>http://www.tomasvera.com/2012/03/why-i-hate-microsoft-crm/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 17:46:52 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=337</guid>
		<description><![CDATA[As you may have read in my other post Too Many Changes I recently got a new job. In this new job, I will be the Administrator of an installation of Microsoft Dynamics CRM (Customer Relationship Manager). The Microsoft CRM &#8230; <a href="http://www.tomasvera.com/2012/03/why-i-hate-microsoft-crm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As you may have read in my other post <a title="Too Many Changes" href="http://www.tomasvera.com/?p=333" target="_self">Too Many Changes</a> I recently got a new job.</p>
<p>In this new job, I will be the Administrator of an installation of  Microsoft Dynamics CRM (Customer Relationship Manager). The Microsoft  CRM product is a popular product in which there are not a lot of choices  for larger companies. It has some interesting features. But mostly, it  has been a series of one frustration after another for someone who comes  from a programming background. I do realize that most of my frustration has come because I have not yet learned how to do what I may be wanting to do. But still, there are problems with CRM that are truly problems. Where to start&#8230;..<span id="more-337"></span></p>
<p>At my new company, a consulting group has been in place for over a  year, mapping out the business of the company and how it will be  represented in the CRM system. This consulting group has  built-out a large portion of the implementation of the system. Most of  the pieces are in place and it will be my job to polish things as needed  once the consultants leave.</p>
<p>My problem is that the customizations available to the end users (my  company) are limited to what the CRM can support. Basically, we have to  map the business of the company using tools and concepts that are  supported by CRM. We are not modifying CRM to meet the business model of  the company. That is the first problem:</p>
<p><strong>We&#8217;re adapting our business to suit the limitations of CRM.</strong></p>
<p>Because of this there is no real programming for me to do. This  frustrates me. I did manage to write one plug-in which integrates with  CRM to perform a specific task. I have also had to write some Javascript  modules which interact with the CRM system. But in both of these cases,  the limitations and requirements of developing for this system are  PAINFULLY frustrating. Something that can be coded in a few minutes to the exact requests/specifications of our users takes hours (perhaps days) to implement. Worse the implementation is almost always not exactly what the users want (sometimes, we have to admit that what the user wants can not be done in CRM).</p>
<p>The system that the company used previously was an open source system. So if a custom page/form was needed, it was coded up using normal .NET/ADO code and the user&#8217;s requests were met exactly. Those days are gone.</p>
<p><strong>Basically, I am a power user. Not a developer.</strong></p>
<p>As bad as I feel I have it, my &#8220;pain&#8221; is nothing compared to the pain  felt by the DBA (Database Administrator) with whom I&#8217;m working.</p>
<p>CRM uses a thrid-party tool named Scribe to perform large data  importing / exporting tasks (it&#8217;s not really a third-party tool since it  is also provided by Microsoft as part of the CRM installation). Scribe  can interact with CRM during imports so that CRM events are fired as  data is imported into the system. But Scribe does not appear to be  well-behaved. Often, our database is slow or non-responsive. In every  case, it has been due to Scribe locking up our system or hanging our  server. In fact, the consulting team that is installing our system will  not use Scribe to perform a CRM installation in a sister company.  Instead they will be developing a custom application as a replacement  for Scribe to import data. But still, we will have to suffer with Scribe  to perform our bi-weekly data imports. This will be a painful  experience for our DBA with no relief in sight.</p>
<p><strong>We have been given a tool that doesn&#8217;t work well and which has been abandoned by the consultants who put our current system together.</strong></p>
<p>Is there any solution to my concerns? Of course. I&#8217;m a programmer. Anything you or I can think of can be coded up, given an environment that will support it.</p>
<p>Our current environment consists of several virtual servers onto which Windows Server 2008 software has been installed. The .NET framework is installed on to these servers. SQL Server has been installed onto a supporting server. So everything is in place to support a truly customizable web application to supplement/replace the parts of our CRM installation that just don&#8217;t work well.</p>
<p>In CRM 2011, the bulk of the work is done using web service calls from the client-facing web server to an application server. Were we to replace the bad web application with customized web forms, we would be able to meet our users&#8217; needs completely. All the limitations imposed by the CRM web application could be eliminated. All while using the security provided by CRM.</p>
<p><strong>We <em>could</em> build a custom application that meets the needs of our users. But we can&#8217;t. </strong></p>
<p>Our management team is sold on anything that has the word &#8220;Microsoft&#8221; on its shiny, shrink-wrapped cover. So all my suggestions on how to improve our users&#8217; experience have been cast aside in favor of the &#8220;they will get used to it&#8221; attitude from our IS Director. They have spent several million dollars on consultants to install a system that just doesn&#8217;t work well. They could have spent less money on a team of developers to put together a system that meets all their needs exactly. Instead they chose a shrink-wrapped system that only meets <em>some</em> of the needs of our users.</p>
<p>And I have to make it all better.</p>
<p>A challenge to be sure. Time to get to work. Updates to follow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/03/why-i-hate-microsoft-crm/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Too many changes</title>
		<link>http://www.tomasvera.com/2012/03/too-many-changes/</link>
		<comments>http://www.tomasvera.com/2012/03/too-many-changes/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 16:33:37 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=333</guid>
		<description><![CDATA[For the last three years, I&#8217;d been working in Roseville, California. Nothing too unusual there, except for the fact that I&#8217;d been living in Fresno; about three hours away by car. In fact, although I&#8217;d been living in Fresno for &#8230; <a href="http://www.tomasvera.com/2012/03/too-many-changes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For the last three years, I&#8217;d been working in Roseville, California. Nothing too unusual there, except for the fact that I&#8217;d been living in Fresno; about three hours away by car. In fact, although I&#8217;d been living in Fresno for the last 20 years, or so, I&#8217;d been working elsewhere since 2005. The reason for this is that there are a number of limited opportunities in Fresno and for one reason or another none of them were &#8220;right&#8221; for me.<span id="more-333"></span></p>
<p>The job in Roseville was a pretty sweet gig. I was part of a small team that was developing a somewhat cutting edge distributed application that dealt with Futures trading on the Chicago Board of Exchange (you know, the exchange where you can buy Pork Belly futures). But, the client who was paying for this application hit a &#8220;bad patch&#8221; and was no longer able to pay for our services and so my project came to a somewhat sudden halt. Which put me back in the job market once again.</p>
<p>So, I polished up the old resume and updated my profiles on <a title="Dice Job Board" href="http://www.dice.com" target="_blank">Dice</a> and <a title="Monster Job Board" href="http://www.monster.com" target="_blank">Monster</a>. I applied for a bunch of jobs and I managed to get an interview or two with HR people who are young enough to be my kids.</p>
<p><span style="font-family: courier;">NOTE: From my interviews, it is pretty clear that THE skill to have right now is jQuery and AJAX. Not the Microsoft version. But the generic AJAX/jQuery kind. So learn it, know it, be it!</span></p>
<p>Eventually, I landed a gig working for a company in downtown Sacramento. I got the job because I&#8217;d have some passing experience with a prior version of Microsoft Dynamics CRM. That, and because an old-timer like me knows how to interview when the interviewers are not 22 years old.</p>
<p>Downtown Sacramento is interesting. The neighborhood in which my office is located is composed of houses build from the late 1800s through the 1930&#8242;s (more or less). Most of the larger homes have been split into condos, apartments and duplexes. But there are still a handful of homes that are single family dwellings. Most of the people there are of lower/middle income variety, and there seems to be a large concentration of Asian people/families. All &#8211; in &#8211; all your basic working class neighborhood. The only troublesome part is that there are a handful of houses being renovated with high-end features. Which generally means that in about ten to twenty years, most of the people living there now will probably be priced out of theirs homes and apartments.</p>
<p>But I digress&#8230;&#8230;</p>
<p>My new job centers around Microsoft Dynamics CRM (see <a title="Why I Hate CRM" href="http://www.tomasvera.com/?p=337" target="_self">Why I hate Microsoft CRM</a>). This is a very powerful tool that our users abhor and that frustrates me to no end. But our management (more on this in the future) is sold on this product. So I will be struggling to conquer it. But, this position requires virtually no programming which for me is frustrating.</p>
<p>Being as how my job is now 50 miles from my house, I am now a &#8220;commuter.&#8221; What this entails is getting up a half-hour earlier, driving for about an hour in some stop-and-go traffic so that I can be at work at 8 AM. The commute home would be worse, except for the fact that I have discovered a particular surface-street route that saves me twenty minutes of freeway-parking-lot time. This long-ish stop-and-go commute made driving my Ford Mustang expensive and not very enjoyable (more on this later, as well). So I&#8217;ve switched to a new commuter-friendlier Kia Forte. Basic transportation to which I will need perform some upgrades.</p>
<p>And the last straw: a reduction in income. I do realize that in today&#8217;s economy any job is a good one. So I am happy to be working. But, I did have to take a sizable reduction in pay from my last job to this one. We are still doing OK by any standard. But the frustrating work situation coupled with the reduction in pay and increase in responsibility is, once again, frustrating.</p>
<p>So, in the last 90 days, I have undergone a handful of changes which have become a bit of a challenge. So I will be straightening out my tie, lacing up the proverbial boots, and hitting it hard, once again until things change. Hopefully for the better. And hopefully sooner, rather than later.</p>
<p>Enough complaining. Time to get back to work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/03/too-many-changes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Year, New Problems</title>
		<link>http://www.tomasvera.com/2012/01/new-year-new-problems/</link>
		<comments>http://www.tomasvera.com/2012/01/new-year-new-problems/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 00:54:00 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=329</guid>
		<description><![CDATA[Happy New Year! I finished the year with some big changes. After living for over twenty years at our last location, we&#8217;ve moved to a new part of our home state. There are several reasons, but mostly, we&#8217;re moving to &#8230; <a href="http://www.tomasvera.com/2012/01/new-year-new-problems/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Happy New Year!</p>
<p>I finished the year with some big changes. After living for over twenty years at our last location, we&#8217;ve moved to a new part of our home state. There are several reasons, but mostly, we&#8217;re moving to be closer to my work. But there are challenges.<span id="more-329"></span></p>
<p>I&#8217;m the primary income earner in our household. But, the opportunities at our last location were somewhat limited for programmers like me. There are a handful of companies that employ more than one or two programmers. I&#8217;ve worked at one of them. I wouldn&#8217;t work for another. The rest don&#8217;t offer much in the way of a challenge or compensation.</p>
<p>For these reasons, I&#8217;ve been working remotely for five out of the last six years. Living mostly out of hotels, it has been a worthwhile sacrifice because it has allowed us to send our kids to the college of their choice (schools in the University of California system) while incurring minimum debt. For the last three years, I&#8217;ve been working for a company near our new location. So, all things considered, we moved.</p>
<p>And then, (after we sign ALL the documents related to purchasing a home), the client that is paying for the development project that I&#8217;m working on has some financial trouble. Almost overnight, he has stopped paying his bills. Which puts my employer in the tough spot of trying to pay us what he can without going broke himself.</p>
<p>For sure, that has added some stress onto our move. However that is not the worst of it. Worse, than having to worry about where your next paycheck is coming from, is the fact that we are having to make do without&#8230; <strong>television</strong>.</p>
<p>When planning on moving to our new place, our thought was to use the internet as a source for much of our television watching (we only watch a handful of channels anyway), supplemented with over-the-air (OTA) broadcasts of the main television networks.</p>
<p>So, we have set up the HD television (which we are borrowing from our youngest daughter; long story there!) and perform the &#8220;auto-scan&#8221; of channels.</p>
<p>Nothing. As in &#8220;no channels found.&#8221; How can that be? This is one of those new-fangled High Definition digital flat-screen TVs. They get everything, right?</p>
<p>It turns out that our new home is about 100 miles from the transmission towers used by the broadcast stations in this region. To make matters worse, we are in a television &#8220;shadow&#8221; such that most television signals simply pass over the top of our area, without giving the people here a chance to catch the signal. <em>So that&#8217;s why all the neighbors have satellite dishes on their homes</em>.</p>
<p>On the plus side, it has allowed us to find some new shows like <a title="Misfits Television Show" href="http://www.hulu.com/misfits" target="_blank">Misfits</a> and some old ones like <a title="Corner Gas TV Show" href="http://www.youtube.com/user/cornergastvshow?blend=1&amp;ob=4" target="_blank">Corner Gas</a>. Also, since most network shows are available on the networks&#8217; websites, we will still be able to watch <em>most</em> of our shows. Just a day later than most people.</p>
<p>Maybe this will make me read more books&#8230;. Nah!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2012/01/new-year-new-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protests: Occupy Wall Street and UC College Campus</title>
		<link>http://www.tomasvera.com/2011/11/protests-occupy-wall-street-and-uc-college-campus/</link>
		<comments>http://www.tomasvera.com/2011/11/protests-occupy-wall-street-and-uc-college-campus/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 16:11:49 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=325</guid>
		<description><![CDATA[Like many of you, I have been seeing a lot of coverage regarding the Occupy Wall Street (OWS) movement. Although, I sympathize with the main goals of the movement (that the current corporate culture is not constructive toward building a &#8230; <a href="http://www.tomasvera.com/2011/11/protests-occupy-wall-street-and-uc-college-campus/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Like many of you, I have been seeing a lot of coverage regarding the <a href="http://occupywallst.org/">Occupy Wall Street</a> (OWS) movement. Although, I sympathize with the main goals of the movement (that the current corporate culture is not constructive toward building a better, stronger America), I have been put off by the inclusion of some groups that are essentially &#8220;professional protesters.&#8221;</p>
<p><div id="attachment_355" class="wp-caption alignleft" style="width: 310px"><a href="http://www.tomasvera.com/thoughts/wp-content/uploads/2012/05/pepperspray.jpg"><img class="size-medium wp-image-355" title="pepperspray" src="http://www.tomasvera.com/thoughts/wp-content/uploads/2012/05/pepperspray-300x213.jpg" alt="UC Davis Pepper Spary" width="300" height="213" /></a><p class="wp-caption-text">Pepper Spraying Students at UCDavis</p></div></p>
<p><span id="more-325"></span></p>
<p>Worse than the protests themselves, has been the police reaction to many of these protesters. In New York city there is corroborated video evidence of  police reaction that was inappropriate in scale and force. <a href="http://www.youtube.com/watch?v=bRc7t6gRkhE">VIDEO</a>.</p>
<p>In the (formerly) great state of California, we have one of the premier public university systems in the nation. The ten campuses in the UC system consistently rank in the top forty in almost every listing with several of the campuses almost always in the top five.</p>
<p>In the last few years, California has hit a speed-bump economically (like most other states). That has resulted in cuts to public education which include, not only the UC, but the wonderful California State University  system, local community colleges and the local school districts.</p>
<p>My children have had the privilege of attending UC Campuses. This is no mean feat, as admission to these campuses is reserved for those students who finish in the top 10% of students within the state. These campuses are research-oriented and employ many distinguished professors in a wide variety of areas of study. To see a Nobel laureate walking across campus is not uncommon.</p>
<p>In the last two years, there has been a 30% increase in tuition for attending these campuses. This is a drastic increase, out of line with the amount of services the state has had to cut elsewhere. To add insult to injury, these increases in tuition have come with increases in pay to chancellors, regents and campus presidents throughout the system.</p>
<p>This is not acceptable. Increases in tuition, should be met with decreases in compensation for the people administering the campus organization itself. But much like the people that OWS is trying to shame (to no avail), the chancellors, regents, and campus administrators seem to have their human sense of shame removed.</p>
<p>Yesterday, on the campus of UC Davis, a student protest was met with a disproportionate police reaction. <a href="http://www.youtube.com/watch?v=WmJmmnMkuEM&amp;feature=share">VIDEO</a>.</p>
<p>But enough is enough. A professor on campus, has sent <a href="http://bicyclebarricade.wordpress.com/2011/11/19/open-letter-to-chancellor-linda-p-b-katehi/">an open letter</a> to the Chancellor Linda P.B. Katehi spelling out in no uncertain terms why she <strong>MUST</strong> resign. I agree wholeheartedly. My students have benefited from the time they spent on this campus. For a Chancellor to put students in harm&#8217;s way, for any reason, is not acceptable.</p>
<p>As an insult to the intelligence of the people who have seen the video of the incident, Katehi has sent out an email that is nothing short of outrageous. <a href="http://i.imgur.com/WZeNW.png">EMAIL</a></p>
<p>Am I advocating for the sort of out-of-control actions that we have seen elsewhere? Absolutely not. But I am advocating for the end of disproportionate response to what was (until then) a truly peaceful protest.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2011/11/protests-occupy-wall-street-and-uc-college-campus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptSerializer example finally updated</title>
		<link>http://www.tomasvera.com/2011/08/javascriptserializer-example-finally-updated/</link>
		<comments>http://www.tomasvera.com/2011/08/javascriptserializer-example-finally-updated/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 05:23:28 +0000</pubDate>
		<dc:creator>-tomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.tomasvera.com/?p=323</guid>
		<description><![CDATA[A while back I created a page that offered an example of how to parse JSON objects using the .NET JavaScriptSerializer class. It was a mess. It has now been updated.I now use some examples that use generic JSON strings &#8230; <a href="http://www.tomasvera.com/2011/08/javascriptserializer-example-finally-updated/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A while back I created a page that offered an example of how to parse JSON objects using the .NET JavaScriptSerializer class. It was a mess. It has now been updated.<span id="more-323"></span>I now use some examples that use generic JSON strings and a generic parsing function. I have also illustrated an example of how to parse the JSON string directly into a .NET custom class.</p>
<p>Lastly, I have included a small sample application to illustrate the process.</p>
<p>I hope some people find this useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tomasvera.com/2011/08/javascriptserializer-example-finally-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
