<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Eric Tobia's Blog - Programming</title>
    <link>http://www.erictobia.com/</link>
    <description>People, places, and things (via HTTP)</description>
    <language>en-us</language>
    <copyright>Eric Tobia</copyright>
    <lastBuildDate>Sat, 21 Feb 2009 14:51:41 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>blog@erictobia.com</managingEditor>
    <webMaster>blog@erictobia.com</webMaster>
    <item>
      <trackback:ping>http://www.erictobia.com/Trackback.aspx?guid=6ab4742b-0a03-4cd0-8e40-906a85ae5a8b</trackback:ping>
      <pingback:server>http://www.erictobia.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.erictobia.com/PermaLink,guid,6ab4742b-0a03-4cd0-8e40-906a85ae5a8b.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.erictobia.com/CommentView,guid,6ab4742b-0a03-4cd0-8e40-906a85ae5a8b.aspx</wfw:comment>
      <wfw:commentRss>http://www.erictobia.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6ab4742b-0a03-4cd0-8e40-906a85ae5a8b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">The other day a colleague of mine needed
to load a strongly typed ADO.NET DataTable from a LINQ to SQL query. We didn't find
any good solutions using "The Google", so after a bit of hacking we came up with something
similar to this:<br /><br /><pre><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"> PeopleDataSet
ds <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> PeopleDataSet(); <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">using</span> (PeopleDataContext
context <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span><span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> PeopleDataContext())
{ (from p <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">in</span> context.Persons
select <span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;">new</span> {
Row <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> ds.Person.AddPersonRow(p.Id,
p.FirstName, p.LastName) }).ToList(); }</span></pre><br />
After <font face="Courier New">ToList()</font> executes we should have a DataTable
populated with the results of our query.<br /><br /><p></p><img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=6ab4742b-0a03-4cd0-8e40-906a85ae5a8b" /></body>
      <title>Load a DataTable with LINQ</title>
      <guid isPermaLink="false">http://www.erictobia.com/PermaLink,guid,6ab4742b-0a03-4cd0-8e40-906a85ae5a8b.aspx</guid>
      <link>http://www.erictobia.com/2009/02/21/LoadADataTableWithLINQ.aspx</link>
      <pubDate>Sat, 21 Feb 2009 14:51:41 GMT</pubDate>
      <description>The other day a colleague of mine needed to load a strongly typed ADO.NET DataTable from a LINQ to SQL query. We didn't find any good solutions using "The Google", so after a bit of hacking we came up with something similar to this:&lt;br&gt;
&lt;br&gt;
&lt;pre&gt;&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt; PeopleDataSet
ds &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; PeopleDataSet(); &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;using&lt;/span&gt; (PeopleDataContext
context &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; PeopleDataContext())
{ (from p &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;in&lt;/span&gt; context.Persons
select &lt;span style="color: Blue; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;new&lt;/span&gt; {
Row &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; ds.Person.AddPersonRow(p.Id,
p.FirstName, p.LastName) }).ToList(); }&lt;/span&gt;&lt;/pre&gt;
&lt;br&gt;
After &lt;font face="Courier New"&gt;ToList()&lt;/font&gt; executes we should have a DataTable
populated with the results of our query.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=6ab4742b-0a03-4cd0-8e40-906a85ae5a8b" /&gt;</description>
      <comments>http://www.erictobia.com/CommentView,guid,6ab4742b-0a03-4cd0-8e40-906a85ae5a8b.aspx</comments>
      <category>.NET</category>
      <category>Programming</category>
    </item>
    <item>
      <trackback:ping>http://www.erictobia.com/Trackback.aspx?guid=2a7dd93a-b279-4362-bf5a-bac92217383b</trackback:ping>
      <pingback:server>http://www.erictobia.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.erictobia.com/PermaLink,guid,2a7dd93a-b279-4362-bf5a-bac92217383b.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.erictobia.com/CommentView,guid,2a7dd93a-b279-4362-bf5a-bac92217383b.aspx</wfw:comment>
      <wfw:commentRss>http://www.erictobia.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2a7dd93a-b279-4362-bf5a-bac92217383b</wfw:commentRss>
      <title>The Three “R”s of Volta</title>
      <guid isPermaLink="false">http://www.erictobia.com/PermaLink,guid,2a7dd93a-b279-4362-bf5a-bac92217383b.aspx</guid>
      <link>http://www.erictobia.com/2007/12/15/TheThreeRsOfVolta.aspx</link>
      <pubDate>Sat, 15 Dec 2007 02:13:11 GMT</pubDate>
      <description>&lt;span style="font-size: 10pt; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;A prevalent theme in the Volta &lt;a href="http://labs.live.com/volta/docs/"&gt;documentation&lt;/a&gt; is
