<?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-8740675</id><updated>2011-04-21T16:05:46.912-04:00</updated><title type='text'>zak.thoughts.persist()</title><subtitle type='html'>Zak Mandhro on Software Development and Open Source</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8740675.post-114887462536250728</id><published>2006-05-28T23:50:00.000-04:00</published><updated>2006-05-31T22:45:30.196-04:00</updated><title type='text'>Java will take Rails to the next level</title><content type='html'>Ruby on Rails is proof, complex web applications don't have to be &lt;span style="font-style: italic;"&gt;complicated&lt;/span&gt;. Big kudos to &lt;a href="http://www.loudthinking.com/about.html"&gt;David Heinemeier Henson&lt;/a&gt; and the &lt;a href="http://www.rubyonrails.com/core"&gt;Rails committers&lt;/a&gt;. Thanks for the wake-up call.   The question is, what do we do with Java now? In the long run, what matters is whether the developer community at large is going to learn from it and adopt it or whether it is going to dismiss Rails as a fad. Here's the good news: Java community is no fool, it is learning and it's learning fast.&lt;br /&gt;&lt;br /&gt;I was at JavaOne 2006 and here's why I think &lt;span style="font-weight: bold;"&gt;Java will learn from and adopt to Rails&lt;/span&gt;. Like me, you can be a huge Rails fan and a die-hard &lt;span style="font-style: italic;"&gt;rubist&lt;/span&gt;, but you can not deny the ubiquious Java ecosystem, nor can you deny the great innovation that has come from Java's cross platform enterprise environment. At the risk of sounding like an apologist, I hereby claim that Java will learn from Rails and take it to the next level.&lt;br /&gt;&lt;br /&gt;Enough claims, here's my list of reasons:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; (Java Virtual Machine's scripting language) has the benefits of Python and Ruby, such as duck-typing, closures, method-missing, builders, etc. &lt;span style="font-weight: bold;"&gt;plus&lt;/span&gt; the big advantage of running in the highly optimized Java virtual machine, enjoying HotSpot technology and native threads. With the advent of scripting languages support in the JVM with &lt;a href="http://jcp.org/en/jsr/detail?id=223"&gt;Mustang (Java 6)&lt;/a&gt;. Groovy will get a big boost in performance -- all the productivity minus the interpretation. Whether Ruby enthusiasts agree or not, there is a huge performance gain in running within an intermediate language such Java bytecode. As far as I can see, there is not much information on Ruby 2.0 and it's &lt;a href="http://www.rubyist.net/%7Ematz/slides/rc2003/mgp00007.html"&gt;VM&lt;/a&gt;. Mustang is open, it's on track, and it will be delivered this year. I sure hope Ruby 2.0 is  chugging along, but I just can't find any evidence online. My money is on Mustang.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://grails.org/"&gt;Grails,&lt;/a&gt; the Rails copy-cat for Groovy, is onto a great start. &lt;a href="http://graemerocher.blogspot.com/"&gt;Graeme Rocher&lt;/a&gt; is certainly embracing the Rails conventions while staying pure to the Java platform by embracing Hibernate. At version 0.1, it's already looking pretty darn impressive. Not a Rails alternative, mind you - but a great start nonetheless. &lt;a href="http://www.rifers.org"&gt;RIFE&lt;/a&gt; and &lt;a href="https://trails.dev.java.net/"&gt;Trails&lt;/a&gt; deserve an honorable mentions for highly productive Java environments.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;What is the biggest advantage of Rails? For me, it's convention over configuration; not having to write all the darn XML files that only describe the obvious. Good news: The era of useless descriptors is over. &lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html"&gt;EJB 3.0&lt;/a&gt; sports &lt;a href="http://today.java.net/pub/a/today/2005/08/18/ejb3.html"&gt;smart defaults&lt;/a&gt;. In essence, it follows the Rails &lt;span style="font-style: italic;"&gt;convention over configuration&lt;/span&gt; paradigm. You no longer have to describe the obvious. As far as I am concerned, the biggest advantage of Rails over Java has just been &lt;span style="font-style: italic;"&gt;deprecated&lt;/span&gt;. With that said, I still think Ruby on Rails has many other advantages over Java. Ruby's dynamic nature and all the flexibility that it makes possible, such as open-classes, meta-programming and Rails plug-ins. RJS templates, fast and simple automated testing, and Rake are some of my favorites that have not made it to the Java world yet.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Last but not least, Java will be open-source. I was there when &lt;a href="http://news.zdnet.com/2100-9593_22-6072760.html"&gt;Rich Green said so&lt;/a&gt;. My Ubuntu Linux will have a .deb package for Sun Java. Java will no longer be Sun propeitory technology. There will no longer be a need for &lt;span style="font-style: italic;"&gt;spending life on&lt;/span&gt; open source alternatives such as &lt;a href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/a&gt; or even Ruby. Java can re-unite the open source community.&lt;/li&gt;&lt;/ol&gt;The point: Rails is wonderful. Ruby is fantastic. Java will adopt and take Ruby on Rails to the next level. That's a few months to a year down the road. I am not holding my breath for Grails, Mustang or open-source Java. I love Ruby on Rails and I will continue to use it. But I &lt;span style="font-style: italic;"&gt;will&lt;/span&gt; keep my eyes and ears open for what Java will become. You should too. Until then, &lt;span style="font-weight: bold;"&gt;viva la Rails&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114887462536250728?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114887462536250728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114887462536250728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114887462536250728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114887462536250728'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/05/java-will-take-rails-to-next-level.html' title='Java will take Rails to the next level'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114540152758672692</id><published>2006-04-18T19:05:00.000-04:00</published><updated>2006-04-18T19:20:15.390-04:00</updated><title type='text'>Setting up Intel Mac for Rails development</title><content type='html'>I am happy to report back that I had no problems switching to MacOS as my development server. Moreover, MacOS interface felt just natural - as if I always knew how to use it. It could be because of all the things that Ubuntu and GNOME has taken from MacOS, like the preferences dialog, and privileged commands (sudo). I also felt readily productive in MacOS once I figured out how to launch the terminal. Bash and VIM, my two favorite console tools were already installed.&lt;br /&gt;&lt;br /&gt;Here is a report on the tools I configured to migrate from Ubuntu:&lt;br /&gt;&lt;h3&gt;Firefox&lt;/h3&gt;As of writing, Firefox official releases were only for PowerPC, which runs extremely slow emulated on the Intel platform. I had to get the bleeding edge build of Firefox Universal Binary. Fortunately, you can &lt;a href="http://wiki.mozilla.org/Mac:Intel"&gt;grab the official release&lt;/a&gt; now.&lt;br /&gt;&lt;h3&gt;Ruby on Rails 1.1.1&lt;/h3&gt;After googling around for a few hours and trying different RoR packagers, I found a nice, non-intrusive Mac Intel package at &lt;a href="http://gabrito.com/post/ruby-on-rails-mac-osx-intel-binary"&gt;Todd Huss's blog&lt;/a&gt;. Unlike Locomotive, which is a PowerPC application that hides the underlying Rails infrastructure, Todd's package gives you a simple directory structure with Ruby and the basic gems that you can drop anywhere on your filesystem.&lt;br /&gt;&lt;h3&gt;MySQL 5.0&lt;/h3&gt;MySQL was a breeze. Just head on over to the &lt;a href="http://dev.mysql.com/downloads/mysql/5.0.html"&gt;official MySQL site&lt;/a&gt; and grab the Mac x86 version.&lt;br /&gt;&lt;h3&gt;DarwinPorts&lt;/h3&gt;Okay, here's where it gets interesting: Before I can install RMagick (ImageMagick) and Subversion for Intel, I need to setup DarwinPorts so that I can compile my own binaries. For DarwinPorts, I need Xcode. So, I grabbed the latest Intel compatible Xcode from &lt;a href="http://developer.apple.com/tools/download/"&gt;Apple's Developer Connection&lt;/a&gt;. Grabbed and installed Darwin Ports from &lt;a href="http://darwinports.opendarwin.org/getdp/"&gt;here&lt;/a&gt;, and followed instructions on &lt;a href="http://rmagick.rubyforge.org/install-osx.html"&gt;RubyForge&lt;/a&gt; to install ImageMagick and RMagick.&lt;br /&gt;&lt;strong&gt;&lt;p align="center"&gt;If you're a Linux user, you'd want to get DarwinPorts, it lets you search, download, compile and install programs much like yum and aptitude.&lt;br /&gt;&lt;/p&gt;&lt;/strong&gt;&lt;h3&gt;Subversion and Lighttpd&lt;/h3&gt;With DarwinPorts installed, installing &lt;em&gt;subversion&lt;/em&gt; and &lt;em&gt;lighttpd&lt;/em&gt; were a matter of single commands:&lt;br /&gt;&lt;pre&gt;port install subversion&lt;br /&gt;port install lighttpd&lt;/pre&gt;I used svnadmin to create a new svn respository, copied my svn repository from Ubuntu, and voila! All my versioned files and change history is migrated.&lt;br /&gt;&lt;br /&gt;Don't you love it when software just works? Hope this post was helpful to anyone trying to setup an Intel Mac as a Rails development server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114540152758672692?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114540152758672692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114540152758672692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114540152758672692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114540152758672692'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/04/setting-up-intel-mac-for-rails.html' title='Setting up Intel Mac for Rails development'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114460142644225689</id><published>2006-04-09T11:50:00.000-04:00</published><updated>2006-04-09T12:52:42.540-04:00</updated><title type='text'>My first Mac</title><content type='html'>&lt;a href="http://a248.e.akamai.net/7/248/2041/1008/store.apple.com/Catalog/US/Images/step2_macminibeauty_050111.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px;" src="http://a248.e.akamai.net/7/248/2041/1008/store.apple.com/Catalog/US/Images/step2_macminibeauty_050111.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Yesterday, I got my first Apple computer. A shiny new Intel based Mac Mini Solo. I hooked it up with a new &lt;a href="http://www.westinghousedigital.com/pc-29-3-17-lcd-monitor.aspx"&gt;Westinghouse 17" widescreen&lt;/a&gt; LCD monitor, which looks great with the Mac and doesn't cost a fortune. I hooked up my old Logitech mouse and keyboard and I am good to go.&lt;br /&gt;&lt;br /&gt;So, what do I do with my 6th computer? Good question. Eventually, the Mini will serve as a media player for our kitchen. For now, it will hold a more honorable position, a development server for my Rails application. To replace my current Ubuntu Dapper server, MacOS needs to be able to run the following:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rails 1.1.1 with Ruby 1.8.4&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://rmagick.rubyforge.org/install-osx.html"&gt;RMagick&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;MySQL 5.0&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LightTPD with SSL&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Subversion Server&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Is the Mac up for the challenge? Can it live up to Ubuntu's standards? Come back again to find out.&lt;br /&gt;&lt;br /&gt;By the way, you may be wondering why I am retiring my Ubuntu server. I &lt;strong&gt;love&lt;/strong&gt; Ubuntu and the server is working great but it's an old laptop and the hard drive is starting to fail. I could've purchased an Intel PC but I have 5 of those, it was time to try something new. Change is good - Rails is case in point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114460142644225689?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114460142644225689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114460142644225689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114460142644225689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114460142644225689'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/04/my-first-mac.html' title='My first Mac'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114417736253257822</id><published>2006-04-04T15:02:00.000-04:00</published><updated>2006-04-09T11:50:30.000-04:00</updated><title type='text'>With a Windows Vista upgrade looming, agencies may want to see which Linux</title><content type='html'>In this article, Government Computer News reviews major Desktop Linux distributions. Distributions included in the review are RedHat, Fedora Core, Ubuntu, SuSE and Xandros.&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.gcn.com/print/25_7/40263-1.html"&gt;read more&lt;/a&gt;&amp;nbsp;|&amp;nbsp;&lt;a href="http://digg.com/linux_unix/"&gt;digg story&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114417736253257822?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114417736253257822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114417736253257822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114417736253257822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114417736253257822'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/04/with-windows-vista-upgrade-looming.html' title='With a Windows Vista upgrade looming, agencies may want to see which Linux'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114291664268894615</id><published>2006-03-20T23:50:00.000-05:00</published><updated>2006-03-20T23:50:42.840-05:00</updated><title type='text'>RadRails wins "Best Open Source Eclipse-based Tool"</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://static.flickr.com/36/115616174_6f0722c3d7.jpg?v=0"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 200px;" src="http://static.flickr.com/36/115616174_6f0722c3d7.jpg?v=0" alt="" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.radrails.org/"&gt;RadRails&lt;/a&gt;, the Eclipse based IDE for Ruby On Rails, just won the "&lt;a href="http://www.radrails.org/blog/show/56"&gt;Best Open Source Eclipse-based Tool&lt;/a&gt;" award at EclipseCon 2006.&lt;br /&gt;&lt;br /&gt;Congratulations guys, keep it up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114291664268894615?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114291664268894615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114291664268894615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114291664268894615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114291664268894615'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/03/radrails-wins-best-open-source-eclipse.html' title='RadRails wins &quot;Best Open Source Eclipse-based Tool&quot;'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114286855406151839</id><published>2006-03-20T10:29:00.000-05:00</published><updated>2006-03-20T23:52:00.936-05:00</updated><title type='text'>Eclipse for Rails - RadRails IDE Updated</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.radrails.org/"&gt;RadRails &lt;/a&gt;is an &lt;a href="http://www.eclipse.org"&gt;Eclipse &lt;/a&gt;based IDE for Ruby and Rails. It supports:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Ruby syntax highlighting&lt;/li&gt;&lt;li&gt;Ruby syntax validation (as you type)&lt;/li&gt;&lt;li&gt;Subversion integration using Subclipse&lt;/li&gt;&lt;li&gt;Integrated JUnit-style interface for Test::Unit&lt;/li&gt;&lt;li&gt;Templates for Rails&lt;/li&gt;&lt;li&gt;Data perspective with data source and records browsing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SQL syntax highlighting and execution&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/webtools/"&gt;WTP&lt;/a&gt;-like WEBrick server control&lt;/li&gt;&lt;li&gt;and more ...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;I have been using &lt;a href="http://www.eadz.co.nz/blog/article/ruby-rails-jedit.html"&gt;JEdit&lt;/a&gt; while waiting for RadRails to be stable and usable. RadRails Version 0.61 has just been released. Most of the severe bugs that I experienced in the older versions seem to have been fixed. It's been several hours of development with RadRails, so far it's been working great.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.radrails.org/page/download"&gt;Go download it and enjoy!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114286855406151839?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114286855406151839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114286855406151839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114286855406151839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114286855406151839'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/03/eclipse-for-rails-radrails-ide-updated.html' title='Eclipse for Rails - RadRails IDE Updated'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114253720804392057</id><published>2006-03-16T14:26:00.000-05:00</published><updated>2006-03-20T23:16:01.236-05:00</updated><title type='text'>Deploying Rails on Ubuntu Dapper Drake</title><content type='html'>Development with Rails was easy. What about deployment to production? Well, I ran into some hurdles deploying my rails application for production. Here is a quick blog post to help you avoid the same situation.&lt;br /&gt;&lt;br /&gt;I have a cable connection at home from Cox Communications. &lt;span style="font-style: italic;"&gt;For my own safety&lt;/span&gt;, Cox blocks all traffic to port 80 and 25. Which means that I can &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; run a public HTTP web site from my DMZ server on my home network with the consumer Cox account. But what I can do, is run an HTTPS connect on port 443. There is one problem that I ran into what that. Apache 2 with &lt;span style="font-weight: bold;"&gt;fcgid&lt;/span&gt; does not work with file uploads on HTTPS. There seems to be a bug with fcgid on Ubuntu that confuses the standard &lt;span style="font-weight: bold;"&gt;cgi.rb&lt;/span&gt; library of Ruby. After a couple of hours of troubleshooting and some help from the Ruby Forum, I figured it was a known issue and I switched to Lighttpd.&lt;br /&gt;&lt;br /&gt;It wasn't easy to get out of my comfort zone with Apache, but I had no choice. Turns out, not only is &lt;a href="http://www.lighttpd.net"&gt;Lighttpd&lt;/a&gt; much faster than Apache 2 for Rails, it has no issues with SSL and file uploads. Here is a sample lightpd.conf file based on mine, incase you run into the same problem.&lt;br /&gt;&lt;br /&gt;&lt;div style="overflow: scroll"&gt;&lt;br /&gt;&lt;pre&gt;server.modules              = (&lt;br /&gt;    "mod_rewrite",&lt;br /&gt;    "mod_redirect",&lt;br /&gt;     "mod_access",&lt;br /&gt;    "mod_fastcgi",&lt;br /&gt;     "mod_accesslog"ing&lt;br /&gt;)&lt;br /&gt;server.document-root             = "/var/www/railsapp/public"&lt;br /&gt;server.errorlog            = "/var/www/railsapp/log/lighttpd_error.log"&lt;br /&gt;url.rewrite = ( "^/$" =&gt; "index.html", "^([^.]+)$" =&gt; "$1.html" )&lt;br /&gt;server.indexfiles          = ( "index.php", "index.html",&lt;br /&gt;include_shell "/usr/share/lighttpd/create-mime.assign.pl"&lt;br /&gt;include_shell "/usr/share/lighttpd/include-conf-enabled.pl"&lt;br /&gt;accesslog.filename          = "/var/www/railsapp/log/lighttpd_access.log"&lt;br /&gt;url.access-deny             = ( "~", ".inc" )&lt;br /&gt;server.port                = 443&lt;br /&gt;&lt;br /&gt;server.bind                = "192.168.1.2"&lt;br /&gt;server.error-handler-404   = "/dispatch.fcgi"&lt;br /&gt;server.pid-file              = "/var/run/lighttpd.pid"&lt;br /&gt;server.dir-listing          = "enable"&lt;br /&gt;server.username            = "www-data"&lt;br /&gt;server.groupname           = "www-data"&lt;br /&gt;fastcgi.server =  (&lt;br /&gt;".fcgi" =&gt; (&lt;br /&gt;"192.168.1.2" =&gt; (&lt;br /&gt;"min-procs" =&gt; 2,&lt;br /&gt;"max-procs" =&gt; 2,&lt;br /&gt;"socket" =&gt; "/tmp/rails.socket",&lt;br /&gt;"bin-path" =&gt; "/var/www/railsapp/public/dispatch.fcgi"&lt;br /&gt;)&lt;br /&gt;)&lt;br /&gt;)&lt;br /&gt;ssl.engine                  = "enable"&lt;br /&gt;ssl.pemfile                 = "/etc/apache2/ssl/apache.pem"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Lighttp is super light and super fast, I love it. Best of all, it is part of the Universe repository of Ubuntu Dapper Drake. Gotta love Ubuntu! Thanks for adding Lighttpd!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114253720804392057?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114253720804392057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114253720804392057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114253720804392057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114253720804392057'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/03/deploying-rails-on-ubuntu-dapper-drake.html' title='Deploying Rails on Ubuntu Dapper Drake'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114253652461380649</id><published>2006-03-16T14:15:00.000-05:00</published><updated>2006-03-17T00:42:08.120-05:00</updated><title type='text'>From Java to Rails - Ahead of Schedule</title><content type='html'>I have spent 10 years with Java and a few with .NET, PHP, CFML, and Python. When it came time to start a new personal project, my first choice was J2EE-light, &lt;a href="http://www.hibernate.org"&gt;Hibernate&lt;/a&gt;, &lt;a href="http://myfaces.apache.org"&gt;MyFaces&lt;/a&gt;, &lt;a href="http://www.springframework.org"&gt;Spring&lt;/a&gt;, the usual Java favorites. I even toyed around with &lt;a href="http://jboss.org/products/seam"&gt;SEAM&lt;/a&gt;. Don't get me wrong, I&lt;strong&gt; still love&lt;/strong&gt; all of these technologies, I am using most of these at work and I will continue to use them. But after three weeks into development with Java, I realized that I wasn't moving fast enough for my own taste. So I decided to break my Java legacy and try &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; (RoR). After all, this is my personal project, what's the worst that can happen? Regardless of how RoR pans out for the project, I would gain the benefits of opening up my mind, flexing some brain muscles while learning a new programming langauge and a new design philosophy.&lt;br /&gt;&lt;br /&gt;Fast forward 4 weeks, I have 70% of my application done. Development with Rails turned out to be a lot of fun. My application does themes, internationalization, AJAX - all the stuff you'd expect from a good consumer web2.0 application. Most people complain about the lack of compiler, poor IDE support, and dynamic typing in Ruby on Rails. I will admit, I missed all those things too. But what Ruby lacks in IDE support and compiling, Rails and supporting frameworks make up in simplicity and speed. I also find my self writing a lot of Unit Test cases for my models and controllers, which goes further than compiler validation. Besides, it was great not to have to worry about deployment descriptors, server restarts, and XML mapping files - not to mention all the lines of code I didn't have to write to please the Java language specification and the frameworks.&lt;br /&gt;&lt;br /&gt;Over the next couple a days, I will blog about some interesting tid bits in Ruby, and discuss Ruby on Rails alternatives to Java EE conventions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-114253652461380649?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114253652461380649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114253652461380649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114253652461380649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114253652461380649'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/03/from-java-to-rails-ahead-of-schedule.html' title='From Java to Rails - Ahead of Schedule'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114205265853411978</id><published>2006-03-10T23:50:00.000-05:00</published><updated>2006-03-20T23:21:03.760-05:00</updated><title type='text'>Ruby on Rails and MySQL 5 with Ubuntu Dapper</title><content type='html'>This post walks you through the process of setting up &lt;a href="http://www.ubuntulinux.org"&gt;Ubuntu Linux&lt;/a&gt; Dapper for Rails 1.0 development with MySQL 5. As of writing, the current release of Ubuntu is 5.10 - Breezy Badger. I upgraded to the development release of 6.04 - Dapper so I can get the latest Firefox, Gnome and MySQL from the official repository.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fridge.ubuntu.com/event/2006/04/20/month/event"&gt;Official release of Dapper&lt;/a&gt; is scheduled for April 28, 2006.&lt;br /&gt;&lt;h3&gt;Upgrading to Dapper&lt;br /&gt;&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Follow the wizard to install either "server" or default configuration.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;After booting into your freshly installed Ubuntu, update the apt sources to upgrade Ubuntu to the next Dapper.&lt;/li&gt;  &lt;ul&gt;&lt;br /&gt;&lt;li&gt;Open a terminal window (Application-&amp;gt;Accessories-&amp;gt;Terminal) and type (you will have to enter your admin password):&lt;br /&gt; &lt;pre&gt;sudo vim /etc/apt/sources.list&lt;/pre&gt;    &lt;/li&gt;    &lt;li&gt;We will change the apt repository from Badger to Dapper so that we can upgrade. Type colon (:) to get the VIM command line and type:&lt;br /&gt; &lt;pre&gt;%s/badger/dapper/g&lt;/pre&gt;    &lt;/li&gt;    &lt;li&gt;You also need to uncomment the "universe" repositories by removing the "#" prefix on line 19. Use the &lt;strong&gt;x&lt;/strong&gt; key in VIM to delete character.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Exit VIM by typing :wq.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Back on the command prompt, type:&lt;br /&gt; &lt;pre&gt;apt-get update&lt;br /&gt;apt-get dist-upgrade&lt;/pre&gt;    &lt;/li&gt;    &lt;li&gt;This will start downloading the latest packages of Dapper. Once the packages are installed, reboot.&lt;/li&gt;  &lt;/ul&gt;&lt;/ol&gt;&lt;h3&gt;Installing MySQL 5&lt;/h3&gt;With Dapper installed, all you need to install MySQL 5 is:&lt;br /&gt;&lt;pre&gt;sudo apt-get install MySQL-server&lt;br /&gt;&lt;/pre&gt;&lt;h3&gt;Installing Ruby&lt;/h3&gt;The latest version of Ruby available in the Ubuntu repositories is 1.8.2. If you want 1.8.4, you will have to get it right from the &lt;a href="http://www.ruby-lang.org/en/20020102.html"&gt;source.&lt;/a&gt; Installing Ruby with apt is a breeze. Just type:&lt;br /&gt;&lt;div style="overflow: scroll"&gt;&lt;pre&gt;sudo apt-get install ruby rdoc irb libyaml-ruby libzlib-ruby libMySQL-ruby ri&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Installing Rails&lt;/h3&gt;Before we can install Rails, we need to install RubyGems:&lt;br /&gt;&lt;pre&gt;wget rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz&lt;br /&gt;tar xzvf rubygems-0.8.11.tgz&lt;br /&gt;cd rubygems-0.8.11&lt;br /&gt;sudo ruby setup.rb&lt;br /&gt;sudo gem update --system&lt;br /&gt;&lt;/pre&gt;With the most up-to-date RubyGems, we are ready to install Rails.&lt;br /&gt;&lt;pre&gt;sudo gem install rails -y&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;That's it. Enjoy Ruby on Rails on Dapper.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jedit.org"&gt;JEdit&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;My preferred Editor for Rails that you can &lt;a href="http://www.eadz.co.nz/blog/article/ruby-rails-jedit.html"&gt;customize for Rails&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wiki.rubyonrails.com/rails/pages/RailsOnUbuntuDebianTestingAndUnstable"&gt;RailsWiki: Setting up Rails&lt;/a&gt; on Breezy Badger and older Ubuntu versions.&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/8740675-114205265853411978?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114205265853411978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114205265853411978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114205265853411978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114205265853411978'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/03/ruby-on-rails-and-mysql-5-with-ubuntu.html' title='Ruby on Rails and MySQL 5 with Ubuntu Dapper'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-114166297991743142</id><published>2006-03-06T11:33:00.000-05:00</published><updated>2006-03-06T16:32:39.526-05:00</updated><title type='text'>Designing Databases with ActiveRecord Conventions</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.rubyonrails.org/images/rails.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 41px; height: 53px;" src="http://www.rubyonrails.org/images/rails.png" alt="" border="0" /&gt;&lt;/a&gt;Based on &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails &lt;/a&gt; Philosophy and &lt;a href="http://wiki.rubyonrails.org/rails/pages/ActiveRecord"&gt;ActiveRecord &lt;/a&gt; Default Naming Standards &lt;h4&gt;Underlying Philosophy &lt;/h4&gt;&lt;p&gt;The goal of IT systems is to provide support the business objectives. IT departments have been guilty of focusing too much on their individual function, such as database administration or Java development, digressing into engineering perfect and losing focus of the bigger IT objectives. New conventions are emerging in the software development industry that are breaking old monolithic standards and promoting a more holistic view of the software development functions, with the goal of efficiently delivering business value. &lt;/p&gt;&lt;p&gt;Databases serve a specific purpose in the enterprise: to store and retrieve data so that user-facing services, such as application and business intelligence tools, can meet the business needs efficiently. In other words, if a database design reduces the development time for building a specific application or report while meeting the business objectives, than it should be designed as such, even if it doesn't follow old (and often unnecessary) conventions. Ruby on Rail's ActiveRecord framework supports such a convention; it promotes a common-sense approach to building databases that accelerate application and report development while meeting long-term business objectives. &lt;/p&gt;&lt;h4&gt;A note on Oracle limitations &lt;/h4&gt;&lt;p&gt;Oracle identifiers (table/column names) are limited to 30 characters, which creates unwarranted tendency to abbreviate identifiers, and create artificial and often cryptic naming conventions. If you are concerned about Oracle's column name length, you'll be surprised how much you can fit into 30 characters by using good logical names. In many cases, a very long column name is a sign of normalization problem:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;    FIRST_INVOICE_CREATED_ON&lt;/li&gt;  &lt;li&gt;CONTRACTOR_POINT_OF_CONTACT&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;What about Internationalization (&lt;a href="http://en.wikipedia.org/wiki/Internationalization"&gt;I18N&lt;/a&gt;)?&lt;/h4&gt;&lt;p&gt;The objective of these conventionss is not to eliminate the need for translation of labels. These naming conventions will help you standardize around names that are logical, readable and consistent. Depending on your development environment, it may even help your tool translate your database objects names into your application or report development namespace.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style="font-size:100%;"&gt;1. Table Names&lt;/span&gt;&lt;/h3&gt;&lt;h4&gt;Convention #1.1 – Naming tables &lt;/h4&gt;&lt;p&gt;A database row represents one instance of an entity, while a table is a collection of the same entities. Use plural nouns, e.g. PEOPLE, CONTRACTS, etc for database tables - this follows the common database convention. Use underscore to separate words, e.g. LINE_ITEMS. Do not abbreviate. Do not start table names with a number – this causes errors in certain application platforms. Do not use prefixes like REF_ or LU_ for reference tables, entity names should represent the information being stored, and not try to represent a usage scenario for the information.&lt;/p&gt;&lt;p&gt;Alternatively, you can use the singular form of entity names for tables, thereby following the Object Oriented Programming naming style and avoiding the need for translation from singular to plural and vice versa. ActiveRecord defaults to plural table names, this can be turned off as a &lt;a href="http://wiki.rubyonrails.org/rails/pages/Turn/versions/8"&gt;global environment setting&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;PEOPLE&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PERSON&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LINE_ITEMS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ORDER_TYPES, TYPES_OF_ORDERS&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended&lt;/strong&gt;: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;LINEITEMS&lt;/li&gt;&lt;li&gt;LN_ITEMS&lt;/li&gt;&lt;li&gt;LI &lt;/li&gt;&lt;li&gt;REF_ORDER_TYPE&lt;/li&gt;&lt;li&gt;ORDER_TP_CDS &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #1.2 – Naming association tables &lt;/h4&gt;&lt;p&gt;For association tables (also known as intersection tables) that resolve many-to-many relationships, use the following naming convention: [name of first entity]_[name of second entity]. This may not always be possible, given Oracle's limitation. Use it whenever possible, it makes it easier to identify the physical translation of a logical relationship. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;PRODUCTS_CATEGORIES&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;PROD_CATEGORY_INT&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PRODUCT_CATEGORY_XREF&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #1.3 – Proper use of schemas &lt;/h4&gt;&lt;p&gt;Do not put application prefixes on table names for business data – this tightly couples business data to applications. Business data is a function of the business, not the application. There is always a logical name for business entities. Use schemas for the intended purpose of creating namespaces, to logically group relates entities and avoid naming conflicts. &lt;/p&gt;&lt;p&gt;&lt;em&gt;Do not use a master schema that holds all tables, it is an anti-pattern and defeats the purpose of schemas.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ACCOUNTING.ACCOUNTS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PHONE_BOOK.POINTS_OF_CONTACTS &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ACCOUNTING_ACCOUNT&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ACT_ACCOUNTS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PB_POCS &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;There are other obvious advantages of using schemas for logical grouping. For examples, schema level security policies simplify access control, storage settings can be defined at the schema level. In general, schemas and all objects within schema can be administered using schema-level operations. &lt;/p&gt;&lt;p&gt;Use a separate schema for development and testing, this way your test database can be wiped out or stages for automated unit tests and for testing reports. Use “_DEV” and “_TEST” suffix with the schema name to differentiate. Production schema name should match the logical name; it &lt;strong&gt;should not&lt;/strong&gt; have a suffix. &lt;/p&gt;&lt;h3&gt;&lt;span style="font-size:85%;"&gt;Primary Keys and Foreign Keys&lt;/span&gt; &lt;/h3&gt;&lt;h4&gt;Convention #2.1 – Using numeric primary keys &lt;/h4&gt;&lt;p&gt;Always use auto incremented numeric primary key. For consistency and simplicity, I recommend ‘ID'. It is a noun as defined in English language as a synonym to &lt;em&gt;identity &lt;/em&gt;. Also, some frameworks, such as ActiveRecord, use ID as the default name for primary key. &lt;/p&gt;&lt;p&gt;Use auto increment (sequences) as a general rule, unless you want the application tier to manage the keys. Even the most obvious business keys can change, for example, DUNS number for identifying partners. If and when the business key changes, all the relationships will break. Business keys are pieces of business data that should have unique constraints. &lt;/p&gt;&lt;p&gt;Using numeric IDs makes database indexes more efficient. Strings, for instance, take more space to store than numbers. This space is saved in index storage, the space saving is propagated to all child tables' foreign keys. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ID (INT) AUTO INCREMENT&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CUSTOMER_ID&lt;br /&gt;&lt;/li&gt;&lt;li&gt;TYPE_CODE&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EMAIL_ADDRESS&lt;br /&gt;&lt;/li&gt;&lt;li&gt; SSN&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ISBN&lt;br /&gt;&lt;/li&gt;&lt;li&gt;DUNS &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #2.2 – Using single column keys &lt;/h4&gt;&lt;p&gt;This convention is an extension of 2.1. Avoid concatenated keys at all costs. Concatenated keys complicate indexes and all DML statements. They take more space to store and index. The storage need and SQL complexity multiplies with every child table (the entire multi-column key has to be stored in every child table). Moreover, concatenated keys make object relational mapping complicated and error-prone. Follow this convention in conjunction with 2.1, use single integer primary keys – auto incremented whenever possible. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ID (INT) AUTO INCREMENT&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ORDER_DATE + CUSTOMER_ID&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FIRST_NAME + LAST_4_SSN &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #2.3 – Naming foreign keys &lt;/h4&gt;&lt;p&gt;This may sound like a violation of convention #2.2 and general principle of using logical names. The logic behind this convention is that all relationships can be named as one of the three types of associations:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Entity A belongs to Entity B (child to parent) &lt;/li&gt;&lt;li&gt;Entity A has zero, one or many Entity Bs (parent to child) &lt;/li&gt;&lt;li&gt;Entity A has many and belongs to many Entity Bs (many to many) &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If you use the above listed logical names for foreign key naming, the column name will not tell you which entity it is associating the entity with. This becomes a bigger problem when you have a child table with multiple parents, e.g. an order_items table could have a foreign key to an order and discount type. &lt;/p&gt;&lt;p&gt;ActiveRecord recommends using the following convention: [parent entity name]_ID. The advantage of using this convention is that you can tell the parent entity, direction and type of the association. &lt;/p&gt;&lt;p&gt;There is a downside to this naming convention; the column name does not tell you the nature of the association. For example, an employee can have two circular relationships, “reports to employee” and “mentored by employee.” In these kinds of scenarios, you can either extract the foreign key/keys into an association table, or use the following convention: [nature of association]_[name of parent entity]_ID. &lt;/p&gt;&lt;p&gt;I don't feel strongly about this convention, feel free to adopt any one standard and use it consistently; keep in mind that several Object Relational Mapping can infer the relationship if you follow the ActiveRecord convention of [parent entity name]_ID.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ORDER_ID&lt;br /&gt;&lt;/li&gt;&lt;li&gt;REPORTS_TO_EMPLOYEE_ID&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;FK_ORDER&lt;br /&gt;&lt;/li&gt;&lt;li&gt;ORDER&lt;br /&gt;&lt;/li&gt;&lt;li&gt;REPORTS_TO_EMPLOYEE &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style="font-size:100%;"&gt;Column names&lt;/span&gt; &lt;/h3&gt;&lt;p&gt;Column names should be the logical name of the attribute. A good rule to follow is that the column name should be obvious to the end users; there should be no need to translate the name before it is presented in a report of application. This simple principal will not only add clarity to your database schemas, it will alleviate the need for maintaining application labels (unless your application supports multiple languages). You will also alleviate the need for meta-data for ad hoc reporting tools. &lt;/p&gt;&lt;p&gt;The remaining conventions are an extension and elaboration of this general principal. &lt;/p&gt;&lt;h4&gt;Convention #3.1 – Naming columns &lt;/h4&gt;&lt;p&gt;Underscores serve as a friendly visual delimiter for words. Some databases allow spaces and mixed case in table names but most popular databases suppress this capability by default. For a standard approach that can be applied to all databases, use upper-case table names with underscores to separate words. &lt;/p&gt;&lt;p&gt;Frameworks like ActiveRecord can translate logical column names into object attributes and/or user interface labels using the following rules:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;First letter of each word will be capitalized &lt;/li&gt;&lt;li&gt;Underscore is translated to a space and used as a delimiter for words &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;As an example, a column named “FIRST_NAME” will translate to “First Name” on the user interface. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;FIRST_NAME &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;FIRSTNAME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;F_NAME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FIRST_NM&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #3.2 – Avoid table names in column names &lt;/h4&gt;&lt;p&gt;The table name specifies the context for the columns. Prefixing column names with table name is redundant. If you find a column name to be ambiguous without the table name, you may want to review your data model for normalization.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CUSTOMERS.NAME (Table CUSTOMERS Column NAME) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CUSTOMERS.CUSTOMER_NAME&lt;br /&gt;(Table CUSTOMERS Column CUSTOMER_NAME) &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #3.3 – Avoid data type names in column names &lt;/h4&gt;&lt;p&gt;Column data type is specified by the column definition in the table. Using type identifiers in the column name are redundant. If you are referring to a code, use convention 2.3. For date/time columns, ActiveRecord recommends using the logical proposition form. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;CREATED_ON (Date)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CREATED_AT (Date + time)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;STATUS_ID &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;DATE_CREATED&lt;br /&gt;&lt;/li&gt;&lt;li&gt;CREATE_DATE&lt;br /&gt;&lt;/li&gt;&lt;li&gt;STATUS_CD &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Convention #3.4 – Avoid abbreviations in column names &lt;/h4&gt;&lt;p&gt;Do not use abbreviations that are not universal accepted. A good standard is to avoid all abbreviations except those that are defined in one of the official English Language Dictionaries. For example, abbreviations like SSN and ID are acceptable but DT, NUM and CD are not.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Recommended naming:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ID (for Primary Key Only)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;URL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FIRST_NAME&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LAST_4_DIGITS_OF_SSN &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Not recommended:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;IDENT&lt;br /&gt;&lt;/li&gt;&lt;li&gt;FIRST_NM&lt;br /&gt;&lt;/li&gt;&lt;li&gt;LST_4_SSN &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/8740675-114166297991743142?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/114166297991743142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=114166297991743142' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114166297991743142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/114166297991743142'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2006/03/designing-databases-with-activerecord.html' title='Designing Databases with ActiveRecord Conventions'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-111496469921842124</id><published>2005-05-01T12:18:00.000-04:00</published><updated>2005-05-01T12:24:59.216-04:00</updated><title type='text'>Best media player and jukebox</title><content type='html'>I've finally discovered a media player and jukebox software I can keep. It's called Amarok and it runs on KDE (Linux). Does wonders with large MP3 databases, quick search, grouping, dynamic play lists, CD cover, streaming radio ... even recommendations. &lt;br /&gt;&lt;br /&gt;Great work Amarok team!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-111496469921842124?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://amarok.kde.org/' title='Best media player and jukebox'/><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/111496469921842124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=111496469921842124' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/111496469921842124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/111496469921842124'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2005/05/best-media-player-and-jukebox.html' title='Best media player and jukebox'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-110073960765413133</id><published>2004-11-17T20:00:00.000-05:00</published><updated>2004-11-17T20:18:10.660-05:00</updated><title type='text'>Best P2P tool out there</title><content type='html'>After using eDonkey, eMule, xMule, eMule and Kazaa, I've finally settled with Shareaza. It can handle all your favorite formats and networks, including Gnutella and BitTorrent. Best of all, it's open-source. Check it out at &lt;a href="http://www.shareaza.com/"&gt;Shareaza&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://shareaza.sourceforge.net/img/ico_hm_05.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Here's what to expect:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;No spyware. It is completely clean.&lt;/li&gt;   &lt;li&gt;Excellent skinnable UI that is very easy to use.&lt;/li&gt;   &lt;li&gt;Integrated powerful mediaplayer.&lt;/li&gt;   &lt;li&gt;Great traffic monitoring.&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-110073960765413133?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.shareaza.com' title='Best P2P tool out there'/><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/110073960765413133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=110073960765413133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/110073960765413133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/110073960765413133'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/11/best-p2p-tool-out-there.html' title='Best P2P tool out there'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-110064843053391926</id><published>2004-11-16T18:30:00.000-05:00</published><updated>2004-11-16T18:41:04.846-05:00</updated><title type='text'>Fedora vs Mandrake vs Suse: Linux Distros Compared </title><content type='html'>I found a nice review that compares the top three general purpose Linux distributions. Check out flexbeta's article by &lt;b&gt;&lt;a href="http://www.flexbeta.net/main/member.php?action=profile&amp;amp;id=2"&gt;Gsurface&lt;/a&gt;&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.flexbeta.net/images/linux_comparison/suse_new_hardware_found_thumbnail.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-110064843053391926?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.flexbeta.net/main/printarticle.php?id=70' title='Fedora vs Mandrake vs Suse: Linux Distros Compared '/><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/110064843053391926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=110064843053391926' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/110064843053391926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/110064843053391926'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/11/fedora-vs-mandrake-vs-suse-linux.html' title='Fedora vs Mandrake vs Suse: Linux Distros Compared '/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-110048793820435598</id><published>2004-11-14T22:01:00.000-05:00</published><updated>2004-11-15T14:47:30.136-05:00</updated><title type='text'>See what Linux looks like</title><content type='html'>Want to see what Linux looks like? &lt;a href="http://osdir.com/shots/"&gt;OSdir&lt;/a&gt; is a great site where you can see thousands of screenshots (slideshows) of all the major Linux distros. Explore here first if you are not ready to take the leap of faith in replacing your Windows yet.&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/8740675-110048793820435598?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/110048793820435598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=110048793820435598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/110048793820435598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/110048793820435598'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/11/see-what-linux-looks-like.html' title='See what Linux looks like'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-109943693608556240</id><published>2004-11-02T18:06:00.000-05:00</published><updated>2004-11-02T18:10:38.083-05:00</updated><title type='text'>ValueObjects released</title><content type='html'>My open source ValueObjects Framework has been reviewed by&lt;br /&gt;Oracle and is now part of the standard JDeveloper extensions. The&lt;br /&gt;announcement is on the Oracle JDeveloper product homepage:&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/jdev/index.html"&gt;http://www.oracle.com/technology/products/jdev/index.html&lt;/a&gt;&lt;br /&gt;... and the Extensions Exchange:&lt;br /&gt;&lt;a href="http://www.oracle.com/technology/products/"&gt;http://www.oracle.com/technology/products/&lt;/a&gt; ...&lt;br /&gt;jdev/htdocs/partners/addins/exchange/index.html&lt;br /&gt;&lt;br /&gt;Project homepage: &lt;a href="http://valueobjects.sourceforge.net/"&gt;http://valueobjects.sourceforge.net/&lt;/a&gt;&lt;br /&gt;Project dev site: &lt;a href="http://sourceforge.net/projects/valueobjects"&gt;http://sourceforge.net/projects/valueobjects&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Website credit goes to Sarwat.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-109943693608556240?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/109943693608556240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=109943693608556240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109943693608556240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109943693608556240'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/11/valueobjects-released.html' title='ValueObjects released'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-109815685520637590</id><published>2004-10-18T23:34:00.000-04:00</published><updated>2004-10-25T09:03:39.840-04:00</updated><title type='text'>MP3s making you a Madman</title><content type='html'>Having a tough time managing your MP3 collection. I found a great tool for bringing it all together and still be able to use your favorite media player. It's called Madman, a open-source media manager for KDE. You can find it here: &lt;a href="http://madman.sourceforge.net/"&gt;http://madman.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-109815685520637590?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/109815685520637590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=109815685520637590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109815685520637590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109815685520637590'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/10/mp3s-making-you-madman.html' title='MP3s making you a Madman'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-109788810923667771</id><published>2004-10-15T20:50:00.000-04:00</published><updated>2004-10-18T23:13:12.733-04:00</updated><title type='text'>What's in your PC?</title><content type='html'>I use &lt;a href="http://fedora.redhat.com/"&gt;Fedora Core 2&lt;/a&gt; at home and I love it. It is a clean Linux distribution with all the stable packages and essentials. If you're new to Linux, try &lt;a href="http://www.mandrakesoft.com/"&gt;MandrakeMove&lt;/a&gt; or &lt;a href="http://www.knoppix.org/"&gt;Knoppix&lt;/a&gt;. These LiveCD versions of Linux allow you to pop a CD into your CD-ROM, explore and use Linux without affecting or touching anything on your computer. Pop out the CD and you will be back into whatever commercial operating system you use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-109788810923667771?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/109788810923667771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=109788810923667771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109788810923667771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109788810923667771'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/10/whats-in-your-pc.html' title='What&apos;s in your PC?'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-109788781432801642</id><published>2004-10-15T20:47:00.000-04:00</published><updated>2004-10-15T20:50:14.326-04:00</updated><title type='text'>Have you switched to Firefox yet?</title><content type='html'>Firefox is Mozilla's great new browser. It's slim, it's fast, it's standards-compliant and it looks fantastic. Best of all, it is open-source!&lt;br /&gt;&lt;br /&gt;Time to change &lt;span style="font-style:italic;"&gt;your&lt;/span&gt; default browser.&lt;br /&gt;&lt;br /&gt;Check out &lt;a href="http://www.spreadfirefox.com"&gt;SpreadFirefox&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-109788781432801642?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/109788781432801642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=109788781432801642' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109788781432801642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109788781432801642'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/10/have-you-switched-to-firefox-yet.html' title='Have you switched to Firefox yet?'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8740675.post-109788687205062494</id><published>2004-10-15T20:32:00.000-04:00</published><updated>2004-10-15T20:36:20.343-04:00</updated><title type='text'>ValueObjects</title><content type='html'>I have been busy building the ValueObjects Framework. This project extends Oracle JDeveloer 10g's capabilities for building Service-Oriented Applications and Web Services.&lt;br /&gt;&lt;br /&gt;Check out the project at &lt;a href="http://www.sf.net/projects/valueobjects"&gt;http://www.sf.net/projects/valueobjects&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8740675-109788687205062494?l=zakmandhro.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://zakmandhro.blogspot.com/feeds/109788687205062494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8740675&amp;postID=109788687205062494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109788687205062494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8740675/posts/default/109788687205062494'/><link rel='alternate' type='text/html' href='http://zakmandhro.blogspot.com/2004/10/valueobjects.html' title='ValueObjects'/><author><name>Zak Mandhro</name><uri>http://www.blogger.com/profile/04970915275021504991</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
