<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <title>Eminence Digital</title>
    <description>Jonathan Awotwi's exploits as a freelance web developer.</description>
    <link>http://www.eminencedigital.com/</link>
    <copyright>http://www.eminencedigital.com</copyright>
    <managingEditor>Jonathan Awotwi</managingEditor>
    <webMaster>zeeside@gmail.com</webMaster>
    <lastBuildDate>Tue, 17 Mar 2009 08:46:59 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <category>General</category>
    <category>.Net Framework</category>
    <category>Design</category>
    <category>Photoshop</category>
    <category>Journal</category>
    <category>Web Design</category>
    <generator>RSS.NET: http://www.rssdotnet.com/</generator>
    <item>
      <title>In Pursuit of Eminence</title>
      <description>Couldn't think of a better way to launch my new blog than to&amp;nbsp;provide a timeline of&amp;nbsp;the events that helped mould EminenceDigital. I'm sure some of you might be curious to know why I&amp;nbsp;retired the world-famous SideEfx.com (world meaning close friends and family of course)&amp;nbsp;and came to settle on a less "flashy" - pun intended - new look.&amp;nbsp;A lot of my early work saw me going through an experimental phase. EminenceDigital, however,&amp;nbsp;uses less flash, and more server side programming to facilitate content management and the like. So I haven't really had a chance to sit down and miss playing with flash like in the old days, at least not until the moment when I started writing this. In any case, it went a lil' sum' like this. &lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;B&gt;1999 - Accidental Computer Science Major &lt;/B&gt;&lt;BR&gt;Started out as an International Business Management Major in University of Maryland University College - Germany. The lack of creativity and challenge in that major led me to add on Computer Science as a double major. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2000 -&amp;nbsp;How the hell&amp;nbsp;do I make stuff move on this thing? &lt;BR&gt;&lt;/B&gt;Fervently explored options for PC based animation. My close friend Daniel mentioned that his roommate &lt;A href="http://www.valor4ever.com"&gt;Eddie Marquez&lt;/A&gt;, had been messing with this&amp;nbsp;software called Flash that did just that. So I checked it out and got hooked.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;I proceeded to use and abuse Macromedia Flash 4 as much as I could. None of my experimentation involved websites per se at that time. I mostly intermingled real life photos against background music. One piece I did was to promote a campus seventies revival party that was hosted on the College's intranet portal. My friend Garrett and I&amp;nbsp;dressed up in seventies regalia, took some high resolution photos of us doing...well...seventies stuff, then I proceeded to set up a montague, using Frankie&amp;nbsp;Valley's&amp;nbsp;Grease theme as background music.&amp;nbsp;Funny stuff.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2001 - From Flash to Photoshop -- Is there anyone that doesn't&amp;nbsp;use layers? &lt;BR&gt;&lt;/B&gt;UMUC's&amp;nbsp;webmaster, got wind of my flash experimentation and asked me to do an intro piece for a freelance website he was building. This was my first paid flash project. I decided to build SideEfx.com shortly after this using just flash.&lt;BR&gt;&lt;BR&gt;I find myself designing&amp;nbsp;a poster for a school play courtesy of the art department. Basically I was translating their hand drawn concept into Photoshop, which I had never&amp;nbsp;really worked&amp;nbsp;with&amp;nbsp;before. By the time I was done with the poster I had developed a new interest in Photoshop.&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2002 -&amp;nbsp;Did you hear?&amp;nbsp;Jon is teaching Elements of Graphic Design this semester &lt;BR&gt;&lt;/B&gt;Was reccommended for a position as an assistant to the&amp;nbsp;head of the computer science&amp;nbsp;depatrment by the&amp;nbsp;&amp;nbsp;webmaster who was graduating&amp;nbsp;(remember the guy I hooked up with the flash piece?). My job was to handle the field work for the boss. I built&amp;nbsp;Unix computer labs, toyed with Red Hat Linux, maintained the Intranet portal and yep, even taught a class. &amp;nbsp; &lt;BR&gt;&lt;BR&gt;UMUC&amp;nbsp;found itself on a tight&amp;nbsp;budget once upon a time, so my boss basically gives me two huge Photoshop textbooks and says, alright Jon, you have one summer to learn all this stuff so you can teach it. No big deal. Teaching was fun, even gave a mid-term. Lowest grade was 90%. Tried to critique everyone's work as much as possible in place of giving them the score they deserved.&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2002- 2003 - SideEfx v.2.1,&amp;nbsp;Aufwiedersehen&amp;nbsp;Deutschland&amp;nbsp;and Becoming a programmer &lt;BR&gt;&lt;/B&gt;&lt;U&gt;Enter Montclair State&lt;BR&gt;&lt;/U&gt;Transferred to montclair state after 3 and a half years in UMUC and had to give up my International Business Major due to regulations at MSU. &lt;BR&gt;&lt;BR&gt;&lt;U&gt;SideEfx v.2.1&lt;/U&gt;&lt;BR&gt;Created SideEfx v.2.1 as somewhat of&amp;nbsp;a portfolio piece, but freelancing wasn't really a big interest of mine at the time neither. In any case, SideEfx v2.1 differed from its predecessor in that it had slicker graphics, and lots of 3D studio Max animation and graphic integration.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;U&gt;From C++ to JAVA&lt;BR&gt;&lt;/U&gt;Much to my Chagrin, MSU wouldn't allow me to transfer all my CS. credits over from UMUC, so I had to retake a lot of Comp. Sci. classes. Unlike UMUC MSU used Java on a&amp;nbsp;UNIX platform to teach their CS classes. This is probably the one event that changed my life. Somehow the drudgery of programming didn't seem so bad after all, everything made more sense the second time around especially using a different language, and&amp;nbsp;all of a sudden&amp;nbsp;I had one more option to add to becoming a designer or a flash developer after graduation.&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2003 - 2004 Money talks and Photoshop walks &lt;BR&gt;&lt;/B&gt;&lt;U&gt;Broke as a Joke. Will PHP for food&lt;BR&gt;&lt;/U&gt;Let's just say the powers that be decided that yours truly was doing a little overtime with the whole college thing and decided to pull the funding. Think Van Wilder. So I had to think fast. There seemed to be no shortage of people&amp;nbsp;looking for&amp;nbsp;freelancers at the time, so by some reflex action I started taking on freelance projects, with PHP and MySql&amp;nbsp;as my weapons of choice.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;U&gt;Work work work&lt;BR&gt;&lt;/U&gt;Yeah, your boy had to put in some hours. My PC couldn't handle the workload so I begged my&amp;nbsp;supervisor at my campus job to let me do my freelancing in the office where I worked at MSU. I spent many weekends there hacking it up. I practically slept there. I also worked for various companies as a contractor.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2004-2007 Graduation and .Net Career &lt;BR&gt;&lt;/B&gt;There wasn't much to my starting to use .Net. A client wanted a site and insisted I use .Net only. I fumbled around with Visual Studio and MSSQL for a while until I got the hang of it. It wasn't funny at the time, but I recall trying to write .Net code in much the same way as I wrote PHP code. You know, without the IDE and all. Had to find out the hard way that Microsoft had flipped the script on server side scripting.&amp;nbsp; &lt;BR&gt;Around the time I graduated from MSU&amp;nbsp;I officially gave up PHP to concentrate on coding in .Net. Freelancing gave way to full time jobs, but never quite made it out of the picture completely. Like I said, I need that design fix.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2007 EminenceDigital &lt;BR&gt;&lt;/B&gt;I decided to do a major re-sculpting of the SideEfx image, including a new name as well as a new look. The name 'Eminence' was a name I had played with since my high-school days. It's really a play on a middle name that I rarely use - 'Emisang'. Call it a journal; call it a portfolio or an outlet. I guess it's a lot of things. It's a more mature SideEfx, or at least just another evolution of it. Stay tuned.&amp;nbsp; &lt;BR&gt;&amp;nbsp; </description>
      <link>http://www.eminencedigital.com/Blog/In-Pursuit-of-Eminence.aspx</link>
      <category>General</category>
      <category>Journal</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/In-Pursuit-of-Eminence.aspx</comments>
      <pubDate>Wed, 10 Oct 2007 08:18:52 GMT</pubDate>
    </item>
    <item>
      <title>2.00hhh...2.aahhh</title>
      <description>So like a few others out there, my conversion from the .Net Framework 1.x to 2.0 