the concept of the three “R”s. These three principles are at the heart of what Volta
attempts to provide for developers.&amp;nbsp; They are retargeting, remodulating, and
refactoring.&lt;br&gt;
&lt;br&gt;
&lt;font size="2"&gt;&lt;u&gt;&lt;b&gt;Retargeting&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
To me this is the coolest aspect of Volta and the feature that makes it a very interesting
technology. At its core Volta is a compiler or more accurately a recompiler.&amp;nbsp;
Instead of recompiling the source code Volta uses a technique called MSIL rewriting.
This is what enables the developer to write client-side browser code in C#. Since
all CLR languages compile to MSIL, Volta can use that as the common denominator. Volta
is capable of MSIL to MSIL, and MSIL to JavaScript conversion.&lt;br&gt;
&lt;br&gt;
&lt;font size="2"&gt;&lt;u&gt;&lt;b&gt;Remodulating&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
Another goal of the Volta toolset is seamless cross-browser support. As the documentation
states:&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;i&gt;&amp;nbsp;Volta hides as many browser-specific differences as possible,
but still allows developers to leverage the unique capabilities of particular browsers.
Instead of targeting solely the intersection of browser capabilities, Volta targets
the entire union, but makes the intersection browser-agnostic. This is browser remodulating.&lt;/i&gt;
&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Remodulating also deals with the debugging experience. Regardless of the browser platform
developers will be stepping through their application code within Visual Studio. That's
assuming of course that your target is either IE or FireFox which are the only browsers
supported in the current release. 
&lt;br&gt;
&lt;font size="2"&gt;
&lt;br&gt;
&lt;/font&gt;&lt;font size="2"&gt;&lt;u&gt;&lt;b&gt;Refactoring&lt;/b&gt;&lt;/u&gt;&lt;/font&gt;
&lt;br&gt;
&lt;br&gt;
Volta refactoring is about enabling developers to create their applications while
deferring decisions about what tier a particular component will run in. In my opinion
this will be the most controversial feature of the toolset.&amp;nbsp; &lt;a href="http://www.knowing.net/PermaLink,guid,8c6ba500-a6b4-4598-8f2c-52d31cf3bf16.aspx"&gt;Larry
O’Brien has some reservations about it&lt;/a&gt;:&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;i&gt;This sounds like a bad idea to me. You can't refactor away the difference
between an in-memory method call and an Internet message: one happens in nanoseconds
and the other in milliseconds&lt;/i&gt;
&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
I have some questions of my own about this. The docs claim that:&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;&lt;i&gt;During development, all code runs in the client for ease of testing
and debugging.&lt;/i&gt;
&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
What are the implications of this? Not every .NET class is meant to run in a browser
context. Does Volta offer any automatic guidance with regard to this? The notion of
clicking a “Split Tiers” check box and decorating a class with a &lt;font face="Courier New"&gt;[RunAtOrigin]&lt;/font&gt; does
seem implicitly powerful, I’m just curious to know where the model breaks down. I
will try to answer these questions and others as I dig deeper into the framework.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=2a7dd93a-b279-4362-bf5a-bac92217383b" /&gt;</description>
      <comments>http://www.erictobia.com/CommentView,guid,2a7dd93a-b279-4362-bf5a-bac92217383b.aspx</comments>
      <category>.NET</category>
      <category>Programming</category>
      <category>Volta</category>
    </item>
    <item>
      <trackback:ping>http://www.erictobia.com/Trackback.aspx?guid=60c00cc8-b378-4b9b-a75a-ffb785cf39c9</trackback:ping>
      <pingback:server>http://www.erictobia.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.erictobia.com/PermaLink,guid,60c00cc8-b378-4b9b-a75a-ffb785cf39c9.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.erictobia.com/CommentView,guid,60c00cc8-b378-4b9b-a75a-ffb785cf39c9.aspx</wfw:comment>
      <wfw:commentRss>http://www.erictobia.com/SyndicationService.asmx/GetEntryCommentsRss?guid=60c00cc8-b378-4b9b-a75a-ffb785cf39c9</wfw:commentRss>
      <title>SICP in C# 3.0 – Higher-Order Procedures</title>
      <guid isPermaLink="false">http://www.erictobia.com/PermaLink,guid,60c00cc8-b378-4b9b-a75a-ffb785cf39c9.aspx</guid>
      <link>http://www.erictobia.com/2007/12/03/SICPInC30HigherOrderProcedures.aspx</link>
      <pubDate>Mon, 03 Dec 2007 00:01:16 GMT</pubDate>
      <description>&lt;img src="http://www.erictobia.com/content/binary/lambda1.gif" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
