<?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-6776330779304833794</id><updated>2012-02-09T13:24:32.146-08:00</updated><category term='eclipse'/><category term='agile scrum story points'/><category term='settings'/><category term='coach'/><category term='agile'/><category term='plugins'/><category term='fix computer tech support'/><category term='software'/><category term='development'/><title type='text'>Paul Mazak</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-8272622544820427950</id><published>2012-02-09T13:24:00.000-08:00</published><updated>2012-02-09T13:24:32.155-08:00</updated><title type='text'>Putting Apache in front of Tomcat</title><content type='html'>Download and install Apache as a service.&lt;br /&gt;Download mod_jk.so and drop in Apache/modules/ directory.&lt;br /&gt;Modify Apache/conf/httpd.conf&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;LoadModule jk_module modules/mod_jk.so&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;Include conf/extra/httpd-vhosts.conf&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Modify Apache/conf/extra/httpd-vhosts.conf&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;JkWorkersFile "/Tomcat/conf/workers.properties"&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;&amp;lt;virtualhost *:80=""&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; JkMount /* ajp13-8080&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;&amp;lt;/virtualhost&amp;gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Start Apache.&lt;br /&gt;Download and install Tomcat as a service.&lt;br /&gt;Create Tomcat/conf/workers.properties&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;workers.tomcat_home="/tomcat" &amp;nbsp; &amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;workers.java_home="/Program Files/Java/jdk1.7.0_02"&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;ps=/ &amp;nbsp; &amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;worker.list=ajp13-8080&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;worker.ajp13-8080.port=8009&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;worker.ajp13-8080.host=localhost&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;worker.ajp13-8080.type=ajp13&amp;nbsp;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; &amp;nbsp;worker.ajp13-8080.lbfactor=1&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Start Tomcat.&lt;br /&gt;&lt;br /&gt;That's it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-8272622544820427950?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/8272622544820427950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2012/02/putting-apache-in-front-of-tomcat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/8272622544820427950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/8272622544820427950'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2012/02/putting-apache-in-front-of-tomcat.html' title='Putting Apache in front of Tomcat'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-1550394885764080858</id><published>2012-01-25T07:47:00.000-08:00</published><updated>2012-01-25T10:45:08.630-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile scrum story points'/><title type='text'>Presentation - Agile Points FTW!</title><content type='html'>Download the presentation here: &lt;a href="https://skydrive.live.com/?cid=ADC7888FD558A4E8&amp;id=ADC7888FD558A4E8%21143&amp;sc=documents#cid=ADC7888FD558A4E8&amp;id=ADC7888FD558A4E8%21193&amp;sc=documents"&gt;Slide Deck&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Abstract:&lt;br /&gt;Why estimate in Points instead of Hours?  Come learn how playing poker can give you more productivity at work and eliminate those wasteful estimation processes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-1550394885764080858?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/1550394885764080858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2012/01/presentation-agile-points-ftw.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/1550394885764080858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/1550394885764080858'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2012/01/presentation-agile-points-ftw.html' title='Presentation - Agile Points FTW!'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-5774564874493248926</id><published>2011-10-12T05:58:00.000-07:00</published><updated>2011-10-12T06:00:39.126-07:00</updated><title type='text'>Presentation - Hudson/Jenkins: Beginner to Expert</title><content type='html'>Here is the presentation I gave at &lt;a href="http://www.cojug.org/"&gt;COJUG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://cid-adc7888fd558a4e8.office.live.com/self.aspx/.Public/Presentations/Hudson-Jenkins-Beginner-Expert.pdf"&gt;"Hudson/Jenkins: Beginner to Expert" - slide deck lives on SkyDrive&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://github.com/pmazak/jenkins-demo"&gt;Corresponding demo - lives on github&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Abstract:&lt;br /&gt;Come learn appropriate practices for Continuous Integration in an Agile age. Jenkins (a.k.a. Hudson) is a flexible CI solution. I'll walk us through its simple setup, show some of the plug-ins, and then dive into leveraging Jenkins for a multi-application, enterprise solution. I think you'll see that Jenkins can not only perform the CI duties of build with unit tests, but can also serve as a dashboard for numerous deployment and automated tasks.&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/6776330779304833794-5774564874493248926?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/5774564874493248926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/10/presentation-hudsonjenkins-beginner-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5774564874493248926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5774564874493248926'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/10/presentation-hudsonjenkins-beginner-to.html' title='Presentation - Hudson/Jenkins: Beginner to Expert'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-1493191030641235613</id><published>2011-09-30T06:53:00.000-07:00</published><updated>2011-09-30T06:59:23.757-07:00</updated><title type='text'>Migrating from Git to Svn and Svn to Git</title><content type='html'>&lt;em&gt;The following steps will migrate to and from GIT while maintaining all commit history.&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;svn2git&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;# First, create a new GIT Repo&lt;br /&gt;# Then, do the following&lt;br /&gt;git svn init &amp;lt;svnUrl&amp;gt;/&amp;lt;svnRepoName&amp;gt;&lt;br /&gt;cd &amp;lt;svnRepoName&amp;gt;&lt;br /&gt;git svn fetch&lt;br /&gt;git svn rebase&lt;br /&gt;git remote add new &amp;lt;user&amp;gt;@&amp;lt;gitRepo&amp;gt;&lt;br /&gt;git push new master&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;git2svn&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;# First, create a new SVN Repo (with at least 1 file in it)&lt;br /&gt;# Then, do the following&lt;br /&gt;git svn clone &amp;lt;svnUrl&amp;gt;/&amp;lt;svnRepoName&amp;gt;&lt;br /&gt;cd &amp;lt;svnRepoName&amp;gt;&lt;br /&gt;git remote add old &amp;lt;gitRepo&amp;gt;&lt;br /&gt;git fetch old&lt;br /&gt;git checkout -b old_master old/master&lt;br /&gt;git rebase --onto master --root&lt;br /&gt;git svn dcommit&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-1493191030641235613?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/1493191030641235613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/09/migrating-from-git-to-svn-and-svn-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/1493191030641235613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/1493191030641235613'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/09/migrating-from-git-to-svn-and-svn-to.html' title='Migrating from Git to Svn and Svn to Git'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-2403613446405307452</id><published>2011-09-28T14:28:00.000-07:00</published><updated>2011-12-08T05:38:46.832-08:00</updated><title type='text'>SVN Migrate folder to new repository root</title><content type='html'>&lt;div class="post-text"&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;Since I've been asked about Subversion's "svnsync" command more than once, here is a copy of my post on &lt;/span&gt;&lt;a style="font-style: italic;" href="http://stackoverflow.com/questions/934009/svn-folder-to-new-repository-root"&gt;stackoverflow&lt;/a&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The svnsync option worked for me with subversion 1.5.3.  &lt;/p&gt;&lt;p&gt;Here is a Windows batch script to accomplish this:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;SET OLD_REPO_URL=https://old-project-repo/my-project&lt;br /&gt;SET NEW_REPO_URL=C:/Repositories/new-project-repo&lt;br /&gt;SET NEW_REPO_FILE_PATH=C:\Repositories\new-project-repo&lt;br /&gt;&lt;br /&gt;svnadmin create %NEW_REPO_FILE_PATH%&lt;br /&gt;echo exit 0 &amp;gt; %NEW_REPO_FILE_PATH%\hooks\pre-revprop-change.bat&lt;br /&gt;&lt;br /&gt;svnsync init file:///%NEW_REPO_URL% %OLD_REPO_URL%&lt;br /&gt;svnsync sync file:///%NEW_REPO_URL%&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Note: You will not be able to browse the new repository until the sync is finished.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-2403613446405307452?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/2403613446405307452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/09/svn-folder-to-new-repository-root.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/2403613446405307452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/2403613446405307452'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/09/svn-folder-to-new-repository-root.html' title='SVN Migrate folder to new repository root'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-7782389186650900982</id><published>2011-09-06T07:32:00.001-07:00</published><updated>2011-11-01T06:26:52.658-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='coach'/><title type='text'>Explaining 'Agile Coach' in Social Circles</title><content type='html'>&lt;font style="font-style: italic;"&gt;It was hard enough for me to explain my job before, when I was an IT Consultant.  Half the time I'd say things like: "Well there's my software development job for the client...  Then there's the company I work for..."&lt;/font&gt;&lt;br /&gt;&lt;font style="font-style: italic;"&gt;Now that I am an Agile Coach, it's even harder to explain, and I see people tend to shutdown when I try - i.e. it's too fuzzy and unfamiliar for them to ask any follow-up questions.  As a result, sometimes I just resort to saying, "I'm a Software Developer."    Problem is, that implies two things, neither of which are true in my case:&lt;/font&gt;&lt;br /&gt;&lt;ol style="font-style: italic;"&gt;&lt;li&gt;That I am a computer programmer writing software.&lt;/li&gt;&lt;li&gt;That I sit in a cubicle all day,  getting my "Nerd" on, and not interacting with people.&lt;/li&gt;&lt;/ol&gt;&lt;hr&gt;&lt;br /&gt;Here's my latest thought on Explaining 'What I do as an Agile Coach' to Social Circles (i.e. non-IT people at parties, family events, etc.)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I teach IT people on &lt;font style="font-weight: bold;" size="5"&gt;T&lt;/font&gt;&lt;font style="font-weight: bold;"&gt;eamwork&lt;/font&gt;.&lt;br /&gt;- It used to be people sat in front of their computers all day in offices or cubicles (like "Office Space").  Now we stick teams of 10 in a room and make them collaborate and design together.  Software Development is a very creative process so we often have toys and colorful rooms like an Art Studio.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I teach IT people about being &lt;font style="font-weight: bold;" size="5"&gt;T&lt;/font&gt;&lt;font style="font-weight: bold;"&gt;ransparent&lt;/font&gt;. (and honest and realistic)&lt;br /&gt;- Since we're typically a bunch of engineers - not the most social animals - we are not very good at communicating with the business and users of the applications about issues and progress of their new features of their website or mobile app.&lt;br /&gt;- So it sounds like Kindergarten, but we write the features on index cards or post-its and stick 'em on a wall.  And we talk about them everyday and have demos on work-in-progress frequently with anyone who cares.&lt;br /&gt;- There are people committing to deadlines and I try to ensure that expectations are realistic given the challenges of creating something that's never been done before.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I teach Managers to &lt;font style="font-weight: bold;" size="5"&gt;T&lt;/font&gt;&lt;font style="font-weight: bold;"&gt;rust&lt;/font&gt;.&lt;br /&gt;- As you can imagine, the transparency thing only works if you have upper management bought-in and trusting that their people are doing the best they can given the circumstances.&lt;br /&gt;- So instead of managers telling the people under them what to do, I teach them about "servant leadership" which completely reverses their thinking.&lt;br /&gt;- Instead of command and control, micro-management, I coach the Managers into asking the Teams things like, "What do you need from me today to be successful?" or "How can I help you?".  It flips the organization upside-down and the Team begins to feel empowered to work better.  They have the full support of their Managers to unblock issues for them and now everyone can work toward the same, common goal of creating a better - and more profitable - company.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-7782389186650900982?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/7782389186650900982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/09/explaining-agile-coach-in-social.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/7782389186650900982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/7782389186650900982'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/09/explaining-agile-coach-in-social.html' title='Explaining &apos;Agile Coach&apos; in Social Circles'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-7734312155752429448</id><published>2011-06-22T08:12:00.000-07:00</published><updated>2011-10-24T18:55:01.363-07:00</updated><title type='text'>IDEs for the Polyglot Programmer on Windows</title><content type='html'>First off, I'm never going to pay for an IDE.  It goes against my nature of being resourceful and cheap.  Here is what I've found in the Open Source space.  I am not talking about pure Java Enterprise development.  (For that you should standardize on one of the big 3: eclipse/netbeans/intelliJ).  This is for the person who enjoys playing in Ruby, Groovy, PHP, or your language of the day.  On a Mac, I'm told the favorite is TextMate.  But what should we use on Windows....???&lt;br /&gt;&lt;br /&gt;&lt;u&gt;IDE&lt;/u&gt;&lt;br /&gt;1. Komodo Edit - very lightweight (50MB RAM). Ctrl+J for code completion.  Add-ons are great and done like Firefox add-ons.  No Groovy.&lt;br /&gt;2. Aptana Studio - awesome Git integration. it's eclipse with better layout and color scheme. but it's a bit bulky (150MB RAM).  No Groovy.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Just a Text Editor with Syntax Highlighting:&lt;/u&gt;&lt;br /&gt;Notepad++&lt;br /&gt;&lt;br /&gt;&lt;u&gt;No&lt;/u&gt;&lt;br /&gt;RubyMine - cool, but only 30-day trial is free.&lt;br /&gt;SciTE Scintilla Based Text Editor - just a text editor. Notepad++ is better.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-7734312155752429448?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/7734312155752429448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/06/ides-for-polyglot-programmer-on-windows.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/7734312155752429448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/7734312155752429448'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/06/ides-for-polyglot-programmer-on-windows.html' title='IDEs for the Polyglot Programmer on Windows'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-2182308101716991808</id><published>2011-06-13T08:12:00.001-07:00</published><updated>2011-06-13T08:22:16.991-07:00</updated><title type='text'>Groovy JMX MBean Viewer instead of JConsole</title><content type='html'>You might be monitoring something with JConsole, and thinking, how can I automate this check?&lt;br /&gt;&lt;br /&gt;Answer: With Groovy!&lt;br /&gt;&lt;br /&gt;Here is an example of how easy it is to probe an ActiveMQ MBean that sits on 2 App Servers.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;import javax.management.remote.*&lt;br /&gt;&lt;br /&gt;['11.12.13.123', '11.12.13.124'].each { serverIp -&amp;gt;&lt;br /&gt;   def server = jmxConnect(serverIp)&lt;br /&gt;   def mbean = new GroovyMBean(server, 'org.apache.activemq:BrokerName=appEventBroker,Type=Queue,Destination=appEventQueue')&lt;br /&gt;   println "On app server $serverIp"&lt;br /&gt;   printQueueStatus(mbean)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;def jmxConnect(serverIp) {&lt;br /&gt;   def url = "service:jmx:rmi:///jndi/rmi://$serverIp:8999/jmxrmi"&lt;br /&gt;   def env = [(JMXConnector.CREDENTIALS): (String[])['myRole', 'myPassword']]&lt;br /&gt;   def connection = JMXConnectorFactory.connect(new JMXServiceURL(url), env)&lt;br /&gt;   def server = connection.MBeanServerConnection&lt;br /&gt;   return server&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;def printQueueStatus(mbean) {&lt;br /&gt;   println "DequeueCount: $mbean.DequeueCount"&lt;br /&gt;   println "EnqueueCount: $mbean.EnqueueCount"&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-2182308101716991808?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/2182308101716991808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/06/groovy-jmx-mbean-viewer-instead-of.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/2182308101716991808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/2182308101716991808'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/06/groovy-jmx-mbean-viewer-instead-of.html' title='Groovy JMX MBean Viewer instead of JConsole'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-3015606828879286793</id><published>2011-04-11T10:00:00.001-07:00</published><updated>2011-04-11T10:08:20.612-07:00</updated><title type='text'>Presentation - Hudson/Jenkins: Beginner to Expert</title><content type='html'>Here is a presentation I am giving at &lt;a href="http://www.meetup.com/The-Columbus-Polyglot-Programmers-Meetup-Group/"&gt;The Columbus Polyglot Programmers Meetup Group&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://cid-adc7888fd558a4e8.office.live.com/self.aspx/.Public/Presentations/Hudson-Jenkins-Beginner-Expert.pdf"&gt;"Hudson/Jenkins: Beginner to Expert" - slide deck lives on SkyDrive&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://github.com/pmazak/jenkins-demo"&gt;Corresponding demo - lives on github&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Abstract:&lt;br /&gt;Learn appropriate practices for Continuous Integration in an Agile age. Hudson (forked as Jenkins) is a flexible CI solution. This presentation walks us through its simple setup, show some of the plug-ins, and then dives into leveraging Hudson for a multi-application, enterprise solution. I think you'll see that Hudson can not only perform the CI duties of build with unit tests, but can also serve as a dashboard for numerous deployment and automated tasks.&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/6776330779304833794-3015606828879286793?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/3015606828879286793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/04/presentation-hudsonjenkins-beginner-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/3015606828879286793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/3015606828879286793'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/04/presentation-hudsonjenkins-beginner-to.html' title='Presentation - Hudson/Jenkins: Beginner to Expert'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-5012251602649926535</id><published>2011-03-28T06:44:00.000-07:00</published><updated>2011-03-28T06:54:55.056-07:00</updated><title type='text'>Old Presentations Made Available</title><content type='html'>I've consolidated some of the presentations I've done in the past and put them on &lt;a href="http://cid-adc7888fd558a4e8.office.live.com/browse.aspx/.Public/Presentations"&gt;SkyDrive&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://cid-adc7888fd558a4e8.office.live.com/self.aspx/.Public/Presentations/JCR%20-%20Java%20Content%20Repository.20090317.pdf"&gt;JCR - Java Content Repository.20090317.pdf&lt;/a&gt; - Given in March '09, it's a high level overview of JCR.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://cid-adc7888fd558a4e8.office.live.com/self.aspx/.Public/Presentations/Doing%20JavaScript%20Right.20100531.pdf"&gt;Doing JavaScript Right.20100531.pdf&lt;/a&gt; - Given in May '10, it's an expert level look at JavaScript and ways to organize it (and test it) like the rest of your code.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-5012251602649926535?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/5012251602649926535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2011/03/old-presentations-made-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5012251602649926535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5012251602649926535'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2011/03/old-presentations-made-available.html' title='Old Presentations Made Available'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-6732156607430852282</id><published>2010-03-18T08:02:00.000-07:00</published><updated>2010-05-23T18:01:54.783-07:00</updated><title type='text'>Release Naming Strategy</title><content type='html'>&lt;span style="color: rgb(51, 51, 255); font-style: italic;"&gt;This is my preferred Release Naming Strategy. Not a big deal if you disagree, at least you have a template so you can document your strategy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Externally:&lt;br /&gt;&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;&lt;br /&gt;ex. &lt;span style="font-weight: bold;"&gt;1.03.8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Internally:&lt;br /&gt;&amp;lt;major&amp;gt;.&amp;lt;minor&amp;gt;.&amp;lt;patch&amp;gt;-&amp;lt;hudson-build-number&amp;gt;&lt;br /&gt;ex. &lt;span style="font-weight: bold;"&gt;1.03.8-27&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;major&amp;gt;&lt;/span&gt; - Introduces major new functionality and often involves marketing. Resets the  minor number to 00 and patch number to 0.&lt;br /&gt;ex. 2.00.0   (May be referred to as the “2.0” release.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;minor&amp;gt;&lt;/span&gt; - Indicates an addition of some features. Always two digits with pre-fixing zero for numbers less than ten.  Releases should sort numerically, not alphabetically.  This allows for a buffer of incremental minor releases before incrementing the major number which has different perception to the end user.  Resets the patch number to 0.&lt;br /&gt;ex. &lt;span style="font-weight: bold;"&gt;1.09.0, 1.10.0, 1.11.0&lt;/span&gt; (May refer to 1.11.0 as the “1.11” release.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;lt;patch&amp;gt;&lt;/span&gt; - Indicate a fix (ie. fixing a bug, improving performance, or an internal change without impacting functionality such as logging). Goes up by one every time a patch is officially added to the version. Use a single digit here because you should not have as many as 10 unplanned patches prior to a minor release.&lt;br /&gt;ex. &lt;span style="font-weight: bold;"&gt;1.03.1, 1.03.2, 1.03.3&lt;/span&gt; and so on&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://cid-adc7888fd558a4e8.skydrive.live.com/self.aspx/.Public/BlogParts/ReleaseNotesExample.zip"&gt;Release Notes Template with Example&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-6732156607430852282?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/6732156607430852282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2010/03/release-naming-strategy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/6732156607430852282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/6732156607430852282'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2010/03/release-naming-strategy.html' title='Release Naming Strategy'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-2804685912675628076</id><published>2010-03-01T06:05:00.000-08:00</published><updated>2010-05-23T18:01:31.370-07:00</updated><title type='text'>Jackrabbit JCR: Part 1 - Getting Started</title><content type='html'>Working at Quick Solutions, I have become an expert on the Java Content Repository.  Many wish to stand-up a repository but reading through mounds of documentation is often too great a barrier.  What if it were as simple as download and start?   Well here you go!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);font-size:130%;"&gt;Start the Repository&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download &lt;a href="http://cid-adc7888fd558a4e8.skydrive.live.com/self.aspx/.Public/BlogParts/jackrabbit-standalone.zip"&gt;jackrabbit-standalone&lt;/a&gt;.  Unzip it.&lt;/li&gt;&lt;li&gt;At a command prompt in the unzipped directory, type:&lt;br /&gt;&lt;code&gt; &gt;     startRepo&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);font-size:130%;"&gt;Tools to Communicate with the Repository&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;A Web browser.&lt;/span&gt;  Browse to &lt;a href="http://localhost:8123/"&gt;http://localhost:8123/&lt;/a&gt;&lt;br /&gt;Click "&lt;a href="http://localhost:8123/repository/default/"&gt;Browse&lt;/a&gt;" along the left menu.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;A WebDAV Client.&lt;/span&gt;  Download &lt;a href="http://www.anyclient.com/dload.html"&gt;AnyClient&lt;/a&gt;. (Freeware)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_0d6RwZviS-o/S4vTtu4hV9I/AAAAAAAAAoE/D8bLkMp-POg/s1600-h/anyclient-jackrabbit.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 107px;" src="http://1.bp.blogspot.com/_0d6RwZviS-o/S4vTtu4hV9I/AAAAAAAAAoE/D8bLkMp-POg/s320/anyclient-jackrabbit.gif" alt="" id="BLOGGER_PHOTO_ID_5443677357240047570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Host:                              http://localhost:8123/repository/default/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Username:               admin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Password:                 admin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Connection type:  WebDAV&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Command line.&lt;/span&gt;  Download &lt;a href="http://cid-adc7888fd558a4e8.skydrive.live.com/self.aspx/.Public/BlogParts/jcr-commands.zip"&gt;jcr-commands&lt;/a&gt;.  (I can't take credit for this. License Info &lt;a href="http://svn.apache.org/repos/asf/jackrabbit/sandbox/inactive/jcr-commands/"&gt;here&lt;/a&gt;.)&lt;br /&gt;At a command prompt in the unzipped bin directory, type:&lt;br /&gt;&lt;code&gt; &gt;     run&lt;/code&gt;&lt;br /&gt;For this tool you must connect through RMI, not HTTP, so type:&lt;br /&gt;&lt;code&gt; &gt;     connect rmi://localhost:1099/jackrabbit&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &gt;     login admin admin&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&gt;     ls&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Java Code.&lt;/span&gt;  Download &lt;a href="http://cid-adc7888fd558a4e8.skydrive.live.com/self.aspx/.Public/BlogParts/JcrTalker.zip"&gt;JcrTalker&lt;/a&gt;.  Unzip it.&lt;br /&gt;At a command prompt in the unzipped directory, type (notice the trailing slash):&lt;br /&gt;&lt;code&gt; &gt;     groovy JcrTalker.groovy /&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;code&gt;&lt;span style="color: rgb(153, 102, 51); font-style: italic;"&gt;&lt;br /&gt;(Note: The .bat files used above can easily be translated to shell scripts or Mac scripts to suit your non-windows needs.)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-2804685912675628076?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/2804685912675628076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2010/03/jackrabbit-jcr-part-1-getting-started.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/2804685912675628076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/2804685912675628076'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2010/03/jackrabbit-jcr-part-1-getting-started.html' title='Jackrabbit JCR: Part 1 - Getting Started'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_0d6RwZviS-o/S4vTtu4hV9I/AAAAAAAAAoE/D8bLkMp-POg/s72-c/anyclient-jackrabbit.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-5395231177095910998</id><published>2010-02-11T16:52:00.000-08:00</published><updated>2012-01-26T18:43:59.344-08:00</updated><title type='text'>Web UI Strategies: A Conceptual Take</title><content type='html'>&lt;span style="font-size:180%;"&gt;F&lt;/span&gt;rom Rails to PHP, JSPs, ASPs, Flex, and straight up JavaScript, how do you choose a view technology for your RIA website?&lt;br /&gt;Even within just the Java world, there is Tapestry, Stripes, Wicket, JSTL and JavaFX.&lt;br /&gt;So where do you start?  Find out what they mean at their core.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;I see only 2 Web UI Strategies:&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Data first-View second&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;View first-Data second&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:130%;" &gt;Data first-View second&lt;/span&gt;&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;(1st Generation Client-Server Strategy)&lt;/span&gt;&lt;br /&gt;This is when you make a request, the server processes the request, comes up with all the data needed to populate the page and renders the page back to the client as HTML with the data in it.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;i.e.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;http://server/customer.page -&gt; [Server side logic] -&gt; fill in the template with data -&gt; html on page&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Examples:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;PHP, ASP, JSP, JSTL, JSF, Tapestry, Freemarker, Wicket, Tiles, Sitemesh&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Each of these views are &lt;span style="font-weight: bold;"&gt;D&lt;/span&gt;ynamically pieced together and &lt;span style="font-weight: bold;"&gt;I&lt;/span&gt;nterpreted by the client browser at runtime. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 102);"&gt;The server mashes up the page layout with the data!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Think Run-time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;View first-Data second&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;(2nd Generation Client-Server Strategy)&lt;/span&gt;&lt;br /&gt;This is when you make a request, the server gives you a view that you download.&lt;br /&gt;The view knows how to populate itself and makes a request to the server to do so.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;i.e.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;http://server/customer.page -&gt; [Client downloads view from Server] -&gt; html on page -&gt; now fetch data from Server to fill it in&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Examples:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Flex, Silverlight, JavaFX, &lt;/code&gt;&lt;code&gt;GWT, &lt;/code&gt;&lt;code&gt;Generic Onload AJAX&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Flex, JavaFX, and Silverlight are &lt;span style="font-style: italic;"&gt;"sheltered"&lt;/span&gt; in their own runtime within the browser.  Each of those 3 and GWT have a concept of getting precompiled, which aids in finding bugs earlier in the process.  All make use of additional server requests after the fact to fetch the data.   This idea of pushing data off until later, has been made possible with high-speed internet connections and more bandwidth where it is no longer a problem to make more HTTP trips to the server. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 102);"&gt;The view works standalone by itself with -or without- data!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Think Compile-time.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-5395231177095910998?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/5395231177095910998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2010/01/web-ui-strategies-conceptual-take.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5395231177095910998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5395231177095910998'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2010/01/web-ui-strategies-conceptual-take.html' title='Web UI Strategies: A Conceptual Take'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-487174360998951701</id><published>2010-01-24T14:51:00.000-08:00</published><updated>2010-01-31T12:35:03.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fix computer tech support'/><title type='text'>A Message from Computer Geek to the Average Computer User</title><content type='html'>Paul's Computer Tips:&lt;br /&gt;&lt;br /&gt;As a computer geek, I frequently get asked by others to help fix their computers.  I've come to realize that, although people are conditioned to expect maintenance on their cars and - over the years - have come to grips with car part failure, people expect their computers to always work without investing any maintenance in it.  People are devestated when I tell them they need a new hard drive and ask, "So where's the backup disks?"  They look at me like I'm taking crazy pills, and say [rather angrily] "Why should I make backups; the thing should work like it did yesterday."&lt;br /&gt;&lt;br /&gt;I think this is a price of the microwave era where people expect electronics to make their lives easier and instantly work.  When they don't it's like the scene in Office Space where you want to kick the printer in frustration.  A computer is a man-made electronic running man-made software - it is not fail safe.  It is very complex and before you buy into its gizmos and gadgets, let me set some realistic expectations.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Software: Windows often becomes unstable after about 2 years. You should plan for re-installs of Windows every two years to prevent a slow performing computer. I partition my harddrive into 2 and put my data on the 2nd so that I can easily re-install the Windows Operating System and not overwrite my data.&lt;/li&gt;&lt;li&gt;Software: Over time, the more programs you install - even if you uninstall later - leave a trail on your system which can either cause conflicts down the road or make it run slower.  To prevent this, keep your computer simple and don't install unnecessary programs.  One bit of maintenance which helps is to defrag your hard drive about once every other month which consolidates files on your hard drive so they can be found faster.&lt;/li&gt;&lt;li&gt;Software: Viruses - often come from porn sites, software piracy sites, and spam email.  Avoid these sites and keep an up-to-date virus scanner program. My favorite is Kaspersky Anti-Virus.  (I do not use their Internet Security product because, combined with being careful where you visit, the Anti-Virus product is sufficient.) (Anti-virus software costs about $40 per year...well worth it!)&lt;/li&gt;&lt;li&gt;Hardware: Your harddrive can begin to fail over the years. It may have enough left in it to spin up when you power on, but not enough to boot up Windows. I'm not sure how to prevent this - but I believe not leaving the computer on 24/7 and giving this device a rest will help give it longer life. (A new hard drive costs $50-$100.)&lt;/li&gt;&lt;li&gt;Hardware:  I've seen a computer not power on due to bad power supply. (A new one costs $20-$40.) &lt;/li&gt;&lt;li&gt;Your computer working is not a sure thing.  Because both software and hardware failures can occur, you should backup your data regularly.  The only one to blame for loss of data during a computer crash is yourself, not the computer.&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(153, 0, 0); font-weight: bold;"&gt;New Advanced Users Section:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Take notice of what programs are running in the background that you don't need. Every time you install something, that program wants to take over your computer and put itself at the forefront. For example - it may auto-load when you start; it can try to set your home page to its home page; it often creates a new toolbar in your web browser;  it can create a multitude of shortcuts on your desktop and in your programs list. &lt;span style="font-weight: bold;"&gt;These are just a few of the "dirty tricks" of the software business.&lt;/span&gt; Don't be fooled. Pay attention when you install and don't let it take over your computer. Even after all that precaution, you can still end up with programs running that you don't need ... thus slowing down your computer!&lt;br /&gt;&lt;br /&gt;Here's a tip that I always always always start with when cleaning up someone's computer to make it run faster.&lt;ul&gt;&lt;li&gt;Open the Windows registry editor by clicking Start, then choose Run. Type in "regedit" and hit enter.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Browse to the following 2 paths one at a time and clean out each:&lt;br /&gt;   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;br /&gt;   HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run&lt;/li&gt;&lt;li&gt;For each, right click and choose Export to save a backup of this registry location. I typically save as something like C:\run-backup.reg.&lt;/li&gt;&lt;li&gt;Now, do you see programs that you don't care about?  Delete 'em!  But do make sure you can make out what they are by the folder name.  For ones you are unsure of, leave them there or Google the name to find out.  Windows does need a couple of them - and one might be for your keyboard and monitor, etc.&lt;/li&gt;&lt;li&gt;Once you've cleaned out the unnecessary programs from the registry,&lt;br /&gt;&lt;br /&gt;Restart your computer.&lt;br /&gt;&lt;br /&gt;Now you will no longer get all those nasty, superfluous programs running in your bottom right task bar taking up memory and CPU and sucking the speed out of your computer!&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-487174360998951701?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/487174360998951701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2010/01/message-from-computer-geek-to-average.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/487174360998951701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/487174360998951701'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2010/01/message-from-computer-geek-to-average.html' title='A Message from Computer Geek to the Average Computer User'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-5284525567607383922</id><published>2009-11-09T19:39:00.000-08:00</published><updated>2009-11-10T16:23:13.347-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='settings'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse Shared Plugins Directory</title><content type='html'>&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;D&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;id you know&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; there is a way to point your local install of eclipse out to a shared directory containing the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;plugins&lt;/span&gt;? There is ... by way of a links folder. Now, there are a few other blogs out there if you google "eclipse &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;plugins&lt;/span&gt; links folder", but hopefully you'll find mine as a good summary.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Prerequisite&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;:&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;You must have your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;workspaces&lt;/span&gt; outside the eclipse home directory. This is not only best practice because it decouples your custom project from the eclipse installation, but it will also alleviate any pain point with my caveat below. (i.e.&lt;br /&gt;. . c:\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;workspaces&lt;/span&gt;\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;HelloWorld&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Steps:&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:130%;" class="Apple-style-span"  &gt;&lt;span class="Apple-style-span"&gt;1.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span style=";font-family:verdana;font-size:130%;"  &gt; &lt;/span&gt;On a shared drive, create the folder structure of:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;. . eclipse\features&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;. . . . . . .\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;plugins&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;The folder must be called eclipse with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;subfolders&lt;/span&gt; matching exactly 'features' and '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;plugins&lt;/span&gt;'.  These folders should be empty initially. I put this entire structure under a root folder called "eclipse-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;plugins&lt;/span&gt;" so I can recognize it. Mine looks like this:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;. . \\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;myShare&lt;/span&gt;\eclipse-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;plugins&lt;/span&gt;\eclipse\features&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;. . . . . . . . . . . . .  . . . . . . . . . . . . .\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;plugins&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;2. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Determine the net new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;plugins&lt;/span&gt; that you installed on top of the default ones from eclipse by sorting both the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;plugins&lt;/span&gt; directory and the features directory by "date modified".  All the install provided ones come with the same timestamp.  Move all the net new ones out to the shared location (i.e. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;plugins&lt;/span&gt; to the shared &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;plugins&lt;/span&gt; directory and the corresponding features to the shared features directory.) Typically, each &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;plugin&lt;/span&gt; has a corresponding feature to go with it. Be sure to grab both.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;3. &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Create a new folder called "links" and place in your local eclipse home directory. (i.e.&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;. . c:\eclipse\features&lt;br /&gt;. . . . . . . . .\&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;links&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;. . . . . . . . .\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;plugins&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family: verdana;"&gt;4. &lt;/span&gt;&lt;/span&gt;Inside links, create a new plain text file called &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;plugins&lt;/span&gt;.link. (Technically, it can be called anything.link)  In it put the line:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; path=\\\\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;myShare&lt;/span&gt;\\eclipse-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;plugins&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;The path should not &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;have a trailing slash&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt; and must point to the directory which has the eclipse folder.&lt;br /&gt;(Yes, Windows needs to escape the backslashes. On Linux just do /&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;myShare&lt;/span&gt;/eclipse-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;plugins&lt;/span&gt;.)&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span"  style="font-size:130%;"&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;5.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span style="font-size:130%;"&gt; &lt;/span&gt;Download a fresh zip install of the eclipse version you wish to use.  Add to this zip file your links folder with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;plugins&lt;/span&gt;.link file and re-zip it up. Put this file out on a shared drive and distribute to your team as the team's standard install. (Now, you've &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;pre&lt;/span&gt;-packaged it with the links reference ready to go!)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span style="font-size:130%;"&gt;6.&lt;/span&gt; Finally, launch eclipse. It will first load the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;plugins&lt;/span&gt; from your local eclipse home directory, then it notices the links/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;plugins&lt;/span&gt;.link file and proceeds to load any &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;plugins&lt;/span&gt; from that path as well.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Things to note:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;You only need the net difference between the share and the install. You don't want to put all the default ones out on the share.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Caveat:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;It seems that once you start eclipse pointed to a share it caches what &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;plugins&lt;/span&gt; it recognized.  This means that if a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;plugin&lt;/span&gt; is deleted on the share, your eclipse might still try to load it the next time you start. I've tried starting eclipse with the command "eclipse -clean", but it doesn't seem to matter.  However, it's not a big deal because now your eclipse home is nothing more than the install zip file (with your links folder) extracted.  To pick up any shared &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;plugin&lt;/span&gt; changes, simply delete your eclipse home directory and re-unzip the eclipse install. (You have your workspace elsewhere and any installed &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;plugins&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;elswhere&lt;/span&gt; so there is nothing you care to save in this directory anymore.)  Start her up again and it will cleanly load all the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;plugins&lt;/span&gt; from the shared drive.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;Sharing other eclipse settings:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;I recommend making settings changes at the project level, not eclipse global level. Thus it puts the configuration in the .project file which can then be checked in with your project in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;SVN&lt;/span&gt; and checked out by others so they are ready to go.  Else, if you use the eclipse global settings, at least put the settings files out in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;SVN&lt;/span&gt; and direct your team to do this one time setup each time they perform an eclipse install.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Oh and I need to give credit to a great post on the subject here: &lt;a href="http://www.venukb.com/2006/08/20/install-eclipse-plugins-the-easy-way/"&gt;http://www.venukb.com/2006/08/20/install-eclipse-plugins-the-easy-way/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-5284525567607383922?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/5284525567607383922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/11/eclipse-shared-plugins-directory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5284525567607383922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5284525567607383922'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/11/eclipse-shared-plugins-directory.html' title='Eclipse Shared Plugins Directory'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-3541751293854484828</id><published>2009-09-30T10:14:00.000-07:00</published><updated>2011-03-20T19:52:45.111-07:00</updated><title type='text'>10 Things You Could Automate with Hudson CI</title><content type='html'>Here is a &lt;a href="http://cid-adc7888fd558a4e8.office.live.com/self.aspx/.Public/Presentations/Hudson%20-%2010%20Things%20You%20Could%20Automate.20090928.pdf"&gt;presentation&lt;/a&gt; I recently gave on the topic.&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/6776330779304833794-3541751293854484828?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/3541751293854484828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/09/10-things-you-could-automate-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/3541751293854484828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/3541751293854484828'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/09/10-things-you-could-automate-with.html' title='10 Things You Could Automate with Hudson CI'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-6286917033285978293</id><published>2009-09-24T07:11:00.001-07:00</published><updated>2009-10-08T08:24:23.703-07:00</updated><title type='text'></title><content type='html'>There is a JavaScript Trick out there that if discovered, is probably being misunderstood.  The trick is to force convert any value into a boolean variable using the double not (!!)  operation as follows:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var myBoolean1 = "abc"; //you end up with a String type&lt;br /&gt;var myBoolean2 = !!"abc"; //you end up with a boolean type&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;However, watch closely as here are the results of each use:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;equals(true, !!"some text", "Any non-empty String results in true");&lt;br /&gt;equals(true, !!"False");&lt;br /&gt;equals(true, !!"false");&lt;br /&gt;equals(true, !!"True");&lt;br /&gt;equals(true, !!"true");&lt;br /&gt;equals(true, !!"null");&lt;br /&gt;equals(false, !!"", "JavaScript treats if ('') as false");&lt;br /&gt;equals(false, !!null, "JavaScript treats if (null) as false";&lt;br /&gt;equals(ERROR, !!MyObject, "Throws exception because undefined object";&lt;br /&gt;var MyObject = null;&lt;br /&gt;equals(false, !!MyObject, "JavaScript treats any null object as false";&lt;br /&gt;equals(true, !!window, "JavaScript treats any non-null object as true";&lt;br /&gt;equals(true, !!32, "Any non-zero number results in true");&lt;br /&gt;equals(true, !!1);&lt;br /&gt;equals(false, !!0, "Hopefully as you expected since everything is binary");&lt;br /&gt;equals(false, !!false, "As expected");&lt;br /&gt;equals(true, !!true, "As expected");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-6286917033285978293?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/6286917033285978293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/09/there-is-javascript-trick-out-there.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/6286917033285978293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/6286917033285978293'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/09/there-is-javascript-trick-out-there.html' title=''/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-5124090156237157290</id><published>2009-06-10T14:28:00.000-07:00</published><updated>2009-09-24T08:00:44.900-07:00</updated><title type='text'>Gant Helper</title><content type='html'>Using Gant for build scripts is pretty cool because it is a lightweight facade over Ant. You can do anything you can do in Ant by converting the syntax, but also mix in Groovy code. Using Groovy to script means better reuse of code and shorter build scripts. To learn more about Gant, read this page: http://gant.codehaus.org/&lt;br /&gt;&lt;br /&gt;For those of you familiar with Gant, I have created a few helper closures at the top of my script that you may find useful.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;includeTool &lt;&lt; env =" {"&gt; return System.getenv()[variable] }&lt;br /&gt;prop = { propKey -&gt; return ant.project.properties[propKey] }&lt;br /&gt;log = { target -&gt; println "\n[${target.name}] ${target.description}" }&lt;br /&gt;run = { command -&gt; def out = ""; execute.shell(command, outProcessing:{out+=it+"\n"}); return out}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;"env" - shortcut to reading environment variables. Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;buildNumber = env('BUILD_NUMBER')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;"prop" - shortcut to reading properties that were loaded into ant. Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;appName = prop.'application.name' //If you know Groovy, you know it could also be: prop('application.name')&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;"log" - By default, Gant won't print the targets as they are executed. You get the Ant task prints, but this is helpful when you use "depends" and want to follow the script. Just use "log(it)" or "log it" at the top of each target in you script. Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;target(compile: 'Compile everything') {&lt;br /&gt;log(it)&lt;br /&gt;ant.groovyc( ... )&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Prints:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[compile] Compile everything&lt;br /&gt;[groovyc] Compiling 1 source file&lt;br /&gt;It can also be used for methods by manually passing the "it" object:&lt;br /&gt;def junit() {&lt;br /&gt;log([name:'junit', description:'Runs all JUnit Tests'])&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;"run" - executes a shell command and also returns the output. Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def svnlogOut = run("svn info")&lt;br /&gt;println svnlogOut&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-5124090156237157290?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/5124090156237157290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/06/gant-helper.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5124090156237157290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/5124090156237157290'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/06/gant-helper.html' title='Gant Helper'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-3611278694542425761</id><published>2009-03-31T11:42:00.001-07:00</published><updated>2009-09-24T07:59:20.740-07:00</updated><title type='text'>JavaScript Classes</title><content type='html'>Most people hate JavaScript and for that reason copy snippets here and there without thinking about how to make it more object-oriented and encapsulated like they do in their other languages. I have found these 4 ways to make javascript classes, which gives them scope and control over what is exposed. It also reduces the chance that your page has a function getName() and so does that .js file you are including! (BTW, the last one interpreted by the browser wins.)&lt;br /&gt;&lt;br /&gt;Here is code for 4 different ways to do it, with each outcome below it. My preferred way is Three.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var One = {&lt;br /&gt;   me: "me",&lt;br /&gt;   myself: "myself",&lt;br /&gt;   i: function() {&lt;br /&gt;        return 1;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;One cannot be constructed, all fields are public static.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;equals( "me", One.me );&lt;br /&gt;equals( "myself", One.myself );&lt;br /&gt;equals( 1, One.i() );&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;------------&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var Two = function() {&lt;br /&gt;   var me = "me";&lt;br /&gt;   this.myself ="myself";&lt;br /&gt;   this.i = function() {&lt;br /&gt;        return 1;&lt;br /&gt;   }&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Two must be instantiated.  Fields declared with 'var' are private, those declared with 'this.' are public.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var twoInst = new Two();&lt;br /&gt;equals ( undefined, twoInst.me ); //because it is private&lt;br /&gt;equals ( "myself", twoInst.myself );&lt;br /&gt;equals ( 1, twoInst.i() );&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;------------&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var Three = new function() {&lt;br /&gt;   var me = "me";&lt;br /&gt;   this.myself ="myself";&lt;br /&gt;   this.i = function() {&lt;br /&gt;        return 1;&lt;br /&gt;   };&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*Three is my preferred way.&lt;/span&gt; Three is a singleton (already instantiated), fields may be private or public, called like a static.  Fields declared with 'var' are private, those declared with 'this.' are public.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;equals ( undefined, Three.me ); // because it is private&lt;br /&gt;equals ( "myself", Three.myself );&lt;br /&gt;equals ( 1, Three.i() );&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;------------&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function Four() {&lt;br /&gt;   var me = "me";&lt;br /&gt;   this.myself = "myself";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Four.prototype.getMe = function() {&lt;br /&gt;   return this.me;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Four.prototype.getMyself = function() {&lt;br /&gt;   return this.myself;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Four.prototype.i = function() {&lt;br /&gt;   return 1;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Four must be instantiated, but the class is open and you can continue to add fields to it. Every instance gets every prototype of that class the window knows about.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;var fourInst = new Four();&lt;br /&gt;equals( undefined, fourInst.me ); // because it is private&lt;br /&gt;equals( "myself", fourInst.myself );&lt;br /&gt;equals( undefined, fourInst.getMe() ); // because it is private&lt;br /&gt;equals( "myself", fourInst.getMyself() );&lt;br /&gt;equals( 1, fourInst.i() );&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-3611278694542425761?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/3611278694542425761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/03/javascript-classes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/3611278694542425761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/3611278694542425761'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/03/javascript-classes.html' title='JavaScript Classes'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-6880693076543971004</id><published>2009-01-19T18:52:00.000-08:00</published><updated>2009-01-19T19:09:08.745-08:00</updated><title type='text'>How to Fix a Crashed Ipod</title><content type='html'>Here is how I fixed our 2gig Ipod Nano after there was no hope and even the Apple Technician said there was nothing he could do. The disk seemed corrupted and crashed. Itunes was not able to restore.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Used Linux to write 0s onto the ipod disk.&lt;br /&gt;dd if=/dev/zero of=/dev/sda&lt;/li&gt;&lt;li&gt;Downloaded Firmware1.1.5 for ipod nano and wrote it onto ipod disk. Here's how to &lt;a href="http://gentoo-wiki.com/HOWTO_Update_iPod_Firmware"&gt;update ipod firmware&lt;/a&gt;.&lt;br /&gt;dd if=Firmware1.1.5 of=/dev/sda&lt;/li&gt;&lt;li&gt;Switch to (by typing) "init 1" to observe drive connecting/reconnecting.&lt;/li&gt;&lt;li&gt;Tried "parted" (gparted) but couldn’t make disk label (zero length partition)&lt;/li&gt;&lt;li&gt;On ipod, went into diagnostic mode (on restart immediately hold Rew + Select) and did Check Flashware. It hung at 0%, but used parted to write disk label while in that state. No luck, but I believe putting the ipod into this state before restarting was the trick that made it writeable again.&lt;/li&gt;&lt;li&gt;Restarted ipod (hold Menu + Select), all the while trying to retry the mklabel command in parted.  No luck.&lt;/li&gt;&lt;li&gt;Restarted and forced into disk mode (Noticed that the sync icon is not there anymore in the upper left corner of ipod screen...which is good cause it’s no longer locked and in use...it can be written to.)&lt;/li&gt;&lt;li&gt;When in disk mode with that sync icon off, was able to mklabel and a fat32 primary partition on the full size of the disk.&lt;/li&gt;&lt;li&gt;Go into Windows. In task manager (Ctrl+Shft+Esc) Stop any iPodService.exe and itunes/apple processes. Make sure there is no sync icon showing on the ipod. If there is, reboot the ipod and force into disk mode (on restart immediately hold Play + Select).&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://files.extremeoverclocking.com/file.php?f=197"&gt;HP USB Format Tool&lt;/a&gt; to format the disk in fat32, giving a volume label of "ipod". It will not be able to format if iPodService.exe is running because the ipod is locked-the sync icon is on.&lt;/li&gt;&lt;li&gt;Now can view empty drive in windows without any errors.&lt;/li&gt;&lt;li&gt;Launched itunes to restore.  It kept wanting to restore over and over again.  So tried &lt;a href="http://www.apple.com/support/downloads/ipodupdater20060628forwindows.html"&gt;2006-06-28 Ipod Updater&lt;/a&gt; instead. It worked! And after waiting (definitely do not disconnect now-be patient), I could watch the ipod reboot with an apple logo and install progress bar.&lt;/li&gt;&lt;li&gt;Uninstalled the ipod updater and iTunes.&lt;/li&gt;&lt;li&gt;Clear out the "C:\Documents and Settings\&lt;i&gt;username&lt;/i&gt;\Local Settings\Temp" folder.  Itunes uses stuff in there that could have become corrupt.&lt;/li&gt;&lt;li&gt;Ejected the ipod and/or stop the plugin device.  Make sure the ipod says "Ok to Disconnect" before you do.&lt;/li&gt;&lt;li&gt;Restart computer.&lt;/li&gt;&lt;li&gt;Installed fresh itunes.  Do not ever click upgrade software again or restore on the ipod.  Keep the older, working firmware.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-6880693076543971004?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/6880693076543971004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/01/here-is-how-i-fixed-our-2gig-ipod-nano.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/6880693076543971004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/6880693076543971004'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/01/here-is-how-i-fixed-our-2gig-ipod-nano.html' title='How to Fix a Crashed Ipod'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6776330779304833794.post-7553053499264377289</id><published>2009-01-19T18:47:00.000-08:00</published><updated>2009-01-19T18:51:31.849-08:00</updated><title type='text'>How a Computer Works</title><content type='html'>&lt;hr /&gt; &lt;h4&gt;Electricity + Transistors + 1's &amp;amp; 0's + Compiler = How a computer Works.&lt;/h4&gt;&lt;hr /&gt; &lt;p&gt; &lt;/p&gt;&lt;h2&gt;Electricity&lt;/h2&gt; It all starts with electricity. We have metals -- which are conductive, and woods/ceramics -- which are non-conductive (or insulators). In the late 1940s, scientists figured out how to create semi-conductors which are needed to make a "transistor". Semi-conductors are crystals (non-conductive) grown with impurities such as phosphorus (conductive). By forcing crystals of germanium or silicon to grow with impurities such as boron or phosphorus, the crystals gain entirely different electrical conductive properties. By sandwiching this material between two conductive plates (the emitter and the collector), a transistor is made. &lt;h2&gt;Transistors&lt;/h2&gt;The transistor is built to pass electrical current through it and maintain a state. A transistor object allows for current to enter on one side and travel to a "fork in the road" so to speak. If the current is high enough to travel up (&gt; 5 Volts) the collector gate is opened and it is interpreted as ON. Otherwise, if it is less than 5 Volts, it does not open the collector gate and the transistor is interpreted as OFF. If it's ON, then we scientists define that as a "1" bit. If it's OFF, that's a "0" bit. &lt;h2&gt;1's &amp;amp; 0's&lt;/h2&gt; Representing Numbers with 1's &amp;amp; 0's:&lt;br /&gt;In order for the computer to communicate to us, it has to be able to represent things. The most basic thing it needs to represent is our math system of digits. Otherwise it can't distinguish between a "3" and a "43". Up above, we mentioned the "1" bit and the "0" bit. Those are the only possible states of a single transistor. It can only either be ON or OFF, a 1 or a 0. Therefore, each transistor can either represent the digit 0 or the digit 1. That's pretty limiting. How do we represent the number "5" if we only have a 0 and 1 to work with? &lt;p&gt;The answer is, we combine this transistor (which can only have 0 or 1) with another transistor (which can also have 0 or 1). By combining these, we can now represent 4 total combinations of values: 0-0, 0-1, 1-0, 1-1. Think of the first combination as the number 0, the second as the number 1, the third as the number 2, and the fourth as the number 3. Thus, with two transistors you can represent up to the number 3. Ok, that helped a little. How do we represent larger numbers? &lt;/p&gt;&lt;p&gt;The answer again is, we add more transistors together (side by side) and then you can represent more combinations. If you think about it now, you can see that we can represent any number out there by combining these transistors. It might take a lot of them, but that's no problem for our latest technology. We can have millions of them in an inch of space. &lt;/p&gt;&lt;p&gt; The Language Part:&lt;br /&gt;Ok, we've discussed how numbers are represented. To represent letters and text on a screen, a computer program needs to interpret numbers (each stored by transistor states described above) as a letter. For example, the number "83", stored by 7 transistors as the combination "1010011", is interpreted as the letter "S". &lt;/p&gt;&lt;h2&gt;Compiler&lt;/h2&gt;Assembly language is a low-level way of typing commands that a computer understands. It deals with commands like "PUT 0,F0" which tells the computer to switch bit 15 from 1 to a 0. Given that command to turn one bit ON or OFF, you can see that you can turn a bunch of bits to some combination of 1's &amp;amp; 0's. If a series of bits are switched and left alone, this is called "Saving" something into memory. If you saved the number "3", stored by 2 transistors as the combination "11" somewhere, then anytime you want to recall it you can go to the place you saved it and get it. &lt;p&gt;Compilers allow programmers to write commands that make more sense than "PUT 0,F0". Maybe you typed the following: "In Excel, do the math operation: 5 minus 5". A compiler that understands that higher level language can do the dirty work of figuring out the equivalent low-level series of commands in assembly language (i.e. the numerous lines like "PUT 0,F0"). The coder doesn't have to know about memory locations in the computer he/she is trying to talk to because the compiler turns it into the machine's assembly language. Coders are lazy. If something needs to be repeated they write a program that will do it automatically next time. Some coders wrote the compilers we use so we don't have to translate English to computer talk each time. It does it for us. Remember, once it's in assembly language, the assembly language is interpretted by the computer processor itself, and the transistor is switched. A high-level computer language, like Java, allows coders to write code like "In Excel, do the math operation: 5 minus 5". This in turn is compiled. The compiler puts it into Assembly Language. And the computer processor interprets the Assembly Language and does the bit (1 or 0) shifting. &lt;/p&gt;&lt;hr /&gt; &lt;b&gt;Summary:&lt;/b&gt; &lt;p&gt;You know it all. The only mind-boggling part is that this is done a super-grand scale. But when trying to understand computers always remember to see the simplest, most basic example before trying to understand it all. For instance, how does the monitor display what you type? Don't think in terms of "pictures" displayed or "words." But instead imagine that your monitor were blown up the size of a house and you could see a single dot/spec in the letter "t" (say the top most dot). Call that a "pixel". And imagine if in that pixel was a bulb with 8 bulbs inside of it. Just like your car brakelights and turn signal, these different-colored bulbs can display the pixel in one of 8 colors. If you can turn just 1 pixel ON and OFF (controlled by a transistor), imagine the possibilities with millions of them controlled by a computer. All you have to do is save off somewhere how to turn one ON. Then save off somewhere how to turn on all the pixels required for "t". Then, if you want to print "t", it goes and calls it. The effect trickles down and it happens. It's not magic. It's some simple principles applied on a grander (yet micro) scale. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6776330779304833794-7553053499264377289?l=paulmazak.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://paulmazak.blogspot.com/feeds/7553053499264377289/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://paulmazak.blogspot.com/2009/01/how-computer-works.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/7553053499264377289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6776330779304833794/posts/default/7553053499264377289'/><link rel='alternate' type='text/html' href='http://paulmazak.blogspot.com/2009/01/how-computer-works.html' title='How a Computer Works'/><author><name>Paul Mazak</name><uri>http://www.blogger.com/profile/06131371257926554519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_0d6RwZviS-o/SdLE2C3Yq7I/AAAAAAAAAXg/Co4NjSs35sE/S220/IMG00046.jpg'/></author><thr:total>0</thr:total></entry></feed>