came a tad late in the game. Probably the three biggest reasons why it took me 
so long to make that switch for my freelance projects are the fact that I was 
sitting on quite a bit of &amp;quot;legacy&amp;quot; code, if you will, that I often reuse for my 
projects that was all written in 1.x. Secondly for all it's inefficiencies 1.x 
worked okay, and we all know you shouldn't fix things if they aren't 
broken...too much. The third reason is that I kept ending up with day jobs that 
were also stuck in the 1.x mud, with no apparent exit strategy. Considering the 
amount of time I spend at these jobs, most routines end up becoming a habit 
pretty quickly.&lt;br&gt;
&lt;br&gt;
Since I'm probably at the tail end of the wave of users who've made the switch, 
I don't think there are many war stories that I could trade. I'm only writing 
this thread to cite the things I found kewl about 2.0 and those that I found to 
be un-upgrade-esque. I will by no means cover every feature there is with 2.0, 
this is merely a short list of the stuff that struck a chord with me. And if any 
of the features I hype the new platform were available in the old, then I stand 
corrected.&lt;br&gt;
&lt;br&gt;
In the kewl category we have:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Master Pages&lt;br&gt;
&lt;/b&gt;I was happy to see these considering I had tried many different approaches to 
templating in 1.x and all of them seemed to have a tad too many kinks in the 
wire 'namean? Lets just say some used too many user controls, and the others 
that functioned like 2.0 master pages had poor design time support. So thumbs up 
to 2.0 for Master Pages.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Design and HTML view Intellisense&lt;/b&gt;&lt;br&gt;
Because freelancers are our own front-end developers amongst other things, the 
last thing we want is to spend our precious time filling in for a lack of 
adequate intellisense. VS 2005 allows you to drag controls from the toolbox even 
into the HTML view which is a good thing. Unlike the IDE for 1.x, VS 2005 does 
not alter your HTML code when switching from design to HTML view.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;On-the-fly compilation&lt;/b&gt;&lt;br&gt;
Unlike in Visual Studio 2003, VS 2005 seems to allow you to edit a codebehind, 
save your changes and see the changes on the web page you altered without 
compiling the whole project. Remember that .net 1.x requires you to comile your 
entire project everytime you make changes in the codebehind in order to see your 
changes. There is also an option to compile just a single page -- this seems to 
take about as long as compiling the entire project in my opinion however. You 
can read more about the ASP.NET compiler 
&lt;a target="_blank" href="http://west-wind.com/presentations/AspNetCompilation/AspNetCompilation.asp"&gt;here&lt;/a&gt; &lt;br&gt;
&lt;br&gt;
&lt;b&gt;Alternative DataSource Creation and Usage&lt;/b&gt;&lt;br&gt;
I had some fun creating xml data in the App_Data folder and then using drag and 
drop to create an xmlDataSource in my application that I could bind to 
repeaters, grids and datalists. Not all data is meant to be stored on your 
backend database and having this flexibility in your app to create, manipulate 
and use xml data is a definite plus.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Ajax Extensions&lt;br&gt;
&lt;/b&gt;Perhaps this deserves it's own thread, but the high compatibility of the 
&lt;a target="_blank" href="http://asp.net/ajax/"&gt;Ajax 
Extensions&lt;/a&gt; and the 2.0 framework bring me a great deal of joy. I'm hoping to 
bask thoroughly in the Ajax technology provided by the extensions. Best believe 
you'll be reading a lot about it on EminenceDigital.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
And now, a few things that I'm not really feelin' about 2.0&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Where's Global.asax&lt;/b&gt;&lt;br&gt;
Come on Microsoft, I was using that. So you can add a Global.asax file yourself, 
but it shows up...somewhat awkward-like -- more like in-line code than the 
previous code-behind structure. Read more about how to bring the 2.0 Global.asax 
closer to the old model at 
&lt;a target="_blank" href="http://rossnelson.blogspot.com/2005/11/fixing-globalasax-in-aspnet-20.html"&gt;http://rossnelson.blogspot.com/2005/11/fixing-globalasax-in-aspnet-20.html&lt;/a&gt; 
. &lt;br&gt;
&lt;br&gt;
&lt;b&gt;Deployment File Exclusion&lt;/b&gt;&lt;br&gt;
This is an issue that I'm currently still battling with. In VS 2003, when you 
went to go deploy a web project using the web copy functionality, only files 
included in the project were deployed. Files and folders excluded from the 
project were not included. With VS 2005, using the publish website feature 
publishes everything in and under your root folder. Microsoft offers the 
&lt;a target="_blank" href="http://msdn2.microsoft.com/en-us/asp.net/Aa336619.aspx"&gt;Visual 
Studio 2005 web deployment project&lt;/a&gt; as a potential solution to this problem. How 
it works is beyond the scope of this article, but it's a solution whose 
underpinnings I'm still working on coming to terms with.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
So that is basically my take on the ups and downs of Asp.net 2.0. A lot of the 
issues that I saw eg. 'Mutex could not be created' and 'Cannot read IIS metabase 
errors' were usually due to my sites still set to use .Net 1.x in IIS. The other 
set of problems was due to obsololete code structures that I had brought over 
from 1.x. It's all smooth sailing once you get past those hurdles.</description>
      <link>http://www.eminencedigital.com/Blog/200hhh2aahhh.aspx</link>
      <category>General</category>
      <category>.Net Framework</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/200hhh2aahhh.aspx</comments>
      <pubDate>Thu, 11 Oct 2007 19:34:59 GMT</pubDate>
    </item>
    <item>
      <title>6 Web Design Tips to Live By</title>
      <description>During a job interview way back in the day, my interviewer pulled out a personal website that he had built for his film production hobby and asked me to tell him what was wrong with it -- I just took one look at it and said the first thing that came to my mind -- "It doesn't make music to my eyes". Whether or not I got the job after that comment is a different story, but for the most part, that is how I rate the design of most sites that I encounter. If it embodies visual harmony then it's a site that I like, else I'm not really feelin' it. I've put together a few design guidelines that I have sub-consciously abided by over the years. As you read on, bear in mind that to the gifted artists out there, these and other rules governing design are made to be broken, and experimentation outside the scope of convention is not only possible, but encouraged. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;1. I aint too proud to sketch. &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;Sketching out a design on paper is no different than writing down a todo list. Yeah, it's all in your head, but wouldn't it be better for you to just store it somewhere so you don't have to shuffle your memory around every time you want to remember where you're going to put your banner or how you're going to arrange your footer etc? Also as your ideas manifest themselves visually, you can begin to discover what works and what needs to be tweaked a little. I always make it a point to draw a framework of a website before I crack open photoshop or fireworks and start to do the actual design. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;2. Design with Symmetry in Mind &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;Symmetry is the underlying principle behind quite a bit of design that we see in the real world. A segment I was watching on the Discovery Channel the other day mentioned that the Roman Empire was somewhat obsessed with symmetry in their architecture. In web design Symmetry prevents the imbalance and distortion usually associated with amateur-level design and tequila shots. If you ever had the feeling that there was something missing from a design outside the obvious, check for a lack of symmetry in your layout. Do horizontally aligned design elements on the top of your layout match some other kind of elements on the footer? Does your vertically aligned menu on the left flush with your text and images in the body of you design same as on the right? Symmetry abounds in the screenshot from Supremetitle.com below. &lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/35935PM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Everything flushes perfectly on the left, and on the right of the design. If the body text for instance, overlapped your imaginary vertical line either on the left or on the right of this layout, it would immediately lead to a visual dissonance, not unlike skipping a beat in music. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;3. Narrow down your palette &lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;So you obeyed all the symmetry rules and yet somehow your design still falls short of impressing anyone except your momz. Maybe that blue on green polka dotted background with the yellow verdana font might have something to do with it. Always try to make your design work with as few colors as possible to start with. Use variations of colors rather than a completely different color for everything. You can create elegant designs with just three colors, if you use them wisely. Kaeef.org is one of the best examples of maintaining similar color tonation in a web design.&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/42217PM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;Font, banners and backgrounds all seem like slightly lighter or darker versions of each other, and this usually ends up being easy on the eyes. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;4. Choose clear and eye-catching banner images &lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;I don't know if this has ever happened to you, but have you ever found yourself looking at a design and saying to yourself, "I don't get it, it's so simple, yet so compelling". Well, a lot of times, one well placed image on a website is all you need to pick up your freelance check and deliver a design masterpiece at the same time. &lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/35958PM.jpg"&gt;&lt;/DIV&gt;

I'm sure most people would agree that the screenshot above shows a pretty good site design. But picture it without the images for a second. Not a lot left is there? A lot of times when I design, finding the correct images for my site actually take a longer time than designing the rest of the layout. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;5. Know your tools &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;I've heard many a heated debate amongst developers about which web development or design tool is the 'King of the Hill'. My favorite is the one that often rages between developers who have sworn allegiance to Dreamweaver and the few users who self-consciously still use Microsoft FrontPage. The truth is, in the hands of a master, notepad is probably the best web development tool. A good piece of software is only as powerful as the person using it. You have to explore the options available to you in a particular software as a developer in order to make optimum use of whatever tool you find yourself using. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;6. Don't be afraid of a little adventure &lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;If you've been using the internet for at least 3 years, then chances are you've probably bumped into a site at some point that seemed to conform to none of the guidelines above and yet somehow was still highly compelling and visually appealing.&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/41345PM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;Some web designers are bonafide artists within or without the digital medium, and if you fall in that category, then by all means, have a little fun with your work -- go crazy. </description>
      <link>http://www.eminencedigital.com/Blog/6-Web-Design-Tips-to-Live-By.aspx</link>
      <category>Web Design</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/6-Web-Design-Tips-to-Live-By.aspx</comments>
      <pubDate>Mon, 29 Oct 2007 23:23:53 GMT</pubDate>
    </item>
    <item>
      <title>Building On-the-fly functionality into a Datagrid</title>
      <description>Not too long ago I was confronted with the task of building a Datagrid, with one of it's columns containing input fields that could hold monetary values. These input fields would allow for a user to change the values within them, resulting in a realtime recalculation of the sum of all visible input field values. The result of this would be displayed at the bottom of the grid. - all of this, without a postback of any kind. After trying endlessly to google a solution for it, I gave up and faced the drudgery of building it myself. Here's how I did it. 
