<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-805664215936144163</id><updated>2012-01-27T19:44:11.126-08:00</updated><title type='text'>i've stopped ignoring javascript</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-805664215936144163.post-8237815074336265346</id><published>2011-02-04T16:02:00.001-08:00</published><updated>2011-02-05T10:11:18.895-08:00</updated><title type='text'>Resume</title><content type='html'>&lt;font face="arial"&gt;Alex Egg&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;font face="arial"&gt;San Diego, Ca&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;font face="arial"&gt;&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;font face="arial"&gt;eggie5@gmail.com&lt;/font&gt;&lt;br&gt;&lt;br style="font-family:Arial"&gt;&lt;h3&gt;&lt;font face="arial"&gt;Work Experience&lt;/font&gt;&lt;/h3&gt;&lt;h4&gt;&lt;font face="arial"&gt;&lt;font size="2"&gt;Qualcomm (Tapioca Mobile), Software Engineer, June 2010 -- Current&lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;&lt;font face="arial"&gt;Developing Tapioca&amp;#39;s applications and systems to deliver video content to mobile devices.&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Application and feature development in ruby&lt;/font&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Send MMS and SMS messages though aggregator&lt;/font&gt;&lt;/li&gt;&lt;li&gt;Various features (mostly ruby work/some nodejs)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Expanding infrastructure - build out DB replication segmented giant web app into smaller pieces&lt;/font&gt;&lt;/li&gt;&lt;li&gt;Part-time during school&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div&gt;&lt;b&gt;2 year break in Korea&lt;/b&gt;&lt;/div&gt;&lt;h4&gt;&lt;font face="arial"&gt;Tapioca Mobile, Software Engineer, May 2007 -- May 2008&lt;/font&gt;&lt;/h4&gt;&lt;font face="arial"&gt;Developing Tapioca&amp;#39;s applications and systems to deliver video content to mobile devices.&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Developed system to send and receive millions of SMS/MMS messages&lt;/li&gt;&lt;li&gt;Developed system to transcode thousands of videos to work on any mobile handset&lt;/li&gt;&lt;li&gt;Test Driven Development - small agile team - Ruby on Rails&lt;/li&gt;&lt;li&gt;Integration with multiple detached systems via REST API&lt;/li&gt;&lt;li&gt;See: www.msnack.com &amp;nbsp; &amp;nbsp;www.tapiocamobile.com&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;h4&gt;&lt;font face="arial"&gt;&lt;font size="2"&gt;AComm Inc., Software Engineer (Contract), Jan 2007 -- May 2007&lt;/font&gt;&lt;/font&gt;&lt;/h4&gt;Defense industry start up. Helped with hardware/software integration - USB development (C#, C)&lt;br&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Cubic Defense Inc., Software Engineering Intern, Summer 2006 &amp;ndash; Jan 2007&lt;/font&gt;&lt;/h4&gt;&lt;font face="arial"&gt;8/2006-1/2007, Software Engineer, Hardware/Software Integration&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Ported USB 2.0 Xilinx FPGA interface software (see Signum Concepts) to the Pocket PC platform.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Enabling soldiers to run the software in the field with a small/light instead of full laptop or at a&lt;/font&gt;&lt;font face="arial"&gt; desktop station. (C#, .Net Compact Framework)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Developed 3D real time emulator of physical helicopter hardware &amp;ndash; takes X, Y, Z input from via&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;USB 2.0 interface. (DirectX &amp;amp; C#)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Reused above USB 2.0 class library to interface weather station hardware. (C#)&lt;/font&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;font face="arial"&gt;&lt;br&gt;Helped developed custom solutions enabling engineers to interface hardware via custom UIs&lt;/font&gt;&lt;font face="arial"&gt; within Windows. This streamlined and enabled real time configuration of hardware which was&lt;/font&gt;&lt;font face="arial"&gt; previously done via tools not designed directly for that purpose. Helped bridge the gap between&lt;/font&gt;&lt;font face="arial"&gt; Cubic manufactured hardware and the computer/software world.&lt;/font&gt;&lt;br&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Qualcomm Inc., Software Engineering Intern, Summer 2005 &amp;ndash; Summer 2006&lt;/font&gt;&lt;/h4&gt;&lt;font face="arial"&gt;4/2006-8/2006, Lead Software Engineer, User Interface Development&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Envisioned and chartered user interface client for console-based internal testing software&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Led a small team of intern engineers through technical design and implementation of client&lt;/font&gt;&lt;font face="arial"&gt;(Java).&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Served as one of the first engineers on the project, from initial design through launching the beta&lt;/font&gt;&lt;font face="arial"&gt; and eventually division-wide release.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Boosted use of testing by 40% internally, due to ease of use (this is just my own estimate). Users&lt;/font&gt;&lt;font face="arial"&gt; were no longer scared away by console window, which old version of software was based.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;font face="arial"&gt;6/2005 &amp;ndash; 9/2005, Software Engineer, Internal Testing Framework: Enchantments&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Lead the enhancement effort of internal testing/build framework and successfully made&lt;/font&gt;&lt;font face="arial"&gt; numerous code releases. Enhancements included the addition of HTTP and HTML testing ability&lt;/font&gt;&lt;font face="arial"&gt; which automated testing of the Qualcomm BREW content system. Required knowledge of HTTP&lt;/font&gt;&lt;font face="arial"&gt; protocol along with HTML and cross browser rendering intricacies. Code required to be cross-&lt;/font&gt;&lt;font face="arial"&gt;platform compatible, i.e. Windows and Linux support. (Java, Ant)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Provided support for internal company-wide users and groups, while brainstorming w/ teams for&lt;/font&gt;&lt;font face="arial"&gt; new product enhancements.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Lead group-wide effort in rewriting software to support the full range of Unicode encodings.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Member of the testing and automation team, which among other things developed and&lt;/font&gt;&lt;font face="arial"&gt; maintained the division&amp;rsquo;s internal software build process. Specifically, responsible for addition&lt;/font&gt;&lt;font face="arial"&gt; of new features to the internal build system&amp;rsquo;s xUnit automated testing framework. Also&lt;/font&gt;&lt;font face="arial"&gt; responsible for providing support to various internal users and groups, while&lt;/font&gt;&lt;font face="arial"&gt; spearheaded an effort to make group-wide software Unicode aware and friendly.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Wireless Personal Multimedia Communications Symposia (Volunteer), Lead Web&lt;/font&gt;&lt;/h4&gt;&lt;font face="arial"&gt;Developer/Designer, Fall 2005 &amp;ndash; Present&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Lead Developer/Designer responsible for annual wireless conference&amp;rsquo;s website from design to&lt;/font&gt;&lt;font face="arial"&gt; implementation, including development of custom automated paper submission/revision&lt;/font&gt;&lt;font face="arial"&gt; system. (C#/ASP.NET, Javascript)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Worked closely and meet weekly with conference committee and sponsors: Nokia, Qualcomm,&lt;/font&gt;&lt;font face="arial"&gt; Wiley Publishing, NiCT and YRP.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Received over 100 hits/day (during conference duration) and over 600,000 this year alone.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Large call for papers response: Over 400 papers submitted (all managed by said paper system)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;http://www.wpmc2006.org&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Donated source code to WPMC 2007, India&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Nokia (formally Tourmaline Networks), Software Engineering Intern, Summer 2004&lt;/font&gt;&lt;/h4&gt;&lt;font face="arial"&gt;7/2004-9/2005, Software Engineer, Business Metrics Application&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;From design to implementation lead the development of an in house user metrics application&lt;/font&gt;&lt;font face="arial"&gt; used to display sales information from a rich user interface.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Sales data &amp;ndash; from &amp;ldquo;raw XML&amp;rdquo; monthly-generated database files &amp;ndash; was parsed/processed and&lt;/font&gt;&lt;font face="arial"&gt; displayed graphically in easy to digest charts and tables. (C#/ASP.NET) Helped company realize&lt;/font&gt;&lt;font face="arial"&gt; strengths/weaknesses in their current model. For example, users were not purchasing full&lt;/font&gt;&lt;font face="arial"&gt; application after trying demo, i.e. full version was too expensive.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;font face="arial"&gt;5/2004-7/2004, Software Engineer, Automated Testing Solution (C#, BREW SDK)&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Responsible for the development of automated testing solution of mobile phone BREW&lt;/font&gt;&lt;font face="arial"&gt; applications. Tests cases executed though rich user interface automatically, effectively&lt;/font&gt;&lt;font face="arial"&gt; eliminating human testing and keeping interaction to a minimum.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Developed custom interface code to emulate button presses on handsets to use with above testing&lt;/font&gt;&lt;font face="arial"&gt; software via USB or Serial. Note: This was before the release of the BITL SDK from Qualcomm&lt;/font&gt;&lt;font face="arial"&gt; (C#, Perl, C++)&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Exposed various previously undiscovered product bugs. Example: Discovered bug in email&lt;/font&gt;&lt;font face="arial"&gt; software where user entered non-ASCII characters in the message body would cause handset to&lt;/font&gt;&lt;font face="arial"&gt; power cycle.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;font face="arial"&gt;Tourmaline Networks (before Nokia&amp;rsquo;s acquisition) was a private ISV developing email suites for&lt;/font&gt;&lt;font face="arial"&gt; the Qualcomm Brew Platform. Tourmaline Networks was in need of a comprehensive testing&lt;/font&gt;&lt;font face="arial"&gt; solution to ensure the quality and features of released products. Tests had to be run nightly and&lt;/font&gt;&lt;font face="arial"&gt; provide easy customization for non-technical employees. Their needs were achieved through the&lt;/font&gt;&lt;font face="arial"&gt; development of an easy-to-use user interface to the testing system and one-on-one collaboration&lt;/font&gt;&lt;font face="arial"&gt; with the other developers on my team.&lt;/font&gt;&lt;br style="font-family:Arial"&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Signum Concepts Inc., Software Engineering Consultant, Present&lt;/font&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Design and implementation of Xilinx Vertex 2 Pro FPGA to USB 2.0 interface on a software radio&lt;/font&gt;&lt;font face="arial"&gt; implementation. Including development of rich user interface for real time radio configuration&lt;/font&gt;&lt;font face="arial"&gt; via USB. (C#)&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Education&lt;/font&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Undergraduate (Sophomore) of Computer Engineering, San Diego State University&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;William E. Jr. Leonhard Endowment Engineering Scholarship&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Skills&lt;/font&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Speak Korean proficiently&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Proficient in: Ruby, Javascript, C#, Java, VB.NET, C, ASP.NET, Databases&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Proficient in: .Net Framework/Compact Framework, Windows API, BREW SDK&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Experience in: User Interface Development, Windows Development, Web Development&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Experience in software to hardware interfacing in Windows, USB software implementation&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Experience in Agile/XP software engineering methodologies&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;h4&gt;&lt;font face="arial"&gt;Conferences&lt;/font&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;font face="arial"&gt;Organizing committee member, Wireless Personal Multimedia Symposium, 2006 &amp;ndash; La Jolla, Ca.&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font face="arial"&gt;Attendee, Qualcomm BREW Conference 2006 &amp;ndash; San Diego, Ca.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br style="font-family:Arial"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/805664215936144163-8237815074336265346?l=eggie5.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/8237815074336265346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=805664215936144163&amp;postID=8237815074336265346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/8237815074336265346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/8237815074336265346'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/2011/02/resume.html' title='Resume'/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-805664215936144163.post-3090440854607630524</id><published>2007-02-26T21:16:00.002-08:00</published><updated>2007-02-26T21:26:48.415-08:00</updated><title type='text'>AJAX Safe HTML Forms</title><content type='html'>Whenever you create a form on a HTML page it's easy to make it AJAX safe. All you have to do is call your ajax form submission code in the forms onsubmit event and specify the standard postback address in case the ajax fails or the user doesn't have javascript support. Use this template:&lt;br /&gt;&lt;br /&gt;&amp;lt;form action="servercode.aspx" onsubmit="return ajax submit()"&amp;gt;&lt;br /&gt;...&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;br /&gt;function ajax_submit()&lt;br /&gt;{&lt;br /&gt;// if ajax submission successfull&lt;br /&gt; return false;&lt;br /&gt;&lt;br /&gt;//else if ajax submssion failed&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;So if the ajax postback to the server was successful post back to the action URL will not take place. Hence, if you pass false to onsubmit, the form will not postback. However if you return true to onsubmit the form will do a traditional post back.&lt;br /&gt;&lt;br /&gt;In conclusion, since we only return false if the ajax action was successful the program degrades gracefully to a traditional post back. That is an ajax safe html form!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/805664215936144163-3090440854607630524?l=eggie5.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/3090440854607630524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=805664215936144163&amp;postID=3090440854607630524' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/3090440854607630524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/3090440854607630524'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/2007/02/ajax-safe-html-forms_4534.html' title='AJAX Safe HTML Forms'/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-805664215936144163.post-1863329564245442656</id><published>2007-02-10T01:46:00.000-08:00</published><updated>2007-02-26T21:27:43.577-08:00</updated><title type='text'></title><content type='html'> &lt;h3&gt;Creating Custom Controls for Google Maps &lt;br&gt;&lt;/h3&gt;With the release of the Google Maps API, usage of the fantastic framework Google has laid is now possible. Fueled by the easy to use, highly abstracted and well documented API, customized versions of Google Maps are running all over the Internet. With the API it is possible to create custom effects, tools, data, etc. for your map -- basically, the possibilities are endless because you have access to the whole world of the Javascript language. &lt;span style="font-style: italic;"&gt;This article will show how to create a custom control for google maps, which will allow a user to click and drag a rectangle over a selected area on the map which will then be centered on and magnified.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;h3&gt;What is a Google Maps Control?&lt;/h3&gt;While there is no specific definition of a maps API control per se, however basically a control is this: some tool ("control") that is displayed in the google maps window and provides some custom functionally that doesn't come with the maps API. Technically, a control is anything that implements the GControl Interface. The maps API already comes with a hand full of helpful controls:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;GLargeMapControl&lt;/code&gt; - a large pan/zoom control used on Google Maps. Appears in the top left corner of the map.&lt;/li&gt;&lt;li&gt;&lt;code&gt;GSmallMapControl&lt;/code&gt; - a smaller pan/zoom control used on Google Maps. Appears in the top left corner of the map.&lt;/li&gt;&lt;li&gt;&lt;code&gt;GSmallZoomControl&lt;/code&gt; - a small zoom control (no panning controls) used in the small map blowup windows used to display driving directions steps on Google Maps.&lt;/li&gt;&lt;li&gt;&lt;code&gt;GScaleControl&lt;/code&gt; - a map scale&lt;/li&gt;&lt;li&gt;&lt;code&gt;GMapTypeControl&lt;/code&gt; - buttons that let the user toggle between map types (such as Map and Satellite)&lt;/li&gt;&lt;li&gt;&lt;code&gt;GOverviewMapControl&lt;/code&gt; &lt;span class="new"&gt;New!&lt;/span&gt; - a collapsible overview map in the corner of the screen&lt;/li&gt;&lt;/ul&gt;If you've ever used the maps API you should be familiar with at least one of these controls. They are already implemented and included in the maps API, however now, we are going to make our own custom control, that allows the user to click a point on the map and drag a rectangle over and area to another point. This area will then be centered upon and magnified to the appropriate level.&lt;br&gt;&lt;br&gt;&lt;h3&gt;The Hello World of GMaps Controls&lt;/h3&gt;As I alluded to above, the most minimal amount of code you have to write to create a true gmaps control is implement the GControl interface.&lt;br&gt;&lt;br&gt;&lt;font style="font-family: Lucida Console;" size="1"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// base definition and inheritance&lt;/span&gt;&lt;br&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;function &lt;/span&gt;MyCustomControl() &lt;br&gt;{&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//Default constructor for GControl &lt;/span&gt;&lt;br&gt;MyCustomControl.prototype = &lt;span style="color: rgb(0, 0, 153);"&gt;new &lt;/span&gt;GControl(false,false); &lt;br&gt;&lt;br&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;// Default location for the control&lt;/span&gt;&lt;br&gt;MyCustomControl.prototype.getDefaultPosition = &lt;span style="color: rgb(0, 0, 153);"&gt;function&lt;/span&gt;() {&lt;br&gt;       &lt;span style="color: rgb(0, 0, 153);"&gt;return new&lt;/span&gt; GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(&lt;span style="color: rgb(255, 0, 0);"&gt;700&lt;span style="color: rgb(51, 0, 51);"&gt;,&lt;/span&gt;8&lt;/span&gt;));&lt;br&gt;};&lt;br&gt;&lt;br&gt;GControlSelector.prototype.initialize = &lt;span style="color: rgb(0, 0, 153);"&gt;function&lt;/span&gt;(gmapref) &lt;br&gt;{&lt;br&gt;   &lt;br&gt;       &lt;span style="color: rgb(0, 0, 153);"&gt;var &lt;/span&gt;container=gmapref.getContainer();&lt;br&gt;    &lt;br&gt;       &lt;span style="color: rgb(0, 0, 153);"&gt;var&lt;/span&gt; c = document.createElement("div");&lt;br&gt;       c.innerHTML="This is a custom control";&lt;br&gt;    &lt;br&gt;       container.appendChild(c);&lt;br&gt;    &lt;br&gt;       &lt;span style="color: rgb(0, 0, 153);"&gt;return&lt;/span&gt; c;&lt;br&gt;}&lt;/font&gt;&lt;br&gt;&lt;br&gt;The first function &lt;span style="font-family: Courier New;"&gt;MyCustomControl()&lt;/span&gt;is the name of the class and the control, this is your base class for the control. The next block of code simply initializes an instance of the &lt;span style="font-family: Courier New;"&gt;GControl()&lt;/span&gt; interface using it's default constructor, so now we must implement all it's required interfaces. &lt;br&gt;&lt;br&gt;The required members of the GControl interface are:&lt;br&gt;&lt;ul&gt;&lt;li&gt;printable() &amp;gt; bool -- Returns to the map if the control should be printable.&lt;/li&gt;&lt;li&gt;selectable() &amp;gt; bool -- Returns to the map if the control contains selectable text.&lt;/li&gt;&lt;li&gt;initialize(map) &amp;gt; Node -- Will be called by the map so the control can initialize       itself. &lt;/li&gt;&lt;li&gt;getDefaultPosition() &amp;gt; GControlPosition -- Returns to the map the position in the map view at which the       control appears by default. This will be overridden by the       second argument to &lt;code&gt;&lt;span class="nomatch"&gt;GMap2.addControl()&lt;/span&gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;We already have 2 of these implimented by means of our call to the GControl contstructor which has this signature: GControl(&lt;span class="type" title="type:  Boolean"&gt;printable?&lt;/span&gt;, &lt;span class="type" title="type:  Boolean"&gt; selectable?&lt;/span&gt;). Since we passed false to both the parameters we only need to impliment initialize(map) and getDefaultPosition(). &lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;initialize(map)&lt;/span&gt; - The purpose of the initialize method is to build the control, i.e. load it's code for use. For, all we are doing in initialize is build the UI, which is a simple div element with some text inside. Once we build the UI we add it the map and return it.&lt;br&gt;&lt;span style="font-weight: bold;"&gt;getDefaultPosition()&lt;/span&gt; - The purpose of the getDefaultPosition() method is so the maps API knows where to place the control if the user doesn't specify a custom location. &lt;br&gt;&lt;br&gt;Almost there. Once we have designed our custom control we have one step left, we must add it to the map using the method &lt;span style="font-family: Courier New;"&gt;Gmap2.addControl()&lt;/span&gt;. &lt;br&gt;&lt;br&gt;&lt;h3&gt;Adding the control to the map&lt;/h3&gt;Now we have to add our control to the map, this is the last step of creating your custom control.&lt;br&gt;&lt;br&gt;&lt;pre style="font-family: Lucida Console;" class="code"&gt;&lt;font size="1"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br&gt;    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br&gt;  &amp;lt;head&amp;gt;&lt;br&gt;    &amp;lt;meta http-equiv="content-type" content="text/html; charset=utf-8"/&amp;gt;&lt;br&gt;    &amp;lt;title&amp;gt;Google Maps JavaScript API Example&amp;lt;/title&amp;gt;&lt;br&gt;    &amp;lt;script src="http://maps.google.com/maps?file=api&amp;amp;amp;v=2&amp;amp;amp;key=abcdefg"&lt;br&gt;            type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br&gt;    &amp;lt;script type="text/javascript"&amp;gt;&lt;br&gt;    //&amp;lt;![CDATA[&lt;br&gt;&lt;br&gt;    function load() {&lt;br&gt;      if (GBrowserIsCompatible()) {&lt;br&gt;        var map = new GMap2(document.getElementById("map"));&lt;br&gt;       &lt;span style="background-color: rgb(255, 255, 0);"&gt; map.addControl(new MyCustomControl());&lt;/span&gt;&lt;br&gt;	map.setCenter(new GLatLng(37.4419, -122.1419), 13);&lt;br&gt;      }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    //]]&amp;gt;&lt;br&gt;    &amp;lt;/script&amp;gt;&lt;br&gt;  &amp;lt;/head&amp;gt;&lt;br&gt;  &amp;lt;body onload="load()" onunload="GUnload()"&amp;gt;&lt;br&gt;    &amp;lt;div id="map" style="width: 500px; height: 300px"&amp;gt;&amp;lt;/div&amp;gt;&lt;br&gt;  &amp;lt;/body&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;br&gt;The above is a stock google maps page. The above highlighted text is all we need to do to use&lt;br&gt;our new google maps custom control. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/805664215936144163-1863329564245442656?l=eggie5.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/1863329564245442656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=805664215936144163&amp;postID=1863329564245442656' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/1863329564245442656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/1863329564245442656'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/2007/02/creating-custom-controls-for-google.html' title=''/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-805664215936144163.post-2148991987421967475</id><published>2007-02-09T23:35:00.000-08:00</published><updated>2007-02-26T21:27:43.624-08:00</updated><title type='text'></title><content type='html'>           &lt;h1&gt;The Medium is the Message; The Future of the User Interfaces  &lt;br&gt;&lt;/h1&gt;&lt;font size="3"&gt; Critical comparison of traditional user interface development and web-based user interface development showing how web-based user interfaces are the future&lt;br&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;Abstract&lt;/span&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="3"&gt;HTML is the most perfect medium available today to build user interfaces for software; compiled programming languages are not and are already being matched in complexity and easy of use by their web based (HTML/CSS/Javascript) rivals. Progress in web based UIs is being fueled by the Renaissance of the XMLHTTP Javascript object, or in more commonly, "AJAX". With a web-based front end interface and C#/ASP.net back end connected via asynchronous AJAX calls over broadband Internet connections, the web based user experience is virtually as seamless as their desktop based rivals.&lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;Designing a UI with C#/Java&lt;br&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;The process of creating UI elements in a C# applicaiton is reletlivy simple in itself, but the larger context you'll see how it is inheretnly not suited for this task. Also, I will not go deeply into the symantics of C#. Below is a barebones .net 3.0 windows app written in C#&lt;span style="font-weight: bold;"&gt;:&lt;br&gt;&lt;span style="font-weight: bold; background-color: rgb(255, 255, 255);"&gt;&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;font style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" size="2"&gt;&lt;span style="font-family: Lucida Console;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;using &lt;/span&gt;System;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;using &lt;/span&gt;System.Windows.Forms;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;namespace &lt;/span&gt;alexegg.com&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;{&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    &lt;span style="color: rgb(0, 0, 153);"&gt;class &lt;/span&gt;UI : Form&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    {        &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        &lt;span style="color: rgb(0, 0, 153);"&gt;static void&lt;/span&gt; Main()&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        {&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            Application.Run(&lt;span style="color: rgb(0, 0, 153);"&gt;new &lt;/span&gt;UI());&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        }&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    }&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;img style="height: 300px; width: 300px;" title="UI Screenshot #1" src="http://docs.google.com/File?id=dfv8kc67_24q8k3db"&gt;&lt;br&gt;&lt;font size="3"&gt;&lt;font style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" size="2"&gt;&lt;span style="font-family: Lucida Console;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="font-weight: bold;"&gt;&lt;br&gt;&lt;/span&gt;None of the above code actually defines/configures any element of the UI. All it does is tell the C# language, which is not natively designed to build UIs, that we want this class to have a Windows UI. Lets modify the above skeleton C# windows from to look like the below HTML login screen:&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;img style="height: 342px; width: 630px;" title="HTML Login Screenshot" src="http://docs.google.com/File?id=dfv8kc67_25g27rp9"&gt;&lt;br&gt;&lt;br&gt;&lt;font size="3"&gt;I'll save the HTML for this example for later, now let's look at the C# code required to recreate this simple HTML interface:&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;span style="font-family: Lucida Console;"&gt;using System;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;using System.Windows.Forms;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;namespace alexegg.com&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;{&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    class UI : Form&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    {    &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.TextBox textBoxPassword;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.Button buttonSubmit;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.PictureBox pictureBoxLogo;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.Panel panelDialog;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.CheckBox checkBoxRemember_me;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.Label labelPassword;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        private System.Windows.Forms.Panel panelDialogBorder;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        public UI()&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        {&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword = new System.Windows.Forms.TextBox();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit = new System.Windows.Forms.Button();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo = new System.Windows.Forms.PictureBox();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog = new System.Windows.Forms.Panel();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword = new System.Windows.Forms.Label();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me = new System.Windows.Forms.CheckBox();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder = new System.Windows.Forms.Panel();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLogo)).BeginInit();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.SuspendLayout();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.SuspendLayout();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // textBoxPassword&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.Font = new System.Drawing.Font("Verdana", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(102)))), ((int)(((byte)(102)))), ((int)(((byte)(102)))));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.Location = new System.Drawing.Point(125, 31);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.Name = "textBoxPassword";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.Size = new System.Drawing.Size(150, 27);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.TabIndex = 0;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.textBoxPassword.UseSystemPasswordChar = true;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // buttonSubmit&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.Font = new System.Drawing.Font("Verdana", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.Location = new System.Drawing.Point(125, 107);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.Name = "buttonSubmit";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.Size = new System.Drawing.Size(66, 29);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.TabIndex = 1;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.Text = "Sign in";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.buttonSubmit.UseVisualStyleBackColor = true;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // pictureBoxLogo&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.Image = System.Drawing.Image.FromFile("resources\tcs_logo.png");&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.Location = new System.Drawing.Point(258, 49);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.Name = "pictureBoxLogo";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.Size = new System.Drawing.Size(106, 107);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.TabIndex = 2;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.pictureBoxLogo.TabStop = false;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // panelDialog&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.BackColor = System.Drawing.Color.White;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Controls.Add(this.checkBoxRemember_me);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Controls.Add(this.labelPassword);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Controls.Add(this.textBoxPassword);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Controls.Add(this.buttonSubmit);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Location = new System.Drawing.Point(72, 192);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Name = "panelDialog";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.Size = new System.Drawing.Size(475, 162);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.TabIndex = 3;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // labelPassword&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.AutoSize = true;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.Font = new System.Drawing.Font("Verdana", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.Location = new System.Drawing.Point(25, 35);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.Name = "labelPassword";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.Size = new System.Drawing.Size(92, 18);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.TabIndex = 2;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.labelPassword.Text = "Password:";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // checkBoxRemember_me&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.AutoSize = true;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.Font = new System.Drawing.Font("Verdana", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(102)))), ((int)(((byte)(102)))), ((int)(((byte)(102)))));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.Location = new System.Drawing.Point(125, 77);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.Name = "checkBoxRemember_me";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.Size = new System.Drawing.Size(235, 20);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.TabIndex = 3;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.Text = "Remember me on this computer";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.checkBoxRemember_me.UseVisualStyleBackColor = true;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // panelDialogBorder&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204)))));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(204)))), ((int)(((byte)(204)))));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder.Location = new System.Drawing.Point(60, 180);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder.Name = "panelDialogBorder";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder.Size = new System.Drawing.Size(500, 186);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialogBorder.TabIndex = 4;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // Form1&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            // &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(229)))), ((int)(((byte)(229)))), ((int)(((byte)(229)))));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.ClientSize = new System.Drawing.Size(622, 415);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Controls.Add(this.pictureBoxLogo);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Controls.Add(this.panelDialog);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Controls.Add(this.panelDialogBorder);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Font = new System.Drawing.Font("Verdana", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Name = "Form1";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.Text = "Login Form";&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            ((System.ComponentModel.ISupportInitialize)(this.pictureBoxLogo)).EndInit();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.ResumeLayout(false);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.panelDialog.PerformLayout();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.ResumeLayout(false);&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            this.PerformLayout();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        }&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        &lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        static void Main()&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        {&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            Application.EnableVisualStyles();&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            Application.Run(new UI());&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        }&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    }&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;Below is the respective HTML + CSS for the exact same UI&lt;br&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;/span&gt;&lt;span style="font-family: Lucida Console;"&gt; "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;title&amp;gt;Login Form&amp;lt;/title&amp;gt;&lt;br&gt;&amp;lt;style&amp;gt;&lt;br&gt;#login_container&lt;br&gt;{&lt;br&gt;    width:100%;&lt;br&gt;    height:700px;&lt;br&gt;    position:absolute;&lt;br&gt;    background-color:#E5E5E5;&lt;br&gt;    z-index:99;&lt;br&gt;    color:#333333;&lt;br&gt;    font-family:"Lucida Grande",verdana,arial,helvetica,sans-serif;&lt;br&gt;    margin:0pt auto;&lt;br&gt;    padding:0pt;&lt;br&gt;    text-align:center;&lt;br&gt;}&lt;br&gt;.login div.cont {&lt;br&gt;    margin:60px auto 20px;&lt;br&gt;    min-width:inherit;&lt;br&gt;    width:500px;&lt;br&gt;}&lt;br&gt;div#LogoBox {&lt;br&gt;    &lt;br&gt;}&lt;br&gt;div#LogoBox img {&lt;br&gt;    &lt;br&gt;}&lt;br&gt;.login div#Dialog {&lt;br&gt;    background:#FFFFFF none repeat scroll 0%;&lt;br&gt;    border:10px solid #CCCCCC;&lt;br&gt;    padding:15px 20px 10px;&lt;br&gt;    text-align:left;&lt;br&gt;}&lt;br&gt;form {&lt;br&gt;    margin:0pt;&lt;br&gt;    padding:0pt;&lt;br&gt;}&lt;br&gt;.login dl {&lt;br&gt;    margin:10px 0pt 0pt;&lt;br&gt;}&lt;br&gt;.login dt {&lt;br&gt;    float:left;&lt;br&gt;    font-size:14px;&lt;br&gt;    line-height:24px;&lt;br&gt;    width:80px;&lt;br&gt;}&lt;br&gt;.login dd {&lt;br&gt;    color:#666666;&lt;br&gt;    font-size:11px;&lt;br&gt;    line-height:24px;&lt;br&gt;    margin:0pt 0pt 5px 80px;&lt;br&gt;}&lt;br&gt;.login input#password {&lt;br&gt;    margin-right:5px;&lt;br&gt;    width:150px;&lt;br&gt;}&lt;br&gt;.login dd span {&lt;br&gt;    color:#CCCCCC;&lt;br&gt;}&lt;br&gt;.login input {&lt;br&gt;    font-size:14px;&lt;br&gt;}&lt;br&gt;#Flash.bad {&lt;br&gt;    background:#CC0000 url(images/alertbad_icon.gif) no-repeat scroll left center;&lt;br&gt;    border-color:#CC9999;&lt;br&gt;    color:#FFFFFF;&lt;br&gt;}&lt;br&gt;.login #Flash {&lt;br&gt;    font-size:12px;&lt;br&gt;    margin-top:12px;&lt;br&gt;}&lt;br&gt;#Flash {&lt;br&gt;    border:1px solid #CCCCCC;&lt;br&gt;    font-size:14px;&lt;br&gt;    margin:0pt 7px 12px auto;&lt;br&gt;    padding:5px 5px 5px 30px;&lt;br&gt;    text-align:left;&lt;br&gt;}&lt;br&gt;&amp;lt;/style&amp;gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;div class="login" id="login_container"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        &amp;lt;div class="cont"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            &amp;lt;div id="LogoBox"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                &amp;lt;img alt="Time Critical Solutions" src="resources/tcs_logo.png" /&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            &amp;lt;div id="Dialog"&amp;gt;&lt;/span&gt;&lt;span style="font-family: Lucida Console;"&gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                &amp;lt;form method="post" action=" "&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                    &amp;lt;dl&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                        &amp;lt;dt&amp;gt;Password:&amp;lt;/dt&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                        &amp;lt;dd&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                            &amp;lt;input type="password" id="password" name="password" /&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                        &amp;lt;/dd&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                        &amp;lt;dd&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                            &amp;lt;input type="checkbox" name="remember_me" /&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                            Remember me on this computer&amp;lt;/dd&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                        &amp;lt;dd&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                            &amp;lt;input type="submit" value="Sign in" /&amp;gt;&amp;lt;/dd&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                    &amp;lt;/dl&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;                &amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;            &amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;        &amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;    &amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;br style="font-family: Lucida Console;"&gt;&lt;span style="font-family: Lucida Console;"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;Why is the Java community so far behind the C# community in terms of UI Development (An example of why c based language UI development is inherently wrong)&lt;br&gt;&lt;/span&gt;Designing user interfaces with technologies (HTML/CSS/Javascript) designed for information layout make infinitely more sense then designing interfaces with technologies designed for procedural tasks (compiled programming languages). Even with Microsoft Visual Studio Form Designer, one of the most advanced software interface building applications available today, design and development of UIs is awkward and clunky and almost impossible with the automated code emitted from the form builder. This truth is evident when you take a look at the state of UIs in the Java community. SWING/AWT and a few other tools kits available to the Java community are ill suited and largely inferior to Microsoftnulls solution, which is reflected in the lack of UI progression in the java community. This is a direct reflection of how awkward it is to create compelling user interfaces with c based languages. C# and Java are very similar in syntax and functionally, they can be considered cousins, however then why does the .net/C# community have such more advanced and numerous developed UIs? It's not cause one is more suited to develop UIs or that C# has a larger commuinity using it or that C# is older, but that the .net community has the Visual Studio form designer, a powerful tool to create UIs.&lt;br&gt;&lt;br&gt;A window on a computer is not good for presenting information with a compelling design. With a pixel based layout, you spend more time writing code to get your content int he right place or to display at all, rather then concentrate on the content and if it looks compelling. &lt;br&gt;&lt;br&gt;Creating rich UIs with c based languages, is simply too hard. For example, if I wanted to show a little emphasis to an element on my web page, I could just make a quick call to the Highlight method in the Prototype library. However, to do this in a programming environment, I'd have to find some class library with that functionally that works with my language/environment or else I'd have to code that from scratch. In the end you decide it's not even worth it for a little UI garnish.&lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;Explore XAML UIs in .net 3.0&lt;/span&gt;&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/805664215936144163-2148991987421967475?l=eggie5.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/2148991987421967475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=805664215936144163&amp;postID=2148991987421967475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/2148991987421967475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/2148991987421967475'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/2007/02/medium-is-message-future-of-user.html' title=''/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-805664215936144163.post-3283308575268308823</id><published>2007-02-09T15:41:00.000-08:00</published><updated>2007-02-09T15:41:44.199-08:00</updated><title type='text'></title><content type='html'>test from google docs&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/805664215936144163-3283308575268308823?l=eggie5.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/3283308575268308823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=805664215936144163&amp;postID=3283308575268308823' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/3283308575268308823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/3283308575268308823'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/2007/02/test-from-google-docs.html' title=''/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-805664215936144163.post-9160108200838966702</id><published>2007-02-08T11:49:00.000-08:00</published><updated>2007-02-09T18:57:27.454-08:00</updated><title type='text'>Using Google Maps without API Key, Guide</title><content type='html'>When you use the Google maps API, you have to get a site key. To get a site key you need to register your website, however, what if you don't even have a website yet and you developing your site locally? If you enter 'http://localhost' into the API key registration form, it will give you a key but don't let this fool you, the maps won't load!&lt;br /&gt;&lt;br /&gt;This is an easy problem to alleviate, with a simple one line javascript edit. Let's take a look at the Google Maps hello world example:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:monospace;"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"&lt;br /&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="content-type" content="text/html; charset=utf-8"/&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Google Maps JavaScript API Example&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;span style="color: rgb(255, 102, 102);"&gt;&amp;lt;script src="http://maps.google.com/maps?file=api&amp;amp;amp;v=2&amp;key=abcdefg"&lt;/span&gt;&lt;br /&gt;      type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;//&amp;lt;![CDATA[&lt;br /&gt;&lt;br /&gt;function load() {&lt;br /&gt;if (GBrowserIsCompatible()) {&lt;br /&gt;  var map = new GMap2(document.getElementById("map"));&lt;br /&gt;  map.setCenter(new GLatLng(37.4419, -122.1419), 13);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//]]&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body onload="load()" onunload="GUnload()"&amp;gt;&lt;br /&gt;&amp;lt;div id="map" style="width: 500px; height: 300px"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;Notice the red line in the above source. This downloads a javascript file from google that acts like a configuration file for your map. Included in it is the code that checks your API key. All we have to do is remove the line that checks and were in action. So, since we need to run the js config file directly, we need to save it to our computer, just enter the line in red into your browser. This is the config file that the script element in your html page points to.&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;var G_INCOMPAT = false;&lt;br /&gt;function GScript(src) {&lt;br /&gt;document.write('&lt;' + 'script src="' + src + '"' + ' type="text/javascript"&gt;&lt;' + '/script&gt;');&lt;br /&gt;}&lt;br /&gt;function GBrowserIsCompatible() {&lt;br /&gt;if (G_INCOMPAT) return false;&lt;br /&gt;if (!window.RegExp) return false;&lt;br /&gt;var AGENTS = ["opera", "msie", "safari", "firefox", "netscape", "mozilla"];&lt;br /&gt;var agent = navigator.userAgent.toLowerCase();&lt;br /&gt;for (var i = 0; i &lt; agentstr =" AGENTS[i];" versionexpr =" new" version =" 0;" version =" parseFloat(RegExp.$1);" agentstr ="="&gt;= 7;&lt;br /&gt;    if (agentStr == "safari") return version &gt;= 125;&lt;br /&gt;    if (agentStr == "msie") return (version &gt;= 5.5 &amp;&amp;amp;amp;amp;amp;amp;amp; agent.indexOf("powerpc") == - 1);&lt;br /&gt;    if (agentStr == "netscape") return version &gt; 7;&lt;br /&gt;    if (agentStr == "firefox") return version &gt;= 0.8;&lt;br /&gt;    }&lt;br /&gt; }&lt;br /&gt;return !!document.getElementById;&lt;br /&gt;}&lt;br /&gt;function GVerify() {&lt;br /&gt;}&lt;br /&gt;function GLoad() {&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;   if (!GValidateKey("")) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;      G_INCOMPAT = true;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;      alert("The Google Maps API key used on this web site was registered for a different web site. You can generate a new key for this web site at http://www.google.com/apis/maps/.");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;      return;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;      }&lt;/span&gt;&lt;br /&gt;GLoadApi(["http://mt0.google.com/mt?n=404&amp;v=w2.37&amp;amp;amp;amp;amp;amp;amp;", "http://mt1.google.com/mt?n=404&amp;v=w2.37&amp;amp;", "http://mt2.google.com/mt?n=404&amp;v=w2.37&amp;amp;", "http://mt3.google.com/mt?n=404&amp;v=w2.37&amp;amp;"], ["http://kh0.google.com/kh?n=404&amp;v=14&amp;amp;", "http://kh1.google.com/kh?n=404&amp;v=14&amp;amp;", "http://kh2.google.com/kh?n=404&amp;v=14&amp;amp;", "http://kh3.google.com/kh?n=404&amp;v=14&amp;amp;"], ["http://mt0.google.com/mt?n=404&amp;v=apt.36&amp;amp;", "http://mt1.google.com/mt?n=404&amp;v=apt.36&amp;amp;", "http://mt2.google.com/mt?n=404&amp;v=apt.36&amp;amp;", "http://mt3.google.com/mt?n=404&amp;v=apt.36&amp;amp;"], "", "", "", false);&lt;br /&gt;if (window.GJsLoaderInit) {&lt;br /&gt; GJsLoaderInit("http://maps.google.com/mapfiles/maps2.72.api.js");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;function GUnload() {&lt;br /&gt;if (window.GUnloadApi) {&lt;br /&gt; GUnloadApi();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;var _mFlags = {&lt;br /&gt;}&lt;br /&gt;;&lt;br /&gt;var _mHost = "http://maps.google.com";&lt;br /&gt;var _mUri = "/maps";&lt;br /&gt;var _mDomain = "google.com";&lt;br /&gt;var _mStaticPath = "http://www.google.com/intl/en_us/mapfiles/";&lt;br /&gt;var _mTermsUrl = "http://www.google.com/intl/en_us/help/terms_local.html";&lt;br /&gt;var _mTerms = "Terms of Use";&lt;br /&gt;var _mMapMode = "Map";&lt;br /&gt;var _mMapModeShort = "Map";&lt;br /&gt;var _mMapError = "We are sorry, but we don\'t have maps at this zoom level for this region.&lt;p&gt;Try zooming out for a broader look.&lt;/p&gt;";&lt;br /&gt;var _mSatelliteMode = "Satellite";&lt;br /&gt;var _mSatelliteModeShort = "Sat";&lt;br /&gt;var _mSatelliteError = "We are sorry, but we don\'t have imagery at this zoom level for this region.&lt;p&gt;Try zooming out for a broader look.&lt;/p&gt;";&lt;br /&gt;var _mHybridMode = "Hybrid";&lt;br /&gt;var _mHybridModeShort = "Hyb";&lt;br /&gt;var _mSatelliteToken = "fzwq2rajrYBh2hw6LvGp_HbYvCkqeQX6J9W0Jg";&lt;br /&gt;var _mZoomIn = "Zoom In";&lt;br /&gt;var _mZoomOut = "Zoom Out";&lt;br /&gt;var _mZoomSet = "Click to set zoom level";&lt;br /&gt;var _mZoomDrag = "Drag to zoom";&lt;br /&gt;var _mPanWest = "Pan left";&lt;br /&gt;var _mPanEast = "Pan right";&lt;br /&gt;var _mPanNorth = "Pan up";&lt;br /&gt;var _mPanSouth = "Pan down";&lt;br /&gt;var _mLastResult = "Return to the last result";&lt;br /&gt;var _mMapCopy = "Map data ©2007 ";&lt;br /&gt;var _mSatelliteCopy = "Imagery ©2007 ";&lt;br /&gt;var _mGoogleCopy = "©2007 Google";&lt;br /&gt;var _mKilometers = "km";&lt;br /&gt;var _mMiles = "mi";&lt;br /&gt;var _mMeters = "m";&lt;br /&gt;var _mFeet = "ft";&lt;br /&gt;var _mPreferMetric = false;&lt;br /&gt;var _mPanelWidth = 20;&lt;br /&gt;var _mTabBasics = "Address";&lt;br /&gt;var _mTabDetails = "Details";&lt;br /&gt;var _mDecimalPoint = '.';&lt;br /&gt;var _mThousandsSeparator = ',';&lt;br /&gt;var _mUsePrintLink = 'To see all the details that are visible on the screen,use the "Print" link next to the map.';&lt;br /&gt;var _mPrintSorry = '';&lt;br /&gt;var _mMapPrintUrl = 'http://www.google.com/mapprint';&lt;br /&gt;var _mPrint = 'Print';&lt;br /&gt;var _mOverview = 'Overview';&lt;br /&gt;var _mStart = 'Start';&lt;br /&gt;var _mEnd = 'End';&lt;br /&gt;var _mStep = 'Step %1$s';&lt;br /&gt;var _mStop = 'Destination %1$s';&lt;br /&gt;var _mHideAllMaps = 'Hide Maps';&lt;br /&gt;var _mShowAllMaps = 'Show All Maps';&lt;br /&gt;var _mUnHideMaps = 'Show Maps';&lt;br /&gt;var _mShowLargeMap = 'Show original map view.';&lt;br /&gt;var _mmControlTitle = null;&lt;br /&gt;var _mAutocompleteFrom = 'from';&lt;br /&gt;var _mAutocompleteTo = 'to';&lt;br /&gt;var _mAutocompleteNearRe = '^(?:(?:.*?)\s+)(?:(?:in|near|around|close to):?\s+)(.+)$';&lt;br /&gt;var _mSvgEnabled = true;&lt;br /&gt;var _mSvgForced = false;&lt;br /&gt;var _mStreetMapAlt = 'Show street map';&lt;br /&gt;var _mSatelliteMapAlt = 'Show satellite imagery';&lt;br /&gt;var _mHybridMapAlt = 'Show imagery with street names';&lt;br /&gt;var _mSeeOnGoogleMaps = "Click to see this area on Google Maps";&lt;br /&gt;var _mLogInfoWinExp = true;&lt;br /&gt;var _mLogPanZoomClks = false;&lt;br /&gt;var _mLogWizard = true;&lt;br /&gt;var _mTransitV2 = false;&lt;br /&gt;function GLoadMapsScript() {&lt;br /&gt;if (GBrowserIsCompatible()) {&lt;br /&gt; GScript("http://maps.google.com/mapfiles/maps2.72.api.js");&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;GLoadMapsScript();&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So to block the site key from being checked just remove the first whole if statement from the GLoad() function. Now the only step left is to point your script tag in your html file to point to this new config file instead of Google's. For example, I saved my script file as 'gmaps_config.js' to the same directory as my html page. So, I changed the script tag to this:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&amp;lt;script src="gmaps_config.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;script src="gmaps_config.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now the key check never takes place, and I can do development with Google maps without copying my site to a webserver everything I want to test it!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Update: 2/9/07&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Geocoding by use of the GClientGeocoder class in the Google Maps API will not work if you are not using an API key. When you call any members of the GClientGeocoder class your API key as defined in your script block is attached to the http request sent to Google:&lt;br /&gt;&lt;br /&gt;http://maps.google.com/maps/geo?q=San%20Diego%2C%20Ca&amp;output=json&amp;amp;callback=__geoStore.__cg01171075463312&amp;key=&lt;br /&gt;&lt;br /&gt;Notice how the last parameter, 'key' is blank, well it appears that google validates this on the server side and since we don't have one defined the geocoder returns a 610 error which maps back to, &lt;span style="font-weight: bold;"&gt;GGeoStatusCode.G_GEO_BAD_KEY &lt;/span&gt;or "         The given key is either invalid or does not match the domain         for which it was given."&lt;br /&gt;&lt;br /&gt;Well, I know what I'll be working on for the next few days!&lt;br /&gt;&lt;h2&gt;&lt;a name="GGeoStatusCode"&gt;&lt;/a&gt;&lt;/h2&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/805664215936144163-9160108200838966702?l=eggie5.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eggie5.blogspot.com/feeds/9160108200838966702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=805664215936144163&amp;postID=9160108200838966702' title='62 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/9160108200838966702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/805664215936144163/posts/default/9160108200838966702'/><link rel='alternate' type='text/html' href='http://eggie5.blogspot.com/2007/02/using-google-maps-without-api-key-guide.html' title='Using Google Maps without API Key, Guide'/><author><name>Alex</name><uri>http://www.blogger.com/profile/05601342593988054045</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_30RHhZ3g6OY/TET8llv3bmI/AAAAAAAAR9g/vJDNwfCqH44/S220/Photo+on+2010-07-01+at+18.37.jpg'/></author><thr:total>62</thr:total></entry></feed>