One of my favorite sections in &lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book.html"&gt;SICP&lt;/a&gt; so
far has been section &lt;a href="ttp://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#%_sec_1.3"&gt;1.3&lt;span style=""&gt; &lt;/span&gt;Formulating
Abstractions with Higher-Order Procedures&lt;/a&gt;.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Higher-order_function"&gt;Higher-Order
Procedures&lt;/a&gt; are procedures that deal with other procedures.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;They
can take a procedure as an argument and/or return a procedure as a result. 
&lt;p&gt;
Though it is somewhat academic, I really like the example that &lt;a href="http://en.wikipedia.org/wiki/Hal_Abelson"&gt;Abelson&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Gerald_Jay_Sussman"&gt;Sussman&lt;/a&gt; use
in section 1.3.1 to explain the “procedures as arguments” scenario.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;To
illustrate this concept they implement summation &lt;img src="http://www.erictobia.com/content/binary/sigma.gif" border="0"&gt; using
Scheme.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;They implement a higher-order procedure called
“sum” that takes two procedures and a range of numbers as arguments.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;One
procedure is used for computing the value that is added to the sum and the other is
used to determine the next value to compute.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;The Scheme
code can be seen &lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-12.html#%_sec_1.3.1"&gt;here&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
&lt;o:p&gt;&lt;/o:p&gt;
It’s not as useful as &lt;a href="http://en.wikipedia.org/wiki/Map_%28higher-order_function%29"&gt;map&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29"&gt;reduce&lt;/a&gt;,
but those are not discussed until Chapter 2. 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;o:p&gt;&lt;/o:p&gt;
As some of you may know C# 3.0 adds a whole slew of functional/dynamic features.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Whether
this is an effort to keep up with the &lt;a href="http://www.ruby-lang.org/en/"&gt;cool&lt;/a&gt; &lt;a href="http://www.python.org/"&gt;kids&lt;/a&gt; or
merely a necessity for making &lt;a href="http://en.wikipedia.org/wiki/LINQ"&gt;LINQ&lt;/a&gt; work
is not important to me.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;What I’m curious to know is if
the features make it easier to implement the concepts in SICP using C# 3.0.
&lt;/p&gt;
&lt;p&gt;
&lt;b style=""&gt;&lt;u&gt;Implementing “Sum” in C# 3.0&lt;/u&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
Following along with the example from SICP - let’s say that you have defined the following
methods.
&lt;/p&gt;
&lt;span style=""&gt;&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;img src="http://www.erictobia.com/content/binary/sumcode1.gif" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
I decided to break with the book here and use iteration instead of recursion to make
the code a little more digestible. 
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Common to each method is the idea of iterating over a range of numbers and adding
the result of each computation to the total.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;If we create
a higher-order procedure called “Sum” to abstract out this behavior we can then redefine
each method.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;pre&gt;&lt;img src="http://www.erictobia.com/content/binary/sumcode2.gif" border="0"&gt;&lt;/pre&gt;
The “=&amp;gt;” and “Func” constructs come from the new &lt;i style=""&gt;Lambda expressions&lt;/i&gt; feature
in C#.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Lambda expressions are a great new aspect of the
language and they make implementing higher-order procedures a lot easier.&amp;nbsp; In
this case the "term" and "next" arguments can be passed as Lambda expressions.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
I had to cheat and do some casting &lt;a href="http://en.wikipedia.org/wiki/Shenanigans"&gt;shenanigans&lt;/a&gt; because
the division operation in "PiSum()" brings floating point numbers into the mix, but
I feel like this code does capture the essence of the original Scheme implementation.&lt;span style=""&gt;&amp;nbsp;
Implementing "Sum" as a &lt;a href="http://msdn2.microsoft.com/en-us/library/twcad0zb%28VS.80%29.aspx"&gt;generic
method&lt;/a&gt; might be a way to make the code more elegant.&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;span style=""&gt;&lt;/span&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
If subverting the type system does not appeal to you, the following JavaScript implementation
might be of interest.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.erictobia.com/content/binary/sumcode3.gif" border="0"&gt;
&lt;br&gt;
&lt;/p&gt;
JavaScript is more similar to Scheme (dynamic typing/first class functions) so it
makes sense that the translation is smoother.&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
It turns out that there are other people interested in implementing SICP in different
languages.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://www.codepoetics.com/wiki/index.php?title=Topics:SICP_in_other_languages"&gt;Chris
Rathman&lt;/a&gt; has translated parts of SICP into 19 other languages.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;One
disturbing thing to note about Chris’s C# translation is that it doesn’t go beyond
chapter 1.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Does that mean that it is not possible to implement
the code from the rest of the book in C#?&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: Wingdings;"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=60c00cc8-b378-4b9b-a75a-ffb785cf39c9" /&gt;</description>
      <comments>http://www.erictobia.com/CommentView,guid,60c00cc8-b378-4b9b-a75a-ffb785cf39c9.aspx</comments>
      <category>C# 3.0</category>
      <category>Programming</category>
      <category>SICP</category>
    </item>
    <item>
      <trackback:ping>http://www.erictobia.com/Trackback.aspx?guid=1b20c7c3-be56-49d6-8565-c37caa298477</trackback:ping>
      <pingback:server>http://www.erictobia.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.erictobia.com/PermaLink,guid,1b20c7c3-be56-49d6-8565-c37caa298477.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.erictobia.com/CommentView,guid,1b20c7c3-be56-49d6-8565-c37caa298477.aspx</wfw:comment>
      <wfw:commentRss>http://www.erictobia.com/SyndicationService.asmx/GetEntryCommentsRss?guid=1b20c7c3-be56-49d6-8565-c37caa298477</wfw:commentRss>
      <title>ASP.NET and Spolsky’s Law of Leaky Abstractions</title>
      <guid isPermaLink="false">http://www.erictobia.com/PermaLink,guid,1b20c7c3-be56-49d6-8565-c37caa298477.aspx</guid>
      <link>http://www.erictobia.com/2007/11/25/ASPNETAndSpolskysLawOfLeakyAbstractions.aspx</link>
      <pubDate>Sun, 25 Nov 2007 02:46:05 GMT</pubDate>
      <description>&lt;p class="MsoNormal"&gt;