&lt;div class="divPageImageCenter"&gt;&lt;img class="imgContent" src="/BlogImages/105442AM.jpg"&gt;&lt;/div&gt;&lt;br&gt;The magic encompassing this particular exercise can be summarized in one word - Javascript. Let's start by breaking down this project into steps. Bear in mind that this is not yet a custom web control so all the code takes place in a web form and it's codebehind. &lt;br&gt;&lt;br&gt;&lt;b&gt;Designing your Datagrid&lt;/b&gt;&lt;br&gt;For the most part, the Datagrid we need is no different from your average Datagrid. The main differences is our updateable input field column. The total field that stores the sum of all our updateable input fields is nothing new, and there are countless tutorials on how to rig one up. While we're on the presentation layer, however, I might add that another crucial element that adds support for the features this article discusses are a horde of hidden fields. I use six in all, to support the control.&lt;br&gt;&amp;nbsp;I prefer to use textboxes styled to not appear on the page rather than "&amp;lt;input type="hidden"/&amp;gt;" fields, for the simple reason that I can choose to see their contents when I please, allowing me to better debug my code. In using hidden textboxes, you should try to avoid using display:none or visibility:hidden css tags for these fields, for reasons that are beyond the scope of this article. Instead set border, height and width to 0px. These are the ones I used: &lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenTotalLabelName&lt;br&gt;&lt;/i&gt;This stores the ID of the Total Label which exists within the Datagrid. The label will hold the calculated sum of the input field columns of our grid. We just can't hardcode that ID into this hidden field because the Datagrid control implements the InamingContainer interface which assigns unique ID's to child controls. &lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenTotalValue&lt;br&gt;&lt;/i&gt;Aside from storing our total value at the bottom of the Datagrid, we also need a place where we can just store it as a regular unformatted numeric value, this field does that job. &lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenCurrentValue&lt;br&gt;&lt;/i&gt;Once you set focus on one of our Datagrid input fields to begin manipulating it's value, we store that initial value in a safe place to use for further calculations. Keep reading to find out why and how exactly we do this.&lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenLastTextFieldID&lt;br&gt;&lt;/i&gt;This last hidden field will store the ID for the last input field whose value we manipulated.&lt;br&gt;&lt;br&gt;&lt;b&gt;Retrieving and Binding Data&lt;/b&gt;&lt;br&gt;You are free to bind data from any datasource to the grid. The only requirement needed for this project to be meaningful is for you to have one field that holds monetary values -- that is the value that we are going to be adding up, once a user changes it. For the purposes of this tutorial, I use a for loop to create my own data source using a method called GetTestData();&lt;br&gt;&lt;br&gt;&lt;b&gt;Writing your Javascript&lt;/b&gt;&lt;br&gt;This is probably the most intense part of the entire process. We need several Javascript functions to do summation, and validation of input values. The table below gives a gist of what we need on the javascript side. &lt;br&gt;&lt;i&gt;__StoreCurrentValue():void&lt;br&gt;&lt;/i&gt;This method gets triggered on the 'onFocus' event of the input field inside the Datagrid, whose value is being changed at the moment. It is basically the 'caching' function that we use to store the value in the input field before it is changed.&lt;br&gt;&lt;br&gt;&lt;i&gt;__ReCalculateTotal():void&lt;br&gt;&lt;/i&gt;This method gets trigerred on the 'onBlur' method of the input field inside the Datagrid whose value has most recntly either been changed or attempted to be changed.&lt;br&gt;&lt;br&gt;&lt;i&gt;LastValueWasValid():bool&lt;br&gt;&lt;/i&gt;This is our validation manager method. It performs all the necessarry validation we need on the values entered into our input fields.&lt;br&gt;The flow of control goes like so:&lt;br&gt;
&lt;div class="divPageImageCenter"&gt;&lt;img class="imgContent" src="/BlogImages/110902AM.jpg"&gt;&lt;/div&gt;&lt;br&gt;Exciting isn't it? By this point, a lot of the drama is out of the way, but we're not quite there yet. Why you say? Well, what happens when a user changes a page in the Datagrid? Remember that typcially this means retrieving our data from data storage once again and re-binding it to the Datagrid. Unfortunately, when we go to retrieve our data, it will not have the changes we have made. We have to find a way to persist our data across postbacks, which brings us to our next item. &lt;br&gt;&lt;br&gt;&lt;b&gt;Persisting changes made to data &lt;br&gt;&lt;/b&gt;The simple solution for persisting our changes made inside the grid is to store our datasource, once we retrieve it to either a page cache or Viewstate so that on every event that causes a postback, we update our cached datasource and then re-bind our grid. I chose the Viewstate in this example. The only column inside the grid, whose values change and hence need to be tracked are those in our input field column. I use a method in my codebehind called 'UpdateTableRows' that retrieves a reference of my stored datatable from the ViewState, updates the rows with newly inputed values and then re-binds it to my grid. This method is called on all events that cause a postback. &lt;br&gt;&lt;br&gt;
&lt;div class="cf"&gt;
&lt;p class="cl"&gt;&lt;span class="cb1"&gt;private&lt;/span&gt; System.Data.DataTable UpdateDataTableRows(DataGrid dg)&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Data.DataTable _dt = (System.Data.DataTable)&lt;span class="cb1"&gt;this&lt;/span&gt;.ViewState[StoredTable];&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;int&lt;/span&gt; currIndex=0;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;foreach&lt;/span&gt; (DataGridItem item &lt;span class="cb1"&gt;in&lt;/span&gt; dg.Items)&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currIndex = Convert.ToInt32(dg.DataKeys[item.ItemIndex].ToString());&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _dt.Rows[currIndex]["PaymentAmount"] = ((TextBox)item.FindControl("AmtInput")).Text;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _dt.AcceptChanges();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;return&lt;/span&gt; _dt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Submitting Data&lt;/b&gt;&lt;br&gt;What you do with your data after clicking submit is really up to you. Just remember that, just like with the pageIndexChanged event, the submit button causes a postback, and hence must have code in the event to persist all changes made to the cached datastore. &lt;br&gt;Download the code and play around with it to get the clearer picture. At the very least, this article should provide you with the very much needed javascript required to make this clock tick. </description>
      <link>http://www.eminencedigital.com/Blog/Building-On-the-fly-functionality-into-a-Datagrid.aspx</link>
      <category>.Net Framework</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/Building-On-the-fly-functionality-into-a-Datagrid.aspx</comments>
      <pubDate>Wed, 14 Nov 2007 12:55:55 GMT</pubDate>
    </item>
    <item>
      <title>The Story of Officer Tyron Franklin</title>
      <description>Officer Tyron Franklin was shot and killed after being identified as a police officer during a robbery attempt at a local fast food restaurant. He was paying for his food when a robber approached him and demanded his money. During the ensuing struggle, the robber produced a handgun and shot him four times. The shooter then shot him two more times as he lay on the ground after a witness yelled at him saying the victim was an officer.&lt;BR&gt;&lt;BR&gt;&amp;nbsp;Of all the nonprofit sites I've worked on lately, my last project was probably the one that came with the most emotionally captivating story. It's timing, was also probably the most coincidental, reason being that the passing of the young police officer that the website was meant to commemorate happened within weeks of the passing of my Father. &lt;BR&gt;&lt;BR&gt;I usually begin designing every website by trying to tap into the 'mission' of the website for inspiration. Who's the audience? Who are the owners? What do these parties want to see, feel and remember the moment they land on the homepage? It just so happened that this time, having to build a site in memory of a loved one who had passed was a task that I could generate inspiration for from my own experience.&lt;BR&gt;&lt;BR&gt;I would have wanted a site that did not seek to patronize my feeling of loss. A bright colored tribute with oodles of visual panache would have done little to help abate my grief. I would have wanted a site that was more of a monument, or a salute to a life well lived--probably a site that didn't try too hard to accomplish this. This was my inspiration for OfficerTyronFranklin.org&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageLeft&gt;&lt;IMG class=imgContent src="/BlogImages/85806AM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;In the backend, I added some new features to the Nonprofit Manager as well. To help the Officer Tyron Franklin foundation keep track of it's donors, I created a Donor classification and archiving system, that would allow administrators to create a category of donation based on a range (eg. $50 - $100: Gold Circle&lt;BR&gt;&lt;BR&gt;I also made the Page Management feature more efficient. In older versions of the Nonprofit manager, if a user created a page of type 'Component', a user then had to manually type in the name of the component. &lt;BR&gt;
&lt;DIV class=divPageImageLeft&gt;&lt;IMG class=imgContent src="/BlogImages/85821AM.jpg"&gt;&lt;/DIV&gt;In this version, once a user creates a component page, a dropdown list shows up with all the components that a user can select from. Also, whereas a the old version did not allow a user to change from a page from one type to the other once it had been created, this version makes that possible from right within the datagrid.&lt;BR&gt;&lt;BR&gt;Another neat feature is that, now after you have created all the pages on your site, you can actually just select one of them to be your front page. &lt;BR&gt;&lt;BR&gt;Check out the modified Nonprofit Manager user manual &lt;A href="/docs/nonprofitmanagerv1.1.pdf" target=_blank&gt;here&lt;/A&gt;.</description>
      <link>http://www.eminencedigital.com/Blog/The-Story-of-Officer-Tyron-Franklin.aspx</link>
      <category>General</category>
      <category>Journal</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/The-Story-of-Officer-Tyron-Franklin.aspx</comments>
      <pubDate>Sun, 06 Jan 2008 09:30:35 GMT</pubDate>
    </item>
    <item>
      <title>Living La Vista Loca with my new Dell XPS M1530</title>
      <description>So somehow someway, I managed to drain the magic out of my two year old Dell Inspiron 9300 recently. My latest pet project (which incidentally promises to be my most kick-ass project yet) proved to be the last straw for the silver coated development powerhouse which was my Inspiron 9300. It had gotten to the point where I was typing in object names in Visual Studio, hitting the kitchen and frying an omelete before the intellisense kicked in (well, almost). Debugging, building and other typical tasks I ran into while doing development on a day to day basis had slowed down to a crawl and I won't even start to talk about my experiences switching between applications like MSSQL Server, Photoshop etc. which I happen to have to do often. Slow, slow slow. &lt;BR&gt;&lt;BR&gt;So I decided to invest in a new development powerhouse. I had been checking out the Dell XPS line of laptops for a hot minute, because quite simply my experiences with Dell customer support wasn't bad while I was using the Inspiron. I remember dropping it once and cracking the LCD screen and having Dell replace it within roughly a week. All these laptops are made up of the same parts anyway, I buy a laptop based on how responsive and forthcoming I think the seller will be with their customer support. So without much ado, let's hop into the specs of the laptop I finally ended up getting shall we: &lt;BR&gt;&lt;BR&gt;
