<?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>hugozap.com</title>
	<atom:link href="http://hugozap.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://hugozap.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 27 Aug 2010 17:35:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Maintaining ugly code?</title>
		<link>http://hugozap.com/blog/2010/08/19/maintaining-ugly-code/</link>
		<comments>http://hugozap.com/blog/2010/08/19/maintaining-ugly-code/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 05:29:18 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/08/19/maintaining-ugly-code/</guid>
		<description><![CDATA[I have been working on an existing system. The problem?. It’s an ugly mess of non ending functions with misleading names, and other things that makes it really difficult to understand. However there was a tool that helped me a lot. It’s called Visustin . I used the trial and even with the limitations it [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on an existing system. The problem?. It’s an ugly mess of non ending functions with misleading names, and other things that makes it really difficult to understand.</p>
<p>However there was a tool that helped me a lot. It’s called <a href="http://www.aivosto.com/visustin.html">Visustin</a> . I used the trial and even with the limitations it was really useful to visualize the code.</p>
<p><a href="http://hugozap.com/blog/wp-content/uploads/2010/08/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://hugozap.com/blog/wp-content/uploads/2010/08/image_thumb.png" width="440" height="264" /></a></p>
<p>You just select the language (lots of languages supported) and paste the code. The program analyzes it and displays the diagram of the functions you select. </p>
<p>If you have to maintain a legacy project , this tool could be valuable. It saved me a lot of pain. give it a try.</p>
<p><a href="http://www.aivosto.com/visustin.html">http://www.aivosto.com/visustin.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/08/19/maintaining-ugly-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database version control</title>
		<link>http://hugozap.com/blog/2010/07/23/database-version-control/</link>
		<comments>http://hugozap.com/blog/2010/07/23/database-version-control/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 17:00:45 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/07/23/database-version-control/</guid>
		<description><![CDATA[Version control with databases can be a pain. I was looking articles about good practices and found a good one: http://rusanu.com/2009/05/15/version-control-and-your-database/ I think is a good way to make maintenance easier for me and my clients.]]></description>
			<content:encoded><![CDATA[<p>Version control with databases can be a pain. I was looking articles about good practices and found a good one:</p>
<p><a href="http://rusanu.com/2009/05/15/version-control-and-your-database/">http://rusanu.com/2009/05/15/version-control-and-your-database/</a></p>
<p>I think is a good way to make maintenance easier for me and my clients.</p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/07/23/database-version-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When you have javascript/jQuery performance problems with Internet Explorer</title>
		<link>http://hugozap.com/blog/2010/07/10/when-you-have-javascriptjquery-performance-problems-in-ie6/</link>
		<comments>http://hugozap.com/blog/2010/07/10/when-you-have-javascriptjquery-performance-problems-in-ie6/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 23:35:53 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[FrontEnd Development]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/07/10/when-you-have-javascriptjquery-performance-problems-in-ie6/</guid>
		<description><![CDATA[Do you have a web application that needs to run ok in IE6?.. We were having some performance problems with JQuery and IE6. Specially with the initialization code that caused some white screen and irresponsive interface only with IE6, unfortunately my client still uses it (corporate policy) so upgrading was not an option. Solutions First [...]]]></description>
			<content:encoded><![CDATA[<p>Do you have a web application that needs to run ok in IE6?.. We were having some performance problems with JQuery and IE6. Specially with the initialization code that caused some white screen and irresponsive interface only with IE6, unfortunately my client still uses it (corporate policy) so upgrading was not an option.</p>
<p>Solutions</p>
<p>First you have to detect your bottlenecks.</p>
<p>Firefox and other modern browsers have profiling capabilities built-in. With IE6 there are some tools to help you profiling but i wanted something quick so i created a little utility to measure the speed of the javascript methods .</p>
<p>Usage:</p>
<p>1. Call setupProfiler() once to setting things up:</p>
<p>2. call console.profile(“name”) to start monitoring a function or segment</p>
<p>3. call console.profileEnd() to end monitoring. You have to call console.profileEnd() once for every console.profile call. (Nested calls are supported) </p>
<p>You can use this to monitor complete methods or just segments of code . </p>
<p>With the quick profiler i detected the methods that were taking longer to execute in IE6. Some things to note:</p>
<p>1. If you initialize JQuery UI controls in the page loading event performance problems may occur. An alternative is to delay the initialization of datepickers, dialogs and other controls.</p>
<p>2. To optimize the jquery code, pay attention to your selectors, the more specific a selector the faster it runs. If possible use always #id selectors or tag names instead of .class selectors. </p>
<p>3. Use scope with jquery selections $(“div.myClass”,scope) where scope is an ancestor DOM element. JQuery will only search elements inside the scope element.</p>
<p>I hope this gives you some tips to troubleshoot javascript performance problems. The code for the profiler is:</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> function setupProfiler(enabled) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span>     window.console = window.console || {};</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span>     <span style="color: #0000ff">if</span> (window.console.profile == undefined) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span>         <span style="color: #008000">/*Para IE y otros browsers simplemente imprimimos los resultados*/</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span>         window.colaProfilers = [];</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6">   6:</span>         $(<span style="color: #006080">&quot;&lt;div id='profilerInfo'&gt;&lt;/div&gt;&quot;</span>).appendTo($(<span style="color: #006080">&quot;body&quot;</span>));</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7">   7:</span>         var refProfilerElem = $(<span style="color: #006080">&quot;#profilerInfo&quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8">   8:</span>         window.console = {};</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9">   9:</span>         window.console.profile = function(title) {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10">  10:</span>             <span style="color: #0000ff">if</span> (enabled == <span style="color: #0000ff">false</span>)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11">  11:</span>                 <span style="color: #0000ff">return</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12">  12:</span>             <span style="color: #008000">//Agregar a la cola de profilers</span></pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13">  13:</span>             colaProfilers[colaProfilers.length] = { name: title, start: <span style="color: #0000ff">new</span> Date(),deep:colaProfilers.length };</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14">  14:</span>         };</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15">  15:</span>&#160; </pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16">  16:</span>         window.console.profileEnd = function() {</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17">  17:</span>             <span style="color: #0000ff">if</span> (enabled == <span style="color: #0000ff">false</span>)</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18">  18:</span>                 <span style="color: #0000ff">return</span>;</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19">  19:</span>             var endTime = <span style="color: #0000ff">new</span> Date();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20">  20:</span>             var currentProfiler = colaProfilers[colaProfilers.length - 1];</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21">  21:</span>             var duration = endTime.valueOf() - currentProfiler.start.valueOf();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22">  22:</span>             colaProfilers.pop();</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23">  23:</span>             refProfilerElem.append(<span style="color: #006080">&quot;&lt;div style='margin-left:&quot;</span>+currentProfiler.deep*10+<span style="color: #006080">&quot;'&gt;&quot;</span>+currentProfiler.name + <span style="color: #006080">&quot; (&quot;</span> + duration + <span style="color: #006080">&quot; ms )&lt;/div&gt;&quot;</span>);</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24">  24:</span>         };</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25">  25:</span>     }</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26">  26:</span> }</pre>
<p><!--CRLF--></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/07/10/when-you-have-javascriptjquery-performance-problems-in-ie6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET and startups</title>
		<link>http://hugozap.com/blog/2010/06/04/net-and-startups/</link>
		<comments>http://hugozap.com/blog/2010/06/04/net-and-startups/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 20:58:32 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[Entrepreneurship]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/06/04/net-and-startups/</guid>
		<description><![CDATA[Entrepreneurs are a very special niche of market, they demand tools that allow them to bootstrap their companies fast and budget is always an important constraint. Most of the startups choose an open source stack because of the price, open source tools  and great communities even if the technologies they choose are not better than [...]]]></description>
			<content:encoded><![CDATA[<p>Entrepreneurs are a very special niche of market, they demand tools that allow them to bootstrap their companies fast and budget is always an important constraint.</p>
<p>Most of the startups choose an open source stack because of the price, open source tools  and great communities even if the technologies they choose are not better than proprietary alternatives like Microsoft. Big companies like Google have also influenced this by giving the community great tools and Api&#8217;s and with a very competitive price (sometimes free).</p>
<p>Microsoft has been late to the party and i see they are right now trying to get the attention of entrepreneurs in different areas:</p>
<ol>
<li>Database tools like SQL Server express</li>
<li>IDE’s like Visual Studio Web developer Express</li>
<li>Windows Azure and their price scheme.</li>
<li>Programs like BizSpark</li>
</ol>
<p>However i think they that Microsoft has to do better if they want to stop the leak of great programmers from .NET to other technologies. ( The problem here is not for Microsoft but for all of us who won’t be able to learn from them anymore because they got tired of Microsoft policies and decided to go to Ruby on rails so they stop focusing on blogging on .NET ).</p>
<p>Some of the current problems me and others see are:</p>
<h3>Yes, free tools but with obvious limitations.</h3>
<p>I know Microsoft needs to make money, and i think that corporate clients can cover this aspect, but what about <strong>giving their best tools to freelance  developers, enthusiast and startups for free</strong>?</p>
<p>Yes i know about BizSpark but as Rob Connery states, BizSpark only delays the payment for 3 years.. So you will still have to pay those 30000(?) dollars for Sql Server standard after 3 years or stop using it.</p>
<p>(Related: <a href="http://blog.wekeroad.com/2010/05/19/no-sql-in-the-wild?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+wekeroad/EeKc+(Rob+Conery)">TekPub switch from ASP.NET MVC to Ruby on Rails and Linux because of cost projections</a> )</p>
<p>I think that Microsoft thinks that by offering a limited version of Visual Studio or Sql express they will keep people happy. You may think that the 4 gigabytes limit of SQL Server express is a lot and that it is difficult to use it all, however what if your application starts to grow and you need to scale your database? bam!.. you can’t because <a href="http://www.dotnetspider.com/SqlServer-Tutorial-158.aspx">SQL Express only supports 1 CPU and only 1GB of Ram</a>.</p>
<p>You have other options like SQL Server Web Editions but as Rob Conery mentions. Why would you choose to pay if there are free alternatives with zero cost?, i think he has a point there.</p>
<p>Quality is not an advantage anymore. So saying that you will get a superior product won’t impress developers. They have seen great web products developed with a combination of  MySql, postgress, Rails,Linux, php etc and not that much “cool web 2.0 apps” using the Ms stack.</p>
<h3>Azure too expensive?</h3>
<p>I find the Tekpub a really useful example of a startup that did the math and decided to go with and open source stack (Even with their founders being great .NET developers). Rob Conery has an interesting conversation with Scottgu in twitter regarding Amazon EC2 prices vs Azure:</p>
<p><a href="http://hugozap.com/blog/wp-content/uploads/2010/06/image.png"><img style="display: inline; border: 0px;" title="image" src="http://hugozap.com/blog/wp-content/uploads/2010/06/image_thumb.png" border="0" alt="image" width="244" height="125" /></a> <a href="http://hugozap.com/blog/wp-content/uploads/2010/06/image1.png"><img style="display: inline; border: 0px;" title="image" src="http://hugozap.com/blog/wp-content/uploads/2010/06/image_thumb1.png" border="0" alt="image" width="244" height="118" /></a></p>
<p>And compare those 1400 with the projection of costs using Azure:</p>
<p><a href="http://hugozap.com/blog/wp-content/uploads/2010/06/image2.png"><img style="display: inline; border: 0px;" title="image" src="http://hugozap.com/blog/wp-content/uploads/2010/06/image_thumb2.png" border="0" alt="image" width="244" height="76" /></a></p>
<p>I think that there is not much to say about it.</p>
<p>The important point here is that it doesn’t matter how cool or sophisticated the .NET framework is if Microsoft doesn’t make it appealing for startups and open source developers, let’s hope that the situation will get better.</p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/06/04/net-and-startups/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What should you know about Javascript? (If you come from a server side language)</title>
		<link>http://hugozap.com/blog/2010/03/29/what-should-you-know-about-javascript-if-you-come-from-a-server-side-language/</link>
		<comments>http://hugozap.com/blog/2010/03/29/what-should-you-know-about-javascript-if-you-come-from-a-server-side-language/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 05:57:30 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[FrontEnd Development]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/03/29/what-should-you-know-about-javascript-if-you-come-from-a-server-side-language/</guid>
		<description><![CDATA[I learned Javascript some years ago, after a long time doing only c# and database related projects. Before deciding to learn it i had the feeling that creating reliable web interfaces was very complex and boring, however most of that thoughts came from not knowing the basic syntax, and more important, the patterns of usage [...]]]></description>
			<content:encoded><![CDATA[<p>I learned Javascript some years ago, after a long time doing only c# and database related projects. Before deciding to learn it i had the feeling that creating reliable web interfaces was very complex and boring, however most of that thoughts came from not knowing the basic syntax, and more important, the patterns of usage of the language and how it played with other technologies like css, and html.</p>
<p>Then i discovered the <a href="http://www.yuiblog.com/">YUI blog</a>. Is a  blog  written by some of the Yahoo team members (And some guests), with great posts about front end engineering topics, optimization techniques, patterns and utilities. It focuses mainly on the YUI library, but there are lots of topics that will be useful even if you use JQuery or other library.</p>
<p>After some years of writing/reading Javascript code i have realized that there are some topics that are specially important if you want to do it right. I will leave the technical details out , and focus on the concepts, and things typical js developers must do/use/know:</p>
<h2>Functions</h2>
<p><span style="color: #333333;">By understanding how functions work in Javascript you will be able to leverage a lot of flexibility. Things like dynamic parameters, passing functions as parameters, variable scope,closures, anonymous functions are commonly used in Js world and is a good idea to be sure you understand those concepts.</span></p>
<h2>How is javascript executed and when.</h2>
<p>If you are starting with Javascript is common to ignore the way js scripts are loaded and executed and then spend time figuring out why you are having problems trying to get an element from the page.</p>
<p>You must make sure that all the elements you are trying to use from your script are already loaded by the time the script runs. The browser will execute javascript code as soon as it finds &lt;script&gt; tags. Keep that in mind if you want to access page elements that may not have been loaded yet.</p>
<h2>Common browser events.</h2>
<p>Learn the common browser events, like the “load” event of the window object that you can handle to run code when the HTML and images have finished loading.</p>
<p>( Javascript libraries enhance the events support, by creating an abstraction layer compatible with popular browsers so you won’t have too much trouble with different browsers).</p>
<h2>Common patterns</h2>
<p>I’ve found that patterns like Singleton are widely used by Javascript developers, and large programs will benefit by proper pattern use. I recommend the book  Pro JavaScript Design Patterns by Ross Harmes and Dustin Diaz. ( <strong>Before trying to understand patterns in Javascript make sure you feel comfortable with javascript syntax, keywords, and have some experience writing js code</strong>).</p>
<h2>Understand JSON</h2>
<p>After you have studied javascript syntax, arrays, object literals you will understand JSON without trouble, because JSON is just javascript syntax as a string that you can pass between server and client (With some restrictions of course).</p>
<p>Here, you want to use a JSON utility like json2.js (<a href="http://www.json.org/js.html">http://www.json.org/js.html</a>) to parse and generate secure json strings. (All the frameworks also have json utilities).</p>
<h2>CSS</h2>
<p>Yes, is important to understand how CSS rules work. With some frameworks , CSS is the easiest way to obtain a reference to elements in your page. (JQuery supports CSS 3 selectors).</p>
<p>Knowing the CSS rules is also important because most javascript style attributes have similar names to the CSS attributes. (they are the same most of the time, with some exceptions)</p>
<h2>Master the tools.</h2>
<p>Write basic javascript programs and debug them with Firebug (firefox extension). Some things you should learn with firebug:</p>
<ol>
<li>set breakpoints and check variable values</li>
<li>Learn to step-in, step-out when debugging.</li>
<li>Get familiar with the Network tab to check if there was a problem loading a resource (js, css, image). This will be useful to validate AJAX requests parameters.</li>
</ol>
<p>There are lots of tools to help you develop better javascript code. Some of them belong to the following categories:</p>
<ol>
<li>Minify and compress tools (for faster loading pages)</li>
<li>Verification tools (like <a href="http://www.jslint.com/">http://www.jslint.com/</a>) detect errors and bad practices.</li>
<li>Documentation tools to generate docs for you</li>
<li>Debugging tools for different browsers</li>
<li>IDE’s</li>
</ol>
<h2>Learn a Javascript Library (at the right time).</h2>
<p>Please, understand how javascript works before learning a framework like JQuery. It can be tempting to just skip the “hard” parts of Javascript because frameworks make life easier, however that’s a bad idea, you will lost lots of time guessing why your code doesn’t work, or have conflicts with other on the page.</p>
<p>Having said that, i strongly recommend you to learn a Javascript framework like (JQuery, YUI, mootools, etc.) It will improve your productivity a lot. There are thousands of plugins that you can use, and event write your own. All the popular frameworks make it easy to create extensions.</p>
<p>If you are going to begin with Javascript, all these points will be important. There are tons of tutorials, documents, but hopefully this post will serve you as a guide.</p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/03/29/what-should-you-know-about-javascript-if-you-come-from-a-server-side-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Learning, a way of procrastinate?</title>
		<link>http://hugozap.com/blog/2010/03/12/learning-a-way-of-procrastinate/</link>
		<comments>http://hugozap.com/blog/2010/03/12/learning-a-way-of-procrastinate/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 03:51:01 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/03/12/learning-a-way-of-procrastinate/</guid>
		<description><![CDATA[For some time I&#8217;ve been thinking about this, and in my opinion is a common “problem” among tech people, however it can impact directly your productivity, and your long term goals in life. As a software developer who also enjoys entrepreneurship i have realized the importance of this issue. The problem? Learning is fun, and [...]]]></description>
			<content:encoded><![CDATA[<p>For some time I&#8217;ve been thinking about this, and in my opinion is a common “problem” among tech people, however it can impact directly your productivity, and your long term goals in life. As a software developer who also enjoys entrepreneurship i have realized the importance of this issue. The problem?</p>
<p><strong>Learning is fun, and addictive.</strong></p>
<p>Wait..Why is that a problem?…</p>
<p>Well, it may not be a problem per se, however with the unlimited flow of information and the ease of access, <strong>you could spend your life only receiving information and doing nothing useful with it</strong>, and if that&#8217;s your goal then its ok. However i see a fundamental problem here, and it has to do with the balance of input vs ouput and the limited time we have in a day. For me it all goes to the following</p>
<p><strong>“You can only be really good in a limited number of things”</strong></p>
<p>Why?, because you only get good in something with experience and hard work, and while you work you must put aside other cool technologies, languages, platforms, etc. etc… I’ve known developers that have a hard time with this, and believe that is the knowledge quantity that matters,&#160; however they are not really good at any of the things they learn because there are other million things in their heads, so no further efforts are made to really know the ins and outs of an specific topic.</p>
<p><strong>Control your input</strong></p>
<p>It has happened to me, someone puts a really cool demo online, i see it, and then i feel the urge to learn that technology/ technique/ tool, even if it is totally unrelated to my main interests and goals. I know that it can give me some “instant gratification” but maybe i can use that time to keep improving the skills i know i will need to develop products for my company or to complete a hobby project.&#160; I’m not saying that learning new things that are not directly related to your job or interests is a bad thing, because it isn’t and it can give you a new perspective and creative ideas, the point I&#8217;m trying to make is the importance of balancing the time spent learning and the time spent applying the knowledge building something useful.</p>
<p>I believe that even the learning process should be planned, and with the infinite amount of information available is important to be good at filtering the useful content from the fun-but-useless-and-unrelated information and more important, applying the knowledge creating something that will contribute to achieve your goals.</p>
<p>(Note to the grammar police: If you catch a grammar/redaction error please send an email to <a href="mailto:hugozap@obassi.com">hugozap@obassi.com</a> with your suggestions, and help me improve my English <img src='http://hugozap.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/03/12/learning-a-way-of-procrastinate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>custom data attributes in html</title>
		<link>http://hugozap.com/blog/2010/03/06/custom-data-attributes-in-html/</link>
		<comments>http://hugozap.com/blog/2010/03/06/custom-data-attributes-in-html/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 21:51:32 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[FrontEnd Development]]></category>
		<category><![CDATA[Web development]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/03/06/custom-data-attributes-in-html/</guid>
		<description><![CDATA[A lot of developers are already using custom html attributes to represent data inside html elements. All the important browsers support custom attributes, even if the html page doesn’t validate.&#160; &#60;div customAttribute=”customdata” &#62; &#60;/div&#62; If you are going to use a custom attribute, use the following syntax and your html page will be valid in [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of developers are already using custom html attributes to represent data inside html elements. All the important browsers support custom attributes, even if the html page doesn’t validate.&#160; </p>
<p>&lt;div customAttribute=”customdata” &gt; &lt;/div&gt;</p>
<p>If you are going to use a custom attribute, use the following syntax and your html page will be valid in html 5</p>
<p>&lt;div data-lastname=”edwards”&gt; &lt;/div&gt;</p>
<p>Use the &quot;data-variableName&quot; format.</p>
<p>You will be able to access this attributes normally with jQuery, or pure javascript now, and in the future you will be able to access the contents of the attributes with the syntax <strong>element.dataset.lastname</strong></p>
<p><strong>More info on custom data attributes in html 5:</strong></p>
<p><strong><a href="http://dev.w3.org/html5/spec/dom.html#embedding-custom-non-visible-data">http://dev.w3.org/html5/spec/dom.html#embedding-custom-non-visible-data</a></strong></p>
<p>Check the complete html5 spec here: <a href="http://dev.w3.org/html5/spec/">http://dev.w3.org/html5/spec/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/03/06/custom-data-attributes-in-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improve the user experience. Avoid the first ajax request by embedding  initial data in the page.</title>
		<link>http://hugozap.com/blog/2010/02/21/improve-the-user-experience-avoid-the-first-ajax-request-by-embedding-the-initial-data-in-the-page/</link>
		<comments>http://hugozap.com/blog/2010/02/21/improve-the-user-experience-avoid-the-first-ajax-request-by-embedding-the-initial-data-in-the-page/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 23:18:25 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Web development]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/02/21/improve-the-user-experience-avoid-the-first-ajax-request-by-embedding-the-initial-data-in-the-page/</guid>
		<description><![CDATA[In this post i want to discuss a simple optimization technique for faster loading web applications. Suppose your web application needs to show a list of items from the database, you use ajax, so when the page loading is complete your javascript code will create an http request to the server to get the data [...]]]></description>
			<content:encoded><![CDATA[<p>In this post i want to discuss a simple optimization technique for faster loading web applications.</p>
<p>Suppose your web application needs to show a list of items from the database, you use ajax, so when the page loading is complete your javascript code will create an http request to the server to get the data in JSON format.</p>
<p>This is a common pattern, however you can improve the user experience by delivering faster page loading times, how?. </p>
<p>Loading the initial data when the page is rendered and embedding it with the page.</p>
<p>Using this technique you render the proper javascript code with the object initialization to your data.</p>
<p><a href="http://hugozap.com/blog/wp-content/uploads/2010/02/initialDataLoading.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="initialDataLoading" border="0" alt="initialDataLoading" src="http://hugozap.com/blog/wp-content/uploads/2010/02/initialDataLoading_thumb.png" width="381" height="392" /></a> </p>
<p>This simple technique is useful because if the dataset is small (for example a list of countries) then it can be embedded in the html page request. You could also load the initial paged results of a large dataset in this way. True, you have to add a little more code compared to the classic “always make an additional request after the page is done”, but your users will be happier.</p>
<h2>How to embed the initial data set into the html?</h2>
<p>If you are using ASP.NET MVC You can use the HTML helper included in the sample code. It takes a list of the objects you want to embed in the html page. (The .NET JSON serializer will be used to create an array), you also pass the name of the javascript namespace and variable where the object will be assigned.</p>
<p>The result is a &lt;script&gt; tag with the correct javasript variable assignation, so your javascript code will have access to the json data.</p>
<p>It looks like this:</p>
<p>&lt;%=Html.RenderJavascriptVariable(&quot;Application.Global&quot;,&quot;clientList&quot;,Model) %&gt;</p>
<p>The first parameter “Application.Global” is the namespace in javascript where the variable will be created. In the example, the variable is called <em>clientList </em>and will be accessible using <em>Application.Global.clientList. </em>In the example, the data serialized will be in the model, however you can also use ViewData.</p>
<p><a href="http://hugozap.com/blog/wp-content/uploads/2010/02/TestEmbedFirstRequestData_VS_2008.zip">Download sample code</a>(ASP.NET MVC Solution)</p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/02/21/improve-the-user-experience-avoid-the-first-ajax-request-by-embedding-the-initial-data-in-the-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Front-End engineering for .NET developers</title>
		<link>http://hugozap.com/blog/2010/02/14/front-end-engineering-for-net-developers/</link>
		<comments>http://hugozap.com/blog/2010/02/14/front-end-engineering-for-net-developers/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 03:35:21 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[Web development]]></category>
		<category><![CDATA[front end engineering]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web design]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/2010/02/14/front-end-engineering-for-net-developers/</guid>
		<description><![CDATA[(Warning: If you are a seasoned web developer you won’t find anything new in this post) This is the first post (of ?) about front end engineering in the .NET world. This is a critical topic if you have to do any web development. Maybe you think that with all the RAD tools,drag and drop [...]]]></description>
			<content:encoded><![CDATA[<p>(Warning: If you are a seasoned web developer you won’t find anything new in this post)</p>
<p>This is the first post (of ?) about front end engineering in the .NET world. This is a critical topic if you have to do any web development. Maybe you think that with all the RAD tools,drag and drop utilities that Microsoft gives to developers there is no need to code in javascript, know proper CSS, or html, in my opinion that is an illusion that will hurt you in the end. </p>
<p>My goal with this series is to help developers in the .net world to make the jump to properly create web applications and do not feel intimidated by the core web technologies.&#160; </p>
<p>1. Don’t be afraid of HTML, Javascript or CSS</p>
<p>This is essential if you are going to work on any web development project, even if you are using only ASP.NET Webforms controls. What&#8217;s the reason to not avoid these technologies? Pretty simple,<strong> <em>if you avoid them you will never learn them</em></strong>, and this will cause you stress because you will feel that you don’t really control your environment. Some simple things that can make your life harder if you don’t know the principles of front end:</p>
<ul>
<li>Troubleshoot simple HTML issues (what tag should i use, a p, div, span?, what’s the difference? </li>
<li>Being able to create a decent interface for your applications (I know you are not a designer but a good presentation is always a good thing) </li>
<li>How can i add effects to my page (that improve usability)</li>
<li>Why my layout is screwed in browser x? (where x usually is internet explorer), how can i fix it?</li>
<li>What advanced techniques can i use and how to support them in old browsers?</li>
</ul>
<p>What should i learn first?. In my opinion you should get yourself familiar with HTML first, then learn CSS and finally get yourself comfortable with Javascript, you will thank yourself the time invested trust me.</p>
<p>2. Understand the main HTML tags. You want to use the proper tag to represent the correct type of data, this is called semantics. <a href="http://www.w3schools.com/tags/default.asp">Use this page as starting point and reference for xhtml tags</a></p>
<p>3. Feel comfortable writing CSS by hand. First, you have to understand the basic css syntax, how css rules are defined and be familiar with the common ones.<em> <strong>I strongly suggest you to read a css book (from start to finish)</strong></em>, if you only read web tutorials, then your knowledge will be “fragmented”, and more important, you will not understand the fundamentals.</p>
<p>4. Learn to write well organized Javascript code. Some developers don’t care to learn javascript and just try to guess the syntax when they need it, with bad results and the “i hate javascript” mindset, that is because <em><strong>javascript is not a toy language, it has a very powerful set of features and rules, but you have to understand them</strong></em>.</p>
<p>Again, get a book on javascript and spend 2 months reading it, if you are already familiar with C#,C, or java you will be able to skip some pages, however there are some concepts that will be new like closures that you have to understand in order to create components.</p>
<p>As you see, there is nothing technical in this post, and most of it is trivial if you already know these topics, however if you have been in the server side world , then you could use this as a guide to make the jump to web development.</p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/02/14/front-end-engineering-for-net-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello</title>
		<link>http://hugozap.com/blog/2010/02/07/hello/</link>
		<comments>http://hugozap.com/blog/2010/02/07/hello/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 03:33:26 +0000</pubDate>
		<dc:creator>Hugo</dc:creator>
				<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://hugozap.com/blog/?p=7</guid>
		<description><![CDATA[Hi, my name is&#160; Hugo, i’m a 27 year old sofware developer and entrepreneur from Bogotá. Right now, my passions are my business and software development, specially front end engineering and everything .net related. I have other interests and passions like everybody else and hopefully some of that will be reflected on this blog]]></description>
			<content:encoded><![CDATA[<p>Hi, my name is&#160; Hugo, i’m a 27 year old sofware developer and entrepreneur from Bogotá.</p>
<p>Right now, my passions are my business and software development, specially front end engineering and everything .net related.</p>
<p>I have other interests and passions like everybody else and hopefully some of that will be reflected on this blog</p>
]]></content:encoded>
			<wfw:commentRss>http://hugozap.com/blog/2010/02/07/hello/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