For reasons beyond my control I recently found myself developing in classic &lt;a href="http://en.wikipedia.org/wiki/Active_Server_Pages"&gt;ASP&lt;/a&gt;.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;After
years of developing in &lt;a href="http://en.wikipedia.org/wiki/Asp.net"&gt;ASP.NET&lt;/a&gt; this
was obviously a little jarring.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;However, what surprised
me about the experience was that there were some things about classic ASP that I actually
enjoyed.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Most notably I felt I had more control with classic
ASP.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;Nothing was in my way. &lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;Things
that should be simple were simple. &lt;span style=""&gt;&amp;nbsp;&lt;/span&gt;For a moment I imagined
that this is what it must feel like to be a &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; developer.
;-)&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
I wondered why I felt this way.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;After all, the whole the
whole point of ASP.NET is to save me from having to deal with “icky” &lt;a href="http://en.wikipedia.org/wiki/Html"&gt;HTML&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Javascript"&gt;JavaScript&lt;/a&gt;,
and &lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets"&gt;CSS&lt;/a&gt;…right?&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I
really like developing in ASP.NET.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;b style=""&gt;I would
take ASP.NET over classic ASP any day of the week&lt;/b&gt; (and twice on Sunday).&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;ASP.NET
is certainly one of most thoughtfully designed and well implemented frameworks I have
ever worked with.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott
Guthrie&lt;/a&gt; is a genius and he has the &lt;a href="http://www.google.com/patents?id=T7oSAAAAEBAJ"&gt;patents&lt;/a&gt; &lt;a href="http://www.google.com/patents?id=5esVAAAAEBAJ"&gt;to&lt;/a&gt; &lt;a href="http://www.google.com/patents?id=29QVAAAAEBAJ"&gt;prove&lt;/a&gt; &lt;a href="http://www.google.com/patents?id=C50SAAAAEBAJ"&gt;it&lt;/a&gt;.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;However,
I couldn’t ignore the fact that some things were a lot easier to accomplish in classic
ASP.&lt;br&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;br&gt;
I realized the unfortunate truth that there are some abstractions in ASP.NET (and
all frameworks for that matter) that can transform into obstacles.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;In
order to use these abstractions you end up having to learn a lot about the internals
of the framework.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I’m talking about &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/a&gt;.
You have to codify assumptions about the underlying technologies into your application.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;In
other words, the abstraction &lt;i style=""&gt;leaks&lt;/i&gt;.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I
borrow this term from Joel Spolsky’s &lt;a href="http://www.joelonsoftware.com/articles/LeakyAbstractions.html"&gt;Law
of Leaky Abstractions&lt;/a&gt;.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I think that the small sense
of empowerment I was feeling when developing in classic ASP came from the fact that
I wasn’t forced to dig too deep into, or worse, code around the framework in order
to get the job done.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;There was no framework.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
Another, even more heretical thought occurred to me during this process.&lt;span style=""&gt;&amp;nbsp; &lt;/span&gt;I
wondered if &lt;a href="http://support.microsoft.com/kb/303247"&gt;code-behind&lt;/a&gt; is always
necessary. Is it &lt;b style=""&gt;always&lt;/b&gt; essential to separate code and markup? &lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;If
you simply replaced VBScript with C# and gave yourself a set of libraries as rich
as the &lt;a href="http://en.wikipedia.org/wiki/Base_Class_Library"&gt;BCL&lt;/a&gt;, would combining
code and markup be more palatable or even more productive in some scenarios?&lt;span style=""&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=""&gt;Can
some aspects of ASP.NET be abandoned entirely?&amp;nbsp; &lt;/span&gt;I’m not sure, but I’m
now a little more inclined to find out.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=1b20c7c3-be56-49d6-8565-c37caa298477" /&gt;</description>
      <comments>http://www.erictobia.com/CommentView,guid,1b20c7c3-be56-49d6-8565-c37caa298477.aspx</comments>
      <category>Programming</category>
      <category>ASP.NET</category>
      <category>ASP</category>
      <category>Frameworks</category>
    </item>
    <item>
      <trackback:ping>http://www.erictobia.com/Trackback.aspx?guid=43ccc017-98a2-4581-9fa9-cade5436a203</trackback:ping>
      <pingback:server>http://www.erictobia.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.erictobia.com/PermaLink,guid,43ccc017-98a2-4581-9fa9-cade5436a203.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://www.erictobia.com/CommentView,guid,43ccc017-98a2-4581-9fa9-cade5436a203.aspx</wfw:comment>
      <wfw:commentRss>http://www.erictobia.com/SyndicationService.asmx/GetEntryCommentsRss?guid=43ccc017-98a2-4581-9fa9-cade5436a203</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://www.erictobia.com/content/binary/sicp.jpg" border="0" />
        <br />
        <br />
        <p>