&lt;OL&gt;
&lt;LI&gt;XPS M1530, Intel C2D T7800 (2.6GHz/800MHz FSB, 4M L2 Cache) 
&lt;LI&gt;Crimson Red Casing With Microsatin Finish XPS M1530 
&lt;LI&gt;4GB, DDR2, 667MHz 2 Dimm, for XPS M1530 
&lt;LI&gt;15.4 inch Wide Screen WXGA+ TrueLife LCD with 2.0 MO Camera for XPS M1530 
&lt;LI&gt;Camera Software XPS M1530 2.0MP 
&lt;LI&gt;256MB NVIDIA GeForce 8600M GT 
&lt;LI&gt;120GB 7200RPM SATA Hard Drive for XPS M1530 
&lt;LI&gt;Microsoft Windows Vista Ultimate 32-bit Edition English,Inspiron 
&lt;LI&gt;8X DVD+/-RW Slot Load Drive for XPSM1530 
&lt;LI&gt;Integrated High Definition Audio 2.0 
&lt;LI&gt;85 WHr 9-cell Lithium Ion Primary Battery, for XPS M1530 
&lt;LI&gt;85 WHr 9-cell Lithium Ion Additional Battery, for XPS M1530 
&lt;LI&gt;DELL WRLS 5720 EVDO, Verizon Dell Wireless 5720 EVDO Mini Card for Verizon 
&lt;LI&gt;Dell Wirless 355 Bluetooth Module (2.0+EDR) &lt;/LI&gt;&lt;/OL&gt;&lt;BR&gt;
&lt;DIV class=divPageImageLeft&gt;&lt;IMG class=imgContent src="/BlogImages/11140PM.jpg"&gt;&lt;/DIV&gt;Those are but a few of my favorite things about this baby -- codenamed Red. I didn't skimp on much in getting this laptop I particularly paid attention to the specs detailed in a posting on &lt;A id=qvax target="_blank" title="posting on Scott Guthrie's blog" href="http://weblogs.asp.net/scottgu/archive/2007/11/01/tip-trick-hard-drive-speed-and-visual-studio-performance.aspx"&gt;Scott Guthrie's blog&lt;/A&gt;, about the features to look out for on a development workstation. I maxed out on just about every performance enhancing feature and the result, the best experience I've ever had using any digital device ever. Red has 4GB of RAM compared to my Inspiron's 256MB, quite frankly this is not the PC from the 'I'm a Mac and you're a PC' commercials.' My productivity has gone up by a good 90% and I'm simply loving it. All this goodness came with a hefty price-tag though, weighing in at a little over $3000 after purchasing a two year accidental damage warranty it cost almost twice as much as my college hooptie. I didn't do too much research as far as prices of competing models from HP etc. but I have a feeling Dell's offering might be on the higher end of the spectrum. &lt;BR&gt;&lt;BR&gt;So is there anything I don't like about Red so far? Well, not much really, Dell re-arranged a few buttons like the delete, home, page up and page down buttons which is taking getting used to. They are now a single vertical column on the right side of the keyboard and trying to hit one of them usually causes you to hit the other -- not a very good thing when you have text highlighted and you want to hit home, but hit delete instead. I also couldn't install MSSQL Server 2000 because it's not supported on Vista, which means that I have to swith to MSSQL 2005 for all development going forward. Not a bad thing for new projects to come, but what about the handful of sites I have already created that I still have to support occasionally? Migrating them would not be financially practical, so now I'm having to hold on to my Inspiron 9300 to support my legacy deployments. Although, I heard from a friend that you can still connect to older versions of MSSQL from 2005. That would be a good thing. &lt;BR&gt;&lt;BR&gt;If you are thinking about getting an XPS then I say go for it. Depending on what you typically use your laptops for, I'd say it's definitely a worthy investment. &lt;BR&gt;&lt;BR&gt;</description>
      <link>http://www.eminencedigital.com/Blog/Living-La-Vista-Loca-with-my-new-Dell-XPS-M1530.aspx</link>
      <category>Journal</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/Living-La-Vista-Loca-with-my-new-Dell-XPS-M1530.aspx</comments>
      <pubDate>Sun, 16 Mar 2008 13:20:35 GMT</pubDate>
    </item>
    <item>
      <title>EventOrb.com: A product of a mad programmer's 6 month coding binge pt. 1 </title>
      <description>&lt;A href="http://www.eventorb.com" target=_blank&gt;EventOrb.com&lt;/A&gt; started out with an event promoter client of my freelance service requesting an update to a site I had built for his organization in PHP a while ago. Because I had my hands full at the time, I remember wishing there was a social portal that served the needs of event promoters so that I could point him in that direction and call it a wrap. Unfortunately, there were none that quite fully met his needs and he was a good client, so I thought the next best thing would be to kill two birds with one stone, by taking another shot at creating a hopefully profitable public facing web portal while providing my client with a standalone website in the process. In other words, I would pick up a check for building a site for him, and reuse my Core objects to build one that could support multiple users. Things worked out a little differently, but EventOrb was an outcome nonetheless. &lt;BR&gt;&lt;BR&gt;So if you have about 6 months of your life and about $10k to spend building a website on the scale of EventOrb, here's what you might need.&lt;BR&gt;&lt;BR&gt;&lt;IMG class=imgContent src="/BlogImages/34355PM.jpg"&amp;gt;&lt;BR&gt;&lt;BR&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Development Platform&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;.Net Framework 2.0 
&lt;LI&gt;MSSQL 2005 
&lt;LI&gt;Enterprise Library 
&lt;LI&gt;Ajax Toolkit Library&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A fast development machine&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Dell XPS (&lt;A href="/Blog/Living-La-Vista-Loca-with-my-new-Dell-XPS-M1530.aspx" target=_blank&gt;about mine&lt;/A&gt;)&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Dedicated Hosting&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.hostmysite.com/" target=_blank&gt;HostMySite&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Video Streaming Server&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.amazon.com/gp/browse.html?node=16427261" target=_blank&gt;Amazon s3&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A host of third party tools (unless you want to spend 6 years instead of 6 months developing ) &lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Ajax Framework: &lt;A href="http://www.componentart.com/" target=_blank&gt;Component Art&lt;/A&gt; 
&lt;LI&gt;FLV Player: &lt;A href="http://products.agriya.com/flv-player" target=_blank&gt;Agriya FlV Player&lt;/A&gt;(oh, and by the way, purchase nothing else from Agriya besides their player, I'll explain later) 
&lt;LI&gt;Blog:&lt;A href="http://blog.eventorb.com/" target=_blank&gt; BlogEngine.net&lt;/A&gt; 
&lt;LI&gt;Documenting todo lists etc: &lt;A href="http://www.google.com/docs" target=_blank&gt;Google docs&lt;/A&gt; 
&lt;LI&gt;Address book importing:&lt;A href="http://www.plaxo.com/" target=_blank&gt;Plaxo&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A Web/Graphic Designer, Programmer , yellow belt DBA, lightweight Flash developer and nutcase &lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Jonathan Awotwi&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;STRONG&gt;The Strategy&lt;/STRONG&gt; &lt;BR&gt;I recently found out about &lt;A href="http://en.wikipedia.org/wiki/Scrum_%28development%29" target=_blank&gt;SCRUM&lt;/A&gt; and found it rather interesting for the simple reason that I had been practicing a kind of one man SCRUM not only for EventOrb, but also for HomeTeamManager.com for the last couple of years without knowing it. The idea of SCRUM in a nutshell is to audit yourself continuosly as you are developing. What did you work on yesterday? What are you working on now and what will you be working on tomorrow? Those are the three key questions that SCRUM development force you to answer every day. I knew if I didn't stick to hard deadlines, I would never really get anything accomplished, at least not in the timeframe I had in mind. Starting out, I made a mental note of things that needed to get done, developed my Photoshop mockups, the directory structure and setup my development environment in IIS etc., but as time went on, I started to use Google Docs to keep a written list of stuff I needed to do.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Build a Core set of Objects &lt;BR&gt;&lt;/STRONG&gt;My experience as a developer in a certain credit card services company that shall remain nameless taught me some valuable lessons in Object Oriented programming. Prior to working there, I had ample theortical knowledge and some experience as to how to program using the concepts of inheritance, interfaces etc. However, no one company made it more evident why it was necessarry than that company. It wasn't long after I started working there that I begun to isolate my own custom built core set of objects that could be re-used across my freelance clients, and across projects, and boy did it pay off. Let's just say &lt;A href="http://www.eventorb.com" target=_blank&gt;EventOrb&lt;/A&gt; would have taken much longer than 6 months if I didn't already have a robust set of Core business and data access objects and Utilities ready for use. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Managing Your Hours&lt;BR&gt;&lt;/STRONG&gt;It was tough developing around a regular 9 to 5 (well duh!). I would work 45 minutes during my train ride to work in the morning, 45 minutes coming back and about 4 to 5 hours after work. Weekends I would code for about 8 hours provided I didn't have much else to do. A little late for a disclaimer, but this isn't exactly the healthiest way to spend 6 months of your life. Event Orb Features &lt;BR&gt;&lt;BR&gt;These are the features that make up EventOrb:&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;The Front Facing Application &lt;/STRONG&gt;
&lt;OL&gt;
&lt;LI&gt;Multi-tenant Application 
&lt;LI&gt;Social Networking 
&lt;LI&gt;Internal Messaging 
&lt;LI&gt;Event creation 
&lt;LI&gt;Event Page (modular web portal gets generated automatically for every event that gets created) 
&lt;LI&gt;Flyer uploads 
&lt;LI&gt;Photo Uploads 
&lt;LI&gt;Video Uploads 
&lt;LI&gt;Asynchronous Event Search 
&lt;LI&gt;Event Templating or Themeing 
&lt;LI&gt;Evite-like features 
&lt;LI&gt;Customizable Event Invitations 
&lt;LI&gt;Photo Search 
&lt;LI&gt;Video Search 
&lt;LI&gt;Photo and Video Commenting 
&lt;LI&gt;Embeddable Video 
&lt;LI&gt;Event Rating and commenting 
&lt;LI&gt;Social bookmarking 
&lt;LI&gt;Event Geo-location on google maps 
&lt;LI&gt;Multiple Event Calendars&lt;/LI&gt;&lt;/OL&gt;&lt;STRONG&gt;Backend - Control Panel Application &lt;BR&gt;&lt;/STRONG&gt;Management modules for a handful of the features mentioned above. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Service Applications &lt;BR&gt;&lt;/STRONG&gt;Scheduled Console applications and services for sending emails, keeping objects cached etc.&lt;BR&gt;&lt;BR&gt;Stay tuned for Part 2.</description>
      <link>http://www.eminencedigital.com/Blog/EventOrbcom-A-product-of-a-mad-programmers-6-month-coding-binge-pt-1-.aspx</link>
      <category>General</category>
      <category>.Net Framework</category>
      <category>Web Design</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/EventOrbcom-A-product-of-a-mad-programmers-6-month-coding-binge-pt-1-.aspx</comments>
      <pubDate>Wed, 23 Jul 2008 22:25:04 GMT</pubDate>
    </item>
    <item>
      <title>In Pursuit of Eminence</title>
      <description>Couldn't think of a better way to launch my new blog than to&amp;nbsp;provide a timeline of&amp;nbsp;the events that helped mould EminenceDigital. I'm sure some of you might be curious to know why I&amp;nbsp;retired the world-famous SideEfx.com (world meaning close friends and family of course)&amp;nbsp;and came to settle on a less "flashy" - pun intended - new look.&amp;nbsp;A lot of my early work saw me going through an experimental phase. EminenceDigital, however,&amp;nbsp;uses less flash, and more server side programming to facilitate content management and the like. So I haven't really had a chance to sit down and miss playing with flash like in the old days, at least not until the moment when I started writing this. In any case, it went a lil' sum' like this. &lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;B&gt;1999 - Accidental Computer Science Major &lt;/B&gt;&lt;BR&gt;Started out as an International Business Management Major in University of Maryland University College - Germany. The lack of creativity and challenge in that major led me to add on Computer Science as a double major. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2000 -&amp;nbsp;How the hell&amp;nbsp;do I make stuff move on this thing? &lt;BR&gt;&lt;/B&gt;Fervently explored options for PC based animation. My close friend Daniel mentioned that his roommate &lt;A href="http://www.valor4ever.com"&gt;Eddie Marquez&lt;/A&gt;, had been messing with this&amp;nbsp;software called Flash that did just that. So I checked it out and got hooked.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;I proceeded to use and abuse Macromedia Flash 4 as much as I could. None of my experimentation involved websites per se at that time. I mostly intermingled real life photos against background music. One piece I did was to promote a campus seventies revival party that was hosted on the College's intranet portal. My friend Garrett and I&amp;nbsp;dressed up in seventies regalia, took some high resolution photos of us doing...well...seventies stuff, then I proceeded to set up a montague, using Frankie&amp;nbsp;Valley's&amp;nbsp;Grease theme as background music.&amp;nbsp;Funny stuff.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2001 - From Flash to Photoshop -- Is there anyone that doesn't&amp;nbsp;use layers? &lt;BR&gt;&lt;/B&gt;UMUC's&amp;nbsp;webmaster, got wind of my flash experimentation and asked me to do an intro piece for a freelance website he was building. This was my first paid flash project. I decided to build SideEfx.com shortly after this using just flash.&lt;BR&gt;&lt;BR&gt;I find myself designing&amp;nbsp;a poster for a school play courtesy of the art department. Basically I was translating their hand drawn concept into Photoshop, which I had never&amp;nbsp;really worked&amp;nbsp;with&amp;nbsp;before. By the time I was done with the poster I had developed a new interest in Photoshop.&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2002 -&amp;nbsp;Did you hear?&amp;nbsp;Jon is teaching Elements of Graphic Design this semester &lt;BR&gt;&lt;/B&gt;Was reccommended for a position as an assistant to the&amp;nbsp;head of the computer science&amp;nbsp;depatrment by the&amp;nbsp;&amp;nbsp;webmaster who was graduating&amp;nbsp;(remember the guy I hooked up with the flash piece?). My job was to handle the field work for the boss. I built&amp;nbsp;Unix computer labs, toyed with Red Hat Linux, maintained the Intranet portal and yep, even taught a class. &amp;nbsp; &lt;BR&gt;&lt;BR&gt;UMUC&amp;nbsp;found itself on a tight&amp;nbsp;budget once upon a time, so my boss basically gives me two huge Photoshop textbooks and says, alright Jon, you have one summer to learn all this stuff so you can teach it. No big deal. Teaching was fun, even gave a mid-term. Lowest grade was 90%. Tried to critique everyone's work as much as possible in place of giving them the score they deserved.&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2002- 2003 - SideEfx v.2.1,&amp;nbsp;Aufwiedersehen&amp;nbsp;Deutschland&amp;nbsp;and Becoming a programmer &lt;BR&gt;&lt;/B&gt;&lt;U&gt;Enter Montclair State&lt;BR&gt;&lt;/U&gt;Transferred to montclair state after 3 and a half years in UMUC and had to give up my International Business Major due to regulations at MSU. &lt;BR&gt;&lt;BR&gt;&lt;U&gt;SideEfx v.2.1&lt;/U&gt;&lt;BR&gt;Created SideEfx v.2.1 as somewhat of&amp;nbsp;a portfolio piece, but freelancing wasn't really a big interest of mine at the time neither. In any case, SideEfx v2.1 differed from its predecessor in that it had slicker graphics, and lots of 3D studio Max animation and graphic integration.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;U&gt;From C++ to JAVA&lt;BR&gt;&lt;/U&gt;Much to my Chagrin, MSU wouldn't allow me to transfer all my CS. credits over from UMUC, so I had to retake a lot of Comp. Sci. classes. Unlike UMUC MSU used Java on a&amp;nbsp;UNIX platform to teach their CS classes. This is probably the one event that changed my life. Somehow the drudgery of programming didn't seem so bad after all, everything made more sense the second time around especially using a different language, and&amp;nbsp;all of a sudden&amp;nbsp;I had one more option to add to becoming a designer or a flash developer after graduation.&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2003 - 2004 Money talks and Photoshop walks &lt;BR&gt;&lt;/B&gt;&lt;U&gt;Broke as a Joke. Will PHP for food&lt;BR&gt;&lt;/U&gt;Let's just say the powers that be decided that yours truly was doing a little overtime with the whole college thing and decided to pull the funding. Think Van Wilder. So I had to think fast. There seemed to be no shortage of people&amp;nbsp;looking for&amp;nbsp;freelancers at the time, so by some reflex action I started taking on freelance projects, with PHP and MySql&amp;nbsp;as my weapons of choice.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;U&gt;Work work work&lt;BR&gt;&lt;/U&gt;Yeah, your boy had to put in some hours. My PC couldn't handle the workload so I begged my&amp;nbsp;supervisor at my campus job to let me do my freelancing in the office where I worked at MSU. I spent many weekends there hacking it up. I practically slept there. I also worked for various companies as a contractor.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2004-2007 Graduation and .Net Career &lt;BR&gt;&lt;/B&gt;There wasn't much to my starting to use .Net. A client wanted a site and insisted I use .Net only. I fumbled around with Visual Studio and MSSQL for a while until I got the hang of it. It wasn't funny at the time, but I recall trying to write .Net code in much the same way as I wrote PHP code. You know, without the IDE and all. Had to find out the hard way that Microsoft had flipped the script on server side scripting.&amp;nbsp; &lt;BR&gt;Around the time I graduated from MSU&amp;nbsp;I officially gave up PHP to concentrate on coding in .Net. Freelancing gave way to full time jobs, but never quite made it out of the picture completely. Like I said, I need that design fix.&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;B&gt;2007 EminenceDigital &lt;BR&gt;&lt;/B&gt;I decided to do a major re-sculpting of the SideEfx image, including a new name as well as a new look. The name 'Eminence' was a name I had played with since my high-school days. It's really a play on a middle name that I rarely use - 'Emisang'. Call it a journal; call it a portfolio or an outlet. I guess it's a lot of things. It's a more mature SideEfx, or at least just another evolution of it. Stay tuned.&amp;nbsp; &lt;BR&gt;&amp;nbsp; </description>
      <link>http://www.eminencedigital.com/Blog/In-Pursuit-of-Eminence.aspx</link>
      <category>General</category>
      <category>Journal</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/In-Pursuit-of-Eminence.aspx</comments>
      <pubDate>Wed, 10 Oct 2007 08:18:52 GMT</pubDate>
    </item>
    <item>
      <title>2.00hhh...2.aahhh</title>
      <description>So like a few others out there, my conversion from the .Net Framework 1.x to 2.0 
came a tad late in the game. Probably the three biggest reasons why it took me 
so long to make that switch for my freelance projects are the fact that I was 
sitting on quite a bit of &amp;quot;legacy&amp;quot; code, if you will, that I often reuse for my 
projects that was all written in 1.x. Secondly for all it's inefficiencies 1.x 
worked okay, and we all know you shouldn't fix things if they aren't 
broken...too much. The third reason is that I kept ending up with day jobs that 
were also stuck in the 1.x mud, with no apparent exit strategy. Considering the 
amount of time I spend at these jobs, most routines end up becoming a habit 
pretty quickly.&lt;br&gt;
&lt;br&gt;
Since I'm probably at the tail end of the wave of users who've made the switch, 
I don't think there are many war stories that I could trade. I'm only writing 
this thread to cite the things I found kewl about 2.0 and those that I found to 
be un-upgrade-esque. I will by no means cover every feature there is with 2.0, 
this is merely a short list of the stuff that struck a chord with me. And if any 
of the features I hype the new platform were available in the old, then I stand 
corrected.&lt;br&gt;
&lt;br&gt;
In the kewl category we have:&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Master Pages&lt;br&gt;
&lt;/b&gt;I was happy to see these considering I had tried many different approaches to 
templating in 1.x and all of them seemed to have a tad too many kinks in the 
wire 'namean? Lets just say some used too many user controls, and the others 
that functioned like 2.0 master pages had poor design time support. So thumbs up 
to 2.0 for Master Pages.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Design and HTML view Intellisense&lt;/b&gt;&lt;br&gt;
Because freelancers are our own front-end developers amongst other things, the 
last thing we want is to spend our precious time filling in for a lack of 
adequate intellisense. VS 2005 allows you to drag controls from the toolbox even 
into the HTML view which is a good thing. Unlike the IDE for 1.x, VS 2005 does 
not alter your HTML code when switching from design to HTML view.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;On-the-fly compilation&lt;/b&gt;&lt;br&gt;
Unlike in Visual Studio 2003, VS 2005 seems to allow you to edit a codebehind, 
save your changes and see the changes on the web page you altered without 
compiling the whole project. Remember that .net 1.x requires you to comile your 
entire project everytime you make changes in the codebehind in order to see your 
changes. There is also an option to compile just a single page -- this seems to 
take about as long as compiling the entire project in my opinion however. You 
can read more about the ASP.NET compiler 
&lt;a target="_blank" href="http://west-wind.com/presentations/AspNetCompilation/AspNetCompilation.asp"&gt;here&lt;/a&gt; &lt;br&gt;
&lt;br&gt;
&lt;b&gt;Alternative DataSource Creation and Usage&lt;/b&gt;&lt;br&gt;
I had some fun creating xml data in the App_Data folder and then using drag and 
drop to create an xmlDataSource in my application that I could bind to 
repeaters, grids and datalists. Not all data is meant to be stored on your 
backend database and having this flexibility in your app to create, manipulate 
and use xml data is a definite plus.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Ajax Extensions&lt;br&gt;
&lt;/b&gt;Perhaps this deserves it's own thread, but the high compatibility of the 
&lt;a target="_blank" href="http://asp.net/ajax/"&gt;Ajax 
Extensions&lt;/a&gt; and the 2.0 framework bring me a great deal of joy. I'm hoping to 
bask thoroughly in the Ajax technology provided by the extensions. Best believe 
you'll be reading a lot about it on EminenceDigital.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
And now, a few things that I'm not really feelin' about 2.0&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Where's Global.asax&lt;/b&gt;&lt;br&gt;
Come on Microsoft, I was using that. So you can add a Global.asax file yourself, 
but it shows up...somewhat awkward-like -- more like in-line code than the 
previous code-behind structure. Read more about how to bring the 2.0 Global.asax 
closer to the old model at 
&lt;a target="_blank" href="http://rossnelson.blogspot.com/2005/11/fixing-globalasax-in-aspnet-20.html"&gt;http://rossnelson.blogspot.com/2005/11/fixing-globalasax-in-aspnet-20.html&lt;/a&gt; 
. &lt;br&gt;
&lt;br&gt;
&lt;b&gt;Deployment File Exclusion&lt;/b&gt;&lt;br&gt;
This is an issue that I'm currently still battling with. In VS 2003, when you 
went to go deploy a web project using the web copy functionality, only files 
included in the project were deployed. Files and folders excluded from the 
project were not included. With VS 2005, using the publish website feature 
publishes everything in and under your root folder. Microsoft offers the 
&lt;a target="_blank" href="http://msdn2.microsoft.com/en-us/asp.net/Aa336619.aspx"&gt;Visual 
Studio 2005 web deployment project&lt;/a&gt; as a potential solution to this problem. How 
it works is beyond the scope of this article, but it's a solution whose 
underpinnings I'm still working on coming to terms with.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
So that is basically my take on the ups and downs of Asp.net 2.0. A lot of the 
issues that I saw eg. 'Mutex could not be created' and 'Cannot read IIS metabase 
errors' were usually due to my sites still set to use .Net 1.x in IIS. The other 
set of problems was due to obsololete code structures that I had brought over 
from 1.x. It's all smooth sailing once you get past those hurdles.</description>
      <link>http://www.eminencedigital.com/Blog/200hhh2aahhh.aspx</link>
      <category>General</category>
      <category>.Net Framework</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/200hhh2aahhh.aspx</comments>
      <pubDate>Thu, 11 Oct 2007 19:34:59 GMT</pubDate>
    </item>
    <item>
      <title>6 Web Design Tips to Live By</title>
      <description>During a job interview way back in the day, my interviewer pulled out a personal website that he had built for his film production hobby and asked me to tell him what was wrong with it -- I just took one look at it and said the first thing that came to my mind -- "It doesn't make music to my eyes". Whether or not I got the job after that comment is a different story, but for the most part, that is how I rate the design of most sites that I encounter. If it embodies visual harmony then it's a site that I like, else I'm not really feelin' it. I've put together a few design guidelines that I have sub-consciously abided by over the years. As you read on, bear in mind that to the gifted artists out there, these and other rules governing design are made to be broken, and experimentation outside the scope of convention is not only possible, but encouraged. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;1. I aint too proud to sketch. &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;Sketching out a design on paper is no different than writing down a todo list. Yeah, it's all in your head, but wouldn't it be better for you to just store it somewhere so you don't have to shuffle your memory around every time you want to remember where you're going to put your banner or how you're going to arrange your footer etc? Also as your ideas manifest themselves visually, you can begin to discover what works and what needs to be tweaked a little. I always make it a point to draw a framework of a website before I crack open photoshop or fireworks and start to do the actual design. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;2. Design with Symmetry in Mind &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;Symmetry is the underlying principle behind quite a bit of design that we see in the real world. A segment I was watching on the Discovery Channel the other day mentioned that the Roman Empire was somewhat obsessed with symmetry in their architecture. In web design Symmetry prevents the imbalance and distortion usually associated with amateur-level design and tequila shots. If you ever had the feeling that there was something missing from a design outside the obvious, check for a lack of symmetry in your layout. Do horizontally aligned design elements on the top of your layout match some other kind of elements on the footer? Does your vertically aligned menu on the left flush with your text and images in the body of you design same as on the right? Symmetry abounds in the screenshot from Supremetitle.com below. &lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/35935PM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; Everything flushes perfectly on the left, and on the right of the design. If the body text for instance, overlapped your imaginary vertical line either on the left or on the right of this layout, it would immediately lead to a visual dissonance, not unlike skipping a beat in music. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;3. Narrow down your palette &lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;So you obeyed all the symmetry rules and yet somehow your design still falls short of impressing anyone except your momz. Maybe that blue on green polka dotted background with the yellow verdana font might have something to do with it. Always try to make your design work with as few colors as possible to start with. Use variations of colors rather than a completely different color for everything. You can create elegant designs with just three colors, if you use them wisely. Kaeef.org is one of the best examples of maintaining similar color tonation in a web design.&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/42217PM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;Font, banners and backgrounds all seem like slightly lighter or darker versions of each other, and this usually ends up being easy on the eyes. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;4. Choose clear and eye-catching banner images &lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;I don't know if this has ever happened to you, but have you ever found yourself looking at a design and saying to yourself, "I don't get it, it's so simple, yet so compelling". Well, a lot of times, one well placed image on a website is all you need to pick up your freelance check and deliver a design masterpiece at the same time. &lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/35958PM.jpg"&gt;&lt;/DIV&gt;

I'm sure most people would agree that the screenshot above shows a pretty good site design. But picture it without the images for a second. Not a lot left is there? A lot of times when I design, finding the correct images for my site actually take a longer time than designing the rest of the layout. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;5. Know your tools &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;I've heard many a heated debate amongst developers about which web development or design tool is the 'King of the Hill'. My favorite is the one that often rages between developers who have sworn allegiance to Dreamweaver and the few users who self-consciously still use Microsoft FrontPage. The truth is, in the hands of a master, notepad is probably the best web development tool. A good piece of software is only as powerful as the person using it. You have to explore the options available to you in a particular software as a developer in order to make optimum use of whatever tool you find yourself using. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;6. Don't be afraid of a little adventure &lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;If you've been using the internet for at least 3 years, then chances are you've probably bumped into a site at some point that seemed to conform to none of the guidelines above and yet somehow was still highly compelling and visually appealing.&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageCenter&gt;&lt;IMG class=imgContent src="/BlogImages/41345PM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;Some web designers are bonafide artists within or without the digital medium, and if you fall in that category, then by all means, have a little fun with your work -- go crazy. </description>
      <link>http://www.eminencedigital.com/Blog/6-Web-Design-Tips-to-Live-By.aspx</link>
      <category>Web Design</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/6-Web-Design-Tips-to-Live-By.aspx</comments>
      <pubDate>Mon, 29 Oct 2007 23:23:53 GMT</pubDate>
    </item>
    <item>
      <title>Building On-the-fly functionality into a Datagrid</title>
      <description>Not too long ago I was confronted with the task of building a Datagrid, with one of it's columns containing input fields that could hold monetary values. These input fields would allow for a user to change the values within them, resulting in a realtime recalculation of the sum of all visible input field values. The result of this would be displayed at the bottom of the grid. - all of this, without a postback of any kind. After trying endlessly to google a solution for it, I gave up and faced the drudgery of building it myself. Here's how I did it. 
&lt;div class="divPageImageCenter"&gt;&lt;img class="imgContent" src="/BlogImages/105442AM.jpg"&gt;&lt;/div&gt;&lt;br&gt;The magic encompassing this particular exercise can be summarized in one word - Javascript. Let's start by breaking down this project into steps. Bear in mind that this is not yet a custom web control so all the code takes place in a web form and it's codebehind. &lt;br&gt;&lt;br&gt;&lt;b&gt;Designing your Datagrid&lt;/b&gt;&lt;br&gt;For the most part, the Datagrid we need is no different from your average Datagrid. The main differences is our updateable input field column. The total field that stores the sum of all our updateable input fields is nothing new, and there are countless tutorials on how to rig one up. While we're on the presentation layer, however, I might add that another crucial element that adds support for the features this article discusses are a horde of hidden fields. I use six in all, to support the control.&lt;br&gt;&amp;nbsp;I prefer to use textboxes styled to not appear on the page rather than "&amp;lt;input type="hidden"/&amp;gt;" fields, for the simple reason that I can choose to see their contents when I please, allowing me to better debug my code. In using hidden textboxes, you should try to avoid using display:none or visibility:hidden css tags for these fields, for reasons that are beyond the scope of this article. Instead set border, height and width to 0px. These are the ones I used: &lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenTotalLabelName&lt;br&gt;&lt;/i&gt;This stores the ID of the Total Label which exists within the Datagrid. The label will hold the calculated sum of the input field columns of our grid. We just can't hardcode that ID into this hidden field because the Datagrid control implements the InamingContainer interface which assigns unique ID's to child controls. &lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenTotalValue&lt;br&gt;&lt;/i&gt;Aside from storing our total value at the bottom of the Datagrid, we also need a place where we can just store it as a regular unformatted numeric value, this field does that job. &lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenCurrentValue&lt;br&gt;&lt;/i&gt;Once you set focus on one of our Datagrid input fields to begin manipulating it's value, we store that initial value in a safe place to use for further calculations. Keep reading to find out why and how exactly we do this.&lt;br&gt;&lt;br&gt;&lt;i&gt;txtHiddenLastTextFieldID&lt;br&gt;&lt;/i&gt;This last hidden field will store the ID for the last input field whose value we manipulated.&lt;br&gt;&lt;br&gt;&lt;b&gt;Retrieving and Binding Data&lt;/b&gt;&lt;br&gt;You are free to bind data from any datasource to the grid. The only requirement needed for this project to be meaningful is for you to have one field that holds monetary values -- that is the value that we are going to be adding up, once a user changes it. For the purposes of this tutorial, I use a for loop to create my own data source using a method called GetTestData();&lt;br&gt;&lt;br&gt;&lt;b&gt;Writing your Javascript&lt;/b&gt;&lt;br&gt;This is probably the most intense part of the entire process. We need several Javascript functions to do summation, and validation of input values. The table below gives a gist of what we need on the javascript side. &lt;br&gt;&lt;i&gt;__StoreCurrentValue():void&lt;br&gt;&lt;/i&gt;This method gets triggered on the 'onFocus' event of the input field inside the Datagrid, whose value is being changed at the moment. It is basically the 'caching' function that we use to store the value in the input field before it is changed.&lt;br&gt;&lt;br&gt;&lt;i&gt;__ReCalculateTotal():void&lt;br&gt;&lt;/i&gt;This method gets trigerred on the 'onBlur' method of the input field inside the Datagrid whose value has most recntly either been changed or attempted to be changed.&lt;br&gt;&lt;br&gt;&lt;i&gt;LastValueWasValid():bool&lt;br&gt;&lt;/i&gt;This is our validation manager method. It performs all the necessarry validation we need on the values entered into our input fields.&lt;br&gt;The flow of control goes like so:&lt;br&gt;
&lt;div class="divPageImageCenter"&gt;&lt;img class="imgContent" src="/BlogImages/110902AM.jpg"&gt;&lt;/div&gt;&lt;br&gt;Exciting isn't it? By this point, a lot of the drama is out of the way, but we're not quite there yet. Why you say? Well, what happens when a user changes a page in the Datagrid? Remember that typcially this means retrieving our data from data storage once again and re-binding it to the Datagrid. Unfortunately, when we go to retrieve our data, it will not have the changes we have made. We have to find a way to persist our data across postbacks, which brings us to our next item. &lt;br&gt;&lt;br&gt;&lt;b&gt;Persisting changes made to data &lt;br&gt;&lt;/b&gt;The simple solution for persisting our changes made inside the grid is to store our datasource, once we retrieve it to either a page cache or Viewstate so that on every event that causes a postback, we update our cached datasource and then re-bind our grid. I chose the Viewstate in this example. The only column inside the grid, whose values change and hence need to be tracked are those in our input field column. I use a method in my codebehind called 'UpdateTableRows' that retrieves a reference of my stored datatable from the ViewState, updates the rows with newly inputed values and then re-binds it to my grid. This method is called on all events that cause a postback. &lt;br&gt;&lt;br&gt;
&lt;div class="cf"&gt;
&lt;p class="cl"&gt;&lt;span class="cb1"&gt;private&lt;/span&gt; System.Data.DataTable UpdateDataTableRows(DataGrid dg)&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Data.DataTable _dt = (System.Data.DataTable)&lt;span class="cb1"&gt;this&lt;/span&gt;.ViewState[StoredTable];&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;int&lt;/span&gt; currIndex=0;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;foreach&lt;/span&gt; (DataGridItem item &lt;span class="cb1"&gt;in&lt;/span&gt; dg.Items)&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; currIndex = Convert.ToInt32(dg.DataKeys[item.ItemIndex].ToString());&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _dt.Rows[currIndex]["PaymentAmount"] = ((TextBox)item.FindControl("AmtInput")).Text;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _dt.AcceptChanges();&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span class="cb1"&gt;return&lt;/span&gt; _dt;&lt;/p&gt;
&lt;p class="cl"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Submitting Data&lt;/b&gt;&lt;br&gt;What you do with your data after clicking submit is really up to you. Just remember that, just like with the pageIndexChanged event, the submit button causes a postback, and hence must have code in the event to persist all changes made to the cached datastore. &lt;br&gt;Download the code and play around with it to get the clearer picture. At the very least, this article should provide you with the very much needed javascript required to make this clock tick. </description>
      <link>http://www.eminencedigital.com/Blog/Building-On-the-fly-functionality-into-a-Datagrid.aspx</link>
      <category>.Net Framework</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/Building-On-the-fly-functionality-into-a-Datagrid.aspx</comments>
      <pubDate>Wed, 14 Nov 2007 12:55:55 GMT</pubDate>
    </item>
    <item>
      <title>The Story of Officer Tyron Franklin</title>
      <description>Officer Tyron Franklin was shot and killed after being identified as a police officer during a robbery attempt at a local fast food restaurant. He was paying for his food when a robber approached him and demanded his money. During the ensuing struggle, the robber produced a handgun and shot him four times. The shooter then shot him two more times as he lay on the ground after a witness yelled at him saying the victim was an officer.&lt;BR&gt;&lt;BR&gt;&amp;nbsp;Of all the nonprofit sites I've worked on lately, my last project was probably the one that came with the most emotionally captivating story. It's timing, was also probably the most coincidental, reason being that the passing of the young police officer that the website was meant to commemorate happened within weeks of the passing of my Father. &lt;BR&gt;&lt;BR&gt;I usually begin designing every website by trying to tap into the 'mission' of the website for inspiration. Who's the audience? Who are the owners? What do these parties want to see, feel and remember the moment they land on the homepage? It just so happened that this time, having to build a site in memory of a loved one who had passed was a task that I could generate inspiration for from my own experience.&lt;BR&gt;&lt;BR&gt;I would have wanted a site that did not seek to patronize my feeling of loss. A bright colored tribute with oodles of visual panache would have done little to help abate my grief. I would have wanted a site that was more of a monument, or a salute to a life well lived--probably a site that didn't try too hard to accomplish this. This was my inspiration for OfficerTyronFranklin.org&lt;BR&gt;&lt;BR&gt;
&lt;DIV class=divPageImageLeft&gt;&lt;IMG class=imgContent src="/BlogImages/85806AM.jpg"&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;BR&gt;In the backend, I added some new features to the Nonprofit Manager as well. To help the Officer Tyron Franklin foundation keep track of it's donors, I created a Donor classification and archiving system, that would allow administrators to create a category of donation based on a range (eg. $50 - $100: Gold Circle&lt;BR&gt;&lt;BR&gt;I also made the Page Management feature more efficient. In older versions of the Nonprofit manager, if a user created a page of type 'Component', a user then had to manually type in the name of the component. &lt;BR&gt;
&lt;DIV class=divPageImageLeft&gt;&lt;IMG class=imgContent src="/BlogImages/85821AM.jpg"&gt;&lt;/DIV&gt;In this version, once a user creates a component page, a dropdown list shows up with all the components that a user can select from. Also, whereas a the old version did not allow a user to change from a page from one type to the other once it had been created, this version makes that possible from right within the datagrid.&lt;BR&gt;&lt;BR&gt;Another neat feature is that, now after you have created all the pages on your site, you can actually just select one of them to be your front page. &lt;BR&gt;&lt;BR&gt;Check out the modified Nonprofit Manager user manual &lt;A href="/docs/nonprofitmanagerv1.1.pdf" target=_blank&gt;here&lt;/A&gt;.</description>
      <link>http://www.eminencedigital.com/Blog/The-Story-of-Officer-Tyron-Franklin.aspx</link>
      <category>General</category>
      <category>Journal</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/The-Story-of-Officer-Tyron-Franklin.aspx</comments>
      <pubDate>Sun, 06 Jan 2008 09:30:35 GMT</pubDate>
    </item>
    <item>
      <title>Living La Vista Loca with my new Dell XPS M1530</title>
      <description>So somehow someway, I managed to drain the magic out of my two year old Dell Inspiron 9300 recently. My latest pet project (which incidentally promises to be my most kick-ass project yet) proved to be the last straw for the silver coated development powerhouse which was my Inspiron 9300. It had gotten to the point where I was typing in object names in Visual Studio, hitting the kitchen and frying an omelete before the intellisense kicked in (well, almost). Debugging, building and other typical tasks I ran into while doing development on a day to day basis had slowed down to a crawl and I won't even start to talk about my experiences switching between applications like MSSQL Server, Photoshop etc. which I happen to have to do often. Slow, slow slow. &lt;BR&gt;&lt;BR&gt;So I decided to invest in a new development powerhouse. I had been checking out the Dell XPS line of laptops for a hot minute, because quite simply my experiences with Dell customer support wasn't bad while I was using the Inspiron. I remember dropping it once and cracking the LCD screen and having Dell replace it within roughly a week. All these laptops are made up of the same parts anyway, I buy a laptop based on how responsive and forthcoming I think the seller will be with their customer support. So without much ado, let's hop into the specs of the laptop I finally ended up getting shall we: &lt;BR&gt;&lt;BR&gt;
&lt;OL&gt;
&lt;LI&gt;XPS M1530, Intel C2D T7800 (2.6GHz/800MHz FSB, 4M L2 Cache) 
&lt;LI&gt;Crimson Red Casing With Microsatin Finish XPS M1530 
&lt;LI&gt;4GB, DDR2, 667MHz 2 Dimm, for XPS M1530 
&lt;LI&gt;15.4 inch Wide Screen WXGA+ TrueLife LCD with 2.0 MO Camera for XPS M1530 
&lt;LI&gt;Camera Software XPS M1530 2.0MP 
&lt;LI&gt;256MB NVIDIA GeForce 8600M GT 
&lt;LI&gt;120GB 7200RPM SATA Hard Drive for XPS M1530 
&lt;LI&gt;Microsoft Windows Vista Ultimate 32-bit Edition English,Inspiron 
&lt;LI&gt;8X DVD+/-RW Slot Load Drive for XPSM1530 
&lt;LI&gt;Integrated High Definition Audio 2.0 
&lt;LI&gt;85 WHr 9-cell Lithium Ion Primary Battery, for XPS M1530 
&lt;LI&gt;85 WHr 9-cell Lithium Ion Additional Battery, for XPS M1530 
&lt;LI&gt;DELL WRLS 5720 EVDO, Verizon Dell Wireless 5720 EVDO Mini Card for Verizon 
&lt;LI&gt;Dell Wirless 355 Bluetooth Module (2.0+EDR) &lt;/LI&gt;&lt;/OL&gt;&lt;BR&gt;
&lt;DIV class=divPageImageLeft&gt;&lt;IMG class=imgContent src="/BlogImages/11140PM.jpg"&gt;&lt;/DIV&gt;Those are but a few of my favorite things about this baby -- codenamed Red. I didn't skimp on much in getting this laptop I particularly paid attention to the specs detailed in a posting on &lt;A id=qvax target="_blank" title="posting on Scott Guthrie's blog" href="http://weblogs.asp.net/scottgu/archive/2007/11/01/tip-trick-hard-drive-speed-and-visual-studio-performance.aspx"&gt;Scott Guthrie's blog&lt;/A&gt;, about the features to look out for on a development workstation. I maxed out on just about every performance enhancing feature and the result, the best experience I've ever had using any digital device ever. Red has 4GB of RAM compared to my Inspiron's 256MB, quite frankly this is not the PC from the 'I'm a Mac and you're a PC' commercials.' My productivity has gone up by a good 90% and I'm simply loving it. All this goodness came with a hefty price-tag though, weighing in at a little over $3000 after purchasing a two year accidental damage warranty it cost almost twice as much as my college hooptie. I didn't do too much research as far as prices of competing models from HP etc. but I have a feeling Dell's offering might be on the higher end of the spectrum. &lt;BR&gt;&lt;BR&gt;So is there anything I don't like about Red so far? Well, not much really, Dell re-arranged a few buttons like the delete, home, page up and page down buttons which is taking getting used to. They are now a single vertical column on the right side of the keyboard and trying to hit one of them usually causes you to hit the other -- not a very good thing when you have text highlighted and you want to hit home, but hit delete instead. I also couldn't install MSSQL Server 2000 because it's not supported on Vista, which means that I have to swith to MSSQL 2005 for all development going forward. Not a bad thing for new projects to come, but what about the handful of sites I have already created that I still have to support occasionally? Migrating them would not be financially practical, so now I'm having to hold on to my Inspiron 9300 to support my legacy deployments. Although, I heard from a friend that you can still connect to older versions of MSSQL from 2005. That would be a good thing. &lt;BR&gt;&lt;BR&gt;If you are thinking about getting an XPS then I say go for it. Depending on what you typically use your laptops for, I'd say it's definitely a worthy investment. &lt;BR&gt;&lt;BR&gt;</description>
      <link>http://www.eminencedigital.com/Blog/Living-La-Vista-Loca-with-my-new-Dell-XPS-M1530.aspx</link>
      <category>Journal</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/Living-La-Vista-Loca-with-my-new-Dell-XPS-M1530.aspx</comments>
      <pubDate>Sun, 16 Mar 2008 13:20:35 GMT</pubDate>
    </item>
    <item>
      <title>EventOrb.com: A product of a mad programmer's 6 month coding binge pt. 1 </title>
      <description>&lt;A href="http://www.eventorb.com" target=_blank&gt;EventOrb.com&lt;/A&gt; started out with an event promoter client of my freelance service requesting an update to a site I had built for his organization in PHP a while ago. Because I had my hands full at the time, I remember wishing there was a social portal that served the needs of event promoters so that I could point him in that direction and call it a wrap. Unfortunately, there were none that quite fully met his needs and he was a good client, so I thought the next best thing would be to kill two birds with one stone, by taking another shot at creating a hopefully profitable public facing web portal while providing my client with a standalone website in the process. In other words, I would pick up a check for building a site for him, and reuse my Core objects to build one that could support multiple users. Things worked out a little differently, but EventOrb was an outcome nonetheless. &lt;BR&gt;&lt;BR&gt;So if you have about 6 months of your life and about $10k to spend building a website on the scale of EventOrb, here's what you might need.&lt;BR&gt;&lt;BR&gt;&lt;IMG class=imgContent src="/BlogImages/34355PM.jpg"&amp;gt;&lt;BR&gt;&lt;BR&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Development Platform&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;.Net Framework 2.0 
&lt;LI&gt;MSSQL 2005 
&lt;LI&gt;Enterprise Library 
&lt;LI&gt;Ajax Toolkit Library&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A fast development machine&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;Dell XPS (&lt;A href="/Blog/Living-La-Vista-Loca-with-my-new-Dell-XPS-M1530.aspx" target=_blank&gt;about mine&lt;/A&gt;)&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Dedicated Hosting&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.hostmysite.com/" target=_blank&gt;HostMySite&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Video Streaming Server&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.amazon.com/gp/browse.html?node=16427261" target=_blank&gt;Amazon s3&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A host of third party tools (unless you want to spend 6 years instead of 6 months developing ) &lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Ajax Framework: &lt;A href="http://www.componentart.com/" target=_blank&gt;Component Art&lt;/A&gt; 
&lt;LI&gt;FLV Player: &lt;A href="http://products.agriya.com/flv-player" target=_blank&gt;Agriya FlV Player&lt;/A&gt;(oh, and by the way, purchase nothing else from Agriya besides their player, I'll explain later) 
&lt;LI&gt;Blog:&lt;A href="http://blog.eventorb.com/" target=_blank&gt; BlogEngine.net&lt;/A&gt; 
&lt;LI&gt;Documenting todo lists etc: &lt;A href="http://www.google.com/docs" target=_blank&gt;Google docs&lt;/A&gt; 
&lt;LI&gt;Address book importing:&lt;A href="http://www.plaxo.com/" target=_blank&gt;Plaxo&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;A Web/Graphic Designer, Programmer , yellow belt DBA, lightweight Flash developer and nutcase &lt;/STRONG&gt;
&lt;UL&gt;
&lt;LI&gt;Jonathan Awotwi&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;STRONG&gt;The Strategy&lt;/STRONG&gt; &lt;BR&gt;I recently found out about &lt;A href="http://en.wikipedia.org/wiki/Scrum_%28development%29" target=_blank&gt;SCRUM&lt;/A&gt; and found it rather interesting for the simple reason that I had been practicing a kind of one man SCRUM not only for EventOrb, but also for HomeTeamManager.com for the last couple of years without knowing it. The idea of SCRUM in a nutshell is to audit yourself continuosly as you are developing. What did you work on yesterday? What are you working on now and what will you be working on tomorrow? Those are the three key questions that SCRUM development force you to answer every day. I knew if I didn't stick to hard deadlines, I would never really get anything accomplished, at least not in the timeframe I had in mind. Starting out, I made a mental note of things that needed to get done, developed my Photoshop mockups, the directory structure and setup my development environment in IIS etc., but as time went on, I started to use Google Docs to keep a written list of stuff I needed to do.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Build a Core set of Objects &lt;BR&gt;&lt;/STRONG&gt;My experience as a developer in a certain credit card services company that shall remain nameless taught me some valuable lessons in Object Oriented programming. Prior to working there, I had ample theortical knowledge and some experience as to how to program using the concepts of inheritance, interfaces etc. However, no one company made it more evident why it was necessarry than that company. It wasn't long after I started working there that I begun to isolate my own custom built core set of objects that could be re-used across my freelance clients, and across projects, and boy did it pay off. Let's just say &lt;A href="http://www.eventorb.com" target=_blank&gt;EventOrb&lt;/A&gt; would have taken much longer than 6 months if I didn't already have a robust set of Core business and data access objects and Utilities ready for use. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Managing Your Hours&lt;BR&gt;&lt;/STRONG&gt;It was tough developing around a regular 9 to 5 (well duh!). I would work 45 minutes during my train ride to work in the morning, 45 minutes coming back and about 4 to 5 hours after work. Weekends I would code for about 8 hours provided I didn't have much else to do. A little late for a disclaimer, but this isn't exactly the healthiest way to spend 6 months of your life. Event Orb Features &lt;BR&gt;&lt;BR&gt;These are the features that make up EventOrb:&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;The Front Facing Application &lt;/STRONG&gt;
&lt;OL&gt;
&lt;LI&gt;Multi-tenant Application 
&lt;LI&gt;Social Networking 
&lt;LI&gt;Internal Messaging 
&lt;LI&gt;Event creation 
&lt;LI&gt;Event Page (modular web portal gets generated automatically for every event that gets created) 
&lt;LI&gt;Flyer uploads 
&lt;LI&gt;Photo Uploads 
&lt;LI&gt;Video Uploads 
&lt;LI&gt;Asynchronous Event Search 
&lt;LI&gt;Event Templating or Themeing 
&lt;LI&gt;Evite-like features 
&lt;LI&gt;Customizable Event Invitations 
&lt;LI&gt;Photo Search 
&lt;LI&gt;Video Search 
&lt;LI&gt;Photo and Video Commenting 
&lt;LI&gt;Embeddable Video 
&lt;LI&gt;Event Rating and commenting 
&lt;LI&gt;Social bookmarking 
&lt;LI&gt;Event Geo-location on google maps 
&lt;LI&gt;Multiple Event Calendars&lt;/LI&gt;&lt;/OL&gt;&lt;STRONG&gt;Backend - Control Panel Application &lt;BR&gt;&lt;/STRONG&gt;Management modules for a handful of the features mentioned above. &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Service Applications &lt;BR&gt;&lt;/STRONG&gt;Scheduled Console applications and services for sending emails, keeping objects cached etc.&lt;BR&gt;&lt;BR&gt;Stay tuned for Part 2.</description>
      <link>http://www.eminencedigital.com/Blog/EventOrbcom-A-product-of-a-mad-programmers-6-month-coding-binge-pt-1-.aspx</link>
      <category>General</category>
      <category>.Net Framework</category>
      <category>Web Design</category>
      <author>Jonathan Awotwi</author>
      <comments>http://www.EminenceDigital.com/Blog/EventOrbcom-A-product-of-a-mad-programmers-6-month-coding-binge-pt-1-.aspx</comments>
      <pubDate>Wed, 23 Jul 2008 22:25:04 GMT</pubDate>
    </item>
  </channel>
</rss>