Every once in a while I find myself reading a book that makes me feel stupid. As I
try to internalize the prose I can’t help but feel a strong sense of regret for not
being more adequately prepared. 
</p>
        <p>
Then I learn that the book has long been the basis for an “Intro to Programming” course
at <a href="http://www.mit.edu/">some college</a>. Did you say <b><i>intro</i></b> to
programming!? This is usually the part where I start to feel a strong sense of inferiority.
:-( 
</p>
        <p>
Is the feeling of inferiority enough to make me want to put the book down? Hell no.
If anything I’m finding <a href="http://mitpress.mit.edu/sicp/full-text/book/book.html">SICP</a> to
be one of the most compelling computer books I have ever read. Like the <a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29">Scheme</a> language
itself, SICP is incredibly dense. No reading on autopilot here, folks. You need to
be paying attention or you’re going to get nothing out of it. The code examples draw
almost exclusively from math. In the first chapter alone the following mathematical
concepts are used to “help” teach the reader about computer programming (in general)
and Scheme (in particular): 
</p>
        <ul>
          <li>
            <a href="http://en.wikipedia.org/wiki/Newton%27s_Method">Newton’s Method</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Fibonacci_number">Fibonacci</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/The_golden_ratio">The Golden Ratio</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Euclid%27s_algorithm">Euclid’s Algorithm</a>
          </li>
          <li>
            <a href="http://mathworld.wolfram.com/LamesTheorem.html">Lamé's Theorem</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Fermat_primality_test">The Fermat Test (Primes)</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Miller-Rabin_primality_test">Miller-Rabin Test</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Summation">Summation (Sigma)</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Integrals">Integrals</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Simpson%27s_rule">Simpson’s Rule</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Fixed_point_%28mathematics%29">Fixed Points
(Functions)</a>
          </li>
          <li>
            <a href="http://en.wikipedia.org/wiki/Lambda_calculus">Lambda Calculus</a>
          </li>
        </ul>
        <p>
The other thing that seems strange at first is that Scheme uses recursion for nearly
all processing. I’ve only completed the first chapter, but I have yet to see a “for”
or a “while” construct in any of the code. 
</p>
        <p>
I know that that some fellow .NET developers might ask “Why are you wasting your time
with that?” or “Why aren’t you spending your time learning about <a href="http://silverlight.net/">Silverlight</a>?”
Well I couldn’t really say for sure. I’m a big fan of Paul Graham’s <a href="http://www.paulgraham.com/articles.html">essays</a>,
so those are certainly what motivated me to have a look at a <a href="http://en.wikipedia.org/wiki/Lisp_%28programming_language%29">Lisp</a> dialect.
What’s keeping my interest is the richness and depth of the content. There’s just
so much there. 
</p>
        <p>
I plan to post more about SICP as I wade my way through it over the next several weeks…
or months. I’m going to take my time and savor every head scratching moment. <br /></p>
        <p>
If you are Java or C# programmer who is looking for something to expand your mind,
you should certainly have a look. 
</p>
        <br />
        <img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=43ccc017-98a2-4581-9fa9-cade5436a203" />
      </body>
      <title>SICP</title>
      <guid isPermaLink="false">http://www.erictobia.com/PermaLink,guid,43ccc017-98a2-4581-9fa9-cade5436a203.aspx</guid>
      <link>http://www.erictobia.com/2007/11/20/SICP.aspx</link>
      <pubDate>Tue, 20 Nov 2007 00:13:36 GMT</pubDate>
      <description>&lt;img src="http://www.erictobia.com/content/binary/sicp.jpg" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
Every once in a while I find myself reading a book that makes me feel stupid. As I
try to internalize the prose I can’t help but feel a strong sense of regret for not
being more adequately prepared. 
&lt;/p&gt;
&lt;p&gt;
Then I learn that the book has long been the basis for an “Intro to Programming” course
at &lt;a href="http://www.mit.edu/"&gt;some college&lt;/a&gt;. Did you say &lt;b&gt;&lt;i&gt;intro&lt;/i&gt;&lt;/b&gt; to
programming!? This is usually the part where I start to feel a strong sense of inferiority.
:-( 
&lt;/p&gt;
&lt;p&gt;
Is the feeling of inferiority enough to make me want to put the book down? Hell no.
If anything I’m finding &lt;a href="http://mitpress.mit.edu/sicp/full-text/book/book.html"&gt;SICP&lt;/a&gt; to
be one of the most compelling computer books I have ever read. Like the &lt;a href="http://en.wikipedia.org/wiki/Scheme_%28programming_language%29"&gt;Scheme&lt;/a&gt; language
itself, SICP is incredibly dense. No reading on autopilot here, folks. You need to
be paying attention or you’re going to get nothing out of it. The code examples draw
almost exclusively from math. In the first chapter alone the following mathematical
concepts are used to “help” teach the reader about computer programming (in general)
and Scheme (in particular): 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Newton%27s_Method"&gt;Newton’s Method&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Fibonacci_number"&gt;Fibonacci&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/The_golden_ratio"&gt;The Golden Ratio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Euclid%27s_algorithm"&gt;Euclid’s Algorithm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://mathworld.wolfram.com/LamesTheorem.html"&gt;Lamé's Theorem&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Fermat_primality_test"&gt;The Fermat Test (Primes)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Miller-Rabin_primality_test"&gt;Miller-Rabin Test&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Summation"&gt;Summation (Sigma)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Integrals"&gt;Integrals&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Simpson%27s_rule"&gt;Simpson’s Rule&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Fixed_point_%28mathematics%29"&gt;Fixed Points
(Functions)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://en.wikipedia.org/wiki/Lambda_calculus"&gt;Lambda Calculus&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The other thing that seems strange at first is that Scheme uses recursion for nearly
all processing. I’ve only completed the first chapter, but I have yet to see a “for”
or a “while” construct in any of the code. 
&lt;/p&gt;
&lt;p&gt;
I know that that some fellow .NET developers might ask “Why are you wasting your time
with that?” or “Why aren’t you spending your time learning about &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt;?”
Well I couldn’t really say for sure. I’m a big fan of Paul Graham’s &lt;a href="http://www.paulgraham.com/articles.html"&gt;essays&lt;/a&gt;,
so those are certainly what motivated me to have a look at a &lt;a href="http://en.wikipedia.org/wiki/Lisp_%28programming_language%29"&gt;Lisp&lt;/a&gt; dialect.
What’s keeping my interest is the richness and depth of the content. There’s just
so much there. 
&lt;/p&gt;
&lt;p&gt;
I plan to post more about SICP as I wade my way through it over the next several weeks…
or months. I’m going to take my time and savor every head scratching moment.&amp;nbsp;&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
If you are Java or C# programmer who is looking for something to expand your mind,
you should certainly have a look. 
&lt;/p&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://www.erictobia.com/aggbug.ashx?id=43ccc017-98a2-4581-9fa9-cade5436a203" /&gt;</description>
      <comments>http://www.erictobia.com/CommentView,guid,43ccc017-98a2-4581-9fa9-cade5436a203.aspx</comments>
      <category>Programming</category>
    </item>
  </channel>
</rss>