<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://raibledesigns.com/roller-ui/styles/rss.xsl" media="screen"?><rss version="2.0" 
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
  <title>Raible Designs</title>
  <link>https://raibledesigns.com/rd/</link>
      <atom:link rel="self" type="application/rss+xml" href="https://raibledesigns.com/rd/feed/entries/rss?cat=%2FOpen+Source" />
    <description>Raible Designs is an Enterprise Open Source Consulting company. We specialize in UI and Full Stack Architectures using HTML5, CSS, JavaScript and Java. We love HTML5, Angular, Bootstrap, Spring Boot, and especially JHipster.</description>
  <language>en-us</language>
  <copyright>Copyright 2026</copyright>
  <lastBuildDate>Thu, 30 Apr 2026 03:43:46 -0600</lastBuildDate>
  <generator>Apache Roller (incubating) 5.0.3 (1388864191739:dave)</generator>
        <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/the_angular_mini_book_3</guid>
    <title>The Angular Mini-Book 3.0 is now available!</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/the_angular_mini_book_3</link>
        <pubDate>Fri, 23 Jun 2023 05:44:05 -0600</pubDate>
    <category>Open Source</category>
    <category>typescript</category>
    <category>infoq</category>
    <category>angular</category>
    <category>springboot</category>
    <category>java</category>
    <category>minibook</category>
            <description>&lt;p&gt;I&apos;m excited to announce that the Angular Mini-Book 3.0 is now available! You can &lt;a href=&quot;https://www.infoq.com/minibooks/angular-mini-book-v3/&quot;&gt;download it in PDF and EPUB formats from InfoQ&lt;/a&gt;.
&lt;p&gt;
&lt;a href=&quot;https://www.infoq.com/minibooks/angular-mini-book-v3/&quot; data-href=&quot;https://www.flickr.com/photos/mraible/51687063929/&quot; title=&quot;Angular Mini-Book Cover&quot;&gt;&lt;img srcset=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 480w, https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 800w&quot; sizes=&quot;(max-width: 600px) 480px, 800px&quot; src=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg&quot; class=&quot;picture&quot; alt=&quot;Angular Mini-Book Cover&quot; style=&quot;border: 1px solid silver&quot;&gt;&lt;/a&gt;
&lt;/a&gt;
&lt;h3&gt;About this book&lt;/h3&gt;
&lt;p&gt;The Angular Mini-Book is a guide to getting started with Angular. You&apos;ll learn how to develop a bare-bones application, test it, and deploy it. Then you&apos;ll move on to adding Bootstrap, Angular Material, continuous integration, authentication, and end-to-end testing with Cypress. &lt;/p&gt;
&lt;p&gt;
Spring Boot is a popular framework for building REST APIs. You&apos;ll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy. What about deploying your Angular app to the cloud? Yep, it covers that too! 
&lt;/p&gt;
&lt;h3&gt;What&apos;s new?&lt;/h3&gt;
&lt;p&gt;This new edition uses Angular 15 and Spring Boot 3.0. Some other fun facts:&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Tech reviewed by Angular expert &lt;a href=&quot;https://alisaduncan.dev/&quot;&gt;Alisa Duncan&lt;/a&gt;. She improved many of the code samples, and I&apos;m grateful for her help. You should &lt;a href=&quot;https://twitter.com/AlisaDuncan&quot;&gt;follow her on Twitter&lt;/a&gt;!
&lt;li&gt;First commit on 3.0 version: Feb 16, 2023 &lt;/li&gt;
&lt;li&gt;Files changed since 2.0: 558&lt;/li&gt;
&lt;li&gt;Build date: June 9, 2023&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You might say this book is outdated on launch. However, I &lt;a href=&quot;https://github.com/mraible/angular-book/pull/587&quot;&gt;created a GitHub Action&lt;/a&gt; to upgrade all the examples to use Angular 16 and Spring Boot 3.1. This action proves all the code should work if you create apps with the latest Angular and Spring Boot versions. &amp;#x1F60A;&lt;/p&gt;
&lt;p&gt;To send us feedback or issues, e-mail InfoQ at feedback@infoq.com, email me at matt@raibledesigns.com, or hit me up on Twitter &lt;a href=&quot;https://twitter.com/mraible&quot;&gt;@mraible&lt;/a&gt;.&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/the_angular_mini_book_2</guid>
    <title>The Angular Mini-Book 2.0 is now available!</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/the_angular_mini_book_2</link>
        <pubDate>Fri, 18 Feb 2022 08:24:39 -0700</pubDate>
    <category>Open Source</category>
    <category>minibook</category>
    <category>angular</category>
    <category>java</category>
    <category>typescript</category>
    <category>infoq</category>
    <category>springboot</category>
            <description>&lt;p&gt;I&apos;m pumped to announce that the Angular Mini-Book 2.0 has been released! You can &lt;a href=&quot;https://www.infoq.com/minibooks/angular-mini-book-v2/&quot;&gt;download it in PDF and EPUB formats from InfoQ&lt;/a&gt;.
&lt;p&gt;
&lt;a href=&quot;https://www.infoq.com/minibooks/angular-mini-book-v2/&quot; data-href=&quot;https://www.flickr.com/photos/mraible/51687063929/&quot; title=&quot;Angular Mini-Book Cover&quot;&gt;&lt;img srcset=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 480w, https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 800w&quot; sizes=&quot;(max-width: 600px) 480px, 800px&quot; src=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg&quot; class=&quot;picture&quot; alt=&quot;Angular Mini-Book Cover&quot; style=&quot;border: 1px solid silver&quot;&gt;&lt;/a&gt;
&lt;/a&gt;
&lt;h3&gt;About this book&lt;/h3&gt;
&lt;p&gt;The Angular Mini-Book is a guide to getting started with Angular. You&apos;ll learn how to develop a bare-bones application, test it, and deploy it. Then you&apos;ll move on to adding Bootstrap, Angular Material, continuous integration, and authentication. &lt;/p&gt;
&lt;p&gt;
Spring Boot is a popular framework for building REST APIs. You&apos;ll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy. What about deploying your Angular app to the cloud? Yep, it covers that too!
&lt;/p&gt;
&lt;h3&gt;What&apos;s new?&lt;/h3&gt;
&lt;p&gt;This new edition (2.0) uses Angular 13 and Spring Boot 2.6. Some other fun facts:&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;First commit on 2.0 version: Nov 19, 2021 { &lt;em&gt;Thanks to &lt;a href=&quot;https://jamesward.com/&quot;&gt;James Ward&lt;/a&gt; for his help upgrading to Knative 1.0!&lt;/em&gt; }&lt;/li&gt;
&lt;li&gt;Upgraded the book&apos;s project to use Gradle 7: Dec 2, 2021 { &lt;em&gt;I appreciate you &lt;a href=&quot;https://twitter.com/Mogztter&quot;&gt;Guillaume Grossetie&lt;/a&gt;!&lt;/em&gt; }&lt;/a&gt;
&lt;li&gt;Upgraded to Angular 13 and Spring Boot 2.6.1: Jan 7, 2022&lt;/li&gt;
&lt;li&gt;Detailed QA of all the code: Jan 27 - &lt;a href=&quot;https://twitter.com/mraible/status/1491856038085251082&quot;&gt;Feb 10, 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Files changed since 1.0: 244&lt;/li&gt;
&lt;li&gt;Build date: Feb 17, 2022&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more information about this book, please read &lt;a href=&quot;https://raibledesigns.com/rd/entry/the_angular_mini_book_1&quot;&gt;my post about its 1.0 release&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;To send us feedback or issues, e-mail InfoQ at feedback@infoq.com, email me at matt@raibledesigns.com, or hit me up on Twitter &lt;a href=&quot;https://twitter.com/mraible&quot;&gt;@mraible&lt;/a&gt;.&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/the_angular_mini_book_1</guid>
    <title>The Angular Mini-Book 1.0 is now available!</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/the_angular_mini_book_1</link>
        <pubDate>Wed, 17 Nov 2021 14:48:40 -0700</pubDate>
    <category>Open Source</category>
    <category>springboot</category>
    <category>java</category>
    <category>minibook</category>
    <category>infoq</category>
    <category>angular</category>
    <category>typescript</category>
    <atom:summary type="html">I&apos;m pleased to announce that the Angular Mini-Book has been released! You can &lt;a href=&quot;http://www.infoq.com/minibooks/angular-mini-book&quot;&gt;download it in PDF and EPUB formats from InfoQ&lt;/a&gt;.
&lt;p&gt;
&lt;a href=&quot;http://www.infoq.com/minibooks/angular-mini-book&quot; data-href=&quot;https://www.flickr.com/photos/mraible/51687063929/&quot; title=&quot;Angular Mini-Book Cover&quot;&gt;&lt;img srcset=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 480w, https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 800w&quot; sizes=&quot;(max-width: 600px) 480px, 800px&quot; src=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg&quot; class=&quot;picture&quot; alt=&quot;Angular Mini-Book Cover&quot; style=&quot;border: 1px solid silver&quot;&gt;&lt;/a&gt;
&lt;/a&gt;
&lt;h3&gt;About this book&lt;/h3&gt;
&lt;p&gt;The Angular Mini-Book is a guide to getting started with Angular. You&apos;ll learn how to develop a bare-bones application, test it, and deploy it. Then you&apos;ll move on to adding Bootstrap, Angular Material, continuous integration, and authentication. Spring Boot is a popular framework for building REST APIs. You&apos;ll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.
&lt;/p&gt;
&lt;p&gt;
This initial edition (v1.0) uses Angular 12 and Spring Boot 2.5. I do plan on updating it for Angular 13 and Spring Boot 2.6. If you have any tips for upgrading, please let me know!&lt;/p&gt;
&lt;h3&gt;Purpose of the book&lt;/h3&gt;
&lt;p&gt;I think building web and mobile applications with Angular, Bootstrap, and Spring Boot is a great experience. I&apos;d like to encourage more developers to try it.&lt;/p&gt;
&lt;h3&gt;Thanks!&lt;/h3&gt;
&lt;p&gt;I&apos;m incredibly grateful to Trish, Abbie, and Jack. They put up with my late nights and extended screen time while I worked on this book.
&lt;/p&gt;</atom:summary>        <description>I&apos;m pleased to announce that the Angular Mini-Book has been released! You can &lt;a href=&quot;http://www.infoq.com/minibooks/angular-mini-book&quot;&gt;download it in PDF and EPUB formats from InfoQ&lt;/a&gt;.
&lt;p&gt;
&lt;a href=&quot;http://www.infoq.com/minibooks/angular-mini-book&quot; data-href=&quot;https://www.flickr.com/photos/mraible/51687063929/&quot; title=&quot;Angular Mini-Book Cover&quot;&gt;&lt;img srcset=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 480w, https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg 800w&quot; sizes=&quot;(max-width: 600px) 480px, 800px&quot; src=&quot;https://live.staticflickr.com/65535/51687063929_f89f0e0f71_n.jpg&quot; class=&quot;picture&quot; alt=&quot;Angular Mini-Book Cover&quot; style=&quot;border: 1px solid silver&quot;&gt;&lt;/a&gt;
&lt;/a&gt;
&lt;h3&gt;About this book&lt;/h3&gt;
&lt;p&gt;The Angular Mini-Book is a guide to getting started with Angular. You&apos;ll learn how to develop a bare-bones application, test it, and deploy it. Then you&apos;ll move on to adding Bootstrap, Angular Material, continuous integration, and authentication. Spring Boot is a popular framework for building REST APIs. You&apos;ll learn how to integrate Angular with Spring Boot and use security best practices like HTTPS and a content security policy.
&lt;/p&gt;
&lt;p&gt;
This initial edition (v1.0) uses Angular 12 and Spring Boot 2.5. I do plan on updating it for Angular 13 and Spring Boot 2.6. If you have any tips for upgrading, please let me know!&lt;/p&gt;
&lt;h3&gt;Purpose of the book&lt;/h3&gt;
&lt;p&gt;I think building web and mobile applications with Angular, Bootstrap, and Spring Boot is a great experience. I&apos;d like to encourage more developers to try it.&lt;/p&gt;
&lt;h3&gt;Thanks!&lt;/h3&gt;
&lt;p&gt;I&apos;m incredibly grateful to Trish, Abbie, and Jack. They put up with my late nights and extended screen time while I worked on this book.
&lt;/p&gt;
&lt;p&gt;
To &lt;a href=&quot;https://twitter.com/mhevery&quot;&gt;Mi&#353;ko Hevery&lt;/a&gt;, thank you for inventing Angular and changing the lives of frontend developers. To the whole Angular team, I appreciate you and all you do for the community. Kudos for making our apps faster with every release!
&lt;/p&gt;
&lt;p&gt;
To &lt;a href=&quot;https://twitter.com/phillip_webb&quot;&gt;Phil Webb&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/david_syer&quot;&gt;Dave Syer&lt;/a&gt;, thanks for creating Spring Boot and simplifying Java for everyone. Hats off to the whole Spring team for their tireless dedication to quality open source projects.
&lt;/p&gt;
&lt;p&gt;
I want to thank this book&apos;s tech editor, &lt;a href=&quot;https://twitter.com/deepu105&quot;&gt;Deepu K Sasidharan&lt;/a&gt;. I looked to him for his deep experience with both TypeScript and JavaScript. Many sections are more streamlined because of his advice.
&lt;/p&gt;
&lt;p&gt;
This book&apos;s copy editor, Maureen Spencer, helped correct my grammar and make this book easier on the eyes. I&apos;m thankful for your help, Maureen.
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/reverentgeek&quot;&gt;David Neal&lt;/a&gt; created the cover image and all of the illustrations. He&apos;s awesome! You should consider &lt;a href=&quot;https://reverentgeek.com/shop/&quot;&gt;buying his stuff&lt;/a&gt; and follow him for his dad jokes.
&lt;p&gt;
Finally, my compliments to you, potential reader. It&apos;s a heckuva time to be writing code. Enjoy your learning adventures! &amp;#x1F603;
&lt;/p&gt;
&lt;h3&gt;Fun facts&lt;/h3&gt;
&lt;p&gt;Creating this book was more difficult than I imagined. As you can see from the timeline below, I didn&apos;t do a whole lot in 2020. I ramped things up this spring and tried to get &apos;er done before Angular 13 and Spring Boot 2.6 were released. At the very least, I succeeded on the second goal, even if only by a couple days.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First commit: June 25, 2020&lt;/li&gt;
&lt;li&gt;Outline created: September 15, 2020&lt;/li&gt;
&lt;li&gt;Started writing: October 3, 2020&lt;/li&gt;
&lt;li&gt;Upgraded to Angular 12 and Spring Boot 2.4.1: May 4, 2021&lt;/li&gt;
&lt;li&gt;Finished first draft: June 30, 2021&lt;/li&gt;
&lt;li&gt;Build date: November 16, 2021&lt;/li&gt;
&lt;li&gt;Total commits: 108&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This book was authored with &lt;a href=&quot;https://asciidoctor.org/&quot;&gt;Asciidoctor&lt;/a&gt; and I appreciate the assistance I received from &lt;a href=&quot;https://twitter.com/Mogztter&quot;&gt;Guillaume Grossetie&lt;/a&gt;.
&lt;p&gt;The source code repo contains all the demos in addition to the book&apos;s code. The &lt;a href=&quot;https://github.com/AlDanial/cloc&quot;&gt;Count Lines of Code&lt;/a&gt; report (excluding generated files and directories) shows that it&apos;s mostly words, followed by example code:&lt;/p&gt;
&lt;pre&gt;
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
AsciiDoc                         14           1651             20           5312
HTML                             38            211              0           2349
TypeScript                       86            322            299           2057
JSON                             27              0              0           1346
CSS                              11            265            250           1288
YAML                             10              8             89            654
Kotlin                           18             87              4            499
JavaScript                       12             35             48            355
Gradle                            6             43              4            227
Bourne Shell                      2             50            144            225
&lt;/pre&gt;
&lt;p&gt;I&apos;m proud to have built the v1.0 version of the book on my parent&apos;s 49th anniversary. Happy Anniversary Mom and Dad!! &amp;#x1F973;&lt;/p&gt;
&lt;p&gt;To send us feedback or issues, e-mail InfoQ at feedback@infoq.com, email me at matt@raibledesigns.com, or hit me up on Twitter &lt;a href=&quot;https://twitter.com/mraible&quot;&gt;@mraible&lt;/a&gt;.&lt;/p&gt;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/announcing_angular_crud_2_0</guid>
    <title>Announcing Angular CRUD 2.0</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/announcing_angular_crud_2_0</link>
        <pubDate>Mon, 27 Sep 2021 16:29:15 -0600</pubDate>
    <category>Open Source</category>
    <category>opensource</category>
    <category>crud</category>
    <category>angular</category>
    <atom:summary type="html">&lt;p&gt;Friends shouldn&apos;t let friends write CRUD apps. At least, not by hand. That&apos;s why I used a schematic called Angular CRUD in one of my last &lt;a href=&quot;https://developer.okta.com/blog/2020/01/06/crud-angular-9-spring-boot-2&quot;&gt;Angular + Spring Boot blog posts&lt;/a&gt;.  That post is kinda old (January 2020), but the combination of Angular and Spring Boot remains popular. That&apos;s why I decided to turn the series into an Angular Mini-Book for InfoQ.&lt;/p&gt;
&lt;p&gt;The book has five different sections:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build an Angular App&lt;/li&gt;
&lt;li&gt;Integrate Angular with Spring Boot&lt;/li&gt;
&lt;li&gt;Beautiful Angular Apps with Bootstrap&lt;/li&gt;
&lt;li&gt;Angular Deployment&lt;/li&gt;
&lt;li&gt;Angular and Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
My goal with the book is to show you everything you need to get your Angular + Spring Boot app to production. But, what about &lt;a href=&quot;https://jhipster.tech&quot;&gt;JHipster&lt;/a&gt;? &lt;/p&gt;
&lt;p&gt;
Of course, you can just use JHipster, but I&apos;ve found that a lot of beginners are intimidated by all the code it generates. That&apos;s why I wanted to create a bare-bones Angular guide that uses Spring Boot for its API.
&lt;/p&gt;
&lt;p&gt;
I published the news on Twitter at the end of June.
&lt;/p&gt;
&lt;div style=&quot;margin: 0 auto; max-width: 600px&quot;&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I&amp;#39;m happy to announce that I&amp;#39;ve finished the first draft of the &lt;a href=&quot;https://twitter.com/angular?ref_src=twsrc%5Etfw&quot;&gt;@Angular&lt;/a&gt; Mini-Book! After the editing process, you&amp;#39;ll be able to find it at a local &lt;a href=&quot;https://twitter.com/InfoQ?ref_src=twsrc%5Etfw&quot;&gt;@InfoQ&lt;/a&gt; website.&lt;br&gt;&lt;br&gt;Hopefully, they&amp;#39;ll create a better cover for it. &amp;#x1F605; &lt;a href=&quot;https://twitter.com/hashtag/angular?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#angular&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/springboot?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#springboot&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/asciidoctor?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#asciidoctor&lt;/a&gt; &lt;a href=&quot;https://t.co/el20GCS24s&quot;&gt;pic.twitter.com/el20GCS24s&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Raible (@mraible) &lt;a href=&quot;https://twitter.com/mraible/status/1410413147765325826?ref_src=twsrc%5Etfw&quot;&gt;July 1, 2021&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;
As part of creating the book, I updated &lt;a href=&quot;https://twitter.com/ManfredSteyer&quot;&gt;Manfred Styer&apos;s&lt;/a&gt; &lt;a href=&quot;https://github.com/manfredsteyer/angular-crud&quot;&gt;Angular CRUD&lt;/a&gt; project and released &lt;a href=&quot;https://github.com/manfredsteyer/angular-crud/releases/tag/v2.0.0&quot;&gt;v2.0&lt;/a&gt;. The 2.0 release adds support for Bootstrap and Angular Material for CSS framework aficionados, like me. 
&lt;/p&gt;</atom:summary>        <description>&lt;p&gt;Friends shouldn&apos;t let friends write CRUD apps. At least, not by hand. That&apos;s why I used a schematic called Angular CRUD in one of my last &lt;a href=&quot;https://developer.okta.com/blog/2020/01/06/crud-angular-9-spring-boot-2&quot;&gt;Angular + Spring Boot blog posts&lt;/a&gt;.  That post is kinda old (January 2020), but the combination of Angular and Spring Boot remains popular. That&apos;s why I decided to turn the series into an Angular Mini-Book for InfoQ.&lt;/p&gt;
&lt;p&gt;The book has five different sections:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build an Angular App&lt;/li&gt;
&lt;li&gt;Integrate Angular with Spring Boot&lt;/li&gt;
&lt;li&gt;Beautiful Angular Apps with Bootstrap&lt;/li&gt;
&lt;li&gt;Angular Deployment&lt;/li&gt;
&lt;li&gt;Angular and Docker&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
My goal with the book is to show you everything you need to get your Angular + Spring Boot app to production. But, what about &lt;a href=&quot;https://jhipster.tech&quot;&gt;JHipster&lt;/a&gt;? &lt;/p&gt;
&lt;p&gt;
Of course, you can just use JHipster, but I&apos;ve found that a lot of beginners are intimidated by all the code it generates. That&apos;s why I wanted to create a bare-bones Angular guide that uses Spring Boot for its API.
&lt;/p&gt;
&lt;p&gt;
I published the news on Twitter at the end of June.
&lt;/p&gt;
&lt;div style=&quot;margin: 0 auto; max-width: 600px&quot;&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I&amp;#39;m happy to announce that I&amp;#39;ve finished the first draft of the &lt;a href=&quot;https://twitter.com/angular?ref_src=twsrc%5Etfw&quot;&gt;@Angular&lt;/a&gt; Mini-Book! After the editing process, you&amp;#39;ll be able to find it at a local &lt;a href=&quot;https://twitter.com/InfoQ?ref_src=twsrc%5Etfw&quot;&gt;@InfoQ&lt;/a&gt; website.&lt;br&gt;&lt;br&gt;Hopefully, they&amp;#39;ll create a better cover for it. &amp;#x1F605; &lt;a href=&quot;https://twitter.com/hashtag/angular?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#angular&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/springboot?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#springboot&lt;/a&gt; &lt;a href=&quot;https://twitter.com/hashtag/asciidoctor?src=hash&amp;amp;ref_src=twsrc%5Etfw&quot;&gt;#asciidoctor&lt;/a&gt; &lt;a href=&quot;https://t.co/el20GCS24s&quot;&gt;pic.twitter.com/el20GCS24s&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Raible (@mraible) &lt;a href=&quot;https://twitter.com/mraible/status/1410413147765325826?ref_src=twsrc%5Etfw&quot;&gt;July 1, 2021&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;p&gt;
As part of creating the book, I updated &lt;a href=&quot;https://twitter.com/ManfredSteyer&quot;&gt;Manfred Styer&apos;s&lt;/a&gt; &lt;a href=&quot;https://github.com/manfredsteyer/angular-crud&quot;&gt;Angular CRUD&lt;/a&gt; project and released &lt;a href=&quot;https://github.com/manfredsteyer/angular-crud/releases/tag/v2.0.0&quot;&gt;v2.0&lt;/a&gt;. The 2.0 release adds support for Bootstrap and Angular Material for CSS framework aficionados, like me. 
&lt;/p&gt;
&lt;p&gt;
You can see the &lt;a href=&quot;https://github.com/manfredsteyer/angular-crud#tutorial-getting-started&quot;&gt;getting started tutorial&lt;/a&gt; for how to use it in your projects. To inspire you, I&apos;ve included some screenshots of the new Bootstrap and Angular Material support.
&lt;/p&gt;
&lt;h3&gt;Angular CRUD + Bootstrap&lt;/h3&gt;
&lt;table style=&quot;width: 100%; margin-bottom: 20px&quot;&gt;
&lt;tr&gt;
  &lt;td style=&quot;vertical-align: top&quot;&gt;&lt;a href=&quot;https://imgur.com/8KICSze.png&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/70cef827ab68234b0cf51046eacf6d9f8c1b2699b878a5428328eeb70c7052e4/68747470733a2f2f696d6775722e636f6d2f384b4943537a652e706e67&quot; alt=&quot;Bootstrap List&quot; data-canonical-src=&quot;https://imgur.com/8KICSze.png&quot; style=&quot;max-width: 100%;&quot;&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;td style=&quot;vertical-align: top&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/40fec5afdc6e795f15eec13e5fb15c9a3e089a644ecaa8e06ca60734aa6b8297/68747470733a2f2f696d6775722e636f6d2f5658446f5562422e706e67&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/40fec5afdc6e795f15eec13e5fb15c9a3e089a644ecaa8e06ca60734aa6b8297/68747470733a2f2f696d6775722e636f6d2f5658446f5562422e706e67&quot; alt=&quot;Bootstrap Detail View&quot; data-canonical-src=&quot;https://imgur.com/VXDoUbB.png&quot; style=&quot;max-width: 100%;&quot;&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Angular CRUD + Angular Material&lt;/h3&gt;
&lt;p&gt;This theme is based on &lt;a href=&quot;https://zoaibkhan.com/blog/create-a-responsive-sidebar-menu-with-angular-material/&quot;&gt;Create a responsive sidebar menu with Angular Material&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/zoaibdev&quot;&gt;Zoaib Khan&lt;/a&gt;.
&lt;table style=&quot;width: 100%; margin-bottom: 20px&quot;&gt;
&lt;tr&gt;
  &lt;td style=&quot;vertical-align: top&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/a69145407e91ac02664c2f40782a7a3f7f517d2a0829a4d9e18eae90723cb9eb/68747470733a2f2f696d6775722e636f6d2f663466554543452e706e67&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/a69145407e91ac02664c2f40782a7a3f7f517d2a0829a4d9e18eae90723cb9eb/68747470733a2f2f696d6775722e636f6d2f663466554543452e706e67&quot; alt=&quot;Angular Material List&quot; data-canonical-src=&quot;https://imgur.com/f4fUECE.png&quot; style=&quot;max-width: 100%;&quot;&gt;&lt;/a&gt;&lt;/td&gt;
  &lt;td style=&quot;vertical-align: top&quot;&gt;&lt;a href=&quot;https://camo.githubusercontent.com/754ee14d548dab0c2a7eb3840a128b5e1a42fb0578d36c61387cb76914e53e14/68747470733a2f2f696d6775722e636f6d2f56547669754d532e706e67&quot;&gt;&lt;img src=&quot;https://camo.githubusercontent.com/754ee14d548dab0c2a7eb3840a128b5e1a42fb0578d36c61387cb76914e53e14/68747470733a2f2f696d6775722e636f6d2f56547669754d532e706e67&quot; alt=&quot;Angular Material Detail View&quot; data-canonical-src=&quot;https://imgur.com/VTviuMS.png&quot; style=&quot;max-width: 100%;&quot;&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;h3&gt;Introduction to Angular CRUD Video&lt;/h3&gt;
&lt;p&gt;
I also published an &lt;a href=&quot;https://youtu.be/3mqWrmZtefE&quot;&gt;Introduction to Angular CRUD video&lt;/a&gt; that shows how it works.
&lt;/p&gt;
&lt;div style=&quot;text-align: center&quot;&gt;
&lt;iframe width=&quot;700&quot; height=&quot;394&quot; style=&quot;max-width: 100%&quot; src=&quot;https://www.youtube.com/embed/3mqWrmZtefE&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;
You might ask, &quot;When will the Angular Mini-Book be published?&quot;
&lt;/p&gt;
&lt;p&gt;
We&apos;re about halfway through tech editing. I hope to finish that in the next month, pass it on to copy editing, and publish before the end of the year.&lt;/p&gt;
&lt;p&gt;Keep an eye on &lt;a href=&quot;https://www.infoq.com/minibooks/&quot;&gt;InfoQ&apos;s Mini-Books&lt;/a&gt; and follow me &lt;a href=&quot;https://twitter.com/mraible&quot;&gt;@mraible&lt;/a&gt; on Twitter for updates. 
&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/life_as_an_open_source1</guid>
    <title>Life as an Open Source Developer, One Year Later</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/life_as_an_open_source1</link>
        <pubDate>Mon, 6 Nov 2017 08:33:17 -0700</pubDate>
    <category>Open Source</category>
    <category>java</category>
    <category>jhipster</category>
    <category>opensource</category>
    <category>github</category>
    <category>okta</category>
    <category>springboot</category>
            <description>&lt;p&gt;It&apos;s been a little over a year since I wrote about &lt;a href=&quot;//raibledesigns.com/rd/entry/life_as_an_open_source&quot;&gt;life as an open source developer&lt;/a&gt;. I&apos;m happy to say I &lt;em&gt;still&lt;/em&gt; haven&apos;t written a single line of proprietary code. Of course, things have changed a lot in the last year. I thought going full-time would bring stability to my career. Instead, six months into it &lt;a href=&quot;https://www.okta.com/blog/2017/03/stormpath-welcome-to-Okta/&quot;&gt;we joined forces with Okta&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;The transition was rough at first. At Stormpath, we had full-featured SDKs and a great relationship with developers that used our service. We were able to port many of our SDKs to work with Okta, but we discovered that Okta didn&apos;t have a great relationship with developers. In fact, their developer blog hadn&apos;t been updated in over a year when we arrived.
&lt;/p&gt;
&lt;p&gt;On the upside, Okta&apos;s API supported standards like SAML, OAuth, and OpenID Connect. Open standards made it possible to use other frameworks and not have to rely on our own. I was pumped to find that &lt;a href=&quot;https://github.com/spring-projects/spring-security&quot;&gt;Spring Security&lt;/a&gt; made it easy to integrate with &lt;a href=&quot;https://developer.okta.com/blog/2017/03/16/spring-boot-saml&quot;&gt;SAML&lt;/a&gt; and &lt;a href=&quot;https://developer.okta.com/blog/2017/03/21/spring-boot-oauth&quot;&gt;OAuth&lt;/a&gt;. In fact, I was able to leverage these standards to &lt;a href=&quot;https://developer.okta.com/blog/2017/10/20/oidc-with-jhipster&quot;&gt;add OIDC support to JHipster&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Okta&apos;s &lt;a href=&quot;https://developer.okta.com/blog/2017/09/25/all-new-developer-console&quot;&gt;new developer console&lt;/a&gt; and &lt;a href=&quot;https://developer.okta.com/pricing/&quot;&gt;open pricing&lt;/a&gt; are just a couple examples of improved happenings since we arrived. The &lt;a href=&quot;https://github.com/okta/okta-spring-boot&quot;&gt;Okta Spring Boot Starter&lt;/a&gt; and &lt;a href=&quot;https://github.com/okta/okta-oidc-js&quot;&gt;JavaScript libraries for Node.js, Angular, and React&lt;/a&gt; are also pretty awesome.
&lt;/p&gt;
&lt;p&gt;I&apos;m happy to say my contributions on GitHub almost doubled in the last year!
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;https://github.com/mraible&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4509/24348308388_fc2c35d111_z.jpg&quot; width=&quot;640&quot; alt=&quot;GitHub Contributions 2017&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;As far as stress is concerned, that hasn&apos;t changed much. I&apos;ve learned that the stress I feel from work is still causing me to have high blood pressure. When I measure it in the mornings, or at night, it&apos;s fine. When I measure it during the day, it&apos;s elevated. I believe my high blood pressure is caused by doing too much. Sure, it&apos;s great to be productive and accomplish a lot for my company, but it&apos;s killing me.
&lt;/p&gt;
&lt;p&gt;Therein lies the rub. I get to create my job. All I&apos;m asked to do is write a blog post per week and speak at a conference (or meetup) once a month. Yet I&apos;m doing &lt;em&gt;way&lt;/em&gt; more than that. Since this time last year, I&apos;ve delivered 33 presentations, in 13 different cities. I keep a page on this blog updated with &lt;a href=&quot;//raibledesigns.com/rd/page/publications&quot;&gt;all my presentations&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;  
Next year, I still plan to speak a lot, but I plan on toning things down a bit. I&apos;ll be concentrating on US cities, with large Java user groups, and I&apos;ll be limiting my travel overseas. &lt;/p&gt;
&lt;p&gt;
  &lt;a data-href=&quot;https://www.flickr.com/photos/mraible/37491517464/&quot; rel=&quot;lightbox[ossdev1year]&quot; href=&quot;https://farm5.staticflickr.com/4547/37491517464_14d37e8eda_c.jpg&quot; title=&quot;Matt the Hipster&quot;&gt;&lt;img src=&quot;https://farm5.staticflickr.com/4547/37491517464_14d37e8eda_q.jpg&quot; width=&quot;150&quot; class=&quot;picture&quot; alt=&quot;Matt the Hipster&quot; style=&quot;border: 1px solid black&quot;&gt;&lt;/a&gt;
  Outside of my health concerns, I&apos;m still loving my job. The fact that I get paid to speak at great conferences, write example applications, and discover new ways to do things is awesome. It&apos;s also pretty sweet that I was able to &lt;a href=&quot;//raibledesigns.com/rd/entry/the_jhipster_mini_book_v4&quot;&gt;update the JHipster Mini-Book&lt;/a&gt; and &lt;a href=&quot;http://www.jhipster-book.com/#!/news/entry/upgrading-21-points-health-from-v1-to-v4&quot;&gt;upgrade 21-Points Health&lt;/a&gt; during work hours. The fact that I got &lt;a href=&quot;https://www.okta.com/blog/2017/09/developer-dna-a-day-in-the-life-of-matt-raible/&quot;&gt;featured on the main Okta blog&lt;/a&gt; was pretty cool too.
&lt;/p&gt;
&lt;p&gt;The good news is my overseas travel isn&apos;t done this year. Today, I leave for &lt;a href=&quot;http://devoxx.be/&quot;&gt;Devoxx Belgium&lt;/a&gt;, one of my favorite conferences. It&apos;ll be my first time in Antwerp without Trish. However, I&apos;m speaking with friends &lt;a href=&quot;https://twitter.com/starbuxman&quot;&gt;Josh Long&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/deepu105&quot;&gt;Deepu Sasidharan&lt;/a&gt;, so it&apos;s sure to be a good time. Traveling to &lt;a href=&quot;https://devoxx.ma/&quot;&gt;Devoxx Morocco&lt;/a&gt; should be fun too. I&apos;ve never been to Casablanca before.&lt;/p&gt;
&lt;p&gt;In December, you can catch me at &lt;a href=&quot;https://springoneplatform.io/speakers/matt-raible&quot;&gt;SpringOne&lt;/a&gt; and &lt;a href=&quot;https://therichwebexperience.com/conference/clearwater/2017/12/speakers/matt_raible&quot;&gt;The Rich Web Experience&lt;/a&gt;. Next year, I&apos;ll be speaking at &lt;a href=&quot;https://www.meetup.com/DenverMicroservices/events/244459192/&quot;&gt;Denver Microservices meetup&lt;/a&gt;, &lt;a href=&quot;http://ujug.org/event/matt-raible/&quot;&gt;Utah JUG&lt;/a&gt;, &lt;a href=&quot;https://www.meetup.com/seajug/&quot;&gt;Seattle JUG&lt;/a&gt;, and &lt;a href=&quot;http://jazzcon.tech/&quot;&gt;JazzCon&lt;/a&gt;. I plan to do a JUG tour in the northeast US too.
&lt;/p&gt;
&lt;p&gt;You might&apos;ve noticed I don&apos;t write a lot of technical content here anymore. That&apos;s because I&apos;m doing most of my writing on &lt;a href=&quot;https://developer.okta.com/blog/&quot;&gt;developer.okta.com/blog&lt;/a&gt;. I&apos;m still writing for &lt;a href=&quot;https://www.infoq.com&quot;&gt;InfoQ&lt;/a&gt; as well. I really enjoyed attending the JavaOne keynotes and writing up what I saw.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2017/10/javaone-opening&quot;&gt;Oracle Announced Plans to Open Source All Features of Their JDK and Address Shortcomings in Java EE&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2017/10/javaone-keynote&quot;&gt;JavaOne Keynote: Oracle Talks Blockchain, Bots and Serverless&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2017/10/javaone-community-keynote&quot;&gt;JavaOne Keynote: IBM on OpenJ9 and Open Liberty; Java Community in The Matrix&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ll leave you with this, a project I&apos;m working on actively and plan to finish before Devoxx Morocco.&lt;/p&gt;
&lt;div style=&quot;max-width: 500px; margin: 0 auto&quot;&gt;
  &lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Had a good hacking session today w/ &lt;a href=&quot;https://twitter.com/java_hipster?ref_src=twsrc%5Etfw&quot;&gt;@java_hipster&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://twitter.com/Ionicframework?ref_src=twsrc%5Etfw&quot;&gt;@Ionicframework&lt;/a&gt;. Creating a JHipster-enabled Ionic client works! &lt;a href=&quot;https://t.co/5biHQDO941&quot;&gt;https://t.co/5biHQDO941&lt;/a&gt;&lt;/p&gt;&amp;mdash; Matt Raible (@mraible) &lt;a href=&quot;https://twitter.com/mraible/status/926251064843583488?ref_src=twsrc%5Etfw&quot;&gt;November 3, 2017&lt;/a&gt;&lt;/blockquote&gt;
  &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;/div&gt;

&lt;p&gt;Viva la Open Source!&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/life_as_an_open_source</guid>
    <title>Life as an Open Source Developer</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/life_as_an_open_source</link>
        <pubDate>Thu, 3 Nov 2016 16:29:01 -0600</pubDate>
    <category>Open Source</category>
    <category>angularjs</category>
    <category>angular2</category>
    <category>opensource</category>
    <category>javascript</category>
    <category>stormpath</category>
    <category>springboot</category>
    <category>jhipster</category>
    <category>java</category>
    <category>github</category>
            <description>&lt;p&gt;
It&apos;s been a little over a month since I started my &lt;a href=&quot;https://raibledesigns.com/rd/entry/life_update_a_summer_to&quot;&gt;
new gig at Stormpath&lt;/a&gt;. I gotta say, life is great as an open source developer! Yes, I did start working for them as a consultant in April, so it&apos;s not a huge change for me.
However, I only recently realized I haven&apos;t written a &lt;em&gt;single line&lt;/em&gt; of proprietary code the entire time.
My &lt;a href=&quot;https://github.com/mraible&quot;&gt;GitHub contributions&lt;/a&gt; look pretty good this year. They&apos;re nothing like &lt;a href=&quot;https://github.com/mojavelinux&quot;&gt;@mojavelinux&lt;/a&gt;, 
or &lt;a href=&quot;https://github.com/dsyer&quot;&gt;@dsyer&lt;/a&gt;, but I&apos;ll get there. &lt;img src=&quot;//raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;)&quot; title=&quot;;)&quot;&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
    &lt;a href=&quot;https://github.com/mraible&quot; title=&quot;GitHub Profile - November 3, 2016&quot;&gt;
    &lt;img src=&quot;https://c7.staticflickr.com/6/5703/30128917414_8e7c7a8e57_z.jpg&quot; width=&quot;640&quot; alt=&quot;GitHub Profile - November 3, 2016&quot;&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;It&apos;s also been a bit more stress than I&apos;m used to. I think this comes from a couple things: 1) turning my hobby into my job and 2)
    I&apos;ve set a lot of high expectations for myself. As a developer evangelist, I get to create my own job. That means I can
    speak at the conferences I want to, write the code I want to, create the blog posts I want to, and everything else in between.
&lt;/p&gt;
&lt;p&gt;At the end of September, I finished &lt;a href=&quot;http://www.jhipster-book.com/#!/news/entry/book-updated-for-jhipster-3-and-jhipster-gets-dirty&quot;&gt;updating the 
JHipster Mini-Book for JHipster 3.x&lt;/a&gt;. It&apos;s gone through tech editing and it&apos;s being copy-edited right now. I hope to release it within a week. 
&lt;/p&gt;
&lt;p&gt;In early October, I said I&apos;d commit to writing one blog post per week, develop a JHipster module for Stormpath, and help get their 
    Angular 2 support good enough for an alpha release. I&apos;m happy to report I&apos;ve been able to accomplish most of these and I hope to show off
    our Angular 2 support soon.&lt;/p&gt;
&lt;p&gt;
I then channeled my efforts into integrating Stormpath&apos;s Java SDK with their AngularJS directives. You can read about how I did that in
&lt;a href=&quot;https://stormpath.com/blog/angularjs-spring-boot-tutorial&quot;&gt;Get Started with AngularJS, Spring Boot, and Stormpath&lt;/a&gt;.
Unlike &lt;a href=&quot;https://raibledesigns.com/rd/entry/getting_started_with_angularjs&quot;&gt;my previous AngularJS tutorial&lt;/a&gt;, this one connects to a 
backend and shows how to communicate with Spring Boot cross-domain.
&lt;/p&gt;
&lt;p&gt;If you like to read code more than words, you can look at the &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example&quot;&gt;example project&apos;s commits
on GitHub&lt;/a&gt;.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create an AngularJS UI: &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example/commit/652ee29d9a002f5d437d356481809fe74114fe7e&quot;&gt;search&lt;/a&gt; and &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example/commit/9a06e9071d5db9710c3a8555c0dfe81c752f2242&quot;&gt;edit&lt;/a&gt; features&lt;/li&gt;
&lt;li&gt;Create a Spring Boot app with Stormpath: &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example/commit/740ed84ccb16c94bfb6451c453c325b7f86fa870&quot;&gt;app from start.stormpath.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Develop an API to CRUD people with Spring Data REST: &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example/commit/f223f26dba108e864cec271b32b856423bc12d74&quot;&gt;/api/people&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Integrate AngularJS and Spring Boot apps: &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example/commit/88f43da9fc14bb59e6d1b7f36f658730029b4bd7&quot;&gt;cross-domain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Integrate Stormpath into AngularJS for login, registration and forgot password: &lt;a href=&quot;https://github.com/stormpath/angularjs-spring-boot-stormpath-example/commit/2eee2b677237f793bf4ff25b6705d9c72efc984d&quot;&gt;Stormpath Angular SDK&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Last week, I released a &lt;a href=&quot;https://jhipster.github.io/modules/marketplace/#/details/generator-jhipster-stormpath&quot;&gt;JHipster module
 that integrates Stormpath&lt;/a&gt;. This exercise was good because I was able to identify some gaps in Stormpath&apos;s SDKs &lt;em&gt;and&lt;/em&gt; fix them.
Getting something to work made me feel good; having the ability to improve the developer experience
was even better! Of course, &lt;a href=&quot;https://stormpath.com/blog/stormpath-jhipster-application&quot;&gt;I blogged about what I learned&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
This week, I edited and code reviewed some posts from Karl Penzhorn on &lt;a href=&quot;https://stormpath.com/blog/crud-application-react-spring-boot-user-authentication&quot;&gt;
React with Spring Boot&lt;/a&gt; and using &lt;a href=&quot;https://stormpath.com/blog/optimize-react-webpack&quot;&gt;webpack with React&lt;/a&gt;. I also got to &lt;a href=&quot;https://github.com/mattlewis92/generator-angular-library/issues/14&quot;&gt;
bang my head against the wall&lt;/a&gt; writing Angular 2 tests. If you&apos;re writing a module for Angular 2, &lt;a href=&quot;https://www.npmjs.com/package/generator-angular2-module&quot;&gt;
generator-angular2-module&lt;/a&gt; provides a nice starting point.&lt;/p&gt;
&lt;p&gt;Last, but certainly not least, I&apos;ll be speaking at a few events about Microservices, JHipster, Angular 2 and Stormpath in the near feature. &lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://nofluffjuststuff.com/conference/denver/2016/11/session?id=38028&quot;&gt;Rocky Mountain Software Symposium&lt;/a&gt;, November 19&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://therichwebexperience.com/conference/clearwater/2016/12/speakers/matt_raible&quot;&gt;The Rich Web Experience&lt;/a&gt;, December 9&lt;/li&gt;
    &lt;li&gt;A joint talk at &lt;a href=&quot;http://www.meetup.com/DenverJavaUsersGroup/events/231602438/&quot;&gt;Denver JUG&lt;/a&gt; with the infamous &lt;a href=&quot;https://twitter.com/starbuxman&quot;&gt;Josh Long&lt;/a&gt;, December 14&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have any questions about developer evangelism, the technologies I mentioned in this post, or Stormpath, please let me know. Otherwise, I hope to see you on the road soon!
    &lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/re_customizing_an_asciidoctor_pdf</guid>
    <title>RE: Customizing an Asciidoctor PDF so it looks like an InfoQ Mini-Book</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/re_customizing_an_asciidoctor_pdf</link>
        <pubDate>Wed, 28 Oct 2015 10:41:38 -0600</pubDate>
    <category>Open Source</category>
    <category>infoq</category>
    <category>mini-book</category>
    <category>pdf</category>
    <category>jhipster</category>
    <category>asciidoctor</category>
            <description>&lt;p&gt;Last week, I wrote about &lt;a href=&quot;//raibledesigns.com/rd/entry/customizing_an_asciidoctor_pdf_so&quot;&gt;customizing an Asciidoctor PDF so it looks like an InfoQ Mini-Book&lt;/a&gt;. Shortly after writing that blog post, &lt;a href=&quot;https://twitter.com/mojavelinux&quot;&gt;Dan Allen&lt;/a&gt; responded to &lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-pdf/issues/337&quot;&gt;my questions&lt;/a&gt; and &lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-pdf/issues/337#issuecomment-150385192&quot;&gt;showed me how to customize Asciidoctor&apos;s PDF generation&lt;/a&gt;. I ended up using both techniques he described: creating a custom theme and using Ruby to override methods. To recap, here are the changes I was hoping to make:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The colophon is not aligned to the bottom of the page.&lt;/li&gt;
&lt;li&gt;The title page (first one after the cover) and colophon pages should be merged.&lt;/li&gt;
&lt;li&gt;The dedication and acknowledgement headers are not center-aligned and underlined like InfoQ&apos;s format.&lt;/li&gt;
&lt;li&gt;The main sections don&apos;t have whole-page delimiters.&lt;/li&gt;
&lt;li&gt;The table of contents comes right after the title page, rather than after the dedication and acknowledgement.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I&apos;m happy to report that I was able to fix most these issues, except for the second one and last one. There is a &lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-pdf/pull/278&quot;&gt;pull request to allow changing the location of the table of contents&lt;/a&gt;, but I was unable to make it work. I spent a good hour building the asciidoctor-pdf gem and trying to modify &lt;a href=&quot;https://github.com/asciidoctor/asciidoctorj&quot;&gt;AsciidoctorJ&lt;/a&gt; to use it. In the end, I decided to mark this as a bug in the &lt;a href=&quot;http://www.jhipster-book.com&quot;&gt;JHipster book&lt;/a&gt; and we&apos;ll fix it when Asciidoctor supports moving the table of contents. 
&lt;/p&gt;
&lt;p&gt;To customize the output, I created an &lt;code&gt;src/main/ruby/asciidoctor-pdf-extensions.rb&lt;/code&gt; file and added the following code to it:&lt;/p&gt;
&lt;pre class=&quot;brush: ruby&quot;&gt;
require &apos;asciidoctor-pdf&apos; unless defined? ::Asciidoctor::Pdf

module AsciidoctorPdfExtensions

  def layout_title_page doc
      # no title page
  end

  def layout_chapter_title node, title
    if node.id == &quot;dedication&quot; || node.id == &quot;acknowledgements&quot;
      layout_heading_custom title, align: :center
    elsif node.id.include? &quot;mini-book&quot; # colophon
      move_down 470
      layout_heading title, size: @theme.base_font_size
    elsif node.id.include? &quot;jhipster&quot; #chapters
      puts &apos;Processing &apos; + node.id + &apos;...&apos;
      move_down 120
      # set Akkurat font for all custom headings
      font &apos;Akkurat&apos;
      layout_heading &apos;PART&apos;, align: :right, size: 120, color: [91, 54, 8, 13], style: :normal
      move_up 40

      part_number = &quot;ONE&quot;
      if node.id.include? &quot;ui-components&quot;
        part_number = &quot;TWO&quot;
      elsif node.id.include? &quot;api&quot;
        part_number = &quot;THREE&quot;
      end

      layout_heading part_number, align: :right, size: 120, color: [42, 1, 83, 1], style: :bold
      layout_heading title, align: :right, color: [42, 1, 83, 1], style: :normal, size: 30
      move_up 30
      start_new_page
    else
       # delegate to default implementation
       super
    end
  end

  def layout_heading_custom string, opts = {}
      move_down 100
      typeset_text string, calc_line_metrics((opts.delete :line_height) || @theme.heading_line_height), {
          inline_format: true
      }.merge(opts)
      move_up 5
      $i = 0
      underline = &apos;&apos;
      while $i &lt; string.length do
          if string == &apos;Dedication&apos;
            underline += &apos;/////&apos;
          else
            underline += &apos;//////&apos;
          end
          $i += 1
      end
      if string == &apos;Dedication&apos;
          underline += &apos;////&apos;
      end
      typeset_text underline, calc_line_metrics((opts.delete :line_height) || @theme.heading_line_height), {
            inline_format: true, color: &apos;B0B0B0&apos;, size: 8, style: :italic
      }.merge(opts)
      move_down 20
  end

end

Asciidoctor::Pdf::Converter.prepend AsciidoctorPdfExtensions
&lt;/pre&gt;
&lt;p&gt;Then I modified &lt;code&gt;build.gradle&lt;/code&gt; to use this file.&lt;/p&gt;
&lt;pre class=&quot;brush: groovy&quot;&gt;
asciidoctor {
    backends &apos;html5&apos;, &apos;pdf&apos;, &apos;epub3&apos;
    attributes &apos;sourcedir&apos;: &apos;../../../main/webapp&apos;,
            &apos;source-highlighter&apos;: &apos;coderay&apos;,
            &apos;imagesdir&apos;: &apos;./images&apos;,
             toc: &apos;left&apos;,
             icons: &apos;font&apos;,
             linkattrs: true,
             encoding: &apos;utf-8&apos;,
            &apos;setanchors&apos;: true,
            &apos;idprefix&apos;: &apos;&apos;,
            &apos;idseparator&apos;: &apos;-&apos;,
            &apos;docinfo1&apos;: &apos;true&apos;
    requires file(&apos;src/main/ruby/asciidoctor-pdf-extensions.rb&apos;)
}
&lt;/pre&gt;
&lt;p&gt;After getting this to work, we&apos;re &lt;em&gt;very&lt;/em&gt; close to publishing the JHipster Mini-Book! Thanks to Dan for creating Asciidoctor and supporting this great open source project. It&apos;s been a pleasure to write with it and the editing process with Git and pull requests has been wonderful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The JHipster Mini-Book &lt;a href=&quot;http://www.jhipster-book.com/#!/news/entry/jhipster-mini-book-released&quot;&gt;has been released&lt;/a&gt;!&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/customizing_an_asciidoctor_pdf_so</guid>
    <title>Customizing an Asciidoctor PDF so it looks like an InfoQ Mini-Book</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/customizing_an_asciidoctor_pdf_so</link>
        <pubDate>Thu, 22 Oct 2015 14:15:21 -0600</pubDate>
    <category>Open Source</category>
    <category>mini-book</category>
    <category>jhipster</category>
    <category>infoq</category>
    <category>pdf</category>
    <category>asciidoctor</category>
            <description>&lt;p&gt;
&lt;a href=&quot;http://www.jhipster-book.com/&quot; title=&quot;The JHipster Mini-Book&quot;&gt;&lt;img src=&quot;https://farm6.staticflickr.com/5780/21769951394_ea1f880674_m.jpg&quot; width=&quot;170&quot; style=&quot;border: 1px solid black&quot; alt=&quot;The JHipster Mini-Book&quot; class=&quot;picture&quot;&gt;&lt;/a&gt;
Earlier this month, &lt;a href=&quot;http://www.jhipster-book.com/#!/news/entry/rough-draft-is-finished&quot;&gt;I finished the rough draft of the JHipster Mini-Book&lt;/a&gt;. Since then,
I&apos;ve been working with editors to get it ready for production. I&apos;ve also been working with InfoQ to try and make the generated PDF look like their current &lt;a href=&quot;http://www.infoq.com/minibooks/&quot;&gt;mini-books&lt;/a&gt;. 
I wrote the book using &lt;a href=&quot;http://asciidoctor.org/&quot;&gt;Asciidoctor&lt;/a&gt; and I&apos;m using &lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-gradle-examples&quot;&gt;Gradle&lt;/a&gt;
to generate HTML5, PDF and EPUB versions.
&lt;/p&gt;
&lt;p&gt;
After doing some research on &lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc&quot;&gt;Asciidoctor PDF themes&lt;/a&gt; I 
&lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-pdf/issues/337&quot;&gt;created an issue&lt;/a&gt; in the asciidoctor-pdf project. My reason for was to see
if it was possible to customize certain sections of the generated PDF. The main issues I&apos;ve had in making the PDF look like an InfoQ mini-book are the following:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The colophon is not aligned to the bottom of the page.&lt;/li&gt;
&lt;li&gt;The title page (first one after the cover) and colophon pages should be merged.&lt;/li&gt;
&lt;li&gt;The dedication and acknowledgement headers are not center-aligned and underlined like InfoQ&apos;s format.&lt;/li&gt;
&lt;li&gt;The main sections don&apos;t have whole-page delimiters.&lt;/li&gt;
&lt;li&gt;The table of contents comes right after the title page, rather than after the dedication and acknowledgement.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
After thinking about this a bit more, I thought of a few possible workarounds.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I could add a number of line breaks at the beginning of the page to push everything down to the bottom.&lt;/li&gt;
&lt;li&gt;We could delete the title page (with Preview on a Mac or another PDF editor).&lt;/li&gt;
&lt;li&gt;We could create new PDF pages that have InfoQ&apos;s headers and my content. Then, using a PDF editor, we could delete pages and put the new ones in their place.&lt;/li&gt;
&lt;li&gt;There might be a way to have no text in a section&apos;s title (so it doesn&apos;t show up at the top of a page) and do the same copy/paste of an InfoQ section-delimiting page (with large Part One text) before the section. The hard part here might be lining up the table of contents with page numbers.&lt;/li&gt;
&lt;li&gt;Move pages around in the PDF and renumber pages using a PDF editor.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Even if all these workarounds are possible, this will only work for the PDF. InfoQ has asked me to make similar header customizations for the EPUB/MOBI versions.
&lt;p&gt;
&lt;p&gt;
I looked at the &lt;a href=&quot;https://github.com/asciidoctor/asciidoctor-pdf/blob/master/docs/theming-guide.adoc&quot;&gt;PDF theming guide&lt;/a&gt; and it looks like many things are customizable, but they&apos;re global customizations, not per-section customizations. Dedication, Acknowledgement, Preface, and Chapter Titles all live on the same level (level 2). I believe it&apos;s possible to customize how they all look, but I haven&apos;t figured out how to change an individual title. 
&lt;/p&gt;
&lt;p&gt;
The only thing I can think of beyond these workarounds are 1) hiring someone to create a custom theme for InfoQ or 2) forking the project and trying to make customizations to the source code myself.
&lt;/p&gt;
&lt;p&gt;
I haven&apos;t had any feedback from the Asciidoctor team, so I&apos;m posting this here to try and reach a wider audience. If you&apos;ve authored a book in Asciidoctor, did you customize the output to fit your publisher&apos;s desired format, or did you just take the out as-is and publish it?
&lt;/p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/the_passionate_programmer_by_chad</guid>
    <title>The Passionate Programmer by Chad Fowler</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/the_passionate_programmer_by_chad</link>
        <pubDate>Sat, 10 Oct 2009 13:59:19 -0600</pubDate>
    <category>Open Source</category>
    <category>developer_day</category>
    <category>job</category>
    <category>boulder</category>
    <category>career</category>
            <description>Today I&apos;m attending &lt;a href=&quot;http://developer-day.com/&quot;&gt;Developer Day&lt;/a&gt; in Boulder, Colorado. The &lt;a href=&quot;http://developer-day.com/events/2009-boulder.html%23chad_fowler&quot;&gt;opening keynote&lt;/a&gt; was done by &lt;a href=&quot;http://chadfowler.com/&quot;&gt;Chad Fowler&lt;/a&gt; and below are my notes from his talk.
&lt;/p&gt;
&lt;p style=&quot;border-top: 1px dotted silver; padding-top: 10px&quot;&gt;
Chad recently wrote a book called &lt;a href=&quot;http://www.pragprog.com/titles/cfcar2/the-passionate-programmer&quot;&gt;The Passionate Programmer&lt;/a&gt;. It&apos;s about Creating a Remarkable Career in Software Development. Why is it important to do this? Because the average adult spends 53% of their time working, so it&apos;s really about creating a remarkable &lt;em&gt;life&lt;/em&gt;. What is remarkable. For Chad, it was driving around the country in a 1986 Tioga motor home for two months. He worked the whole time and got to enjoy a lot of beautiful scenery along the way. He just returned from &quot;working&quot; in Hawaii for the last two weeks.
&lt;/p&gt;
&lt;p&gt;One of the things that motivated Chad to take control of his career was &lt;a href=&quot;http://pragprog.com/titles/tpp/the-pragmatic-programmer&quot;&gt;The Pragmatic Programmer&lt;/a&gt; book. It taught him you should always try work with people that are smarter than you. What we all really strive for is freedom, especially &lt;em&gt;creative freedom&lt;/em&gt;. The whole idea of a remarkable career is it&apos;s different for everyone. Some folks want to get rich, some want to take a lot of vacation, some want to travel the world.
&lt;/p&gt;
&lt;p&gt;The process of developing a remarkable career is fairly easy - you just need two things. You have to have the &lt;em&gt;intention&lt;/em&gt; and a &lt;em&gt;system&lt;/em&gt; for getting it done. Most people do their careers by coincidence, but they don&apos;t drive it. In the music world, no one gets into it for the paycheck. Everybody gets into it because they think they&apos;re going to be the best. When Chad became a programmer, he thought the same thing - that he wanted to be a rock star.&lt;/p&gt;
&lt;p&gt;When you have a plan, it makes hard things easy. A good example of a helpful planning technique is training for a running race. In September, Chad completed the Indian Summer Half Marathon and he used a training program that introduced mileage in a systematic way. Because of this, training never felt difficult. Another system that Chad recommends is the &lt;a href=&quot;http://lifehacker.com/software/motivation/jerry-seinfelds-productivity-secret-281626.php&quot;&gt;Seinfeld Calender&lt;/a&gt;, where you have a calendar that you X the days when you completed your training (or steps toward a goal). An interesting open source version of this is &lt;a href=&quot;http://calendaraboutnothing.com/&quot;&gt;Calendar About Nothing&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;One good way to look at your career is to think of yourself as a product. Choose your market, invest in yourself, execute and market your skills. You should hang out with people you want to be like and work with people you want to become. Chad recommends not only learning a new language every year, but also learning a new domain. You should decide if you want to be a generalist or a specialist. Being a specialist does not mean only knowing one thing, it just means you know one thing very well. If you do both, it&apos;s the best path towards &lt;em&gt;awesomeness&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;The thing that most programmers don&apos;t do enough of is practice. &lt;a href=&quot;http://codekata.pragprog.com/&quot;&gt;CodeKata&lt;/a&gt; is an example of how you can practice. Don&apos;t just practice programming, understand how your business operates. One of the best ways to do this is learn how to read a balance sheet. Don&apos;t be a Partial Person. Don&apos;t be someone who says &lt;em&gt;I&apos;m not a UI programmer&lt;/em&gt;. Learn how to do it. If you say &quot;I&apos;ve always wanted to&quot;, you should do it (unless it&apos;s illegal of course). &lt;/p&gt;
&lt;p&gt;Execution is a mindset. The best person is not always the smartest person. People who struggle have to come up with systems to make them stronger. People who get things naturally (fitness, brains, etc.) tend to not keep perfecting their skill. Always think about &lt;a href=&quot;http://tobytripp.github.com/meeting-ticker/&quot;&gt;how much you cost per hour&lt;/a&gt; and try to do something you can tell your boss everyday. Another way to execute impressively is to do an 8-hour burn (similar to the 40-hour work week)
&lt;/p&gt;
&lt;p&gt;The best way to market yourself is to &lt;strong&gt;be remarkable&lt;/strong&gt;. When you do networking events, try to help people. We can all get stuck in the trap of saying I am an X programmer. This happens a lot when you&apos;re successful at X. Don&apos;t limit yourself by tying yourself to one technology. As a programmer, your job doesn&apos;t suck.  If what you&apos;re doing is not fun, then you&apos;re probably doing the wrong thing. Ruthlessly cut out the crap you don&apos;t enjoy.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/lean_teams_doing_more_with</guid>
    <title>Lean Teams: Doing more with less</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/lean_teams_doing_more_with</link>
        <pubDate>Wed, 23 Sep 2009 21:20:28 -0600</pubDate>
    <category>Open Source</category>
    <category>software</category>
    <category>softwaredevelopment</category>
    <category>kanban</category>
    <category>lean</category>
    <category>rails</category>
    <category>denver</category>
    <category>derailed</category>
    <category>agile</category>
            <description>This evening I attended the Denver Rails User Group (a.k.a. &lt;a href=&quot;http://groups.google.com/group/derailed&quot;&gt;DeRailed&lt;/a&gt;) to hear a presentation by &lt;a href=&quot;http://martyhaught.com&quot;&gt;Marty Haught&lt;/a&gt;. It was titled &quot;Lean Teams: Doing more with less&quot; and the following are my notes from the event.
&lt;/p&gt;
&lt;p&gt;Today&apos;s talk is about &quot;Rocking with Ramen&quot; - a.k.a. working with less funds to make great things. Lean comes from the manufacturing world in that you should &lt;strong&gt;Add Nothing but Value&lt;/strong&gt;. The most important thing you should do is &lt;em&gt;add business value&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;The Seven Wasteful Sins for manufacturing are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Overproduction&lt;/li&gt;
&lt;li&gt;Inventory&lt;/li&gt;
&lt;li&gt;Extra Processing Steps&lt;/li&gt;
&lt;li&gt;Motion&lt;/li&gt;
&lt;li&gt;Defects&lt;/li&gt;
&lt;li&gt;Waiting&lt;/li&gt;
&lt;li&gt;Transportation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key to fighting &lt;strong&gt;overproduction&lt;/strong&gt; in software is to trim features to those that achieve the greatest value. You should do &quot;the simplest thing that could possibly work&quot; and delay commitment as long as you can because &lt;a href=&quot;http://en.wikipedia.org/wiki/You_ain&apos;t_gonna_need_it&quot;&gt;YAGNI&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;
A &lt;strong&gt;minimum viable product&lt;/strong&gt; is a starting place for validated learning with the least amount of effort. It should be embarrassing. Early adopters see the potential. &lt;a href=&quot;http://blog.railsrumble.com/&quot;&gt;Rails Rumble&lt;/a&gt; and &lt;a href=&quot;http://startupweekend.org/&quot;&gt;Startup Weekend&lt;/a&gt; are good examples of promoting this type of development. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Unused and useless features&lt;/strong&gt; are best solved by &lt;em&gt;feedback-driven development&lt;/em&gt;. This is a process for validating value and creating software that people use. The end result is that you create software that people use and you&apos;re able to pivot your plan as you learn. The benefit of this is you stay humble and you don&apos;t drink the Kool-Aid (e.g. VC&apos;s tell you you&apos;re going to be the next Twitter).
&lt;/p&gt;
&lt;p&gt;The first part of feedback is &quot;&lt;a href=&quot;http://www.slideshare.net/dmc500hats/startup-metrics-for-pirates-long-version&quot;&gt;Pirate Metrics&lt;/a&gt;&quot; by Dave McClure. The main things to track are acquisition, activation, retention, referral and revenue (AARRRR!). The main things you should gather from metrics is they&apos;re actionable and should help you make decisions. Vanity metrics like hits-per-month and such should be ignored.&lt;/p&gt;
&lt;p&gt;Other feedback options include net promoter score (popup question to ask if users would recommend to a friend), feedback form (make it easy for users to tell you what you think about your product), A/B testing, and usability testing. 
&lt;/p&gt;
&lt;p&gt;The final point is that it&apos;s OK to remove features.&lt;/p&gt;
&lt;p&gt;To reduce extra processing and waiting, you should implement &quot;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kanban&quot;&gt;Kanban&lt;/a&gt;&quot;. It&apos;s a pull-based system for a continuous flow of work and can be used in software projects to manage/schedule work for cross functional teams. It&apos;s an expression of just-in-time and has an emphasis on flow. It&apos;s all about getting across the board as fast as possible. In agile development, this is often expressed as a card-based system on a wall in the same room as your development team. Things can only move from the left-to-right as there is space for them. Marty is showing a screenshot of a &quot;&lt;a href=&quot;http://agilezen.com/&quot;&gt;Zen&lt;/a&gt;&quot; tool he uses on his projects. It has 3 columns (Definition, Work and Verification) from left-to-right that allows you to easily move stuff.&lt;/p&gt;
&lt;p&gt;The most important thing about &lt;em&gt;Kanban&lt;/em&gt; is it helps to eliminate constraints. The Zen tool only allows a certain amount of items in the &quot;Work&quot; column and it visually communicates blocked items by moving them to the top and highlighting them with a red border. The Zen tool that Marty is showing looks similar to Rally, but is much more visually appealing.
&lt;/p&gt;
&lt;p&gt;The benefits of Kanban include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;simple, less process&lt;/li&gt;
&lt;li&gt;less inventory of requirements/stories&lt;/li&gt;
&lt;li&gt;limit work in progress, maximize throughput&lt;/li&gt;
&lt;li&gt;less time in meetings&lt;/li&gt;
&lt;li&gt;more naturally represents story lifecycle&lt;/li&gt;
&lt;li&gt;more easily spot bottlenecks&lt;/li&gt;
&lt;li&gt;estimate only if it adds value&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kanban promotes tracking how long it takes for a story get across the board and into production vs. tracking velocity of a team.&lt;/p&gt;
&lt;p class=&quot;quote&quot; style=&quot;font-style: italic; color: #666&quot;&gt;
On my current project, we use Rally, a small team and have two week iterations. Because the things that Marty is talking about seem to be things we&apos;re already doing, I asked him how Kanban differs from Scrum with small teams. He explained that this biggest difference is Kanban is most useful when you&apos;re pushing things to production with each iteration.
&lt;/p&gt;
&lt;p&gt;The most controversial practice that Marty promotes is &lt;em&gt;Continuous Deployment&lt;/em&gt;. This is the automated deployment of code to production. It includes automated testing and continuous integration, simple deployment/rollback scripts, a successful CI build triggers deployment, and there&apos;s real-time alerts in production. When shit goes wrong, you should use the &quot;five whys&quot; to perform root cause analysis. Marty admits that this is only a good idea when there&apos;s a high-level of trust in your development team and lots of tests to prove nothing is broken.&lt;!--(in other words, you don&apos;t work with any douchebags)--&gt;
&lt;/p&gt;
&lt;p&gt;The benefits of continuous deployment is there&apos;s a lower story cycle time, you eliminate waste in deploying code, you deliver features/bugs fixes faster and you find integration issues quicker and in isolation. It&apos;s also a great way to promote &lt;em&gt;not checking in shitty code&lt;/em&gt;.
&lt;p&gt;The skeptics think this is a bad idea because 1) it&apos;s scary, 2) they believe it causes lower quality and 3) it causes more issues in production. The good news is you can still control production deployments with your source control system (e.g. branches and such). More than anything, it forces you to have a high quality continuous integration system that acts as the gatekeeper for what goes to production.
&lt;/p&gt;
&lt;p&gt;You can learn more about topics Marty covered in this talk at the following sites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Eric Ries - &lt;a href=&quot;http://www.startuplessonslearned.com/&quot;&gt;http://www.startuplessonslearned.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Steve Blank - &lt;a href=&quot;http://www.amazon.com/Four-Steps-Epiphany-Steven-Blank/dp/0976470705&quot;&gt;The Four Steps to the Epiphany&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.poppendieck.com/&quot;&gt;Mary Poppendieck&lt;/a&gt; - Lean Software Development&lt;/li&gt;
&lt;li&gt;Dave McClure - &lt;a href=&quot;http://davemcclure.com/&quot;&gt;http://davemcclure.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/articles/hiranabe-lean-agile-kanban&quot;&gt;Kanban Applied to Software Development: from Agile to Lean&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;
&lt;p&gt;If you&apos;re lucky enough to be attending &lt;a href=&quot;http://www.alohaonrails.com/&quot;&gt;Aloha on Rails&lt;/a&gt;, Marty will be &lt;a href=&quot;http://www.alohaonrails.com/sessions/#lean-teams-how-to-do-more-with-less&quot;&gt;presenting&lt;/a&gt; there. I recommend you attend his talk if you&apos;re trying to get stuff done quickly and get it into production even quicker. His techniques seem to be invaluable for developers that are trying to maximize their efficiency and reduce the time it takes to get their code into production.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/how_i_recovered_data_from</guid>
    <title>How I recovered data from my failed Linux box</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/how_i_recovered_data_from</link>
        <pubDate>Thu, 11 Dec 2008 14:02:29 -0700</pubDate>
    <category>Open Source</category>
    <category>suse</category>
    <category>fat32format</category>
    <category>knoppix</category>
    <category>linux</category>
            <description>Yesterday, I decided to quit procrastinating and finish up my 2007 taxes once and for all. When I booted up QuickBooks on my XP box, it said it couldn&apos;t connect to drive Q. Drive Q is on my Linux box, which I discovered wasn&apos;t on. When I booted it, the screen showed an &quot;Error 18&quot; after the GRUB loading message. The resulted in several hours of &lt;em&gt;grub-install&lt;/em&gt; and many other commands to no avail. 
&lt;/p&gt;
&lt;p&gt;Since I hadn&apos;t messed with the box in almost a year, I didn&apos;t even know if it had Fedora or Suse installed on it. I had both disks lying around, so I tried the good ol&apos; &lt;em&gt;linux rescue&lt;/em&gt; with my Fedora disks. I was able to access the data, but had no luck in getting network connectivity or copying files to a USB drive.&lt;/p&gt;
&lt;p&gt;Today I hoped for a different route: Live CDs. Yesterday, I discovered I was running Suse 10, so I downloaded a &lt;a href=&quot;http://software.opensuse.org/&quot;&gt;Suse 11 Live CD&lt;/a&gt;, burned it and booted. It worked, but I didn&apos;t have access to my hard drives and wasn&apos;t able to mount anything. Next up, I tried &lt;a href=&quot;http://www.knoppix.net/&quot;&gt;Knoppix&lt;/a&gt;, which allowed me to boot and access my hard drives. Unfortunately, I still didn&apos;t have any network access and my 2GB thumb drive didn&apos;t hold enough data.&lt;/p&gt;
&lt;p&gt;Next, I pulled out a 250GB USB drive I had lying around. Knoppix recognized it, but was unable to format it for some reason. I plugged it into my XP box, used &lt;a href=&quot;http://www.ridgecrop.demon.co.uk.nyud.net:8080/index.htm?fat32format.htm&quot;&gt;fat32format&lt;/a&gt; to format the drive as FAT32, and plugged it back into my Linux box. &lt;em&gt;Success!&lt;/em&gt; I was able to copy all the data I needed and now I have the USB drive plugged into my Airport Extreme.&lt;/p&gt;
&lt;p&gt;Hopefully if someone else runs into similar issues, they can use this post to find their path to success.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/appcelerator_with_matt_quinlan</guid>
    <title>Appcelerator with Matt Quinlan</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/appcelerator_with_matt_quinlan</link>
        <pubDate>Tue, 7 Oct 2008 19:08:19 -0600</pubDate>
    <category>Open Source</category>
    <category>appcelerator</category>
    <category>soa</category>
    <category>ajax</category>
    <category>ria</category>
    <category>javascript</category>
    <category>opensource</category>
    <category>ruby</category>
    <category>java</category>
            <description>This evening I attended the Denver Open Source User Group meeting where the Basic Concepts talk was on &lt;a href=&quot;http://appcelerator.org&quot;&gt;Appcelerator&lt;/a&gt;. Matt Quinlan (&lt;a href=&quot;http://twitter.com/MattQuinlan&quot;&gt;Twitter&lt;/a&gt;, &lt;a href=&quot;http://MattQuinlan.com&quot;&gt;Blog&lt;/a&gt;, &lt;a href=&quot;http://www.linkedin.com/in/mattquinlan&quot;&gt;LinkedIn&lt;/a&gt;) was the presenter. I arrived 10 minutes late, so I didn&apos;t hear any of the intro stuff. Below are my notes from the event.
&lt;/p&gt;
&lt;p&gt;The Appcelerator developers liked the &quot;onclick&quot; syntax, but found it was too limited to do everything they wanted. Rather than &lt;em&gt;onclick&lt;/em&gt;, they use an &lt;em&gt;on&lt;/em&gt; attribute. For example:
&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div on=&quot;click then l:show.box&quot;&gt;
Click me
&amp;lt;div&gt;
&lt;/pre&gt;
&lt;p&gt;&quot;DOM Manipulation is JavaScript cruft.&quot; 
&lt;/p&gt;
&lt;p&gt;Appcelerator allows you to implement the Observer pattern in the browser. In addition to allowing DOM elements to subscribe to messages, server-side objects (in any language) can subscribe as well. In Appcelerator syntax &quot;l:&quot; means local and &quot;r:&quot; means remote. The messages that are passed to the server are JSON and have payloads. JSON is more popular than XML because you can eval() it and create JavaScript objects from it. Appcelerator allows you to do &lt;em&gt;Declarative Ajax&lt;/em&gt;. On the server-side, you can annotation Java and C# classes with @Service to subscribe to messages. In other languages (i.e. PHP), Javadoc-style comments are used.&lt;/p&gt;
&lt;p&gt;Tagline: The seamless fusion of RIA and SOA.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Expression Language&lt;/strong&gt;&lt;br/&gt;
Goal is to eliminate 90% of the JavaScript you write. Example syntax:
&lt;/p&gt;
&lt;pre&gt;
on=&quot;[condition] then [action]&quot;
&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Conditions&lt;/em&gt; include DOM events (click, focus, blur, change, mouse events), key events (up, down, press), other (history, drag/drop, selected, resize, iPhone orient, sortXYZ), subscribe to custom message. &lt;em&gt;Actions&lt;/em&gt; include Scriptaculous effects (show/hide, fade, move, drop, grow), set element value (static, dynamic, bind), set CSS class or attribute, execute custom JavaScript, publish custom message.&lt;/p&gt;
&lt;p&gt;Now Matt is doing a demo on &lt;a href=&quot;http://try.appcelerator.org&quot;&gt;http://try.appcelerator.org&lt;/a&gt;. This site consists of a form that allows you to type in Appcelerator code and run it. 3 attributes can be added to any tag: draggable, droppable and resizeable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Client-Side&lt;/strong&gt;&lt;br/&gt;
Add simple tags to your HTML to inject RIA widgets. Add single property to existing HTML elements for dynamic behavior. Eclipse Plugin built on Aptana, but is generally targeted towards web developers moreso than business analysts (no drag and drop of widgets).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server-Side&lt;/strong&gt;&lt;br/&gt;
Server-side development done with your IDE of choices. Based on your server-side tehchnology platform. Easily create services using annotations.&lt;/p&gt;
&lt;P&gt;&lt;strong&gt;App Command&lt;/strong&gt;&lt;br/&gt;
The &lt;em&gt;app&lt;/em&gt; command is similar to Rails&apos; GEM command. Allows you to build scaffolding and deploy to cloud (AppEngine, Amazon S3). It also allows you to pulldown components from the main server and auto-updating.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://apptunes.appspot.com&quot;&gt;appTunes&lt;/a&gt;: widget that wraps Flex &lt;a href=&quot;http://en.wikipedia.org/wiki/Cover_Flow&quot;&gt;Cover Flow&lt;/a&gt; widget&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://snapshot.appcelerator.org&quot;&gt;Snapshot&lt;/a&gt;: photo editing application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radiojavan.com&quot;&gt;Radio Javan&lt;/a&gt;: Persian music online&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://skyblox.com&quot;&gt;SkyBlox&lt;/a&gt;: wireless company&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Appcelerator allows you to create prototypes easily by using a JavaScript file with mocks for the server-side objects. In the next version, you can &quot;annotate&quot; the UI and allow end-users to Ctrl+Click on elements and add feedback. For an example of this, see &lt;a href=&quot;http://dev.appcelerator.com/pearson&quot;&gt;http://dev.appcelerator.com/pearson&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When starting with Appcelerator, you can start by crawling (including appcelerator.js for widgets) then move to walking (decouple server-side and client-side) and finally running (developing working prototypes with mocks for server-side).
&lt;/p&gt;
&lt;p&gt;

&quot;Let&apos;s face it, ASP, JSP, PHP and Ruby are just lipstick on CGI.&quot;
</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/performance_testing_memcached</guid>
    <title>Performance Testing Memcached</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/performance_testing_memcached</link>
        <pubDate>Fri, 19 Sep 2008 11:29:33 -0600</pubDate>
    <category>Open Source</category>
    <category>memcached</category>
    <category>performance</category>
            <description>Earlier this week, co-workers and I did some performance testing with &lt;a href=&quot;http://www.danga.com/memcached/&quot;&gt;Memcached&lt;/a&gt;. We wanted to see how long it&apos;d take to send different sizes of objects over the wire to Memcached on a remote server. 
&lt;/p&gt;
&lt;p&gt;
We setup a simple environment with 2 Mac Pros both running 2 x 2.8 Ghz Quad-Core Intel Xeon processors and 12GB of RAM. We used one machine as a Memcached server and one machine running an application with the addition of a new Servlet Filter. The Servlet Fitler read a size parameter and used it to set the size of the object being written and read from the Memcached server. We used JMeter to put load on the box. The following describes the load and the results.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Write Times&lt;/strong&gt;&lt;br/&gt;
Write tests were performed with a single user executing 1000 sequential remove then writes.&lt;/p&gt;
&lt;table class=&quot;comparison&quot; style=&quot;width: 500px&quot;&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt; Size in Bytes &lt;/th&gt;
&lt;th&gt; Time (ms.) &lt;/th&gt;
&lt;th&gt; Min. Time (ms.) &lt;/th&gt;
&lt;th&gt; Max. Time (ms.) &lt;/th&gt;
&lt;th&gt; Total &lt;/th&gt;
&lt;/thead&gt;
&lt;/tr&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; 20000 &lt;/td&gt;
&lt;td&gt; 1.31 &lt;/td&gt;
&lt;td&gt; 0 &lt;/td&gt;
&lt;td&gt; 7 &lt;/td&gt;

&lt;td&gt; 1000 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 50000 &lt;/td&gt;
&lt;td&gt; 1.834 &lt;/td&gt;
&lt;td&gt; 1 &lt;/td&gt;
&lt;td&gt; 8 &lt;/td&gt;

&lt;td&gt; 1000 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 100000 &lt;/td&gt;
&lt;td&gt; 2.87 &lt;/td&gt;
&lt;td&gt; 2 &lt;/td&gt;
&lt;td&gt; 9 &lt;/td&gt;

&lt;td&gt; 1000 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 500000 &lt;/td&gt;
&lt;td&gt; 12.641 &lt;/td&gt;
&lt;td&gt; 9 &lt;/td&gt;
&lt;td&gt; 283 &lt;/td&gt;

&lt;td&gt; 1000 &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Read Times&lt;/strong&gt;&lt;br/&gt;
Read tests were performed using 50 users with 1 sec. ramp times executing 100 reads each.&lt;/p&gt;
&lt;table class=&quot;comparison&quot; style=&quot;width: 500px&quot;&gt;&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt; Size in Bytes &lt;/th&gt;
&lt;th&gt; Time (ms.) &lt;/th&gt;

&lt;th&gt; Min. Time (ms.) &lt;/th&gt;
&lt;th&gt; Max. Time (ms.) &lt;/th&gt;
&lt;th&gt; Total &lt;/td&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt; 20000 &lt;/td&gt;
&lt;td&gt; 4.8414 &lt;/td&gt;

&lt;td&gt; 1 &lt;/td&gt;
&lt;td&gt; 375 &lt;/td&gt;
&lt;td&gt; 5000 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 50000 &lt;/td&gt;
&lt;td&gt; 18.343 &lt;/td&gt;

&lt;td&gt; 1 &lt;/td&gt;
&lt;td&gt; 354 &lt;/td&gt;
&lt;td&gt; 5000 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 100000 &lt;/td&gt;
&lt;td&gt; 46.181 &lt;/td&gt;

&lt;td&gt; 2 &lt;/td&gt;
&lt;td&gt; 415 &lt;/td&gt;
&lt;td&gt; 5000 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt; 500000 &lt;/td&gt;
&lt;td&gt; 137.7328 &lt;/td&gt;

&lt;td&gt; 6 &lt;/td&gt;
&lt;td&gt; 953 &lt;/td&gt;
&lt;td&gt; 5000 &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;During our tests, Memcached was started using the following settings:&lt;/p&gt;
&lt;pre&gt;memcached -d -m 2048 -M -p 10171 -vv&lt;/pre&gt;
&lt;p&gt;If you&apos;ve done similar performance testing with Memcached, we&apos;d love to see your results.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/presenting_web_frameworks_of_the</guid>
    <title>Presenting Web Frameworks of the Future Tomorrow in Denver</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/presenting_web_frameworks_of_the</link>
        <pubDate>Wed, 30 Jul 2008 21:56:17 -0600</pubDate>
    <category>Open Source</category>
    <category>opensource</category>
    <category>rest</category>
    <category>webframeworks</category>
    <category>grails</category>
    <category>rails</category>
    <category>oscon</category>
    <category>flex</category>
    <category>gwt</category>
            <description>Tomorrow (Thursday) night, I&apos;ll be doing an encore presentation of my &lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of&quot;&gt;Web Frameworks of the Future&lt;/a&gt; at &lt;a href=&quot;http://groups.google.com/group/derailed&quot;&gt;DeRailed&lt;/a&gt;. If you&apos;re in Denver and would like to hear me ramble while drinking a beer, join us at &lt;a href=&quot;http://www.forestroom5.com/&quot;&gt;Forestroom 5&lt;/a&gt; at 6:30.&lt;/p&gt;
&lt;p&gt;After the &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_oscon_aftermath&quot;&gt;last few days&lt;/a&gt;, I&apos;m happy to report I should be in good enough condition to pull this off. If you&apos;re curious to learn more about my experience at OSCON and this presentation, please see &lt;a href=&quot;http://blog.linkedin.com/blog/2008/07/oscon-2008-and.html&quot;&gt;my writeup on the LinkedIn Blog&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_wrapup</guid>
    <title>OSCON 2008 Wrapup</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_wrapup</link>
        <pubDate>Fri, 25 Jul 2008 10:05:08 -0600</pubDate>
    <category>Open Source</category>
    <category>opensource</category>
    <category>oscon08</category>
    <category>oscon</category>
    <category>portland</category>
            <description>This week, I attended OSCON 2008 in Portland, Oregon. I talked to someone who thought the conference had a very small Java presence. I noticed this too, but that&apos;s how it&apos;s always been. Interestingly enough, they also thought it had a small Ruby showing. I guess Perl, Python and PHP will always dominate OSCON. Of course, there&apos;s nothing wrong with that. I&apos;ve always admired OSCON for the diversity of developers and languages. 
&lt;/p&gt;
&lt;p&gt;
Below is a list of my entries for all the sessions I attended.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_the_keynote&quot;&gt;The Keynote with Tim O&apos;Reilly, Christine Peterson and Dirk Hohndel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_an_introduction_to&quot;&gt;An Introduction to Ruby Web Frameworks by Ryan Carmelo Briones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_google_xml_pages&quot;&gt;Google XML Pages (GXP) by Harry Heymann and Laurence Gonsalves&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_caching_and_performance&quot;&gt;Caching and Performance: Lessons from Facebook by Lucas Nealan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of&quot;&gt;Web Frameworks of the Future: Flex, GWT, Grails and Rails&lt;/a&gt; (my presentation)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_the_state_of&quot;&gt;&lt;em&gt;The State of&lt;/em&gt; Lightning Talks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_css_for_high&quot;&gt;CSS for High Performance JavaScript UI by Gavin Doughtie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_2008_even_faster_web&quot;&gt;Even Faster Web Sites by Steve Souders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you attended OSCON, did you enjoy the show? What was your favorite session? I&apos;d love to hear other&apos;s impressions of the conference and how it could be improved.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_the_state_of</guid>
    <title>[OSCON 2008] The State of Lightning Talks</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_the_state_of</link>
        <pubDate>Thu, 24 Jul 2008 13:34:08 -0600</pubDate>
    <category>Open Source</category>
    <category>memcached</category>
    <category>gentoo</category>
    <category>launchpad</category>
    <category>openscrum</category>
    <category>openid</category>
    <category>osi</category>
    <category>mysql</category>
    <category>opensolaris</category>
    <category>oscon08</category>
    <category>glassfish</category>
    <category>gnome</category>
    <category>bazaar</category>
    <category>subversion</category>
    <category>postgresql</category>
    <category>talkingbridgeproject</category>
    <category>openoffice</category>
    <category>drizzle</category>
    <category>mozdev</category>
    <category>oscon</category>
            <description>From &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/detail/2236&quot;&gt;this session&apos;s detail page&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
As a repeat of the last 2 years, 15 open source project leaders will be given five minute lightning talk slots to bring the audience up to date on their projects.
&lt;br/&gt;&lt;br/&gt;
This year&amp;rsquo;s speakers and projects include: Brian Aker: Memcached, Glynn Foster: OpenSolaris, OSI: Danese Cooper, MySQL: Monty Widenius, PostgreSQL: Bruce Momjian, GNOME: Dave Neary, Gentoo: Donnie Berkholz, OpenOffice.org: Louis Suarez-Potts, Jabber: Peter Saint-Andre, Mozdev: Brian King, OpenID: Scott Kveton, Open Scrum: James Dixon, and Cliff Schmidt for the Talking Book Project. A couple more projects may be added later.
&lt;br/&gt;&lt;br/&gt;
Each speaker has exactly 5 minutes, and we use various &amp;ldquo;fun&amp;rdquo; tools to make sure they stick to their time. The session usually ends with a &amp;ldquo;zinger&amp;rdquo; presentation worth staying for.
&lt;/p&gt;
&lt;p&gt;Unlike the description above, apparently there&apos;s 17 projects instead of 15. This session is 95 minutes long (spans 2 normal sessions). I figure this will be the most challenging event for me to blog, so here we go!
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OSI (Open Source Initiative), Danese Cooper&lt;/strong&gt;&lt;br/&gt;
Danese has been on the board of OSI since 2001 and will be on the board for another 3 years. This year, they&apos;ve been asking themselves &quot;What are the ways to make OSI more effective?&quot; The best answer they&apos;ve come up with is that they should run OSI more like an open source project (with lots of transparency). Minutes are posted publicly on website and they have a public blog. They&apos;re also transferring their archives to a searchable system. They&apos;ll be using Trac to do more objective tracking of all the issues that&apos;ve been brought to their attention.
&lt;/p&gt;
&lt;p&gt;
They&apos;re also going to establish (formal) membership. They&apos;re going to use Apache as a model and allow Charter, Individual, Organizational and have an Annual Members Meeting. ASF currently has 300 members and these folks are in charge of making decisions for the foundation. There&apos;s a good chance you&apos;ll recognize all the Charter Members of OSI. The names will be announced in the next couple months (I believe). There will be opportunities to be individual or organizational members. 
&lt;/p&gt;
&lt;p&gt;
There&apos;s new board members this year with an international focus: Nnenna (Africa), Harshad Gune ...honk... out of time.
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Scrum, James Dixon&lt;/strong&gt;&lt;br/&gt;
James is the founder and Chief Geek at Pentaho. Pentaho recently took their products open source and they&apos;re releasing Open Scrum as an agile methodology for managing open source projects. Open Source is not a methodology, it is a set of principles.&lt;/p&gt;
&lt;p&gt;
Some agile principles are used in open source, but some are not. For instance, trusting developers and face-to-face contact can be difficult with open source projects. Simplicity sometimes comes out of open source projects, but usually only for projects with a large developer base. There&apos;s a 45% good fit between Agile and Open Source.
&lt;/p&gt;
&lt;p&gt;Open Scrum is based on Scrum, but geared towards open source projects. It&apos;s simple and flexible and template driven. It scales from single-geek, part-time, single-projects to massively multi-geek full-on and multi-layered undertakings. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MySQL, Monty Widenius&lt;/strong&gt;&lt;br/&gt;
Monty is the Chief Fonder of MySQL and he&apos;s talking about what&apos;s new in MySQL. There&apos;s been no new releases for users, but internally they&apos;ve been doing lots of bug fixes in 5.1. He expects to have a reasonable GA of 5.1 in 3-5 months. 5.0 will include online backup and optimizer changes for faster joins and sub queries. 5.1 has an InnoDB Plugin.
&lt;/p&gt;
&lt;p&gt;
MySQL was acquired by Sun for $1 billion and 6 months later, life is good. MySQL Backup was announced to be crippleware by MySQL management, but later changed to be open source.
&lt;/p&gt;
&lt;p&gt;
Switched to use Bazaar and Launchpad to increase community participation. Started public bug hunt for MySQL 5.1. Started using case competition for new features in 5.1. There&apos;s also a new MySQL forge. Please help MySQL get better by filing bugs!
&lt;/p&gt;
&lt;p&gt;
Maria engine 1.0 and 1.5; now crashsafe and multi-versioned. Transactional part to follow soon. 
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenID, Scott Kveton&lt;/strong&gt;&lt;br/&gt;
Scott is on the board of the OpenID Foundation and his son is on stage with him (with a Twitter shirt on). In terms of adoption, they have a hockey stick graph with the big upturn starting in February 2007. OpenID is only 3 years old and there&apos;s over 20,000 sites that now support it. There&apos;s about ~500 million OpenIDs (including every AOL, Yahoo, MySpace and LiveJournal user).&lt;/p&gt;
&lt;p&gt;OpenID 2.0 was released as final 12/7/2007. What&apos;s next: usability (currently sucks), security (PAPE), integration with other protocols, more than just providing, and possibly OpenID 3.0. One of the biggest problems with usability is people just can&apos;t remember URLs, so they&apos;re trying to figure out a URL -&gt; e-mail mapping.
&lt;/p&gt;
&lt;p&gt;OpenID Foundation has added 5 corporate board seats and has 7 community board seats and elections are in August. You can get code at &lt;a href=&quot;http://openidenabled.com&quot;&gt;openidenabled.com&lt;/a&gt; and you can get involved at &lt;a href=&quot;http://openid.net&quot;&gt;openid.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gentoo, Donnie Berkholz&lt;/strong&gt;&lt;br/&gt;
Donnie is one of 7 people that&apos;s on the council that tries to make sure Gentoo is going in a good direction. In the last year, they&apos;ve been struggling with community and releasing. Gentoo is just getting old enough where people are quitting and new developers are coming on board. In 2005, they had a lot of voters for their council. 2006 and 2007 were bad years from a community participation standpoint. This year, they&apos;ve fixed &quot;poisonous people&quot; and participating is back up.&lt;/p&gt;
&lt;p&gt;Rather than voting for single candidates, they use a &quot;rank all the candidates&quot; voting system. Community is very important and they&apos;ve recently kicked out 3 people that didn&apos;t think community was important. They released 2008.0 a few weeks ago. It was supposed to be released in February. When they released, they made the front page of Digg, which made Donnie very happy. Gentoo news announcements were way down in 2007, but now they&apos;re back up. 
&lt;/p&gt;
&lt;p&gt;Recommended books for community building: Good to Great, The No Asshole Rule, Getting to Yes.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PostgreSQL, Bruce Momjian&lt;/strong&gt;&lt;br/&gt;
Bruce is a PostgreSQL core developer and works for EnterpriseDB. The future for PostgreSQL is going to be a lot different than the past. PostgreSQL&apos;s path to the future isn&apos;t a straight line. Rather, it&apos;s a meandering path like a road up a mountain with switchbacks. People would like a catapult to put features into to get things in, but it&apos;s not that easy. It&apos;s difficult to improve software that&apos;s been around for 20 years.
&lt;/p&gt;
&lt;p&gt;Companies have very clearly defined goals that usually revolve around money. With open source, it&apos;s a lot different. Goals are usually for a feature set, for adoption of open source or for the challenge and fun of it. 
&lt;/p&gt;
&lt;p&gt;PostgreSQL 8.0 was released in January 2005 and had a lot of enterprise features: Win32, Savepoints, Point-In-Time Recovery, Tablespaces. The latest release (8.3 in February) was much different and much more exotic features. In the future, they&apos;re going to expand on running queries on multiple CPUs and maintaining their leadership in the open source database space.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Bazaar, Mark Shuttleworth&lt;/strong&gt;&lt;br/&gt;
Mark&apos;s interest in distributed version control predates his interest in Ubuntu. If we can elevate our process of version control, we can elevate the entire open source community. Bazaar is a distributed version control system that&apos;s developed in Python. It focuses relentlessly on a couple of key values: 
&lt;/p&gt;
&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;Cross-platform: Linux, Windows, Mac OS X&lt;/li&gt;
&lt;li&gt;Performance: sub-second status on &gt; 10,000 files&lt;/li&gt;
&lt;li&gt;Being adaptive to the way that people want to work (can use it like Subversion if you want or you can have distributed branches or have a team checkout)&lt;/li&gt;
&lt;li&gt;Extensibility and embeddable - has a plugin system&lt;/li&gt;
&lt;li&gt;Python Hackable - people can easily modify&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Projects that use Bazaar: GNU, MySQL, Twisted and Ubuntu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memcached, Alan &quot;Dormando&quot;&lt;/strong&gt;&lt;br/&gt;
Memcached is a very simple project with a mailing list with very simple people on it that run very simple websites. They haven&apos;t had a release in 6 months. Memcached was written by a guy named Fitz that wrote it and left. They&apos;ve only recently created a developer community that&apos;s all over the globe. Alan didn&apos;t bring any slides, but he did release 1.2.6 RC1 as he was standing on stage. They also hope to release 1.3.1 this week, but there&apos;s not a lot of documentation.
&lt;/p&gt;
&lt;p&gt;
People fork Memcached a LOT, mostly because they need a new backend. They&apos;ve added a new storage engine that&apos;s pluggable to hopefully fix the forking problem. Also, their new binary protocol should make it a lot faster for high traffic web sites.
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Talking Bridge Project, Cliff Schmidt&lt;/strong&gt;&lt;br/&gt;
While the network at OSCON has been slow, the folks that live in rural areas around the world have an incredibly slow means of getting information. Their network is often roads that people travel on to communicate with each other. 
&lt;/p&gt;
&lt;p&gt;
They&apos;ve created a Talking Book device that is an MP3 player that costs $5-10. They&apos;re also creating kiosks that people in rural areas can interact with to download new information (i.e. podcasts and other educational content). It also has a microphone and can be found at &lt;a href=&quot;http://literacybridge.org&quot;&gt;literacybridge.org&lt;/a&gt;. They&apos;re creating open source projects to help build the device and content around it. They&apos;d love to have open source developers join their projects and help them make access to information easier for rural societies.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Open Source Lab at Oregon State University, Lance Albertson&lt;/strong&gt;&lt;br/&gt;
Lance is a Kansas native and grew up on a farm. He&apos;s a Gentoo developer and joined OSL a year ago. OSL was created in 2003 to utilize &quot;extra&quot; unused bandwidth. They provide managed and co-located hosting for open source software projects. They also provide on-the-job learning opportunities for students in system administration and development.
&lt;/p&gt;
&lt;p&gt;
In addition to hosting, they have a development and outreach side. They have 12 student employees that are given developers/sys admins are given real world practical opportunities. Their work is seen and used by many people and students are given extraordinary amounts of responsibility. They&apos;re working on a couple external OSS projects: Oregon Virtual School District and One Laptop Per Child. 
&lt;/p&gt;
&lt;p&gt;
Outreach wise, they have an Open Source Education Lab and they&apos;ve been doing Drupal training for OSU employees. They&apos;ve also helping organize GOSCON, which is an open source conference for governments. 
&lt;/p&gt;
&lt;p&gt;
They currently offer hosting for over 70 OSS projects. Services include, email relays, databases, web hosting, file mirroring and code repositories. Notable clients: ASF, Drupal, kernel.org (master), OpenOffice, Freenode, Gentoo Linux &amp;amp; Debian, phpBB and many others. Datacenter currently has 50 racks; they&apos;ll be moving to 75 in the near future.
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenOffice&lt;/strong&gt;&lt;br/&gt;
They&apos;ve had 150 million downloads and believe there&apos;s around 1 million users. There&apos;s 350 committers and most of them work from Sun. Presently, their biggest focus is Desktop. In the future, they&apos;ll focus on the Web. The idea is that people will want to use OpenOffice from their mobile devices. ODF is a format that can be expressed by any application. OO 3.0 is about extensions, not bloat. They&apos;re adding linkage to a free PIM (Outlook replacement). They&apos;re also adding better interoperatbility with other suites and formats (e.g., Microsoft Office 2007). They&apos;re adding productivity tools and adding toolkits to make things easier for developers. 

In the next year, they expect to go way beyond 150 million downloads. They also expect to expand greatly internationally.

&lt;p&gt;&lt;strong&gt;Mozdev, Brian King&lt;/strong&gt;&lt;br/&gt;
Brian has been in the Mozilla Community since 1999. &lt;a href=&quot;http://mozdev.org&quot;&gt;Mozdev.org&lt;/a&gt; is a community site that provides free hosting for Mozilla applications and extensions since 2000. Established as a non-profit organization in 2004. It has over 250 active projects today and there&apos;s over 500 developers discussing issues on the project_owners@mozdev.org list.
&lt;/p&gt;
&lt;p&gt;
Services provided: source code hosting, bug tracking (Bugzilla), communication tools (lists, newsgroups, blogs, forums), file management tools, project tagging, wiki, statistics, permissions system and public planning.
&lt;/p&gt;
&lt;p&gt;
They&apos;ve experienced some grown pains in the last few years, but they&apos;re mostly solved now. They&apos;ve added developer resources to help develop their site, but they need more. Up until Firefox, they were the #1 place to go for Mozilla projects. They&apos;re still working on letting people know that they&apos;re around and have projects that are interested. They&apos;re looking for new avenues for funding.
&lt;/p&gt;
&lt;p&gt;
Moving forward: they&apos;ll be add more items to roadmap, making it easier for less technical folks to host and create extensions, solving the funding issue, and developing deeper relationship with Mozilla (MoFo and MoCo). Quite simply, they want to continue with their goal of supporting developers in order to proliferate Mozilla technologies.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Glen Foster, OpenSolaris&lt;/strong&gt;&lt;br/&gt;
&lt;em&gt;Hey - I had a beer with this guy last night at Kells!&lt;/em&gt; Rather than focusing on the older Solaris users, they want to move to focus on getting kids to learn and use it. A couple of months ago, they released 200805 and reduced 5 CDs down to a single live CD. The packaging system is now network based. They changes the default shell to bash and changed to GNU tools as they default as well.
&lt;/p&gt;
&lt;p&gt;
They introduced a new site - &lt;a href=&quot;http://opensolaris.com&quot;&gt;opensolaris.com&lt;/a&gt;. Since Sun released the source code 3 years ago, they&apos;ve had a long evolution of getting the source out the door. They were using Teamware and doing much of the development behind the door. Early next month, they&apos;re moving to Mercurial and they&apos;ll be moving all the source outside the firewall. They&apos;ll be using Bugzilla as their bug tracking system.
&lt;/p&gt;
&lt;p&gt;
Similar to Gentoo, they&apos;ve had quite a few people in their community that don&apos;t like change. They&apos;re working on fixing this and have had good progress. Several years ago, they created a governance system before they had a community. This was a mistake and their new community-driven governance system should work much better.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;GNOME, Dave Neary&lt;/strong&gt;&lt;br/&gt;
GNOME is a desktop environment and set of utilities. It&apos;s the default on Ubuntu and Fedora. It&apos;s the face of Linux on the Desktop. It&apos;s also a platform for development. They have a vibrant ISV community that includes Adobe, VMWare and IBM. In addition to desktop, GNOME is also a mobile platform. They also act as a big tent that provides an infrastructure for projects that are part of the GNOME ecosystem. 
&lt;/p&gt;
&lt;p&gt;
The most important thing to Dave is the shared vision of universal access to anyone and everyone. Very important things to the GNOME project: usability, internationalization and localization, accessibility (Sun and IBM have done a lot of work). Accessibility is something they&apos;ve really focused on in the last year. They&apos;ve created an Outreach Project for Accessibility and have gotten funding from Mozilla, Canonical and Google. Mozilla has done a lot to fund them and help provide accessibility for Rich Internet Applications. To see if a website is accessible, try it in lynx.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Subversion, John Mark Walker&lt;/strong&gt;&lt;br/&gt;
John is the Community Manager for openCollabNet and is not a Subversion developer. Subversion 1.4 was released in September 2006. There was much anticipating for 1.5 and was released last month. The people rejoiced. 
&lt;/p&gt;
&lt;p&gt;
What&apos;s new in 1.5? Merge tracking: easier to merge changes from trunk to branch and vise versa. You can also do sparse checkouts (replaces -N). Interactive conflict resolution so you can do it from the command line client. It also add changelist support. svn:externals is no longer required to be absolute (sweet!) and you can add peg revisions in your URLs. FSFS repos never change a rev after written to disk. Clients many now perform chained copy/move operations locally. It also supports moving multiple sources for copy and move. Client operations are now significantly more responsive to canceling operations. &quot;resolve&quot; subcommand replaces &quot;resolved&quot; (deprecated). Delete (remove) now takes a --keep-local option.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Now it&apos;s time for the fun stuff...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;Ken Drachnik had to leave for an emergency and is unable to give his talk on GlassFish. An audience member (Carl Fogel) volunteers to do his presentation. It&apos;s very funny, especially since he&apos;s not a Java Developer and has never heard of GlassFish. The only thing I got out of this presentation (besides lots of laughs) is that v3 will be released in June 2009.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Drizzle, Brian Aker&lt;/strong&gt;&lt;br/&gt;
Stored procedures, triggers, prepared statements and many other things have been discarded. &quot;One CPU to rule them, and in the query cache, bind them.&quot; If you have a query cache turned on in our database, turn it off or delete it.
&lt;/p&gt;
&lt;p&gt;
Drizzle is currently ~420K. The Master Plan is to rethink everything and not assume everything was bad. Also, they can reuse many other libraries w/o writing them from scratch. They don&apos;t have to ship every library because many are present on operating systems. In with the new: C99, Posix, package-lib. They&apos;re moving to a MicroKernal design and moving code to the edge. No new features will be in core. To add interfaces you have to remove code so there&apos;s an equal amount of code.
&lt;/p&gt;
&lt;p&gt;
Multi-Core support: no new locks, remove old locks. Think today (burn memory, messages scales). They can leverage Sun because they can build machines with more cores than anyone else.
&lt;/p&gt;
&lt;p&gt;
Field Types: Less primitives - now there&apos;s just one &quot;blob&quot;. Removed the 3 byte int and add UUID/IPV4(6). They dumped ACL because we authenticate in clouds. KISS.
&lt;/p&gt;
&lt;p&gt;
You can get involved with Drizzle at &lt;a href=&quot;http://launchpad.net/drizzle&quot;&gt;http://launchpad.net/drizzle&lt;/a&gt; (bzr branch lp:drizzle) and &lt;a href=&quot;http://launchpad.net/drizzle-discuss&quot;&gt;http://launchpad.net/drizzle-discuss&lt;/a&gt; (mailing list).
&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of</guid>
    <title>[OSCON 2008] Web Frameworks of the Future: Flex, GWT, Grails and Rails</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_web_frameworks_of</link>
        <pubDate>Wed, 23 Jul 2008 16:25:23 -0600</pubDate>
    <category>Open Source</category>
    <category>rails</category>
    <category>oscon</category>
    <category>rest</category>
    <category>gwt</category>
    <category>oscon08</category>
    <category>flex</category>
    <category>grails</category>
    <category>opensource</category>
    <category>webframeworks</category>
            <description>Below is the presentation I&apos;m &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/speaker/6444&quot;&gt;delivering at OSCON&lt;/a&gt; today. Unfortunately, I had to remove slides on GWT and Flex to fit w/in the 45 minute time limit. I hope to expand this presentation in the future, as well as continue to develop the side project I&apos;m working on using these technologies.
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=webframeworksofthefutureflexgwtrailsandgrails-1216842992390310-9&quot;/&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;//static.slideshare.net/swf/ssplayer2.swf?doc=webframeworksofthefutureflexgwtrailsandgrails-1216842992390310-9&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;div style=&quot;font-size: .9em; text-align: center&quot;&gt;
&lt;a href=&quot;http://www.slideshare.net/mraible/web-frameworks-of-the-future-flex-gwt-grail-and-rails-525747?src=embed&quot; title=&quot;View Web Frameworks of the Future: Flex, GWT, Grail, and Rails on SlideShare&quot;&gt;view on slideshare&lt;/a&gt; | 
&lt;a href=&quot;http://www.slideshare.net/mraible/web-frameworks-of-the-future-flex-gwt-grail-and-rails-525747/download&quot;&gt;download&lt;/a&gt;&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_caching_and_performance</guid>
    <title>[OSCON 2008] Caching and Performance: Lessons from Facebook by Lucas Nealan</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_caching_and_performance</link>
        <pubDate>Wed, 23 Jul 2008 16:18:15 -0600</pubDate>
    <category>Open Source</category>
    <category>oscon08</category>
    <category>facebook</category>
    <category>php</category>
    <category>scaling</category>
    <category>memcached</category>
    <category>oscon</category>
            <description>Facebook is not just a Social Networking Site, they&apos;re a &quot;Social Utility&quot;. They have the 4th most trafficked site in the world and over 90 million active users. Of those users, the average usage is 50 pages per day. There&apos;s currently over 24,000 platform applications. There&apos;s thousands of Apache web servers and hundreds of MySQL and Memcached servers.
&lt;/p&gt;
&lt;p&gt;
The biggest problem with scaling for Facebook is the complexity. Connecting to all the databases is impossible. They have a very large codebase - their homepage has 500 library files and 10,000 functions. Scaling affects resources, particularly with regards to memory consumption and socket connection limits. Cache retrieval is ~10% cpu-user of most pages.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Caching Layers:&lt;/strong&gt; $GLOBALS, APC, Memcached, Database, Browser Cache, Third Party CDN. 
&lt;/p&gt;
&lt;p&gt;The Globals Cache is a PHP function called &quot;cache_get&quot;. The Globals Cache works nicely in that it avoids calling APC and Memcached, but it still requires the overhead of a function call. APC (Alternative PHP Cache) is used for opcode caching (hundreds of included libraries, thousands of functions) and variable caching (hundreds of MB&apos;s of data). They use the APC for non-user specific data: network/school information, database information, useragent strings, hot application data, site variables and language strings (now the largest consumer of memory). They don&apos;t use it for User data because they don&apos;t send users back to the same server each time.
&lt;/p&gt;
&lt;p&gt;Friends page with a normal run takes 4050ms, with APC enabled it takes 135ms. You can also set apc.stat=0 to gain even more speed (128ms). To bust client-caching, they use APC+SVN with the SVN tag on the file and get the latest version from SVN and store it. Of course, this is a &quot;prime the pump&quot; thing that doesn&apos;t happen in production at runtime.&lt;/p&gt;
&lt;p&gt;The next layer of caching is Memcached. Facebook currently utilizes over 400 instances of Memcached and has made contributions back to the project. They use Memcached for user-specific data: long profile, short profile, friends and applications. They don&apos;t use the timeout feature, but rather use cache invalidation on SQL insert and update. It&apos;s harder to do when writing your application, but it&apos;s easier to maintain in the long run. To make Memcached faster, they created a PHP extension that reduced PHP function calling overhead and allowed UDP support. The Memcached extension runs ~10% faster realtime than in PHP space. 
&lt;/p&gt;
&lt;p&gt;Facebook likes for each page to render in under 250ms on the backend. To see how long a page took to load, you can mouseover the copyright at the bottom of the page, and a tooltip will show you the elapsed time.
&lt;/p&gt;
&lt;p&gt;This presentation is available online at &lt;a href=&quot;http://sizzo.org/talks&quot;&gt;http://sizzo.org/talks&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_google_xml_pages</guid>
    <title>[OSCON 2008] Google XML Pages (GXP) by Harry Heymann and Laurence Gonsalves</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_google_xml_pages</link>
        <pubDate>Wed, 23 Jul 2008 15:23:44 -0600</pubDate>
    <category>Open Source</category>
    <category>google</category>
    <category>gxp</category>
    <category>java</category>
    <category>conference</category>
    <category>oscon08</category>
    <category>oscon</category>
            <description>GXP is a templating system that Harry and Laurence developed at Google. It was original created by Laurence in late 2001 (Java run-time, compiler written in Python) as part of the AdWords rewrite. I&apos;m attending this session because I heard from a Google employee that they were using WebWork + their proprietary templating framework for the view. My suspicion is that GXP is that framework. The presentation I&apos;m listening to is available at the following URL:
&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://docs.google.com/Present?docid=dcbpz3ck_8gphq8bdt&quot;&gt;http://docs.google.com/Present?docid=dcbpz3ck_8gphq8bdt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Google XML Pages has the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;static type checking&lt;/li&gt;
&lt;li&gt;convenient parameter passing/modularization system&lt;/li&gt;
&lt;li&gt;partial markup validation&lt;/li&gt;
&lt;li&gt;automatic escaping of untrusted content&lt;/li&gt;
&lt;li&gt;encourages functional style, discourages side-effects&lt;/li&gt;
&lt;li&gt;internationalization support&lt;/li&gt;
&lt;li&gt;lightweight runtime&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GXP is an open source project &lt;a href=&quot;http://google-opensource.blogspot.com/2008/07/google-xml-pages-functional-markup.html&quot;&gt;as of today&lt;/a&gt; and is available at &lt;a href=&quot;http://gxp.googlecode.com&quot;&gt;http://gxp.googlecode.com&lt;/a&gt;. It&apos;s used by AdWords, AdSense, Checkout, Blogger, Analytics, Reader and many more.&lt;/p&gt;
&lt;p&gt;
HelloWorld.gxp:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;gxp:template name=&apos;com.google.sample.HelloWorld&apos;
              xmlns:gxp=&apos;http://google.com/2001/gxp&apos;&amp;gt;
Hello, World!
&amp;lt;/gxp:template&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Output:&lt;/p&gt;
 
&lt;pre&gt;Hello, World!&lt;/pre&gt;
&lt;p&gt;GXP has compile-time markup validation as well as static-type checking. GXP has native data types: for text/html, text/plain, text/css and text/javascript. It supports loops, conditionals, abbreviations, internationalization (i.e. &amp;lt;gxp:msg&gt;Hello, World&amp;lt;/gxp:msg&gt;)  with placeholders. You can call GXP in the same package using &amp;lt;call:GXPName&gt;. To call something outside a package, you can use &amp;lt;gxp:import&gt; to import packages or classes. You can also use a qualified XML namespace to access another package.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_an_introduction_to</guid>
    <title>[OSCON 2008] An Introduction to Ruby Web Frameworks by Ryan Carmelo Briones</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_an_introduction_to</link>
        <pubDate>Wed, 23 Jul 2008 12:33:08 -0600</pubDate>
    <category>Open Source</category>
    <category>ruby</category>
    <category>merb</category>
    <category>conference</category>
    <category>frameworks</category>
    <category>webframeworks</category>
    <category>rails</category>
    <category>rubyonrails</category>
    <category>oscon</category>
    <category>oscon08</category>
            <description>Ryan is a Server Monkey / Code Sumari for &lt;a href=&quot;http://www.theedgecase.com/&quot;&gt;Edgecase&lt;/a&gt;, LLC in Columbus, Ohio. A framework allows you to create re-usable code. Frameworks allow you to use encapsulation.  Frameworks tend to be domain specific. For example, Rails works really for CRUD application, but not for others (i.e. Twitter).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Why Ruby?&lt;/strong&gt;&lt;br/&gt;
Ruby has been Object Oriented since day 1. Ruby promotes Beautiful Code that&apos;s easy to read and maintain. Yes, MRI has performance issues. Matz has said &quot;I&apos;m a language designer&quot; and has turned over the VM to others for Ruby 1.9. Another thing that might keep folks from using Ruby or its web frameworks is the libraries available. This is understandable, but it&apos;s being solved by alternative implementations. This includes YARV (the official 1.9 implementation), JRuby, IronRuby (not ready for production) and MagLev.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rack&lt;/strong&gt;&lt;br/&gt;
A framework that provides a minimal API for connecting web services and web frameworks. As a web application developer, this framework allows us to know about web services, but not worry about the details of talking to it. Below is a very simple Rack application.&lt;/p&gt;

&lt;pre&gt;
class HelloWorld
  def call(env)
    [200, {&quot;Content-Type&quot; =&gt; &quot;text/plain&quot;}, [&quot;Hello World!&quot;]]
  end
end
&lt;/pre&gt;
&lt;p&gt;Rack allows the handlers do the work and not worry about the web server abstraction. Handlers exist for WEBrick, LightSpeed, Mongrel, Fast-CGI and many others. As an application developer, it allows you to choose different architectures (threaded, evented, etc.). Ryan is talking about Rack first because it&apos;s used in all the other Ruby web frameworks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt;&lt;br/&gt;
Rails is 4 years old now and was written by DHH when he was a contractor at 37Signals. Rails doesn&apos;t define and grand new ideas, everything has been done before (MVC, code generation, etc.). What Rails did is package everything in a unique way that makes it very easy to use. Rails has influenced a lot of what has come from web frameworks in the last few years. One of Rails&apos; nicest feature is code generation. Ryan showed part of DHH&apos;s &lt;a href=&quot;http://www.rubyonrails.org/screencasts&quot;&gt;Create a weblog in 15 minutes&lt;/a&gt; video to demonstrate code generation. He noted that the minute he showed was picked because David said &quot;Whoops!&quot; and &quot;Look at all the things I&apos;m not doing&quot;. Rails popularized Convention over Configuration using naming conventions and load paths. While this is definitely a cool feature, I think most web frameworks have adopted CoC by now. Maybe not JSF, but who wants to use JSF w/o a framework on top of it anyway?
&lt;/p&gt;
&lt;p&gt;One warning about Rails: &quot;The Golden Path&quot; can get in your way. Rails is very Opinionated Software and that&apos;s how Rails works. As long as you follow that, you should be very productivity. If you decide to go off the Rails (i.e. namespaces), it can be difficult.
&lt;/p&gt;
&lt;p&gt;Rails uses a DSL in its models (i.e. has_many, has_one for relationships) and in the Rails router. It allows you to very simply map a URL to a controller/method. In addition to DSLs, Rails has first-class testing and its generators create stub tests for you.&lt;/p&gt;
&lt;p&gt;Bad things about Rails: too much magic, moves to fast (too many releases).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Merb&lt;/strong&gt;&lt;br/&gt;
Merb was originally developed by Ezra Zygmuntowicz to run alongside a Rails app to handle file uploads. It grew from there and became it&apos;s own beast. Merb is very much about using only what you need. It has &quot;package repos&quot; that allow you to add additional features. For example, merb-core doesn&apos;t contain an ORM framework, just a web framework. Merb also allows you to choose your ORM. It&apos;s standardized on Rack, so it can run on just about any web server. It also included &quot;deferred actions&quot; that allow you to send some URLs to evented web servers and others to threaded web servers. Merb eschews the &quot;magic&quot; that Rails has. It tries to stay away from making it&apos;s code a &quot;monument to personal cleverness&quot;. Simple code scales better and runs faster.&lt;/p&gt;
&lt;p&gt;One of the downers to Merb is that it&apos;s flexibility allows you to get down to the nitty gritty. However, it can be less productive than Rails because of its flexibility. Another downside is its documentation and examples are sparse. Merb is not recommended if you&apos;re just getting into Ruby.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Camping&lt;/strong&gt;&lt;br/&gt;
Camping is a micro framework (&amp;lt; 4K) developed by &lt;a href=&quot;http://whytheluckystiff.net/&quot;&gt;why the lucky stiff&lt;/a&gt;. It&apos;s designed to develop small applications. You can do everything in one file and create prototypes very quickly. It uses &lt;a href=&quot;http://code.whytheluckystiff.net/markaby/&quot;&gt;Markaby&lt;/a&gt; to write HTML code in a builder-style fashion. 
&lt;/p&gt;
&lt;p&gt;
Since a Camping application is all in one file, it can be difficult to develop large applications. The solution is to write small apps and mount them in the same URL space. The only issue with small apps sharing the same space is they have to use the same database. One downside to Camping is there is no standard test framework. Mosquito was developed as a solution, but doesn&apos;t seem to be maintained.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sinatra&lt;/strong&gt;&lt;br/&gt;
Simple. Fast. Effective. It&apos;s designed to allow creating REST applications with minimal dependencies. Similar to Camping, it has one file for the entire application. Unlike Camping, Sinatra doesn&apos;t follow MVC conventions, so it may be difficult to port a Sinatra application to another framework.
&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_2008_the_keynote</guid>
    <title>[OSCON 2008] The Keynote</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_2008_the_keynote</link>
        <pubDate>Wed, 23 Jul 2008 11:29:21 -0600</pubDate>
    <category>Open Source</category>
    <category>conference</category>
    <category>oscon</category>
    <category>oscon08</category>
            <description>This morning, I woke up awful early to polish my presentation, walked to the train station and rode Amtrak from Salem to Portland. The commute was great: there&apos;s nothing better than traveling with power and an EVDO card + the option to get a cup of coffee. After getting off the train, riding The Max and walking to the Oregon Convention Center, I&apos;m now sitting in the Keynote at OSCON. Here&apos;s my notes from this session.
&lt;/p&gt;
&lt;p&gt;
10 years ago, leaders of the free software movement got together and tried to figure out a way to help people understand how to get access to software freedom. As they talked, there was a gradual meeting of minds. Finally, one person suggested &quot;Open Source&quot;. A few weeks later, there was a larger meeting of people and they heard about this term. It was an idea that changed the idea of software freedom and what free software was. We&apos;ve come along way since then. Last year, we heard about open source and and it trying to find identity in corporations. This year, we&apos;re hearing about corporations trying to find their identity in open source. 
&lt;/p&gt;
&lt;p&gt;
The official tag for this conference is: &lt;em&gt;oscon08&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Tim O&apos;Reilly&lt;/strong&gt;&lt;br/&gt;
While this is the 10th Anniversary of OSCON, it&apos;s also the 12th Anniversary of the O&apos;Reilly Perl Conference (where it all started). Tim began his activism with Perl when it got on the web. He was thinking about the internet and the online world, from the beginning (when many others were coming from Linux). Open Source was almost named &quot;SourceWare&quot;. Tim believes his biggest contribution is bringing Open Source and the Internet together.
&lt;/p&gt;
&lt;p&gt;
&quot;Keep your History&quot; - make the things you put online accessible for years to come.
&lt;/p&gt;
&lt;p&gt;
When OSCON first started, it was all about the OS Wars. Tim is showing a shirt with the famous Ghandi quote on it about &quot;First they laugh at you...&quot; and it has a Linux logo on the bottom. It&apos;s seems ironic that Microsoft is now one of the major sponsors of this conference (my thoughts, not Tim&apos;s).
&lt;/p&gt;
&lt;p&gt;
Open Source Technology in the Enterprise. IT jobs are 2.3% of all jobs posted, according to the Bureau of Labor Statistics. Technology oriented companies (e.g., Google, Yahoo, Sun) make heavy use of Open Source (40% of all jobs posted by Y!). Open source is growing faster in non-tech companies. Of the open source technologies in the enterprise, the highest share of jobs is Linux (19%), followed by Perl, JavaScript and PHP. As far as the fastest growing, Django and Alfresco are at the top.
&lt;/p&gt;
&lt;p&gt;
Three Big Challenges and Opportunities:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cloud Computing&lt;/li&gt;
&lt;li&gt;The (Open) Programmable Web&lt;/li&gt;
&lt;li&gt;Open Mobile&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Cloud Computing: Amazon Web Services, Google App Engine, The Engine Yard, etc.
&lt;/p&gt;
&lt;p&gt;
Jesse Vincent: &quot;&lt;a href=&quot;http://www.slideshare.net/IgniteBoston/12-jesse-vincent&quot;&gt;Web 2.0 is Sharecropping&lt;/a&gt;&quot;
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.oblomovka.com/wp/2008/07/16/getting-this-party-started/&quot;&gt;Danny O&apos;Brien&lt;/a&gt;: &quot;If we want people to have the same degree of user autonomy as we&amp;rsquo;ve come to expect from the world, we may have to sit down and code alternatives to Google Docs, Twitter, and EC3 that can live with us oon the edge, not be run by third parties.&quot;
&lt;/p&gt;
&lt;p&gt;
Basically, Tim is saying the that cloud computing is great, but it doesn&apos;t fit well with open source. This is primarily because if you build on a cloud, you have to be careful not to get locked into that platform.&lt;/p&gt;
&lt;p&gt;
Data is the &quot;Intel Inside&quot;.
&lt;/p&gt;
&lt;p&gt;
The Web is the Internet Operating System - the subsystems will be &lt;em&gt;data&lt;/em&gt; subsystems.
&lt;/p&gt;
&lt;p&gt;
Locking in data: iTunes and Amazon&apos;s Kindle. On the other hand you have Yahoo&apos;s BOSS, which is doing the opposite.
&lt;/p&gt;
&lt;p&gt;
We Need the Open Web Platform! Tomorrow&apos;s Keynote, &quot;Supporting the Open Web&quot; will talk much more about this.
&lt;/p&gt;
&lt;p&gt;
The Mobile Web has caused the &quot;browser wars&quot; to resurface. However, big companies like Google are putting a stake in the ground and saying &quot;We believe in open&quot;. Net Neutrality and The Open Handset Alliance are two of Google&apos;s smartest strategic decisions. They understand how much they depend on the open ecosystem.
&lt;/p&gt;
&lt;p&gt;
When we look at our success in the last 10 years, we can be really excited. But what&apos;s really impressive is how much we (as an open source community) is how we&apos;ve risen to new challenges and challenged the openness of new platforms and industries.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Christine Peterson&lt;/strong&gt;&lt;br/&gt;
&lt;a href=&quot;http://www.foresight.org/about/Peterson.html&quot;&gt;Christine&lt;/a&gt; is the President of the the Foresight Institute. Christine was the person who suggested the term &quot;open source&quot; at the meeting referenced above. Unfortunately, my first battery died as Christine was coming on stage, so I missed writing down the first 10 minutes of her 15 minute talk. She&apos;s talking about the openness vs. privacy of keeping US citizens safe. She started her talk apologizing for the ethnocentricity of her talk and moved to quickly note that the e-voting controversy wouldn&apos;t have happened if open source software was used.
&lt;/p&gt;
&lt;p&gt;
&quot;Who would have guessed that the folks with the pocket protectors would turn out to be the ones with the right stuff?&quot; -- LA Times
&lt;/p&gt;
&lt;p&gt;
Founding Geeks: Thomas Jefferson (mechanical geek) and Thomas Edison (electricity geek).
&lt;/p&gt;
&lt;p&gt;
You can&apos;t just complain about things. The fear is real. We can&apos;t just complain about how DC is solving problems, we have to step up and solve them ourselves.
&lt;/p&gt;
&lt;p&gt;
&quot;No Secret Software for Public Sensing Data.&quot;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Dirk Hohndel&lt;/strong&gt;&lt;br/&gt;
Dirk is the Chief Linux and Open Source Technologist at Intel. He&apos;s talking about Moblin: Linux for Next Generation Mobile Internet. This sounds like something that has been talked about a million times before. Why is it interesting today? Because we&apos;re at an open source conference and open source is what makes it interesting.
&lt;/p&gt;
&lt;p&gt;
When people look at Intel, they don&apos;t think of open source. However, Intel is very involved in open source and uses an open source methodology internally for their development process. They also have one of the largest grids powered by open source (~100K Linux servers).
&lt;/p&gt;
&lt;p&gt;
Moblin is about the internet, about mobility, about flexibility and extensibility. What&apos;s happening today is the ideas of 10 years ago have become affordable to produce (for manufacturers) and purchase (for consumers). There&apos;s lots of proprietary ways to develop the mobile web, but it needs to be open in order to prevent lock-in (to a platform) and encourage innovation.
&lt;/p&gt;
&lt;p&gt;
A year ago, Intel started &lt;a href=&quot;http://www.moblin.org/&quot;&gt;Moblin&lt;/a&gt;. Initially, there wasn&apos;t a lot of interest from open source developers. The majority of interest came from companies, particularly hardware vendors. To Dirk, this was disappointing as he really wanted a community to guide the project and make choices about the platform. There&apos;s lots of Open Mobile/Linux efforts out there, but there aren&apos;t any that are truly open - with access to the source code and everything else you&apos;d expect from an open source project. Intel was hoping to announce a cutting-edge infrastructure for Moblin here at OSCON, but they&apos;re a few weeks behind. They hope to be ready for soon.
&lt;/p&gt;
&lt;p&gt;
&quot;The hope that I have is the community takes this from us. Show us where to go. Show us where not to go. Help us get this right.&quot;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Tim O&apos;Reilly interviews Monty Widenius and Brian Aker&lt;/strong&gt;&lt;br/&gt;
Tim asks how it&apos;s going 6 months in. Monty responds that he&apos;s very happy they didn&apos;t have to go public and that Sun is still trying to figure out what they bought. One of the things difficulties they&apos;ve seen about encouraging Sun&apos;s engineers to be involved in open source is some are hesitant about open sourcing their code. The biggest problem is engineers are afraid of the feedback/scrutiny that their code will receive.
&lt;/p&gt;
&lt;p&gt;
MySQL was very unique as a company in that it was a virtual company, with most engineers working out of their homes. MySQL has become an enabling force for moving Sun to a similar model. 
&lt;/p&gt;
&lt;p&gt;
Monty is working on &lt;a href=&quot;http://dev.mysql.com/downloads/maria/index.html&quot;&gt;Maria&lt;/a&gt; (new storage engine) and Brian is working on &lt;a href=&quot;http://krow.livejournal.com/602409.html&quot;&gt;Drizzle&lt;/a&gt; (a slimmer version of MySQL). Drizzle was inspired by a conversation when Brian was talking to Rackspace&apos;s CTO. 
&lt;/p&gt;
&lt;p&gt;
&quot;Do less and then create extensibility mechanisms.&quot; -- Tim O&apos;Reilly
&lt;/p&gt;
&lt;p&gt;

</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_where_are_the_good</guid>
    <title>OSCON: Where are the good parties at?</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_where_are_the_good</link>
        <pubDate>Sun, 20 Jul 2008 12:28:39 -0600</pubDate>
    <category>Open Source</category>
    <category>portland</category>
    <category>opensource</category>
    <category>oscon</category>
    <category>oscon08</category>
    <category>parties</category>
            <description>&lt;a href=&quot;http://farm4.static.flickr.com/3059/2684026191_8befa29c4e_o.jpg&quot; title=&quot;Portland, Oregon&quot; rel=&quot;lightbox[portlandoscon]&quot;&gt;&lt;img src=&quot;//farm4.static.flickr.com/3059/2684026191_5b1ba21c73_t.jpg&quot; width=&quot;79&quot; height=&quot;100&quot; alt=&quot;Portland, Oregon&quot; class=&quot;picture&quot; /&gt;&lt;/a&gt;

&lt;em&gt;It seemed to &lt;a href=&quot;http://raibledesigns.com/rd/entry/javaone_where_are_the_good&quot;&gt;work pretty well for JavaOne&lt;/a&gt;, so let&apos;s try it for &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/content/home&quot;&gt;OSCON&lt;/a&gt;...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
This week, the best Open Source Conference will take place in the beautiful city of Portland, Oregon. I went to high school just south of Portland (Salem) for a couple years and my parents still live there. Portland is one of my favorite cities, my parents are two of my favorite people and OSCON is one of my favorite conferences. Seems like an excellent combination for a really fun week.&lt;/p&gt;
&lt;p&gt;
I&apos;ll be flying to Portland with Jack and Abbie on Tuesday. Wednesday I&apos;ll be at the show &lt;a href=&quot;http://en.oreilly.com/oscon2008/public/schedule/detail/2651&quot;&gt;speaking&lt;/a&gt;; Thursday I&apos;ll be there listening and likely blogging. I hope to catch a happy hour on at least one of those nights. Friday, my family and I will be heading to the &lt;a href=&quot;http://www.oregonbrewfest.com/&quot;&gt;Oregon Brew Fest&lt;/a&gt; followed by a night at &lt;a href=&quot;http://www.kennedyschool.com/index.php?loc=57&amp;amp;category=Location%20Homepage&quot;&gt;The Kennedy School&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;So when and where are the good parties at during OSCON 2008? Here&apos;s what I know about so far - I&apos;ll add to this list as comments start flowing in:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wednesday: &lt;a href=&quot;http://redmonk.com/&quot;&gt;RedMonk&lt;/a&gt; at &lt;a href=&quot;http://www.kellsirish.com/portland/index.php&quot;&gt;Kells&lt;/a&gt; (8-10), OpenSolaris/MySQL/Zend at &lt;a href=&quot;http://upcoming.yahoo.com/venue/97117/&quot;&gt;DoubleTree Hotel&lt;/a&gt; (8-12)&lt;/li&gt;
&lt;li&gt;Thursday: SourceForge Awards Party at &lt;a href=&quot;http://upcoming.yahoo.com/venue/8911/&quot;&gt;Jupiter Hotel&lt;/a&gt; (6-9), BeerForge III at &lt;a href=&quot;http://upcoming.yahoo.com/venue/83687/&quot;&gt;Bossanova&lt;/a&gt; (8-11)
&lt;/ul&gt;
&lt;p&gt;As far as finding me at the show, it&apos;s probably easiest to &lt;a href=&quot;http://twitter.com/mraible&quot;&gt;follow me on Twitter&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: A reader e-mailed me about &lt;a href=&quot;http://upcoming.yahoo.com/tag/oscon/&quot;&gt;http://upcoming.yahoo.com/tag/oscon&lt;/a&gt;. This seems to be an excellent source of OSCON party information. I&apos;ve updated the above list with the ones that look good on Wednesday and Thursday.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/apache_2_on_os_x</guid>
    <title>Apache 2 on OS X: Configuring mod_proxy and SSL</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/apache_2_on_os_x</link>
        <pubDate>Thu, 24 Apr 2008 10:58:03 -0600</pubDate>
    <category>Open Source</category>
    <category>osx</category>
    <category>apache</category>
    <category>mod_proxy</category>
    <category>ssl</category>
            <description>I recently had to setup Apache as a front-end web server for multiple backend servlet containers. The backend containers serve up different web applications, and the Apache front-end unites them from a hostname and port standpoint. The following instructions describe how to configure Apache 2 on Mac OS X to proxy requests to Tomcat or Jetty running on localhost:8080. It also shows how to enable SSL on Apache and force it for certain URLs in your Java web application.&lt;/p&gt;

&lt;p&gt;Apache comes pre-installed on OS X, so you should be able to start it by enabling &quot;Web Sharing&quot; in &lt;b&gt;System Preferences &amp;gt; Sharing&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;$APACHE_HOME on Leopard is &lt;b&gt;/etc/apache2&lt;/b&gt;. On Tiger, it&apos;s &lt;b&gt;/etc/httpd&lt;/b&gt;. If you&apos;ve upgraded Tiger to Leopard, it&apos;s likely you&apos;ll have both directories so make sure you&apos;re modifying the right one. I lost a few hours figuring this out, so hopefully this knowledge will appease some googler in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring mod_proxy&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Open $APACHE_HOME/httpd.conf and add the following on line 480 - at the very bottom, just before &quot;Include /private/etc/apache2/other/*.conf&quot;.

&lt;pre style=&quot;margin-top: 10px&quot;&gt;#
# Proxy Server directives. 
#
&amp;lt;IfModule mod_proxy.c&amp;gt;
    ProxyRequests On
    ProxyPreserveHost On

    ProxyStatus On
    &amp;lt;Location /status&amp;gt;
        SetHandler server-status

        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
    &amp;lt;/Location&amp;gt;

    ProxyPass    /myapp    http:&lt;span class=&quot;code-comment&quot;&gt;//localhost:8080/myapp
&lt;/span&gt;&amp;lt;/IfModule&amp;gt;&lt;/pre&gt;
&lt;p&gt;
  &lt;a href=&quot;http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost&quot;&gt;ProxyPreserveHost&lt;/a&gt; allows &lt;em&gt;request.getServerName()&lt;/em&gt; and &lt;em&gt;request.getServerPort()&lt;/em&gt; to work as if there is no proxy server in place. In other words, even though Tomcat is running on 8080, &lt;em&gt;request.getServerPort()&lt;/em&gt; will return 80.&lt;/p&gt;
  &lt;/li&gt;
	&lt;li&gt;The most important line is the last one as this is the dictates the location of your applications. Add more lines as you need to add more applications.&lt;/li&gt;
	&lt;li&gt;If everything is configured correctly, you should be able to run &lt;b&gt;sudo apachectl restart&lt;/b&gt; and navigate to &lt;a href=&quot;http://localhost/status&quot;&gt;http://localhost/status&lt;/a&gt;. If you receive a &quot;forbidden&quot; error, make sure your /etc/hosts has an entry mapping 127.0.0.1 to localhost (as one of the last entries), or change &quot;Allow from 127.0.0.1&quot; to &quot;Allow from localhost&quot;. If you get a &quot;Server not found&quot; error, you can tail the error log at &quot;/var/log/apache2/error_log&quot;.&lt;/li&gt;

&lt;/ol&gt;

&lt;p class=&quot;smokey&quot;&gt;
One issue I&apos;ve seen with mod_proxy is when a request comes in and the backend server is down. When this happens, Apache returns a &lt;strong&gt;503 Service Temporarily Unavailable&lt;/strong&gt; and it doesn&apos;t seem to go away after the backend server is restarted. It does resume proxying after a while, but I haven&apos;t determined what causes the proxy to come back to life. If you know a setting that forces mod_proxy to check for the backend server on every request, please let me know. 
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuring SSL&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Open $APACHE_HOME/httpd.conf and uncomment the following on line 470:
&lt;pre style=&quot;margin-top: 10px&quot;&gt;Include /&lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt;/etc/apache2/extra/httpd-ssl.conf&lt;/pre&gt;&lt;/li&gt;
	&lt;li&gt;Open $APACHE_HOME/extra/httpd-ssl.conf and change line 78 to:
&lt;pre style=&quot;margin-top: 10px&quot;&gt;ServerName localhost:443&lt;/pre&gt;&lt;/li&gt;
	&lt;li&gt;In httpd-ssl.conf, change line 99 to:
&lt;pre style=&quot;margin-top: 10px&quot;&gt;SSLCertificateFile &lt;span class=&quot;code-quote&quot;&gt;&quot;/&lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt;/etc/apache2/ssl.key/server.crt&quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
	&lt;li&gt;In httpd-ssl.conf, change line 107 to:
&lt;pre style=&quot;margin-top: 10px&quot;&gt;SSLCertificateKeyFile &lt;span class=&quot;code-quote&quot;&gt;&quot;/&lt;span class=&quot;code-keyword&quot;&gt;private&lt;/span&gt;/etc/apache2/ssl.key/server.key&quot;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;In httpd-ssl.conf, add the following after &lt;code&gt;SSLEngine on&lt;/code&gt; to allow proxying via HTTPS:
  &lt;pre style=&quot;margin-top: 10px&quot;&gt;SSLProxyEngine on&lt;/pre&gt;
  &lt;/li&gt;
	&lt;li&gt;Follow the &lt;a href=&quot;http://developer.apple.com/internet/serverside/modssl.html&quot;&gt;Using mod_ssl on Mac OS X&lt;/a&gt; tutorial. For &quot;Common Name/Server Name&quot;, use &quot;localhost&quot;. You can download the source for mod_ssl (which you need at one point during the tutorial) at &lt;a href=&quot;http://www.modssl.org/source/&quot;&gt;http://www.modssl.org/source/&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Run &lt;b&gt;sudo apachectl restart&lt;/b&gt; and go to &lt;a href=&quot;https://localhost&quot;&gt;https://localhost&lt;/a&gt;. If you get a &quot;Server not found&quot; error, run &lt;b&gt;sudo apachectl -t&lt;/b&gt; to verify the syntax of your config files or &lt;b&gt;tail -f /var/log/apache2/error_log&lt;/b&gt; to verify there are no errors in the log files.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;
&lt;strong&gt;Forcing HTTPS for certain URLs&lt;/strong&gt;&lt;br/&gt;
If you proxy requests from /myapp -&amp;gt; &lt;a href=&quot;http://localhost:8080/myapp&quot;&gt;http://localhost:8080/myapp&lt;/a&gt;, &lt;code&gt;request.isSecure()&lt;/code&gt; will return false. If you change it to /myapp -&amp;gt; &lt;a href=&quot;https://localhost:8443/myapp&quot;&gt;https://localhost:8443/myapp&lt;/a&gt;, &lt;code&gt;request.isSecure()&lt;/code&gt; will return true. I needed to figure out a way to have &lt;a href=&quot;http://localhost/myapp&quot;&gt;http://localhost/myapp&lt;/a&gt; go to &lt;a href=&quot;http://localhost:8080/myapp&quot;&gt;http://localhost:8080/myapp&lt;/a&gt; and &lt;a href=&quot;https://localhost/myapp&quot;&gt;https://localhost/myapp&lt;/a&gt; to go &lt;a href=&quot;http://localhost:8443/myapp&quot;&gt;http://localhost:8443/myapp&lt;/a&gt;. Even better, I wanted to configure things in a way so &lt;code&gt;request.isSecure()&lt;/code&gt; returned the value based on the originally requested URL, not on the proxied URL. Configuration like the following would be ideal:&lt;/p&gt;

&lt;pre&gt;ProxyPass    http:&lt;span class=&quot;code-comment&quot;&gt;//*/myapp    http://*:8080/myapp
&lt;/span&gt;ProxyPass    https:&lt;span class=&quot;code-comment&quot;&gt;//*/myapp   https://*:8443/myapp&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
The solution I came up with is to standardize on secure URLs in my application. That is, use &lt;strong&gt;/secure/*&lt;/strong&gt; as a prefix for all URLs that should be accessed via SSL. To follow this convention and force it, I added the following in my application&apos;s web.xml file:&lt;/p&gt;

&lt;pre&gt;&amp;lt;security-constraint&amp;gt;
  &amp;lt;web-resource-collection&amp;gt;
    &amp;lt;web-resource-name&amp;gt;Secure Area&amp;lt;/web-resource-name&amp;gt;
    &amp;lt;url-pattern&amp;gt;/secure/*&amp;lt;/url-pattern&amp;gt;
  &amp;lt;/web-resource-collection&amp;gt;
  &amp;lt;user-data-constraint&amp;gt;
    &amp;lt;transport-guarantee&amp;gt;CONFIDENTIAL&amp;lt;/transport-guarantee&amp;gt;
  &amp;lt;/user-data-constraint&amp;gt;
&amp;lt;/security-constraint&amp;gt;&lt;/pre&gt;

&lt;p&gt;Once this is in place, accessing &lt;a href=&quot;http://localhost/myapp/secure/index.html&quot;&gt;http://localhost/myapp/secure/index.html&lt;/a&gt; will result in an error. Accessing it using https will succeed. Following this, you can change your ProxyPass rules to the following and all requests to /secure/* will be https; other requests will be sent to http. The order of the rules below is important.&lt;/p&gt;

&lt;pre&gt;ProxyPass    /myapp/secure   https:&lt;span class=&quot;code-comment&quot;&gt;//localhost:8443/myapp/secure
&lt;/span&gt;ProxyPass    /myapp          http:&lt;span class=&quot;code-comment&quot;&gt;//localhost:8080/myapp&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;If this isn&apos;t a good strategy for you, Tomcat has the ability to use a redirectPort (in server.xml) that auto-redirects from http to https when CONFIDENTIAL is used in web.xml. I&apos;m not sure if this redirect will carry through values from a form post.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/history_meme</guid>
    <title>History Meme</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/history_meme</link>
        <pubDate>Wed, 16 Apr 2008 10:58:45 -0600</pubDate>
    <category>Open Source</category>
    <category>osx</category>
    <category>nerd</category>
            <description>From my 17&quot; MacBook Pro that sits at home and I don&apos;t use much on a day-to-day basis:
&lt;/p&gt;
&lt;pre&gt;
powers:~ mraible$ history | awk &apos;{a[$2]++}END{for(i in a){print a[i] &quot; &quot; i}}&apos; | sort -rn | head
148 mvn
71 cd
46 sudo
40 ls
27 java
23 ll
17 svn
16 echo
13 vi
10 mate
&lt;/pre&gt;
&lt;p&gt;From my 15&quot; MacBook Pro that I use on a daily basis:&lt;/p&gt;
&lt;pre&gt;
mraible-mn:~ mraible$ history | awk &apos;{a[$2]++}END{for(i in a){print a[i] &quot; &quot; i}}&apos; | sort -rn | head
83 cd
81 ls
79 sudo
65 mvn
39 mate
28 svn
19 vi
15 rm
12 open
7 tail
&lt;/pre&gt;
&lt;p&gt;Nothing too exciting.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/proposal_accepted_for_oscon_2008</guid>
    <title>Proposal accepted for OSCON 2008</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/proposal_accepted_for_oscon_2008</link>
        <pubDate>Mon, 17 Mar 2008 19:21:10 -0600</pubDate>
    <category>Open Source</category>
    <category>grails</category>
    <category>portland</category>
    <category>conference</category>
    <category>travel</category>
    <category>gwt</category>
    <category>oscon</category>
    <category>rails</category>
    <category>flex</category>
            <description>&lt;a href=&quot;http://en.oreilly.com/oscon2008/&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/oscon-logo-2008.gif&quot; width=&quot;96&quot; height=&quot;111&quot; alt=&quot;OSCON 2008&quot; class=&quot;picture&quot; style=&quot;border: 0&quot; /&gt;&lt;/a&gt;
From an e-mail I received earlier this afternoon:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
We are pleased to accept the following proposal for &lt;a href=&quot;http://en.oreilly.com/oscon2008/&quot;&gt;OSCON 2008&lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;
* Web Frameworks of the Future: Flex, GWT, Grails and Rails
&lt;br/&gt;&lt;br/&gt;
It has been scheduled for 16:30 on 23 Jul 2008.
&lt;/p&gt;
&lt;p&gt;My Abstract:&lt;/p&gt;
&lt;p class=&quot;smokey&quot;&gt;
What if the choices in web framework was reduced to 4? If RIA are the way of the future, it&apos;s possible that these 4 frameworks are the best choices for this development paradigm. This session will explore these frameworks, as well as entertain many other&apos;s opinions on the future of web development.
&lt;br/&gt;&lt;br/&gt;
RESTful backends are easy to create with both Rails and Grails. Ajax frontends are simple to create and maintain with GWT. Flex gives you flash and a pretty UI. If you&apos;re an HTML developer, Rails allows you to quickly develop MVC applications. If you&apos;re a Java Developer, GWT + Grails might be a match made in heaven. This session is designed to help you learn more about each framework and decide which combination is best for your project.
&lt;/p&gt;
&lt;p&gt;I&apos;m really looking forward to learning about GWT and Flex in the coming months. If you have any experience (or opinions) about the abstract above, I&apos;d love to hear it. The louder the better.&lt;/p&gt;
&lt;p&gt;For those who haven&apos;t been, OSCON is one of those truly special conferences. Possible reasons:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;It&apos;s only an hour from my parent&apos;s house
&lt;/li&gt;
&lt;li&gt;It&apos;s &lt;a href=&quot;http://raibledesigns.com/rd/entry/oscon_a_beautiful_time_of&quot;&gt;a beautiful time of year in Portland&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;It&apos;s always the same weekend as the &lt;a href=&quot;http://www.oregonbrewfest.com/&quot;&gt;Oregon Brewers Festival&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It&apos;s a kickass conference with the greatest diversity of Open Source Committers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;m going for all 4 reasons and even made a reservation to stay at &lt;a href=&quot;http://www.kennedyschool.com/index.php?loc=57&amp;amp;category=Location%20Homepage&quot;&gt;The Kennedy School&lt;/a&gt;. Should be a fun show.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/selenium_user_meetup_videos_posted</guid>
    <title>Selenium User Meetup Videos Posted</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/selenium_user_meetup_videos_posted</link>
        <pubDate>Wed, 5 Mar 2008 21:19:23 -0700</pubDate>
    <category>Open Source</category>
    <category>meetup</category>
    <category>selenium</category>
            <description>Videos of last week&apos;s &lt;a href=&quot;http://raibledesigns.com/rd/entry/last_night_s_selenium_users&quot;&gt;Selenium User Meetup&lt;/a&gt; have been posted on YouTube. You can watch them below or click on the video to watch it on YouTube. &lt;em&gt;Enjoy!&lt;/em&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;strong style=&quot;float: left; margin-left: 50px&quot;&gt;Lightning Talks&lt;/strong&gt;&lt;br/&gt;
&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/EDb8yOM3Vpw&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;//www.youtube.com/v/EDb8yOM3Vpw&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;strong style=&quot;float: left; margin-left: 50px&quot;&gt;Q and A Session&lt;/strong&gt;&lt;br/&gt;
&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/4y-3bllkkPc&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;//www.youtube.com/v/4y-3bllkkPc&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/last_night_s_selenium_users</guid>
    <title>Last Night&apos;s Selenium Users Meetup at Google</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/last_night_s_selenium_users</link>
        <pubDate>Tue, 26 Feb 2008 15:51:56 -0700</pubDate>
    <category>Open Source</category>
    <category>google</category>
    <category>selenium</category>
    <category>meetup</category>
    <category>testing</category>
            <description>Last night, I attended the inaugural &lt;a href=&quot;http://raibledesigns.com/rd/entry/selenium_users_meetup_in_mountain&quot;&gt;Selenium User Group meetup&lt;/a&gt; at Google&apos;s Campus in Mountain View. It was an excellent event, with many of the core committers on hand to present and answer questions. Each presenter had about 5 minutes to speak and we learned many things about the Selenium Project itself, what&apos;s coming in the future and how Google has standardized on Selenium as their integration testing tool of choice. 
&lt;/p&gt;
&lt;p&gt;
Patrick Lightbody started the meeting by going over a number of project statistics with pretty graphs and such. There were simply too many numbers to write down, so hopefully his slides will be published soon. I was pleased to see that Google did videotape the entire event, so it should be available online soon. I&apos;ll update this post when it it. Below are my notes from the event.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Jason Huggins, Test Engineer at Google&lt;/strong&gt;&lt;br/&gt;&lt;a href=&quot;http://selenium.openqa.org&quot;&gt;Selenium&lt;/a&gt; is a test automation framework. Some folks abuse it as a macro tool. There&apos;s two reasons Selenium became so popular: it was able to test Ajax before any other testing tool and it allows end-to-end workflow testing. Selenium works on any platform, with any browser and allows many, many languages. It&apos;s possible that other frameworks that are more focused are better. There are 4 Selenium products:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Selenium Core (TestRunner)&lt;/li&gt;
&lt;li&gt;Selenium IDE (for Firefox)&lt;/li&gt;
&lt;li&gt;Selenium Remote Control&lt;/li&gt;
&lt;li&gt;Selenium Grid&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Paul Hammant, Open Source Manager at Thoughtworks&lt;/strong&gt;&lt;br/&gt;
Selenium 1.0 - beta this week. RC, Core, Grid and IDE together. 1.0 will be shipped in a few weeks. Compared to today, lots of bugs killed, documentation improved and a greatly improved Selenium IDE.
&lt;/p&gt;
&lt;p&gt;
Selenium 1.1 will be shipped in a couple months. Selenium IDE will be enhanced to obey RC instruction ... becoming the best mode of operation when it ships.&lt;/p&gt;
&lt;p&gt;
Some experimental iPhone-Safari capability (dependent on SDK for iPhone).
&lt;/p&gt;
&lt;p&gt;
Selenium 2.0 will hopefully be released this year. Roll in of &lt;a href=&quot;http://webdriver.googlecode.com&quot;&gt;WebDriver&lt;/a&gt; functionality and code. New model-based API. IE plugin and Safari plugin (not really a plugin, most likely uses AppleScript).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;
Philippe Hanrigou (&lt;a href=&quot;http://ph7spot.com/&quot;&gt;http://ph7spot.com&lt;/a&gt;)&lt;/strong&gt;&lt;br/&gt;
Testing is good! Selenium is awesome! However, end-to-end web testing is &lt;em&gt;slow&lt;/em&gt;. It is and always will be slow. How do you solve this problem? You solve it the same way we&apos;ve solved slow traffic in the past - by building more lanes. Rather than one browser testing everything, &lt;a href=&quot;http://selenium-grid.openqa.org&quot;&gt;Selenium Grid&lt;/a&gt; allows multiple lanes and 20 browsers. Features include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Faster Builds, Faster Feedback!&lt;/li&gt;
&lt;li&gt;Easy Install and Everyday Use&lt;/li&gt;
&lt;li&gt;No Need to Change Your Tests&lt;/li&gt;
&lt;li&gt;Leverage Your Existing Computing Infrastructure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
One of the best parts about Selenium Grid is you can download and have it running in 10 minutes or less. Selenium Grid comes out-of-the-box with Amazon EC2 support.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jennifer Bevan, Lead from Selenium Farm Project at Google&lt;/strong&gt;&lt;br/&gt;

As of Friday, Google has over 50 teams running over 51K tests per day on internal Selenium Farm. 96% of these tests are handled by Selenium RC and the Farm machines correctly. The other 4% are partly due to RC bugs, partly to test errors, but isolating the cause can be difficult. Selenium has been adopted as the primary technology for functional testing of web applications within Google. That&apos;s the good news.
&lt;/p&gt;
&lt;p&gt;
The bad news is Google is pushing the limits of Selenium. Using Selenium (RC + Core) at this scale exposed certain issues not originally anticipated as high-impact. IE/XPath slowness has a high impaction given that can only run one test at a time. Tests can cause many conditions from which RC cannot easily or automatically recover (for example, tests that don&apos;t call stop() in every exit path). Unexpected browser dialogs, popups, etc. &lt;em&gt;eventually&lt;/em&gt; cause timeout exceptions.
&lt;/p&gt;
&lt;p&gt;
Googlers expect that RC will work for the most part, but they want it to be more reliable, with better performance. So they have:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Created utility methods to improve performance when examinging large tables, overlaying domain-specific languages, etc.&lt;/li&gt;
&lt;li&gt;Deployed retry policies based on failure reason.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Looking to the future - Google has not yet reached their expected usage of Selenium RC. Some projects cannot use the Farm until RC supports session-level configuration (not server-level). Many just want RC to be more reliable. So Google will:
&lt;ol&gt;
&lt;li&gt;Continue to contribute to RC, Core and to user-created helper libraries.&lt;/li&gt;
&lt;li&gt;Keep doing so until all failed tests are not Selenium&apos;s fault.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Dave Astels, Google (Driving Selenium with RSpec)&lt;/strong&gt;&lt;br/&gt;

Using RSpec, you can create a very easy-to-read Story with Scenarios that can be read (and likely written) by practically anyone. Dave then uses a small script to load up the stories and run them in Selenium. When he runs the script, the scenario is spit out and test pass/fail information. Learn more at &lt;a href=&quot;http://rspec.info&quot;&gt;rspec.info&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Alex Chaffee, Mad Scientist at Pivotal Labs (The Selenium/Ruby Project that Must Not Be Named)&lt;/strong&gt;&lt;br/&gt;
What is Polonium? It&apos;s also known as Selenium RC Fu or Selenium On Rails 2 or Funkytown. It has simple extensions to Selenium RC:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;wait_for&lt;/li&gt;
&lt;li&gt;element assertions&lt;/li&gt;
&lt;li&gt;launching/managing servers locally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Blackbox testing you&apos;re sitting out of the box and send in stuff. In whitebox testing, you get to open up the box and look at stuff. With Selenium, you can do Graybox testing, where you are doing blackbox testing (against the UI) and querying your database (or other resources) at the same time.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dan Faulich, Sr. QA Engineer at Redfin Corporation (How Not to Run a Successful Open Source Project)&lt;/strong&gt;&lt;br/&gt;
The first thing you don&apos;t want to do is &lt;em&gt;support everything&lt;/em&gt;. The second thing you don&apos;t want to do is write your project in JavaScript. While it&apos;s great that almost anyone can hack on it, running in a sandbox sucks. Don&apos;t use a language that&apos;s bound by other people&apos;s security restrictions. Don&apos;t roll your own multi-language remoting. It&apos;s written using XML + XSLT and its such a pain in the ass to maintain that Dan is the only one that fixes bugs.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Shinya Kasatani, Developer of Selenium IDE&lt;/strong&gt;&lt;br/&gt;
Selenium IDE is a Firefox extension that can record and play back tests in your browser. It can translate the recorded tests to many languages.
&lt;/p&gt;
&lt;p&gt;
Selenium IDE 1.0 adds support for TestSuites. Another new feature is better recording features - it detects when the DOM is modified. Shinya has a demo where he uses the new IDE to test the Dojo Dijit Theme Test Page. Apparently, this doesn&apos;t work in the current version.
&lt;/p&gt;
&lt;p&gt;
The Goal of Selenium IDE is to get more people interested in test automation of web applications and to help their projects to be successful.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Haw-bin Chai, Developer at CommerceHub&lt;/strong&gt;&lt;br/&gt;
XPath is a powerful selection took, but it&apos;d be great if we could use something like &quot;article 5&quot; instead of the cryptic //table[5]/tbody/... syntax.
&lt;/p&gt;
&lt;p&gt;
Why UI-Element? Traditional locations can be ugly and they don&apos;t convey purpose. UI-Element is a Selenium Core extension and has Selenium IDE integration. It&apos;s written in 100% JavaScript. Examples:
&lt;/p&gt;
&lt;pre&gt;
ui=frontPage::topStoriesCountry()
ui=listingPages::article(index=5)
ui=listingPages::articleSource(articleIndex=1)
&lt;/pre&gt;
&lt;p&gt;
The UI Map is in JavaScript shorthand. It contains logic to map ui locators to traditional locations. Each UI element implements &lt;code&gt;getLocator()&lt;/code&gt;, then you add a page set and add an element - all in JSON Format.
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Simon Stewart on Web Driver&lt;/strong&gt;&lt;br/&gt;
What on earth is Web Driver? One of the main problems with Selenium is it&apos;s written in JavaScript and it&apos;s too easy to hack. WebDriver is an idealized browser which allows you to do browser things like call get(URL), findElement(By.xpath()) and getTitle(). WebDriver is similar to Selenium RC, but it&apos;s not written using JavaScript. It&apos;s written in the native languages for each browser, which allows you to break out of the JavaScript Jail. The IE Driver is written in COM (C++). The Firefox Driver is written as a Firefox extension. Safari uses Apple events. 
&lt;/p&gt;
&lt;p&gt;
Soon there won&apos;t be a WebDriver project ... because it will be part of Selenium!
&lt;/p&gt;
&lt;p&gt;
WebDriver likely won&apos;t be part of the core until Selenium 2.0 later this year. One of the nice things about WebDriver is you can implement different browsers. Out-of-the-box, it will support all the major browsers, as well as HtmlUnit with JavaScript turned off.
&lt;/p&gt;
&lt;p&gt;I had a great time learning more about Selenium and how most of its problems will be solved in the near future. The beers afterwards weren&apos;t so bad either. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Videos of this event &lt;a href=&quot;http://raibledesigns.com/rd/entry/selenium_user_meetup_videos_posted&quot;&gt;have been posted&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/dynamic_language_shootout_groovy_vs</guid>
    <title>Dynamic Language Shootout: Groovy vs. Jython vs. JRuby</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/dynamic_language_shootout_groovy_vs</link>
        <pubDate>Wed, 20 Feb 2008 00:08:29 -0700</pubDate>
    <category>Open Source</category>
    <category>jython</category>
    <category>jruby</category>
    <category>groovy</category>
            <description>Travis Jensen has an interesting post titled &lt;a href=&quot;http://softwaremaven.innerbrane.com/2008/02/our-dynamic-language-shootout.html&quot;&gt;Our Dynamic Language Shootout&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
...&lt;br/&gt;
For a variety of deployment reasons, we&apos;ve decided that whatever we choose will be deployed on the JVM. As a result, this comparison is for the JVM versions of the languages, e.g. JRuby, Jython, and, of course, Groovy, which has no other deployment option. I want to also clarify that I have the most experience with Python and I really like the language. There is no doubt that the language influenced me in my evaluation, but I really tried to remain objective in spite of that.&lt;br/&gt;
...&lt;br/&gt;
As I did the evaluation, I tried to come up with a broad spectrum of important information. Others at my company gave feedback on the important characteristics. In the end, these are the features that we felt were most important: the interaction between Java and the selected language, the IDE support, the learning curve, existing web frameworks, and the existing community support for the JVM implementation of the language.
&lt;/p&gt;
&lt;p&gt;His conclusion: &lt;em&gt;Groovy&lt;/em&gt;.&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
I don&apos;t think it should surprise you at this point that we chose Groovy. Even being openly biases towards Python first and Ruby second (hey, it&apos;s cooler :), I could not, in good conscience, choose either of them for melding into our existing environment.
&lt;br/&gt;&lt;br/&gt;
If I were starting from scratch on a project, my choice would be very different. If I wanted to target the JVM, I would choose JRuby (at least until Jython 2.5 and Django are available); if I wasn&apos;t targeting the JVM, then it would be, for my Python, but I&apos;d be equally comfortable choosing Ruby.&lt;/p&gt;
&lt;p&gt;Well written Travis - I look forward to reading more about the new life you&apos;re breathing into your stilted development practices. </description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/denver_tech_meetup_consulting_panel</guid>
    <title>Denver Tech Meetup, Consulting Panel and My Jobs Timeline</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/denver_tech_meetup_consulting_panel</link>
        <pubDate>Thu, 24 Jan 2008 13:39:38 -0700</pubDate>
    <category>Open Source</category>
    <category>consulting</category>
    <category>meetup</category>
    <category>career</category>
            <description>If you live in Denver and are involved in open source (or simply technology in general), you should make it a point to attend tonight&apos;s &lt;a href=&quot;http://raibledesigns.com/rd/entry/denver_tech_meetup_january_24th&quot;&gt;Denver Tech Meetup&lt;/a&gt;. I&apos;m planning on going for about an hour. From there, I&apos;m heading over to the DeRailed User Group for a &lt;a href=&quot;http://groups.google.com/group/derailed/browse_thread/thread/d9201d1c0c7e000f&quot;&gt;Consulting Panel&lt;/a&gt; at 8. If you&apos;re interested in moving from a full-time position to contracting, you should come. This is open to the public, so anyone can attend.
&lt;/p&gt;
&lt;p&gt;While I was thinking about things to talk about on the panel tonight, I started reflecting on the jobs I&apos;ve had in my almost-11-year career in technology. Here&apos;s my timeline since college:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1997: Full-time at MCI Systemhouse&lt;/li&gt;
&lt;li&gt;1998: Contractor for IBM Global Services (6 figures w/in 6 months of graduating!)&lt;/li&gt;
&lt;li&gt;April 1999 - April 2001: Full-time for eDeploy.com (Friday lunches rocked)&lt;/li&gt;
&lt;li&gt;May 2001 - October 2001: Contractor for Douglas County (introduced to Ant, Struts, etc.)&lt;/li&gt;
&lt;li&gt;January 2002 - November 2002: Contractor for OnPoint Digital (100% remote)&lt;/li&gt;
&lt;li&gt;December 2002 - August 2003: Contractor for Comcast Media Center&lt;/li&gt;
&lt;li&gt;August 2003 - October 2003: Contractor for ResortQuest&lt;/li&gt;
&lt;li&gt;November 2003 - June 2004: Contractor for Adams County&lt;/li&gt;
&lt;li&gt;June 2004 - August 2004: Contractor for Open Logic&lt;/li&gt;
&lt;li&gt;October 2004 - December 2004: Contractor for Oak Grove Systems&lt;/li&gt;
&lt;li&gt;January 2005 - May 2005: Contractor for Xcel Energy&lt;/li&gt;
&lt;li&gt;June 2005 - January 2007: Contractor for Virtuas&lt;/li&gt;
&lt;li&gt;February 2007 - June 2007: Contractor for Checkerboard&lt;/li&gt;
&lt;li&gt;July 2007 - Present: Contractor for LinkedIn&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Phew - that&apos;s 14 jobs in 11-ish years! Notice that I&apos;ve only ever had 2 full-time positions. So far, I have no regrets and really enjoy being a consultant. If you&apos;re interested in learning more about how I started Raible Designs or how I get contracts, you might want to read the following posts. 
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;
&lt;a href=&quot;http://raibledesigns.com/page/rd/20021114#how_i_started_raible_designs&quot;&gt;How I started Raible Designs&lt;/a&gt; (Nov 2002)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://raibledesigns.com/page/rd?entry=how_do_you_become_an&quot;&gt;How do you become an independent consultant and get contracts?&lt;/a&gt; (Jan 2005)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you live in Denver and want to learn more - show up at the &lt;a href=&quot;http://hivecoop.pbwiki.com/&quot;&gt;The Hive&lt;/a&gt; at 8:00 tonight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update June 2008:&lt;/strong&gt; My 3rd full-time gig started in May. Now I&apos;m the &lt;a href=&quot;http://raibledesigns.com/rd/entry/the_linkedin_journey_continues&quot;&gt;Lead UI Architect at LinkedIn&lt;/a&gt;.
</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/denver_tech_meetup_january_24th</guid>
    <title>Denver Tech Meetup: January 24th at 6:30</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/denver_tech_meetup_january_24th</link>
        <pubDate>Fri, 11 Jan 2008 14:15:16 -0700</pubDate>
    <category>Open Source</category>
    <category>meetup</category>
    <category>denver</category>
            <description>From &lt;a href=&quot;http://redmonk.com/sogrady/2008/01/10/two-weeks-from-today-mark-it-down-denver-tech-meetup/&quot;&gt;the RedMonk Social Planner&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;Why our &lt;a href=&quot;http://www.flickr.com/photos/sog/2184181697/&quot;&gt;holiday decorations&lt;/a&gt; are still up, I couldn&amp;rsquo;t tell you, but I do have the answer you&amp;rsquo;re all looking for: the date of the next Denver Tech Meetup. You remember, the &lt;a href=&quot;http://denvertechmeetup.com/&quot;&gt;Denver Tech Meetup&lt;/a&gt;? The User Group without the User Group? But with beers? Denver&amp;rsquo;s least ambitious monthly(ish) (ha!) gathering of technology workers?
&lt;br/&gt;&lt;br/&gt;
Yes, I&amp;rsquo;ve failed spectacularly in my ambition to hold these things every other month, as was &lt;a href=&quot;http://pezra.barelyenough.org/blog/2005/10/denver-tech-meetup/&quot;&gt;the expectation&lt;/a&gt; back in 2005, but I&amp;rsquo;ve been a little busy. And as I&amp;rsquo;m fond of telling our clients, a percentage of something is better than an entirety of nothing, right?
&lt;br/&gt;&lt;br/&gt;
So ignore the inset picture - I posted it merely for nostalgic reasons; two Thursdays from today we&amp;rsquo;ll convene at our probationary new venue (my bartending friend is now way uptown) and frequent Jabber hangout, the Celtic. 18th and Blake, for the Denver folks in the audience. Still very easy walking distance for yours truly, not to worry.
&lt;br/&gt;&lt;br/&gt;
Let&amp;rsquo;s you and me cram as many Tech Meetups in as we can before I flee back east before the hell that is the Denver summer. If things break as I hope they will next week and the week after, it&amp;rsquo;s possible that I&amp;rsquo;ll have my own not-so-captive audience to drag along.
&lt;br/&gt;&lt;br/&gt;
See you at the Celtic. No Smithwick&amp;rsquo;s, sadly, but there is Murphy&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;It&apos;s shaping up to be a good month for meetups: &lt;a href=&quot;http://raibledesigns.com/rd/entry/tech_meetup_in_silicon_valley&quot;&gt;Silicon Valley next week&lt;/a&gt;, Denver the following. 

I&apos;m participating in a &lt;a href=&quot;http://groups.google.com/group/derailed/browse_thread/thread/d9201d1c0c7e000f&quot;&gt;Consulting Panel&lt;/a&gt; at the local Ruby on Rails user group that same night. Hopefully they won&apos;t mind if I have a couple cold ones beforehand. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt; 
</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/open_source_web_frameworks_mailing</guid>
    <title>Open Source Web Frameworks&apos; Mailing List Traffic - June 2007</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/open_source_web_frameworks_mailing</link>
        <pubDate>Thu, 26 Jul 2007 14:12:29 -0600</pubDate>
    <category>Open Source</category>
    <category>wicket</category>
    <category>tapestry</category>
    <category>flex</category>
    <category>struts</category>
    <category>grails</category>
    <category>stripes</category>
    <category>myfaces</category>
    <category>rubyonrails</category>
    <category>django</category>
    <category>gwt</category>
    <category>openlazslo</category>
    <category>turbogears</category>
    <category>webframeworks</category>
            <description>Who knows if these stats mean anything, but it does make a pretty graph. Current mailing list traffic leaders in the web framework space: Rails, Flex and GWT. For those frameworks with dev and users lists, these stats are from the users lists. If you find these numbers to be inaccurate, please let me know.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.flickr.com/photos/mraible/908369176/&quot; title=&quot;Open Source Web Frameworks Communities&quot;&gt;&lt;img src=&quot;//farm2.static.flickr.com/1319/908369176_811bbca419.jpg&quot; width=&quot;500&quot; height=&quot;294&quot; alt=&quot;Open Source Web Frameworks Communities&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Here&apos;s the numbers in case you want to create your own graphs:
&lt;ul&gt;
&lt;li&gt;Rails: 4056&lt;/li&gt;
&lt;li&gt;Flex: 3558&lt;/li&gt;
&lt;li&gt;GWT: 2305&lt;/li&gt;
&lt;li&gt;Django: 1951&lt;/li&gt;
&lt;li&gt;Wicket: 1718&lt;/li&gt;
&lt;li&gt;Struts: 1689&lt;/li&gt;
&lt;li&gt;Grails: 1307&lt;/li&gt;
&lt;li&gt;MyFaces: 1283&lt;/li&gt;
&lt;li&gt;Tapestry: 1268&lt;/li&gt;
&lt;li&gt;TurbyGears: 797&lt;/li&gt;
&lt;li&gt;Stripes: 206&lt;/li&gt;
&lt;li&gt;OpenLaszlo: 189&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/subversion_hosting</guid>
    <title>Subversion Hosting</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/subversion_hosting</link>
        <pubDate>Fri, 20 Apr 2007 08:24:13 -0600</pubDate>
    <category>Open Source</category>
    <category>hosting</category>
    <category>subversion</category>
            <description>&lt;a href=&quot;http://subversion.tigris.org&quot;&gt;&lt;img src=&quot;//static.raibledesigns.com/repository/images/subversion-logo.png&quot; with=&quot;162&quot; height=&quot;140&quot; alt=&quot;Subversion Logo&quot; class=&quot;picture&quot; style=&quot;border: 1px solid silver&quot; /&gt;&lt;/a&gt;
In years past, I never had much of a need for source control outside of open source projects I worked on. Now, as I create more and more training materials and presentations - it&apos;s essential. While I could host a Subversion repository myself, it doesn&apos;t seem like it&apos;s worth the hassle. I&apos;d prefer to have it hosted (and backed up regularly) outside of my house. This week I&apos;m looking to setup svn.raibledesigns.com.&lt;br/&gt;&lt;br/&gt;
I&apos;m not really looking to get my own Linux box hosted somewhere. I pay around $60/month to &lt;a href=&quot;http://kgbinternet.com&quot;&gt;KGB Internet&lt;/a&gt; for raibledesigns.com, demo.appfuse.org and appfuse.org. To get my own &quot;managed&quot; box is somewhere around $300/month. When I say &quot;managed&quot;, I mean &lt;a href=&quot;http://contegix.com&quot;&gt;Contegix-style&lt;/a&gt; where I can say &quot;install this&quot;, &quot;do that&quot; and they handle all the sys-admin for you. So all I&apos;m looking for is a reasonable SVN hosting provider that&apos;ll give me 1-2 GB for a reasonable price.  What&apos;s reasonable?  I&apos;d say $25-50 per month.&lt;br/&gt;&lt;br/&gt;
I did some googling and there&apos;s &lt;a href=&quot;http://weblogs.asp.net/fmarguerie/archive/2005/04/27/404793.aspx&quot;&gt;a lot of Subversion hosting providers&lt;/a&gt;. I e-mailed a few of them with my main question - &quot;can I point my subdomain at your servers?&quot; A few of them have gotten back to me, but now I&apos;m curious to hear from folks using these services. Are you using a Subversion hosting provider for your business? If so, which one?
&lt;br/&gt;&lt;br/&gt;
I&apos;m more interested in bad reviews than good ones - but if you&apos;re happy with a service, I&apos;d love to hear about it.
&lt;br/&gt;&lt;br/&gt;
The cheapest one I found is &lt;a href=&quot;http://svnrepository.com/&quot;&gt;SVNRepository.com&lt;/a&gt;. However, it&apos;s been an hour since I e-mailed them and I haven&apos;t had a response. Nevertheless, $10/month for 5 GB, unlimited repositories, Trac instances, etc. sounds pretty nice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update August 2, 2007:&lt;/strong&gt; I ended up going with &lt;a href=&quot;http://svnrepository.com/&quot;&gt;SVNRepository.com&lt;/a&gt; (Level Two - $6.95/month) and I&apos;ve been very happy with them. I&apos;m using them for Raible Designs&apos; artifacts (presentations, training materials) so I don&apos;t use it on a daily basis - more like monthly.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/upgrading_to_ubuntu_7_0</guid>
    <title>Upgrading to Ubuntu 7.0.4</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/upgrading_to_ubuntu_7_0</link>
        <pubDate>Fri, 20 Apr 2007 06:32:26 -0600</pubDate>
    <category>Open Source</category>
    <category>ubuntu</category>
    <category>linux</category>
            <description>You have to love how easy they make this.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;img src=&quot;//static.raibledesigns.com/repository/images/ubuntu-7.0.4.png&quot; alt=&quot;Ubuntu Upgrade&quot; width=&quot;384&quot; height=&quot;287&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;The time doesn&apos;t seem accurate as it originally told me it&apos;d be about an hour. Regardless, I love how easy it is to upgrade Ubuntu from one version to the next. I wish openSUSE had a similar feature.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update - 3.5 hours later:&lt;/strong&gt; This might take a while...&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;img src=&quot;//static.raibledesigns.com/repository/images/ubuntu-7.0.4-4hoursin.png&quot; alt=&quot;Ubuntu Upgrade - 4 hours later&quot; width=&quot;384&quot; height=&quot;287&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update - during FAC:&lt;/strong&gt; It&apos;s failed twice now and left my OS in a corrupted state both times.  I suspect the MADM (or whatever it&apos;s called) prompt at the end of the download. I&apos;ve entered &quot;all&quot; and &quot;none&quot; and it&apos;s failed with both values. VMWare rocks - I&apos;m so glad I didn&apos;t ruin a working system. I&apos;ll be sticking with 6.10 for a month or so.&lt;br/&gt;&lt;br/&gt;
... and &lt;a href=&quot;http://raibledesigns.com/rd/entry/upgrading_to_ubuntu_7_0#comment5&quot;&gt;Country Bry is right&lt;/a&gt; - calling it by it&apos;s code name vs. the version number is pretty cheesy. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_a_beautiful_time_of</guid>
    <title>OSCON: A beautiful time of year in Portland</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_a_beautiful_time_of</link>
        <pubDate>Thu, 20 Jul 2006 09:56:26 -0600</pubDate>
    <category>Open Source</category>
            <description>It&apos;s that time of year again for the excellent &lt;a href=&quot;http://conferences.oreillynet.com/os2006/&quot;&gt;OSCON&lt;/a&gt; conference. &lt;a href=&quot;http://raibledesigns.com/page/rd/20050803&quot;&gt;Last year&apos;s show&lt;/a&gt; was great, but I spent far too much time &lt;em&gt;in&lt;/em&gt; the conference, and not enough time enjoying summertime in Portland.  I have a fondness for Oregon in the summer.  I spent my last two years of high school in Salem (40 miles south of Portland) and remember loving life in August.  This was likely due to the fact that it rained most of the rest of the year.&lt;br/&gt;&lt;br/&gt;
This year, I&apos;m determined to enjoy Oregon more, and attend the conference less.  I have a pass, and I&apos;m doing a short 20-minute talk on &quot;7 Simple Reasons to use AppFuse&quot; (&lt;a href=&quot;http://conferences.oreillynet.com/pub/w/46/expo-hall.html&quot;&gt;2:00 Wednesday in the Expo Hall&lt;/a&gt;).  But that&apos;s about it.  The rest of the week, I hope to enjoy myself and not be pummeled with any new technology or buzzwords.  I might end up getting sucked into a session or two, but I&apos;m hoping I don&apos;t.  With any luck, I hope to visit both &lt;a href=&quot;http://www.mcmenamins.com/index.php?loc=3&quot;&gt;Edgefield&lt;/a&gt; and the &lt;a href=&quot;http://www.oregonbrewfest.com/&quot;&gt;Oregon Brewers Festival&lt;/a&gt;. Edgefield on Wednesday, Brewers Festival on Friday.&lt;br/&gt;&lt;br/&gt;
On Thursday, we&apos;re throwing another party at the Red Lion along with a host of other companies.  Last year, we had a SourceBeat/Virtuas party at the Red Lion on the patio.  The views of Portland were spectacular and it was definitely a good time.  This year, it&apos;s a &lt;a href=&quot;http://www.virtuas.com/geronimo/geronimolive&quot;&gt;Geronimo Live!&lt;/a&gt; party.  To register, please click on the image below.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;a href=&quot;http://www.virtuas.com/glive/index.html&quot;&gt;&lt;img src=&quot;//www.virtuas.com/files/pictures/virtuasrl.jpg&quot; width=&quot;428&quot; height=&quot;90&quot; alt=&quot;Register for Geronimo Live&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Thanks to the many sponsors of this event - we appreciate your support.&lt;/p&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;img src=&quot;//www.virtuas.com/files/pictures/partners.jpg&quot; width=&quot;426&quot; height=&quot;238&quot; alt=&quot;Geronimo Live Sponsors&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://raibledesigns.com/page/rd?entry=raible_road_trip_10&quot;&gt;Raible Road Trip #10&lt;/a&gt; begins this Sunday.  With any luck, I&apos;ll be able to snap some pics along the way and blog about our trip as we go.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/derailed_denver_rails_user_group</guid>
    <title>[DeRailed] Denver Rails User Group Meeting</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/derailed_denver_rails_user_group</link>
        <pubDate>Fri, 16 Jun 2006 07:37:20 -0600</pubDate>
    <category>Open Source</category>
            <description>Last night, Francis (Virtuas&apos; Operations Manager) and I went to the local Rails User Group meeting, better known as &quot;DeRailed&quot;.  This group was started by a good friend of mine, &lt;a href=&quot;http://jroller.com/page/derailed&quot;&gt;Fernand Galiana&lt;/a&gt;, who obviously doesn&apos;t know how to blog. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt; Since Virtuas is a sponsor, and I really like Rails technology, I felt like it&apos;d be a fun meeting to attend.  I wasn&apos;t disappointed.&lt;br/&gt;&lt;br/&gt;
The meeting was held 3 blocks from our offices at the downtown &lt;a href=&quot;http://tatteredcover.com&quot;&gt;Tattered Cover&lt;/a&gt;. The first presentation was by &lt;a href=&quot;http://www.guod.net&quot;&gt;Doug Fales&lt;/a&gt;, and he talked about his new soon-to-be-launched site called &lt;a href=&quot;http://walkingboss.com&quot;&gt;WalkingBoss&lt;/a&gt;.  With this site, he integrates GPS Data (GPX files) and Flickr photosets to allow you to easily plot your trips on a map.  It looks very easy to use, and somewhat inspired me to get a GPS device, and possibly a new (smaller) camera.  Doug&apos;s &lt;a href=&quot;http://www.guod.net/blog/bloglist&quot;&gt;blog&lt;/a&gt; has more in his most recent post.  Unfortunately, I don&apos;t see that his blog has permalinks, so this might be hard to find in the coming weeks.&lt;br/&gt;&lt;br/&gt;
The 2nd talk was &lt;a href=&quot;http://fortytwo.merseine.nu/presentations/metaprogramming/&quot;&gt;Ruby Meta Programming&lt;/a&gt; and was presented by Ara Howard. Since I don&apos;t know a whole lot about Ruby, this talk was over my head, but somewhat interesting nevertheless. There was about 20-25 people that showed up for this meeting and I found it to be a much younger and more down-to-earth group than the local DJUG.  Furthermore, almost &lt;em&gt;everyone&lt;/em&gt; went out for beers at the Rock Bottom afterwards, which is a lot different than DJUG (10-15 out of 75-100 usually go). Good meeting, good group of guys.  Thanks Fernand! </description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/getting_ready_for_the_sun</guid>
    <title>Getting ready for the Sun Fire T2000 Server</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/getting_ready_for_the_sun</link>
        <pubDate>Sun, 9 Apr 2006 18:38:06 -0600</pubDate>
    <category>Open Source</category>
            <description>&lt;a href=&quot;http://www.sun.com/servers/coolthreads/t2000/test/overview_a.jsp&quot;&gt;&lt;img src=&quot;//www.sun.com/servers/coolthreads/t2000/images/table/k2c_t2000_1.jpg&quot; alt=&quot;T2000&quot; width=&quot;150&quot; height=&quot;95&quot; style=&quot;border: 0&quot; class=&quot;picture&quot; /&gt;&lt;/a&gt;
Like &lt;a href=&quot;http://www.savoirtech.com/roller/page/jgenender&quot;&gt;Jeff&lt;/a&gt;, &lt;a href=&quot;http://bill.dudney.net/roller/comments/bill/Weblog/taking_sun_up_on_the&quot;&gt;Bill&lt;/a&gt; and &lt;a href=&quot;http://jroller.com/page/bsnyder?entry=sunfire_t2000_server_free_for&quot;&gt;Bruce&lt;/a&gt;, I signed up for the &lt;a href=&quot;http://www.sun.com/servers/coolthreads/t2000/test/overview_a.jsp&quot;&gt;free 60 day trial of the Sun Fire T2000 Server&lt;/a&gt;. Why? Because I heard you can get one for free if you blog about it enough. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt; My plans are to setup continous integration environments for &lt;a href=&quot;http://appfuse.org&quot;&gt;AppFuse&lt;/a&gt; and &lt;a href=&quot;http://rollerweblogger.org&quot;&gt;Roller&lt;/a&gt; using CruiseControl.  I also hope to do some performance tests b/w Java persistence and web frameworks. Finally, I&apos;d like to some single-server vs. clustered server performance tests using Tomcat. 
&lt;br/&gt;&lt;br/&gt;
When we built our house way back in 2004, we had it &lt;a href=&quot;http://raibledesigns.com/page/rd?anchor=house_project_drywall_has_started&quot;&gt;wired with fiber&lt;/a&gt;. Even though we still aren&apos;t using the fiber, I also had them install ethernet throughout.  Today, I finally took advantage of it.  I moved my cable modem downstairs and hooked up RJ45 connectors on both ends, so I can now plug my office network into an ethernet outlet on the wall.  Good thing my Dad is a network guy - he made it all pretty damn easy. 
&lt;br/&gt;&lt;br/&gt;
It was a great afternoon in Denver: 85 degrees, cold Fat Tires in the fridge, kids running around playing in the kiddie pool - and I got my house re-wired in under 30 minutes.  The &quot;old basement&quot; will soon become a server room.  Now I need a rack - for the T2000 as well as an old Dell Dimension Fedora box.  Any suggestions?</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/re_marketing_is_the_billion</guid>
    <title>RE: Marketing is the billion dollar question in open source</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/re_marketing_is_the_billion</link>
        <pubDate>Mon, 6 Mar 2006 23:14:20 -0700</pubDate>
    <category>Open Source</category>
            <description>Dana Blankenhorn has an interesting post titled &lt;a href=&quot;http://blogs.zdnet.com/open-source/?p=585&quot;&gt;Marketing is the billion dollar question in open source&lt;/a&gt;. I definitely agree with this. Good marketing of a project can make it successful, and bad marketing can kill it. It really is the hardest part of being an open source developer.  Sure it&apos;s fun to work on this stuff until the wee hours of the morning, but if no one (including yourself) appreciates your project (due to your lack of marketing), it really worth it? Compare that to wild enthusiasm by your users and people writing articles about your project. There&apos;s a stark contrast there.&lt;/p&gt;
&lt;p&gt;Some of the hottest open source projects are driven by marketing. &lt;a href=&quot;http://www.virtuas.com/node/177&quot;&gt;Read more&lt;/a&gt; (and comment) on &lt;a href=&quot;http://virtuas.com/blog/mraible&quot;&gt;my Virtuas blog&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/denver_tech_meetup_on_march</guid>
    <title>Denver Tech Meetup on March 9th</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/denver_tech_meetup_on_march</link>
        <pubDate>Thu, 23 Feb 2006 20:15:47 -0700</pubDate>
    <category>Open Source</category>
            <description>&lt;a href=&quot;http://www.redmonk.com/sogrady/archives/001323.html&quot;&gt;Stephen O&apos;Grady&lt;/a&gt;:&lt;/p&gt;
&lt;p class=&quot;quote&quot;&gt;
Ok, I know I dragged this out far too long - mostly due to travel concerns - but let&apos;s just pick a date and run with it. So the date for the next Denver Tech Meetup is now officially March 9th.
&lt;br/&gt;...&lt;br/&gt;
Venue will be - barring unforeseen circumstances - the same as last time, the Wazee Supper Club. It&apos;s easy to get to, close to some of the downtown offices, and most importantly, is my favorite.
&lt;br/&gt;&lt;br/&gt;
If you don&apos;t know what the Tech Meetup is all about, I like to describe it as a User Group meeting without the User Group; there&apos;s no common affiliation other than we&apos;re all in tech (and even that rule can be bent &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;)&quot; title=&quot;;)&quot; /&gt;, and no technical meetings - just the after-meeting beers/cocktails (and maybe food).
&lt;/p&gt;
&lt;p&gt;This meeting was a lot of fun last time.  &lt;a href=&quot;http://www.virtuas.com/blog/mfilios&quot;&gt;Matt Filios&lt;/a&gt; and I enjoyed talking to guys doing PHP, Rails and even some developers from the OpenSolaris project.  I highly recommend attending. </description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/opensuse_10_0_vs_ubuntu</guid>
    <title>OpenSuse 10.0 vs. Ubuntu 5.10</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/opensuse_10_0_vs_ubuntu</link>
        <pubDate>Thu, 5 Jan 2006 19:22:57 -0700</pubDate>
    <category>Open Source</category>
            <description>Ever since I got a new HP Pavilion, I&apos;ve been planning &lt;em&gt;what&apos;s next&lt;/em&gt; for my &lt;a href=&quot;http://raibledesigns.com/page/rd?entry=ebay_hooks_me_up_with&quot;&gt;Dell Dimension 8300&lt;/a&gt;.  I decided it&apos;s probably best to retire my somewhat hosed Fedora Core 3 box (Dimension 8100) and replace it with a new Linux server.  After talking with a &lt;a href=&quot;http://verticaltier.com/&quot;&gt;good friend&lt;/a&gt;, I decided to go with &lt;a href=&quot;http://opensuse.org&quot;&gt;OpenSuse&lt;/a&gt; 10.0 or &lt;a href=&quot;http://ubuntulinux.org&quot;&gt;Ubuntu 5.10&lt;/a&gt;.  Steve was a good enough friend to burn me DVDs of both.  Yesterday, I bought a new &lt;a href=&quot;http://www.compusa.com/products/product_info.asp?product_code=304907&quot;&gt;160GB hard drive&lt;/a&gt; and last night I tried to install Ubuntu.  I went w/ Ubuntu b/c Steve tried them both and said he liked Ubuntu a lot better. I&apos;ve never used Ubuntu, and I have used Suse a fair bit - so I figured I&apos;d try something new.
&lt;br /&gt;&lt;br /&gt;
When I started installing Ubuntu last night, I figured it&apos;d be a breeze.  I have a &lt;a href=&quot;http://www.gefen.com/kvm/product.jsp?prod_id=2949&quot;&gt;DVI KVM Switch&lt;/a&gt; hooked up to a &lt;a href=&quot;http://www.officemax.com/max/solutions/product/prodBlock.jsp?prodBlockOID=1611327748&quot;&gt;Logitech cordless keyboard/mouse&lt;/a&gt;, and Ubuntu immediately recognized them both.  However, at 44%, it failed to install gstreamer0.8-jpeg and the installation bailed out.  I was able to login to the desktop and (seemingly) get stuff working, but I&apos;m always a bit leary about a failure in the middle of an OS install.  After an hour of futzing with it, I tried again and got the same error.  Around 1 a.m., I said &quot;screw this&quot; and threw in the Suse DVD.
&lt;br /&gt;&lt;br /&gt;
I had the same good results with Suse, where my keyboard and mouse were recognized.  However, when I got prompted for the root password, my keyboard quit working and I was up shit creek.  I started the re-install process before going to bed at 2 and picked it up again this afternoon - after a beautiful day of skiing at Copper.  I got almost everything working on Suse this afternoon, and just as I was about to call things good - the keyboard problem came back. Pretty disappointing since I&apos;d just gotten my Apple Cinema Display to work.
&lt;br /&gt;&lt;br /&gt;
As I speak, I&apos;m trying Ubuntu again, without the KVM switch.  I suspect there&apos;s probably a piece of hardware I have that&apos;s causing the failure, so hopefully unplugging things will solve the problem.  If I don&apos;t get it figured out in the next hour or two, I&apos;ll probably just go with Suse, setup VNC - and get a wired keyboard for when I need direct access.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;24 hours later:&lt;/strong&gt; It&apos;s interesting to see that almost the commentors on this post are recommending Ubuntu.  After posting this, and receiving a comment from Brett, I tried the Ubuntu Live DVD.  What I found was that Ubuntu recognized my cinema display, but it entered into a non-stop flickering loop that I couldn&apos;t solve.  Therefore, I threw in the Suse DVD and tried again.  This time, Suse recognized everything flawlessly (including my HP OfficeJet G85). So I&apos;m sticking with Suse - mainly because it seems to recognize my cinema display, printer and DVI KVM switch the best. With apt-get working on Suse, it&apos;s been a breeze to get everything setup.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/january_denver_tech_meetup</guid>
    <title>January Denver Tech Meetup</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/january_denver_tech_meetup</link>
        <pubDate>Tue, 3 Jan 2006 15:10:22 -0700</pubDate>
    <category>Open Source</category>
            <description>Hey &lt;a href=&quot;http://www.redmonk.com/sogrady/&quot;&gt;Stephen&lt;/a&gt;, when&apos;s the next &lt;a href=&quot;http://www.redmonk.com/sogrady/archives/000992.html&quot;&gt;Denver Tech Meetup&lt;/a&gt;?  I propose next Thursday the 12th.  Whaddya think?</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/open_source_cms_evalation_part</guid>
    <title>Open Source CMS Evaluation - Part III: Implementation</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/open_source_cms_evalation_part</link>
        <pubDate>Wed, 28 Sep 2005 12:50:16 -0600</pubDate>
    <category>Open Source</category>
            <description>In my &lt;a href=&quot;http://raibledesigns.com/page/rd?anchor=open_source_cms_evaluation_part1&quot;&gt;last post&lt;/a&gt;, I narrowed my open source CMS candidates down to Joomla and Drupal.  I was hoping to have a choice made by Monday morning, implement the design in the morning, and populate the content in the afternoon.  Two days later and I&apos;m now where I was hoping to be on Monday morning. I&apos;ve spent the last two days implementing both Joomla and Drupal.  Monday, I spent most of the day with 
Joomla.  While it was easy to apply my own theme, I became very discouraged when I discovered I didn&apos;t have &lt;em&gt;full&lt;/em&gt; control over the HTML markup produced. All of the content I produced was wrapped with a &amp;lt;table&amp;gt; - and from what I could tell, it was impossible for me to change that w/o hacking Joomla&apos;s code.  
&lt;br /&gt;&lt;br /&gt;
Based on that discovery, as well as the overwhelming number of pro-Drupal comments I received, I moved on to implementing Drupal.  Monday night and yesterday were spent with Drupal.  It&apos;s been extremely frustrating, but mostly because of all the CSS I had to write.  The major problem with Drupal is the admin interface uses the same template as the reader interface.  I did find a nice way to use an existing theme for the admin, and our own for the reader - but decided not to use it because it would give content authors the wrong impression of what their stuff looks like.
&lt;br /&gt;&lt;br /&gt;
The majority of the time I&apos;ve spent with Drupal has been modifying templates and installing modules.  For the most part, Drupal doesn&apos;t come with everything you might need.  I found the &lt;a href=&quot;http://www.civicspacelabs.org/&quot;&gt;CivicSpace&lt;/a&gt; download to be much more complete with modules I needed.  In addition, it has an installer which makes things a bit easier to setup for a web designer.  I&apos;m currently using the Article module, which works quite well, but I wish I could create multiple blocks for different categories (taxomies).  Instead, I had to hack up my own block using some SQL to select all the &quot;news&quot; content types (for a &lt;em&gt;Recent News&lt;/em&gt; block).
&lt;br /&gt;&lt;br /&gt;
My biggest problem with Drupal continues to be my lack of knowledge.  Luckily, there&apos;s a plethora of information out there and a lot of people are using it.  I&apos;ve been able to use the Drupal Forums as well as Google to solve most of my issues.  Now the hard part comes - I need to show it to the designer/marketing folks and teach them how to use it.
&lt;br /&gt;&lt;br /&gt;
The &lt;a href=&quot;http://support.bryght.com/adminguide/how-to/dynamic-web20-brochure-site-in-an-hour&quot;&gt;brochure site in an hour tutorial&lt;/a&gt; was extremely helpful for me to get started with an About page, Contact Us page, and Press Releases. However, it says to use &quot;books&quot; to create pages, and I&apos;ve seen others recommend &quot;page&quot; and &quot;story&quot;.  So which is the best one to use?  Should I advocate using &quot;page&quot; for regular site pages, and then &quot;story&quot; for our articles and whitepapers?  Or should we use &quot;book page&quot; for the main pages.  I&apos;d like to limit the number of choices if possible.
&lt;br /&gt;&lt;br /&gt;
I think the major problem with using Drupal is going to be tweaking our template. Every time I see a new custom theme (like &lt;a href=&quot;http://www.codemonkeyx.net/&quot;&gt;this one&lt;/a&gt;) I want to steal stuff.  Right now, I&apos;m using a design from &lt;a href=&quot;http://oswd.org&quot;&gt;oswd.org&lt;/a&gt; and much of the CSS from the &lt;a href=&quot;http://spreadfirefox.com&quot;&gt;spreadfirefox&lt;/a&gt; theme.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Conclusion:&lt;/strong&gt; No CMS is perfect.  You&apos;ll have to hack it on one way or another to make it fit your needs.  Drupal seems to be used by many web designers w/ little to no programming skills.  Most folks love it and I&apos;ve received many, many positive comments about it.  I&apos;ve received hardly any positive comments about Joomla.  Zope and Plone also seemed to inspire hatred among some users.&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Lesson Learned:&lt;/strong&gt; Listen to your readers.  Other users&apos; experience is one of the most valuable indicators of a good open source project.
</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/open_source_cms_evaluation_part1</guid>
    <title>Open Source CMS Evaluation - Part II: Customization</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/open_source_cms_evaluation_part1</link>
        <pubDate>Mon, 26 Sep 2005 01:32:58 -0600</pubDate>
    <category>Open Source</category>
            <description>This is the third and final post in my quest to find the best open source
    CMS for my needs. Previous posts include &lt;a href=&quot;http://raibledesigns.com/page/rd?entry=building_a_website_with_an&quot;&gt;Building
    a website with an Open Source CMS&lt;/a&gt; and &lt;a href=&quot;http://raibledesigns.com/page/rd?entry=open_source_cms_evaluation_part&quot;&gt;Open
    Source CMS Evaluation - Part I: Installation&lt;/a&gt;. Based on these two posts,
    reader feedback, and my installation experience, the final round of candidates
    include &lt;a href=&quot;http://joomla.org/&quot;&gt;Joomla&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/&quot;&gt;Drupal&lt;/a&gt;, &lt;a href=&quot;http://www.magnolia.info/en/magnolia.html&quot;&gt;Magnolia&lt;/a&gt;,
    &lt;a href=&quot;http://www.opencms.org/opencms/en/&quot;&gt;OpenCms&lt;/a&gt; and &lt;a href=&quot;http://www.cromoteca.com/meshcms/&quot;&gt;MeshCMS&lt;/a&gt;.
    These are listed in the order that I expected the final rankings to be -
    just to let you know what my feelings were going into this final process. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The CMS I choose will be used  to build &lt;a href=&quot;http://virtuas.com&quot;&gt;Virtuas&apos;s
        website&lt;/a&gt;,
        as well as customers of Virtuas. By using a
        CMS to produce websites, the design is separated from the content - and
    the &amp;quot;adding content&amp;quot; process can be much easier for the customer. This
    greatly simplifies the &amp;quot;creating a website&amp;quot; process for us, and
    will likely save our customers a fair amount of design costs. In
    addition, it makes it much easier for site owner&apos;s to maintain the site after
    it&apos;s been published. &lt;/p&gt;
&lt;p&gt;As for &lt;a href=&quot;http://www.virtuas.com&quot;&gt;Virtuas&apos;s site&lt;/a&gt;, it&apos;s static right
    now, and we&apos;d like to change that. We want to ability to show recent blog
    posts on the front page, as well as make it easy for Practice Leaders to
    publish articles. In addition, it should be easy for our designers to change
    the design (1-2 files) and for our marketing team to add press releases and update existing content.
    Tomorrow, I&apos;ll be presenting my choice to the rest of the team, and we hope
    to design and start publishing content this week. Our goal is to have a new
    Virtuas site up and running one week from today.&lt;/p&gt;
&lt;p&gt;My goal today was to see how easy each CMS was to customize. In addition,
    I wanted to see how easy it was to publish an article,
    as well as to aggregate our latest RSS feed titles onto the homepage. To
    test the design customizability, I tried to reproduce the current &lt;a href=&quot;http://virtuas.com/&quot;&gt;Virtuas
    homepage&lt;/a&gt;. Then I published &lt;a href=&quot;http://virtuas.com/jgenender.html&quot;&gt;Jeff&apos;s
    Geronimo Article&lt;/a&gt;, and attempted to aggregate feeds from &lt;a href=&quot;http://winslow.linuxworld.com/&quot;&gt;Maria&apos;s&lt;/a&gt; and &lt;a href=&quot;http://jroller.com/page/bsnyder&quot;&gt;Bruce&apos;s&lt;/a&gt;    blogs.
    My main reason for
    putting the Java CMS&apos;es lower than the PHP ones in my suspected order of
    finishing is because I don&apos;t they don&apos;t have the RSS Aggregation
    feature.&lt;/p&gt;
&lt;p&gt;Rather than just jumping in and using each CMS in anger, I tried to start off by
    reading the documentation for each. My main focus was on how to customize,
    but I also looked for an RSS Aggregation feature and ease-of-publishing for
    articles. I read documentation for 15-20 minutes, then dived into creating
    a custom theme and adding content. I installed each CMS
    on my PowerBook, and used Safari and Firefox on OS X, as well as Firefox on Windows XP in some cases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MeshCMS &lt;/strong&gt; - I spent 40 minutes looking into MeshCMS before
    I knew it wasn&apos;t the one. The main problem I had with it was the &lt;a href=&quot;http://www.cromoteca.com/meshcms/help/installation/upgrade.html&quot;&gt;upgrade
    process&lt;/a&gt;. To upgrade to a new version, they recommend that you use symlinks
    to your files and store them in a separate location on the file system. While
    this may work for some, it seems a little brittle to me. I&apos;d rather use a
    solution that keeps everything stored &lt;em&gt;outside&lt;/em&gt; of the application
    by default. Creating a new theme was quite easy - but there didn&apos;t seem to
    be any support for multiple menus (i.e. global and local navigation), nor
    was there any means to customize the menu template.&lt;/p&gt;
&lt;p&gt;I did manage to blow up the whole application at one point, simply because
    I was missing a JSP tag in my template. Since I had this template selected
    for the administration as well - it hosed the whole application and spit out
    stack traces for each page. Luckily, renaming the template directory caused
    MeshCMS change to revert to the default settings and everything was fixed. The interesting
    thing about MeshCMS is it looks very similar to the SiteMesh+JSPWiki CMS
    I wrote a few weeks ago. However, mine allowed full menu creation by editing/creating
    wiki pages. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OpenCms&lt;/strong&gt; - When I installed OpenCms a couple of days ago,
    I initially did it on Windows. Everything worked fine and after waiting 18
    minutes for everything to import, I was able to browse and edit the default
    site. However, today was a different story. The version I installed on my
    Windows XP box no longer works. When I got to http://localhost:8080/opencms/,
    I get a directory listing with &amp;quot;resources&amp;quot; and &amp;quot;setup&amp;quot; on it. The same day
    I installed OpenCms on Windows, I installed it on my PowerBook. It took 38
    minutes to complete, but nevertheless, it said the process worked. Today
    I re-ran the setup and now I have the same result as on my Windows XP box.
    If the setup and installation is this fragile, I&apos;m not interested. Blame
    me and the fact that I&apos;m a redneck all you like, but the Magnolia installation is still functioning just
    fine. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Magnolia&lt;/strong&gt; - I spent about a half hour with Magnolia before
    I knew it wasn&apos;t for me. While the admin UI is impressive with all it&apos;s Ajax
    goodies, creating a new template is cumbersome and not designer-friendly
    at all. You have to create a &amp;quot;new node&amp;quot; and then a bunch of &amp;quot;data
    nodes&amp;quot;
    under that. The documentation (a QuickStart PDF) is 17 pages long and forgets
    to mention the &amp;quot;title&amp;quot; data node is needed before the template
    will show up properly as an option. Once you&apos;ve created a new template in the admin UI, you
    have to create the template on your file system - inside the web application.
    This may make it difficult to upgrade if you&apos;re deploying Magnolia as a WAR.
    The worst part is after creating the template, you have to &lt;em&gt;restart the
    server&lt;/em&gt;.
    WTF? That seems a bit ridiculous to me. Granted you&apos;ll likely be designing
    your master template in a development environment - but good luck installing
    Magnolia for a client and having them create a new template.&lt;/p&gt;
&lt;p&gt;One of the most interesting things about Magnolia is most of the folks who&apos;ve
    recommended it have highlighted that it&apos;s &amp;quot;built on the revolutionary Java
    Content Repository Standard JSR-170&amp;quot;. While I can admire the technical merits
    of this effort, it doesn&apos;t necessarily make this a good product. A good product,
    IMHO, is easy and intuitive to use. The admin interface for Magnolia is not
    intuitive. I like the fact that I can right-click on a page/node/etc., but
    on my Mac (with Firefox and Safari), the &lt;em&gt;real&lt;/em&gt; context menu shows
    up on top of the application menu after a second or two. I&apos;m going to pass on Magnolia
    due to the fact that its not designer friendly,
    as well as the fact that templates can&apos;t be edited in the browser. It looks
    like something that might be very interesting for developers, but it&apos;s simply
    not friendly for HTML developers. &lt;/p&gt;
&lt;blockquote&gt;
    &lt;p&gt;&lt;em&gt;At this point, it&apos;s 10:30 p.m. on Sunday night. I need to make a decision
            before I go to bed tonight and I&apos;m scheduled to meet with our designer
            at 7:00 a.m. to start implementing his new design. I haven&apos;t started
            the PHP options, and I&apos;ve had a couple new ones recommended on
            my blog while doing this evaluation today. Mal recommended &lt;a href=&quot;http://www.exponentcms.org/index.php?section=1&quot;&gt;Exponent&lt;/a&gt; and
            Jacob recommended &lt;a href=&quot;http://matrix.squiz.net/&quot;&gt;MySource Matrix&lt;/a&gt;.
            &lt;/em&gt;&lt;/p&gt;
    &lt;p&gt;&lt;em&gt;Because I&apos;m down to two choices (and I haven&apos;t tried to customize
            either one), I decided it was worth looking at both
            of these PHP solutions. Exponent installed easy enough, but MySource
            Matrix failed miserably. Joomla, Drupal and Exponent all had an easy-to-use
            web installer that *just worked*. MySource spit out a bunch of permissions
            errors (even after chmod -R 777 *) and told me I had to run .php
            files from the command line. Since the other options all installed
            easily, I decided not to continue evaluating MySource Matrix.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Exponent&lt;/strong&gt; - I didn&apos;t spend very long looking at Exponent. At
    first, I didn&apos;t think it had any documentation b/c it was a bit difficult
    to find on &lt;a href=&quot;http://www.exponentcms.org/index.php?section=3&quot;&gt;their
    site&lt;/a&gt;. Maybe it&apos;s because they don&apos;t have a background
    set on their site and my browser defaults to gray - making the gray text
    difficult to read. Even w/o documentation, I was able to navigate around
    the default Exponent site and figure out how to edit content. It&apos;s
    an easy UI to use, but again I was disappointed to find the &amp;quot;corporate&amp;quot; theme
    doesn&apos;t have a white background. Most good web designers know to set a default
    background color - and it always annoys me when someone misses this step. It&apos;s
    possible they don&apos;t set the background on purpose - like &lt;a href=&quot;http://yahoo.com&quot;&gt;Yahoo&lt;/a&gt; does.&lt;/p&gt;
&lt;p&gt;The deal-breaker with this CMS was that
    I couldn&apos;t edit any files w/in my browser to change anything (all I wanted
    was a white background). While it&apos;s theme management and templating
    looks powerful - it&apos;s another file-based system where you have to configure
    everything and then upload it. I agree that this is likely the path that
    web designers will want to use to get started - but I think it&apos;s important
    that files can be tweaked on-the-fly. Using a good FTP tool is certainly
    an option, but I&apos;d prefer theme-editing to be part of my CMS. The one thing
    I did like about this CMS was the clean URLs. Granted, they aren&apos;t
    static-looking by any means, but having a simple &lt;em&gt;?section=#&lt;/em&gt; seems
    cleaner than the multiple parameters that other systems use. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Drupal &lt;/strong&gt;- This CMS seems to have a lot of things I want/need
    as first class citizens. A blog, news feed aggregation and the ability
    to provide pretty URLs (aliases) for more cryptic CMS-type URLs. I couldn&apos;t
    get the URL aliases to work, but I suspect I was doing something wrong and
    didn&apos;t give it enough attention. I didn&apos;t spend a whole lot of time with
    this CMS, but rather just browsed around the admin interface and read a bit
    about how to create themes. I
    installed the &lt;a href=&quot;http://drupal.org/project/phptemplate&quot;&gt;PHPTemplate&lt;/a&gt; engine,
    but never installed any themes. When I found out I couldn&apos;t edit any
    of the uploaded templates contents, I started to get discouraged by Drupal. One
    thing I found disappointing, with both Drupal and Joomla, is they seemed
    to hard-code my server name into many of their URLs. When I installed
    these applications on my PowerBook, I used &amp;quot;localhost&amp;quot; for the server name. When testing out things from my Windows box, I couldn&apos;t
   even login to Drupal b/c it kept redirecting me to &amp;quot;localhost&amp;quot;. Joomla
   had a similar problem with localhost, except that it only screwed up stylesheet
   paths. I was still able to administer the application. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Joomla&lt;/strong&gt; - My time with Drupal was short-lived, mainly because
    I was itching to start playing with Joomla - which I&apos;ve heard a lot of good
    things about in the past week. Furthermore, it&apos;s got a &lt;em&gt;really &lt;/em&gt;good-looking  administration
    UI. It&apos;s the type of UI that a designer would look at and appreciate. When
    trying to edit pages from my Windows box - everything worked, but I couldn&apos;t
    save the page. No JavaScript errors or anything, there was simply no
    reaction. Editing pages and content from my PowerBook solved the problem. I
    was able to easily create a simple theme that looked like &lt;a href=&quot;http://virtuas.com&quot;&gt;virtuas.com&lt;/a&gt; and
    upload it. The theme isn&apos;t perfect, but it was easy enough to create using
    the Velvet theme from &lt;a href=&quot;http://joomlashack.com/&quot;&gt;Joomlashack.com&lt;/a&gt; as
    a template. The weird thing about Joomla, at least with the default install,
    is there&apos;s no notion of &lt;em&gt;pages&lt;/em&gt;. Everything is some sort of
    news item. In the pages I created, I was also unable to remove all the authoring
    notation and other junk that I don&apos;t want to show. The admin UI had
    options to remove the stuff, but even after &amp;quot;applying&amp;quot; the changes, they
    still showed up in the reader view.&lt;/p&gt;
&lt;p&gt;It&apos;s now 1:30 a.m. on Monday morning and the last three CMS&apos;s definitely didn&apos;t
    get the attention they deserved. Nevertheless, I think they&apos;re the
    best of the bunch. Not only were they much easier (and quicker) to
    install than the Java options, but their UIs are also good-looking and easy
    to use. Drupal
    and Joomla both seem like excellent choices. Drupal
    seems to be more of what I&apos;m looking for since it has all the features I
    want, and allows aliasing of URLs to make it appear like a static site. However,
    Joomla is a lot more eye-catching and that alone makes me want to use it. Neither
    of these CMS&apos;es seem to have a full-featured blogging engine, at least not
    one that&apos;s as good as &lt;a href=&quot;http://rollerweblogger.org&quot;&gt;Roller&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion: &lt;/strong&gt;I&apos;m going to recommend we use &lt;strong&gt;Joomla&lt;/strong&gt;,
    and look into doing some URL Rewriting to pretty up it&apos;s URLs. I doubt
    there&apos;s a whole lot we can do, but I&apos;d like to figure out a way to make them
    a bit more search engine friendly. Drupal seems like an excellent choice
    as well, but the fact that I can&apos;t edit templates from the UI kinda sucks. 
&lt;br /&gt;&lt;br /&gt;
Thanks
    for listening y&apos;all - all your comments and feedback during this evaluation have
    been great.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/open_source_cms_evaluation_part</guid>
    <title>Open Source CMS Evaluation - Part I: Installation</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/open_source_cms_evaluation_part</link>
        <pubDate>Fri, 23 Sep 2005 17:39:04 -0600</pubDate>
    <category>Open Source</category>
            <description>Today I began my journey in evaluating Open Source CMS applications.  The motivation for this adventure can be found in my post titled &quot;&lt;a href=&quot;http://raibledesigns.com/page/rd?anchor=building_a_website_with_an&quot;&gt;Building a website with an Open Source CMS&lt;/a&gt;&quot;.  Basically, I&apos;d like to find a good solution to build small-to-medium size websites.  I want full-control over the design and features, and it shouldn&apos;t be too hard to configure, install or administer.  I received many suggestions on my initial post, and thanks to these comments, I&apos;m considering the following CMS solutions:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alfresco.org/&quot;&gt;Alfresco&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://cocoondev.org/daisy/&quot;&gt;Daisy&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.magnolia.info/en/magnolia.html&quot;&gt;Magnolia&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bricolage.cc&quot;&gt;Bricolage&lt;/a&gt; (Perl)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cromoteca.com/meshcms/&quot;&gt;MeshCMS&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://atleap.dev.java.net/&quot;&gt;AtLeap&lt;/a&gt; (Java)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joomla.org/&quot;&gt;Mambo/Joomla&lt;/a&gt; (PHP)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupal.org/&quot;&gt;Drupal&lt;/a&gt; (PHP)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The reason &lt;a href=&quot;http://www.opencms.org/opencms/en/&quot;&gt;OpenCms&lt;/a&gt; didn&apos;t make this list is because of Tim Howland&apos;s &lt;a href=&quot;http://www.watchdogsystems.com/opencms/opencms/demos/index.jsp&quot;&gt;first demo&lt;/a&gt; (he left the link in a comment).  As soon as he dropped into a shell, I gave up.  I also tried OpenCMS a couple of years ago and couldn&apos;t get it to work.  I still have a bad taste in my mouth from that experience.
&lt;br /&gt;&lt;br /&gt;Of this list, I was able to eliminate 3 options quite quickly: Bricolage, MeshCMS and AtLeap.  Bricolage b/c their site was down for &lt;em&gt;days&lt;/em&gt; when I first started looking at CMSs.  In addition, it&apos;s written in Perl - of which I&apos;ve never written a single line - and I don&apos;t feel like I&apos;d be well suited to customize a Perl product.  As for MeshCMS and AtLeap, both of these were eliminated b/c of the lack of mailing list traffic. This represents a small community IMO and I&apos;d hate to start using a product that&apos;s not well supported or well documented.  This is unfortunate b/c I could probably customize these products easier than the rest.  Nevertheless, it&apos;s my &lt;em&gt;customers&lt;/em&gt; that are important, not me.
&lt;br /&gt;&lt;br /&gt;
This leaves me with three Java solutions (Alfresco, Daisy, Magnolia) and two PHP solutions (Joomla, Drupal).  I&apos;m not too keen on including Alfresco b/c I&apos;ve never heard of it, but readers of my last post recommended it, as well as my colleague &lt;a href=&quot;http://bill.dudney.net/roller/page/bill/Weblog&quot;&gt;Bill Dudney&lt;/a&gt; (another friend who forgot how to blog).  At first glance, there are a couple of major differences between the Java and PHP solutions.  The Java ones definitely take the cake on download size:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;Daisy 1.3.1: 59 MB&lt;/li&gt;
&lt;li&gt;Magnolia 2.1: 13.4 MB&lt;/li&gt;
&lt;li&gt;Alfresco 0.6 (with Tomcat): 30.3 MB&lt;/li&gt;
&lt;li&gt;Joomla 1.0.1: 1.7 MB&lt;/li&gt;
&lt;li&gt;Drupal 4.6.3: 447 KB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, large downloads is the nature of Java applications - but it&apos;s interesting to see the wide discrepancy b/c the 3 Java options listed here.  In addition, it&apos;s a little disappointing that I can&apos;t download Alfresco standalone - why does it *&lt;a href=&quot;http://www.alfresco.org/download.html&quot;&gt;have&lt;/a&gt;* to come with Tomcat or JBoss? Looking through the Tomcat directories and files - there doesn&apos;t seem to be any Alfresco-specific settings or files.  Why can&apos;t I just download the WAR?&lt;br /&gt;&lt;br /&gt;
My goal in this session was to install these different CMSs and see which were the easiest to install - as well as which had the features I need to continue evaluated them.  What I found was that &lt;strong&gt;Daisy is out of the running&lt;/strong&gt;.  This is primarily because it&apos;s a &lt;em&gt;wiki&lt;/em&gt;, not a CMS. No wonder the JSPWiki guy was impressed with Daisy a few weeks back.  Furthermore, the &lt;a href=&quot;http://cocoondev.org/daisydocs-1_3/13.html&quot;&gt;number of things you have to do&lt;/a&gt; to get Daisy installed is &lt;em&gt;very&lt;/em&gt; long.  
&lt;br /&gt;&lt;br /&gt;
Magnolia, on the other hand, was &lt;em&gt;very&lt;/em&gt; easy to install.  Drop two WAR files into Tomcat and 10 minutes later you have a CMS.  Yeah, that&apos;s a little scary - it took &lt;em&gt;10 minutes&lt;/em&gt; (647740 ms to be exact) to startup Tomcat after installing Magnolia.  While I appreciate the easy installation, I&apos;m still interested to see what kind of data store Magnolia is using.  Is it using an embedded database or what?  I didn&apos;t have time to look, but rather played around with the admin console a bit.  I was &lt;em&gt;very&lt;/em&gt; impressed with the admin console - even though I didn&apos;t figure out how to edit the homepage.  It appears to be using Ajax everywhere. Right-clicking to edit a page even brings up an application menu (rather than a browser menu).  Magnolia is impressive at first glance and will be included in Part II of my evaluation.
&lt;br /&gt;&lt;br /&gt;
Alfresco, with a 0.6 release, was almost off my radar.  The version number makes it seem like a very immature product - and the fact that it requires JDK 5 makes it seem even more immature.  Upon startup, it spit out a number of errors - but they seem to be well documented in its &quot;README_tomcat_linux.txt&quot; file.  I used OS X and despite the errors - everything appeared to be working OK.  However, when I pulled up http://localhost:8080/alfresco, I immediately understood why Bill likes it.  It looks like it&apos;s using JSF, and I&apos;m willing to bet it&apos;s using &lt;a href=&quot;http://myfaces.apache.org&quot;&gt;MyFaces&lt;/a&gt; (he&apos;s a committer on the project). The disappointing thing I noticed after pulling up the initial page is that it&apos;s a login page.  I&apos;d expect to see a &lt;em&gt;reader view&lt;/em&gt; initially rather than an &lt;em&gt;admin view&lt;/em&gt;. After logging in, the interface seems very nice and easy to work with.  However, after 30 seconds of clicking on stuff, I can&apos;t figure out how to get the reader view to show up - so I give up.  I&apos;m going to let this CMS graduate to Part II, but only because I didn&apos;t spend much time with it - and also because the UI looks quite polished.
&lt;br /&gt;&lt;br /&gt;
I installed and played around with Daisy, Magnolia and Alfresco all in a 3-hour period today.  First of all, I&apos;d like to give props to all the authors of these OS projects as each was installable according to its instructions and I didn&apos;t have to google for a single setting.  I installed Joomla and Drupal last week - both in under 10 minutes.  Joomla was definitely more impressive - mainly because it&apos;s &lt;a href=&quot;http://demo.joomla.org/&quot;&gt;default homepage&lt;/a&gt; (note: this can change every hour) looks pretty cool. Drupal, on the other hand, is a bit more &lt;em&gt;plain jane&lt;/em&gt;.  This is not a bad thing necessarily - as it might be easier to design with a clean slate rather than remove-features, then-design.  I did have to install PHP4 on my Mac to run both of these packages, but &lt;a href=&quot;http://serverlogistics.com/downloads.php&quot;&gt;Server Logistics&lt;/a&gt; made that super easy.  I also tried to install Joomla 1.0 on my Windows box (which has Apache 4.0.7 and PHP 4.3.3 from &lt;a href=&quot;http://openlogic.com/page.php?pname=software/overview&quot;&gt;BlueGlue&lt;/a&gt;), but it failed halfway through the install with errors that my user/pass for the database were wrong. Not a big deal, but frustrating since it works fine on the Mac (and yes, the user/pass I&apos;m using are correct).
&lt;br /&gt;&lt;br /&gt; 
Watch this space.  Part II will address customizing each CMS to use an already-created theme, as well as playing around with each&apos;s features.  I&apos;d prefer a package that has built-in support for multi-author blogs - so that might make Magnolia and Alfresco look bad.  However, I&apos;m not going to hold it against them since I&apos;m a &lt;a href=&quot;http://www.rollerweblogger.org/page/project&quot;&gt;Roller&lt;/a&gt; fan and committer.  I don&apos;t mind using a 2nd application for blogging - especially if the built-in package is less than full-featured.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Conclusion:&lt;/strong&gt; Alfresco, Magnolia, Joomla and Drupal are the easiest open source CMS applications to install (of the ones I looked at). Daisy was easy to install according to its instructions (of which there were many), but it&apos;s more of a Wiki than a CMS.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Update on Saturday at 1:00 p.m.&lt;/strong&gt; - Based on reader&apos;s feedback to this post, I went ahead and installed three more: &lt;a href=&quot;http://plone.org/&quot;&gt;Plone&lt;/a&gt;, &lt;a href=&quot;http://ez.no&quot;&gt;eZ publish&lt;/a&gt; (gotta love the domain name) and &lt;a href=&quot;http://www.opencms.org&quot;&gt;OpenCMS&lt;/a&gt;.  All the previous CMS applications I installed on OS X, and I installed these 3 on Windows XP. I installed OpenCMS first, and while the setup was easy, it took &lt;em&gt;18 minutes&lt;/em&gt; to finish its importing of data.  My Windows machine is easily 2x as fast as my PowerBook, so my guess is this would&apos;ve been quite painful on the ol&apos; Mac.  Regardless, it&apos;s a one time wait-fee, so I can&apos;t really ding them for that.  I played around with the Admin UI for about 5 minutes and found it &lt;em&gt;extremely&lt;/em&gt; easy to use - as well as intuitive.  I dig how you can view the content and edit it very easily.  I never had to read any documentation to figure out how to work this system.&lt;br /&gt;&lt;br /&gt;
Next up was eZ publish.  It took a bit of fiddling to get the installation to work.  I had PHP 4.3.3 installed with Apache 2.0.47, and I upgraded to PHP 4.4 before trying anything.  While setting up eZ publish, it told me it didn&apos;t work with 4.4, so I backed down to 4.3.3, after which it told me I needed &lt;em&gt;at least&lt;/em&gt; 4.3.4.  Thankfully, PHP is easy to install and upgrade on Windows and I got it all working fairly quickly.  Of the three (and all the CMS&apos;s in fact), eZ publish has the nicest installer.  The whole application and process gave me the feeling that it was the product I was looking for.  It&apos;s designed to help you setup a website, and allows you to choose templates, features, etc. along the way.  At the end, it stalls for a couple minutes - probably b/c it&apos;s creating everything and populating the database.  The first thing I didn&apos;t like was the URLs (/index.php/feature). I wonder if that can be changed to be more path-based?  Having an extension followed by additional slashes just doesn&apos;t seem right to me.  From there, I logged in as an administrator and started playing around with things a bit.  The Weblog feature seems very inadequate and doesn&apos;t even seem to support RSS.  In addition, I couldn&apos;t figure out how to edit any of the templates in my browser.  But the worst part was the admin UI was &lt;em&gt;sssllloooowwww&lt;/em&gt;.  It could have been b/c I had other stuff running, but I don&apos;t think so.  eZ publish seems like a good system to recommend to friends who want quick and easy websites, but I don&apos;t think it&apos;s one for me.
&lt;br /&gt;&lt;br /&gt;
The last CMS I installed was Plone.  It was easy to install on Windows, but only b/c it has an all-in-one installer.  I found it a bit strange that it doesn&apos;t install in a web server, but rather contains everything as part of the package.  This includes Python, its own web server, and its own database (I&apos;m assuming).  It&apos;s an easy install, but I like the idea of installing a CMS into an existing web server rather than having a CMS with an embedded web server.  The admin UI is simple enough to use, but it&apos;s very boxy and seems like it would be difficult to customize into a corporate or small business website.  Please let me know if you feel this to be untrue (pointing to existing &lt;em&gt;nice-looking&lt;/em&gt; installations would help).  I didn&apos;t like the fact that it highlights &lt;em&gt;members&lt;/em&gt; quite prominently, but that can probably be fixed with some good template-tweaking.  The most disappointing thing I found was that I was unable to edit &quot;skins&quot; within the admin console.  You have to download a separate package, customize it yourself, and then install it.  What a pain, especially since I&apos;d really like to be able to 1) modify template, 2) save and 3) view - just like this site allows me to do.  For this reason, as well as the embedded server feature, I&apos;m going to have to pass on Plone as well. 
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Conclusion 2:&lt;/strong&gt; Alfresco, Magnolia, Joomla, Drupal and OpenCMS are the CMS applications I will continue to evaluate this weekend.  I have to make a decision by Monday morning so I can start building a site with it.  If any of these CMS&apos;es don&apos;t allow me to customize its templates from a browser, please let me know so I can take it off my list.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Update on Sunday at 9:30 a.m.&lt;/strong&gt; - I&apos;m going to drop Alfresco and add MeshCMS for &lt;a href=&quot;http://raibledesigns.com/comments/rd/sunsets/open_source_cms_evaluation_part#comment21&quot;&gt;reasons stated here&lt;/a&gt;.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/building_a_website_with_an</guid>
    <title>Building a website with an Open Source CMS</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/building_a_website_with_an</link>
        <pubDate>Mon, 12 Sep 2005 11:48:14 -0600</pubDate>
    <category>Open Source</category>
            <description>I think the open source community has done an excellent job of figuring out how to create frameworks for developing web applications.  But what about &lt;em&gt;websites&lt;/em&gt;.  You know, the web presence that every company wants - for minimal cost.  For most companies, it&apos;s nothing more than 5-10 pages that tells a bit about the company, show some management folks and tells you how to get to their offices.&lt;br /&gt;&lt;br /&gt;
I&apos;ve developed many websites over the years, many that were static, but more that were dynamic. The unfortunate thing about all of them is they required someone technical to update them.  Often, the client had to contact me if they wanted anything new on the site.  I&apos;ve often thought there was a better solution - and I think I&apos;m at a point where I know what customers want, and I know how to provide it.  The solution is a Content Management Solution (CMS). One of the biggest problems with static websites is they&apos;re not dynamic enough.  A CMS can alleviate this problem by reducing the bottleneck that a traditional &quot;webmaster&quot; creates.
&lt;br /&gt;&lt;br /&gt;
In my mind, there are a couple of things that make a good CMS: 1) it&apos;s open source (to minimize costs to the client) and 2) it&apos;s easy to customize.  On the customization front, my demands are a bit more rigorous - mainly because I know what many folks want in a website.  Here are my main criteria for a good open source CMS  - when it&apos;s used to power a regular ol&apos; client-updateable website:
&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;strong&gt;Design customization:&lt;/strong&gt; I should be able to customize all the (X)HTML that&apos;s generated using one or two files (like SiteMesh allows). It should be possible to change the look and feel of *everything* by modifying some CSS.  It should also be possible to use Mike Stenhouse&apos;s &lt;a href=&quot;http://www.contentwithstyle.co.uk/Articles/17/a-css-framework&quot;&gt;CSS Framework&lt;/a&gt; to simplify layout choices for clients. Ideally, a web designer or regular ol&apos; HTML person could do the customization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static-looking URLs:&lt;/strong&gt; The site should look like a static site.  The URLs should be all lowercase and end with .html.  It should be possible to modify all the URLs to look as if all pages are static.  Apache&apos;s mod_rewrite and the URL Rewrite Filter are great tools for making this happen, but it&apos;d be nice if the administration of the application allowed for setting these rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It shouldn&apos;t look like a CMS:&lt;/strong&gt; No login links, no registration links, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ability to easily add dynamic content:&lt;/strong&gt; It should be easy to add dynamic content - such as RSS Feed headlines to pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Menu Customization:&lt;/strong&gt; In the application, it should be possible to create menus (both main and local navigation) and configure a page to highlight a menu when a particular page is shown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Versioning of pages:&lt;/strong&gt; In case someone messes something up, it should be easy enough to revert back to a previous version.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy to use:&lt;/strong&gt; It should be possible to train a marketing person (with little technical knowledge) how to use the system in 10-15 minutes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For technical companies (such as &lt;a href=&quot;http://virtuas.com&quot;&gt;Virtuas&lt;/a&gt;), there are a few additional requirements I&apos;d like to see:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;strong&gt;Articles with syntax highlighting:&lt;/strong&gt; It should be easy to publish articles with code that&apos;s colorized.  The &lt;a href=&quot;http://www.java2html.de/&quot;&gt;Java2HtmlPlugin for JSPWiki&lt;/a&gt; is a good example of this.  I currently don&apos;t know of any for XHTML, XML or scripting languages like Ruby or Python.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Upload:&lt;/strong&gt; For uploading white papers and other technical publications.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So I&apos;ve started looking at open source CMS&apos;s that fill my requirements.  Last weekend, I wrote a solution that fills all of these requirements using SiteMesh, JSPWiki, CSS Framework, Acegi Security and the URL Rewrite Filter. It only took me about 6 hours to complete, but after completing it - I started wondering if I really wanted to start another open source project and maintain it.  The answer is no, I don&apos;t want to create something new - I want to use something that&apos;s already out there.  However, since I do have something that satisfies all my requirements, I will use it if I can&apos;t tweak an existing OS CMS enough.
&lt;br /&gt;&lt;br /&gt;
Here are a list of CMS&apos;s that I&apos;ll be looking at in the next week or so.  If you&apos;re associated with any of these projects, please leave a comment and let me know how many of my requirements you satisfy.&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://cocoondev.org/daisy/&quot;&gt;Daisy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.magnolia.info/en/magnolia.html&quot;&gt;Magnolia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bricolage.cc&quot;&gt;Bricolage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://phpwebsite.appstate.edu&quot;&gt;phpWebsite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joomla.org/&quot;&gt;Mambo/Joomla&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I&apos;m a bit hesitant on Daisy b/c it requires XSLT knowledge for design customization. Magnolia has long URLs and doesn&apos;t appear like a static site - and the PHP ones often have .php in their URLs.  It should be an interesting investigation to see if these (seemingly) heavyweight solutions can solve a few simple requirements.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_wednesday_morning</guid>
    <title>[OSCON] Wednesday Morning</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_wednesday_morning</link>
        <pubDate>Wed, 3 Aug 2005 11:15:08 -0600</pubDate>
    <category>Open Source</category>
            <description>I got a good night&apos;s sleep last night so I&apos;d be fresh and ready for the &lt;em&gt;&lt;a href=&quot;http://conferences.oreillynet.com/cs/os2005/view/e_sess/6831&quot;&gt;Smackdown&lt;/a&gt;&lt;/em&gt; today.
    Matthew Porter, Scott Delap and I visited &lt;a href=&quot;http://www.jivesoftware.com/&quot;&gt;Jive
    Software&apos;s&lt;/a&gt; offices last night and had a great time sipping suds in their
    beautiful downtown office. 
&lt;br /&gt;&lt;br /&gt;
My AppFuse tutorial yesterday was well-received by a packed room of developers.  Rather than writing code the whole time and doing a measly 30-slides, I added a bit more meat about Spring, Hibernate and testing. Most of audience was unfamiliar with Spring, so this seemed like the right thing to do.  
Of course, this led to more talking and less coding, but most of the folks I talked to were nevertheless very happy with the tutorial.  If you&apos;d like, you can &lt;a href=&quot;http://appfuse.dev.java.net/TDDWithAppFuse.pdf&quot;&gt;download my presentation&lt;/a&gt; from the event.
&lt;br /&gt;&lt;br /&gt;
Thanks to &lt;a href=&quot;http://www.robharrop.com/blojsom/blog/&quot;&gt;Rob Harrop&lt;/a&gt; and &lt;a href=&quot;http://www.jroller.com/page/buggybean&quot;&gt;Thomas Risberg&lt;/a&gt; for both letting me know about the lack of Spring experience, as well as sitting in on my session.  It was pretty cool having these guys in the room, as well as SiteMesh/jMock inventor &lt;a href=&quot;http://joe.truemesh.com/blog/&quot;&gt;Joe Walnes&lt;/a&gt;. Without these guys, many of the cool features in AppFuse would not be possible.
&lt;/p&gt;
&lt;p&gt;Now I&apos;m sitting in the beginning Keynote session at OSCON, where they&apos;ve announced
    they have a record 2000 attendees this year. In addition, it looks like OSCON
    is in Portland for the long run - this is the 3rd year it&apos;s been in Portland.
    Rather than moving to a new city like they used to, they&apos;ve decided to stay
    b/c conference attendees like it so much. &lt;/p&gt;
&lt;p&gt;The &amp;quot;unofficial&amp;quot; tagline of the conference is &lt;em&gt;fun.&lt;/em&gt; Open
    source is fun and exciting - both to develop and use. This is in stark contrast
    to closed source software that tries to stay stable and boring, with no surprises. &lt;/p&gt;
&lt;p&gt;When O&apos;Reilly&apos;s &lt;a href=&quot;http://codezoo.com&quot;&gt;CodeZoo&lt;/a&gt; launched, it only
    listed Java open source projects. As of today, they&apos;ve added 
    &lt;a href=&quot;http://python.codezoo.com&quot;&gt;python.codezoo.com&lt;/a&gt; and &lt;a href=&quot;http://ruby.codezoo.com&quot;&gt;ruby.codezoo.com&lt;/a&gt;, in addition to &lt;a href=&quot;http://java.codezoo.com&quot;&gt;java.codezoo.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim O&apos;Reilly &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O&apos;Reilly is not just book publisher or conference producer - but also a company
    that looks to the future and tries to figure out what&apos;s next. To highlight
    this vision, they&apos;ve created &lt;a href=&quot;http://radar.oreilly.com/&quot;&gt;O&apos;Reilly
    Radar&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;We&apos;re currently going through &amp;quot;The Open Source Paradigm Shift&amp;quot;. Integration
    of commodity components has led to a new model where value gets captured.
    Rather than being at the software level, it&apos;s at the services level.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Questions for Open Source Advocates&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;Will &amp;quot;web 2.0&amp;quot; be an open system? What do &amp;quot;open services&amp;quot; look like?&lt;/li&gt;
    &lt;li&gt;Data as the &amp;quot;Intel Inside&amp;quot; - will we end up needing a Free Data Foundation
            in 2010?&lt;/li&gt;
    &lt;li&gt;How does the paradigm shift change our business models and development
        practices?&lt;/li&gt;
    &lt;li&gt;Who shoujld we be watching and learning from? &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Things on O&apos;Reilly&apos;s Radar&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;&lt;strong&gt;Ruby on Rails:&lt;/strong&gt; new platform and new language. May well be the Perl of
        Web 2.0.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;GreaseMonkey:&lt;/strong&gt;  a Firefox extension that alters websites to fit your
        view. A website is traditionally closed. GreaseMonkey &amp;quot;opens up&amp;quot; a website
        and rewrites it for the user.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;HousingMaps.com:&lt;/strong&gt; leveraging Google Maps and existing data from a
        bunch of different webservices to build a better website.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Ajax:&lt;/strong&gt; html, javascript and css. The &amp;quot;css&amp;quot; tag on del.icio.us has gone
        down as the &amp;quot;ajax&amp;quot; tag has gone up.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Findory:&lt;/strong&gt; Uses the articles you like in blogs and news, and finds similar
        articles. Similar to Amazon&apos;s recommendation system. &lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Internet Telephony:&lt;/strong&gt; Asterisk in particular. Skype and Broadvoice. Broadvoice
        is pushing BYOD (Bring Your Own Device). &lt;/li&gt;
    &lt;li&gt; &lt;strong&gt;HomeBrew&lt;/strong&gt;: similar to Tivo.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Firefox&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Opening up hardware&lt;/strong&gt;, not just software - i.e. Car PC Hacks, Smart Home
        Hacks. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more, go to the Visualizing Technology Trends on Thursday afternoon.
        For the first time, the computer book market has stabilized. This is
        a good sign that the computer industry is about to start rebounding.
        As far as the book market goes, it&apos;s market share and growth - Java still
        leads the pack by a pretty wide margin. A large reason of this is due
        to Open Source Java. &lt;a href=&quot;http://www.simplyhired.com/&quot;&gt;SimplyHired.com&lt;/a&gt; spiders
        7.9M jobs on 755 different job boards. General books on Linux are up,
        especially non-RedHat distros. Books on RedHat have decreased significantly.        &lt;/p&gt;
&lt;p&gt;This is an interesting conference to be at when you&apos;re a Java developer.
            For the most part, everyone seems to be Perl fans, followed by Python,
            and a few Ruby guys. Most of these developers are very vocal about
    the fact that they don&apos;t like Java. Then again, Java is the leader in many
            areas - and it&apos;s the &lt;em&gt;open source way&lt;/em&gt; to hate the guy on
            top.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kim Polese, SpikeSource&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Building on the Architecture of Participation. A transformation from Do It
    Yourself (DIY) to Do It Together (DIT). Thanks to the architecture of participation,
    open source has achieved World Domination - as evident by governments mandating
    it and IBM pouring billions into it. &lt;/p&gt;
&lt;p&gt;The architecture is characterized by:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;Commoditization of software&lt;/li&gt;
    &lt;li&gt;Network-enabled
                        collaboration&lt;/li&gt;
    &lt;li&gt;Software customizability&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In Phase I, we built and we built with. Open source had DIY origins. Now we&apos;re
    in Phase II, where increasingly the action is out in the &lt;em&gt;long tail&lt;/em&gt;.
    Countless new building materials are piling up on the long tail. Now it&apos;s
    possible to build just about anything with anything. IT shops are building
    a phenomenal set of DIY &amp;quot;packages&amp;quot; that combine components from both ends
    of the curve.&lt;/p&gt;
&lt;p&gt;The two problems with this:&lt;/p&gt;
&lt;ul class=&quot;glassList&quot;&gt;
    &lt;li&gt;&lt;strong&gt;Velocity mismatch: &lt;/strong&gt;all components are on different release schedules.
        Linux, Apache, MySQL - all on a different release schedule. In addition,
        the ones on the other side (Lucene, Struts, Mambo) are on a different
        cycle.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Dependencies:&lt;/strong&gt; When one version of one product changes
        - what happens to all the dependencies?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To solve these problems, companies are developing formalized proceses like
    review boards, support centers, OSS incubation centers, testing groups and
    they&apos;re certifiying / defining stacks internally. Most of
    this work is laborius and not related to the core competency of the business. &lt;/p&gt;
&lt;p&gt;What&apos;s next? Phase III - IT becomes core. They do this by offloading critical
    but non-strategic work to independent service companies. DIY evolves into
    DIT with the help of independent service companies. Of course, this is all
    leading up to the fact that SpikeSource provides these services. It&apos;s funny
    that as soon as Kim said &amp;quot;SpikeSource&amp;quot; - all the presentation screens in
    the room quit working (not on purpose). A minute later they&apos;re back. This
    goes to show that marketing is not liked by the Open Source Gods. &lt;img src=&quot;https://raibledesigns.com/images/smileys/wink.gif&quot; class=&quot;smiley&quot; alt=&quot;;-)&quot; title=&quot;;-)&quot; /&gt; &lt;/p&gt;
&lt;p&gt;&amp;quot;Testing is the single biggest refactoring shift in sofware.&amp;quot; - J.P. Rangaswami,
    CIO, DrKW. &lt;/p&gt;
&lt;p&gt;We need testing on a massive skale. For this reason, Murugan Pal
        and Ray Lane started SpikeSource. They saw the next phase is testing
    open source software so we can scale testing, together. Solve velocity mismatch
        and dependency problems with rapid per-defect patch management and dynamic
        stack configuration. &lt;/p&gt;
&lt;p&gt;Testing has always been the software&apos;s ugly stepchild.
        We need to scale open source testing the way we scaled open source development.
        Some perspective: Microsoft has a 1:1 ratio of developers to QA Engineers.
    There&apos;s no Microsoft for open source software, nor should there be. To solve
    testing on a massive scale, you need participation &lt;em&gt;plus&lt;/em&gt; automation.
    For models of how both scale, think eBay, Google and Amazon. Their best assets
        were their customers that supplied data that made their services more
    useful. &lt;/p&gt;
&lt;p&gt;Testing is just one service among many. The Linux distros and middleware core
    building blocks have been there for awhile. Now we have applications and
    service companies as well. Who benefits when we have abundant integrated,
    tested, validated automatically patched stacks? IT and ISVs shift high-value
    development resources to customer-faces - differentiating features and services.
    In addition, many other groups benefit and higher quality software gets developed. &lt;/p&gt;
&lt;p&gt;Testing will do for open source what it did for chip design a generation earlier.
    Testing is what catapulted the chip industry forward in the 80s. The new
    testing tools moved VLSI foward. Countless new IC-powered products were made
    possible and at much faster development speeds. Solving the testing problem
    can&apos;t be done by one company alone. &amp;quot;Come Test with Us...&amp;quot;&lt;/p&gt;
&lt;p&gt;After Kim, another speaker (Andrew from &lt;a href=&quot;http://www.osdl.org/&quot;&gt;OSDL&lt;/a&gt;)
    began his talk. He talked in a monotone and lacked a presentation. The room
    quickly began to leak people, me being one of them.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_tuesday_afternoon</guid>
    <title>[OSCON] Tuesday Afternoon</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_tuesday_afternoon</link>
        <pubDate>Wed, 3 Aug 2005 00:30:10 -0600</pubDate>
    <category>Open Source</category>
            <description>&lt;strong&gt;Creating Passionate Users&lt;/strong&gt;&lt;br /&gt;
    Presented by Kathy Sierra, OSCON 2005&lt;/p&gt;
&lt;p&gt;How do you create passionate users? People will do &lt;em&gt;anything&lt;/em&gt; and be
    enthusiastic about it if they&apos;re passionate about it. For example,
    Nikon.com teaches you how to be a better photographer. In their tutorials,
    they happen to mention that you might need a better camera to take better
    pictures. If you&apos;re going for passion, you have to provide a continuous path
    for becoming more knowledgeable about a product - and eventually becoming
    an &lt;em&gt;expert&lt;/em&gt; in
    something. The beauty is the path or &lt;em&gt;thing&lt;/em&gt; you provide doesn&apos;t even
    have to be related to the product. It simply has to provide users with enthusiasm
    about something you provide, which in turn supplies them with the path
    for that passionate experience.&lt;/p&gt;
&lt;p&gt;&amp;quot;Things that look better actually work better.&amp;quot; In other words,
    aesthetics matter. &lt;/p&gt;
&lt;p&gt;When writing a book or documentation - you have to make what you&apos;re writing
    about matters to the user. It has to be so important to them that it gives
    them a queasy feeling. Naturally, the person won&apos;t be interested in what
    you&apos;re talking about - you need to be able to communicate the real core of
    why a person would have an emotional reaction and why it&lt;em&gt; matters to them&lt;/em&gt;.
    &amp;quot;Well, why didn&apos;t you say that?&amp;quot; is the reaction you&apos;re looking for. If you&apos;re
    can answer that question w/o answering all the questions leading up to id
    - you&apos;re golden. You&apos;re supposed to try and scare them to the point that
    they&apos;re never going to have sex again, and then step back one level. What&apos;s
    the compelling meaningful benefit of the product?&lt;/p&gt;
&lt;p&gt;You need to seduce your users and keep them interested and passionate by challenging
    them to learn more. &lt;em&gt;Flow&lt;/em&gt; is the feeling when you have no sense of
    time - and you need to somehow figure out how to get your users into the
    flow. As long as you believe you&apos;re only &lt;em&gt;one compile away&lt;/em&gt; from fixing
    it - you&apos;ll spend &lt;em&gt;hours&lt;/em&gt; working on something. This is the flow state
    and comes from the perfect balance between a challenge and the skill+knowledge
    to solve that challenge.&lt;/p&gt;
&lt;p&gt;One of the challenges to creating passionate users is to establish some sort
    of &lt;em&gt;next level&lt;/em&gt; that your users can get to. First of all, you have
    to figure out what the next level is, followed by what &amp;quot;new powers&amp;quot; and abilities
    you can give to your users once they get to that level.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tips for engaging users&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When writing, use a conversational tone. The brain
        has a conversation with text when you read it and you&apos;ll have a 40% better
        retention rate by reading writing with a conversational tone. Also, use
    pictures whenever possible since they often make things easier to understand.
    Don&apos;t reveal everything - make your users curious. &lt;/p&gt;
&lt;p&gt;What do film makers and novelists do? They tell stories. &lt;/p&gt;
&lt;p&gt;Where there is &lt;em&gt;community&lt;/em&gt;, there is legend, myth, passion and stories.
    Where there is passion, there are people. How can you propagate the stories
    and people from the project? &lt;/p&gt;
&lt;p&gt;People don&apos;t care about you - all they care about is how they feel about themselves
    after interacting with your product or service. &lt;/p&gt;
&lt;p&gt;This was a great session by Kathy and I was very impressed how she presented
    it. No laptop, just an overhead projector. Lots of group activities and lots
    of group discussions. I could easily see Kathy and Bert writing a book on
    Creating Passionate Users.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_monday_afternoon</guid>
    <title>[OSCON] Monday Afternoon</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_monday_afternoon</link>
        <pubDate>Mon, 1 Aug 2005 17:02:31 -0600</pubDate>
    <category>Open Source</category>
            <description>&lt;strong&gt;Ruby on Rails - Enjoying the ride of programming &lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
    &lt;/strong&gt;Presented by David Heinemeier Hansson, OSCON 2005&lt;/p&gt;
&lt;p&gt;About David: started doing Ruby in June 2003. Involuntary programmer of need,
    served 5 years in PHP. Spent 7 months in a Java shop.&lt;/p&gt;
&lt;p&gt;Prerequisites of play: Ruby 1.8.2, dated December 25th. A database, pick one
    of 6. The RubyGems miner. Some gems called Active and Action. &lt;/p&gt;
&lt;p&gt;Directory structure that Rails creates is more for convenience than anything.
    By picking conventions for you, it makes things easier. It might feel like
    flexibility is being ripped away from you - but you &lt;em&gt;can &lt;/em&gt;change the
    defaults. However, by following the default settings, things will &lt;em&gt;just
    work&lt;/em&gt; and life will be much easier for you as a developer.&lt;/p&gt;
&lt;p&gt;I did a bit of playing on my PowerBook while listening to David&apos;s talk. I
    have Tiger installed, but found that Ruby 1.8.1 was installed on my machine
    (in /sw/bin/) thanks to Fink. My running &amp;quot;rm -r /sw/bin/ruby&amp;quot; and
    restarting iTerm, the default changed to /usr/bin/ruby, which is 1.8.2. From
    there, I downloaded and installed the &lt;a href=&quot;http://wiki.rubyonrails.com/rails/show/HowtoInstallOnOSXTiger&quot;&gt;Rails
    Installer&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I hate to admit it, but this talk is pretty boring so far. Probably
            because I&apos;ve read David&apos;s blog for the past 6 months and watched
            most of the Rails videos. I haven&apos;t really learned a whole lot in
            the first 45 minutes of this talk. To be fair, the content of the
            talk seems to be properly targeted - there&apos;s been a fair amount of
            questions and everyone seems to be interested. Almost all of the
            seats are filled in the room; 3-4x as many folks as Dave Thomas&apos;s
            Ruby talk.&lt;/p&gt;
&lt;p&gt;One interesting thing I&apos;ve learned today is many features of Rails (i.e. Webrick)
    are actually a part of Ruby, not Rails. In addition, Ruby seems to have frequent
    releases and more features are added to the language each time. I guess that&apos;s
    the advantage of having a language that&apos;s not developed by committee.&lt;/p&gt;
&lt;p&gt;When creating &lt;em&gt;model&lt;/em&gt; objects in Rails, the default is to use a plural
    form of the object for the database table name. For example, a &lt;em&gt;comment&lt;/em&gt; model
    will map to a &lt;em&gt;comments &lt;/em&gt;table. Dave Thomas did mention in this morning&apos;s
    session that Rails isn&apos;t smart enough to figure out &amp;quot;sheep&amp;quot; - it gets maps
    to &amp;quot;sheeps&amp;quot;. Apparently, you can easily override this behavior by specifying
    use_plurals=false somewhere. Another convention built-in to the framework
    is that the primary key is named &amp;quot;id&amp;quot; and its an auto-incrementing field.&lt;/p&gt;
&lt;p&gt;&amp;quot;The database is a data bucket. I don&apos;t want any logic in my database, I want
    it all to be in my data model.&amp;quot;&lt;/p&gt;
&lt;p&gt;Rails doesn&apos;t handle composite primary keys. Rails is mostly designed for &lt;em&gt;green-field&lt;/em&gt; development,
    where you get to control your database and its schema. &lt;/p&gt;
&lt;p style=&quot;text-align: left&quot;&gt;There are a number of key properties you can use in your database tables (a.k.a.
    your model objects) that will automatically get updated if you name them
    properly. Their names are &lt;em&gt;created_at&lt;/em&gt; (datetime), &lt;em&gt;created_on&lt;/em&gt; (date), &lt;em&gt;updated_at&lt;/em&gt; and
    &lt;em&gt;updated_on&lt;/em&gt;. There are also a number of time-related helpers, i.e.
    &lt;em&gt;distance_of_time_in_words_to_now(date) &lt;/em&gt; &amp;raquo; less than a minute
    ago&lt;em&gt;. &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rails also has the concept of &lt;em&gt;filters&lt;/em&gt;, which you can apply to a group
    of controllers. To use a filter, you define the filter method in &lt;em&gt;controllers/application.rb &lt;/em&gt;and
    then you have to add a &lt;em&gt;before_filter&lt;/em&gt; clause in each controller
    you want it to be applied. While it&apos;s cool that Rails has filters, it would
    be nice if you didn&apos;t have to configure the controllers that filters are
    applied to &lt;em&gt;in the controller&lt;/em&gt;. To me, it seems more appropriate to
    be able to configure the where the filters are applied externally to the
    controllers. It seems more natural to me that you&apos;d put something like &lt;em&gt;apply_to_controller
    =&amp;gt; { :controller1, :controller2 } &lt;/em&gt;in &lt;em&gt;application.rb&lt;/em&gt;. &lt;/p&gt;
&lt;p&gt;For doing page decoration with Rails (i.e. SiteMesh), you simply create a
    decorator in &lt;em&gt;views/layouts&lt;/em&gt;. If you want a particular decorator to
    apply to a particular controller, you just name the file the same as the
    controller&apos;s URL. For example, if you have a &lt;em&gt;posts&lt;/em&gt; controller (really
    a PostController.rb file), you&apos;ll create a decorator named &lt;em&gt;posts.rhtml&lt;/em&gt; to
    decorate all the HTML rendered from the PostController - regardless of whether
    you&apos;re rendering from a method or from a view template. To have a decorator
    apply to &lt;em&gt;all&lt;/em&gt; controllers, you can simply create a file named &lt;em&gt;view/layouts/application.rhtml&lt;/em&gt;.
    This seems like something that SiteMesh could easily do as well - for example
    defaulting to &lt;em&gt;/decorators/default.jsp&lt;/em&gt; (or something similar). &lt;/p&gt;
&lt;p&gt;One thing I like about Rails is it&apos;s &lt;em&gt;flash&lt;/em&gt; concept and how easy it
    makes it to display success messages. In my experience with Java web frameworks
    - many make this more difficult than it should be. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Testing Rails Applications &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When running tests, Rails automates the creation of a test database instance
    that mirrors the schema of your development database. One slick thing in
    a Rails project&apos;s Rakefile is that you can run all the tests that you&apos;ve
    touched in the last 10 minutes. I think one of the most unique thing about
    Rails/Ruby vs. Java is all that almost all of the files (Rakefile, code generation
    scripts, etc.) are written in Ruby. &lt;/p&gt;
&lt;p&gt;Controller tests have a &amp;quot;mini-language&amp;quot; for simulating a browser
    when testing controllers. For example:&lt;/p&gt;
&lt;pre&gt;
def test_login 
  get :login
  assert_response :success&lt;
  assert_template &amp;quot;login&amp;quot; 
  
  post :login, :password =&gt; &quot;secret!&quot;
  assert_response :success
  assert !session[:authorized]
  
  post :login, :password =&gt; &quot;secret&quot;
  assert_response :redirect
  assert session[:authorized]
end
&lt;/pre&gt;
&lt;p&gt;In the Controller tests, you can set cookies, parameters and mimic almost
    everything the browser can do. You can also test that your model objects
    have been manipulated appropriately. For example:&lt;/p&gt;
&lt;pre&gt;
def test_create_post 
  post :create, :post =&gt; { :title =&gt; &quot;This is my title&quot;, :body =&gt; &quot;1&quot; }
  assert_response :redirect
  assert_kind_of Post, Post.find_by_title(&quot;This is my title&quot;)
  
  post :create, :post =&gt; { :title =&gt; &quot;&quot;, :body =&gt; &quot;1&quot; }
  assert_response :success # something was rendered, regardless of error messages
  assert_equal &quot;don&apos;t leave me out&quot;, assigns(:post).errors.on(:title)
  #or assert_equal 1, assigns(:post).errors.count
end
&lt;/pre&gt;
&lt;p&gt;The &lt;em&gt;find_by_title&lt;/em&gt; method  is a&lt;em&gt; dynamic finder&lt;/em&gt;, where ActiveRecord
    creates find_by methods for each attribute of the model object. Another cool
    feature of testing is you can add a line with &amp;quot;breakpoint&amp;quot; in it - and the test
will stop executing there - giving you access to all the variables at that point.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ajax&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The main reason for integrating JavaScript into Rails is so developers don&apos;t
    have to write JavaScript. For most developers, writing JavaScript is a pain
    because of browser incompatibilities and such. Rails ships with 4 JavaScript
    libraries, including &lt;a href=&quot;http://prototype.conio.net/&quot;&gt;Prototype&lt;/a&gt; and &lt;a href=&quot;http://script.aculo.us/&quot;&gt;Script.aculo.us&lt;/a&gt;.
    It&apos;s easy to include the default JavaScript libraries in Rails:&lt;/p&gt;
&lt;pre&gt;&amp;lt;%= javascript_include_tag :defaults %&amp;gt; &lt;/pre&gt;
&lt;p&gt;Both the &lt;em&gt;link_to&lt;/em&gt; and &lt;em&gt;form_tag&lt;/em&gt; methods have a &amp;quot;remote&amp;quot;
    equivalent (i.e. &lt;em&gt;link_to_remote&lt;/em&gt;) that allows you to hook into Ajax,
    and by defining a :complete callback, you can call fade effects and the like.
    You can override many of the lifecycle stages of Ajax, but the most common
    is the :complete callback. In a Controller, it&apos;s easy to distinguish Ajax
    calls from non-Ajax calls using:&lt;/p&gt;
&lt;pre&gt;if request.xml_http_request?
  # do logic, for example rendering partials
end&lt;/pre&gt;
&lt;p&gt;Partials seem to be a pretty cool feature in Rails. They&apos;re actually just
    parts of a page that you include in a parent page with &lt;span style=&quot;color: green&quot;&gt;render :partial =&amp;gt;
    &amp;quot;viewName&amp;quot;&lt;/span&gt;. The slick thing about partials is you can actually populate their
    model and return them in a controller after an Ajax call. &lt;/p&gt;
&lt;p&gt;The Ajax demos that David just showed are pretty cool. He was able to easily
    show how to delete a comment in his &amp;quot;weblog app&amp;quot;, as well as add a new comment
    - w/o refreshing the page. The slick part of the add was he was easily able
    to add the new comment id to the Ajax response header, and then grab it in
    a callback and use the id to reference a &amp;lt;div&amp;gt; and use the &lt;em&gt;yellow
    fade technique &lt;/em&gt;to highlight and fade the new comment. &lt;/p&gt;
&lt;p&gt;That&apos;s the end of Dave&apos;s talk, and the first day at OSCON. Thanks to Dave and David for showing me the cool features of Ruby and Rails.</description>          </item>
    <item>
    <guid isPermaLink="true">https://raibledesigns.com/rd/entry/oscon_monday_morning</guid>
    <title>[OSCON] Monday Morning</title>
    <dc:creator>Matt Raible</dc:creator>
    <link>https://raibledesigns.com/rd/entry/oscon_monday_morning</link>
        <pubDate>Mon, 1 Aug 2005 11:20:05 -0600</pubDate>
    <category>Open Source</category>
            <description>&lt;strong&gt;Facets of Ruby&lt;/strong&gt;&lt;br /&gt;
Presented by Dave Thomas, OSCON 2005&lt;/p&gt;&lt;p&gt;I&apos;m sitting in Dave Thomas&apos;s session on &lt;strong&gt;Intro to Ruby&lt;/strong&gt; at
    the Oregon Convention Center. It looks like someone finally figured out the
    main problem with conferences - lack of power outlets. Kudos to O&apos;Reilly
    - they&apos;ve put power strips at the base of every table in this room. With
    the high-speed wireless and unlimited power, this conference is getting off
    to a great start. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Is programming still fun?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Round about 2000, programming started getting tedious for Dave - after having
    fun for the past 25 years. When we program, we combine all the problems of
    the artistic side of the race with all of the problems of the scientific
    side of the race. The only way to be successful at it is to &lt;em&gt;enjoy&lt;/em&gt; doing it. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Is programming productive?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;It &lt;em&gt;has &lt;/em&gt;to be to enjoy it. The most satisfying thing about programming
    is watching it run. That&apos;s why scripting languages are so great - because
    you &lt;em&gt;can&lt;/em&gt; see it run &lt;em&gt;now&lt;/em&gt;. Myth: a good programmer can be
    a good programmer in &lt;em&gt;any &lt;/em&gt;language. Language and tools make a difference
    - a good programmer knows which language to choose for a particular problem.&lt;/p&gt;&lt;p&gt;This session is not going to be a &lt;em&gt;syntax session&lt;/em&gt;. Damn, sounds like
    I won&apos;t really learn how to &lt;em&gt;program Ruby &lt;/em&gt;in this session.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Ruby, the Language&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Born in Japan in 1994. Father: Invented by Yukihiro Matsumoto (Matz). Mother:
    Ada, Smalltalk, CLU, Perl, Lisp. Grew very rapidly in 2000, outpaced Python
    in 2000. Became international star in 2004.&lt;/p&gt;&lt;p&gt;Dave and Andy are language freaks and downloaded Ruby 1.4 shortly after finishing
    &lt;em&gt;The Pragmatic Programmer&lt;/em&gt;. It passed the 5-minute test, the 1/2-hour
    test and Dave ended up playing with it all morning. The first Pickax book
    was 500+ pages long, and they wrote it because there wasn&apos;t much English-language
    documentation on Ruby. Ever since Rails, Ruby&apos;s adoption has grown exponentially.&lt;/p&gt;&lt;p&gt;Ruby is a multi-paradigm language: procedural, object-oriented, functional,
    meta-programming. You can write
    procedural code, but you&apos;ll be using OO concepts at the same time. You can
    do all of these at the same time. &lt;/p&gt;&lt;p&gt;Ruby code example:&lt;/p&gt;&lt;pre&gt;
# Generate Fibonacci numbers up to a given limit

def fib_up_to(max)
  f1, f2 = 1, 1
  while f1 &amp;lt;= max
    puts f1
    f1, f2 = f2, f1+f2
  end
end

fib_up_to(1000)&lt;/pre&gt;&lt;p&gt;Methods start with &lt;em&gt;def&lt;/em&gt; and end with &lt;em&gt;end&lt;/em&gt;. The parenthesis
    around the method arguments are optional. &lt;/p&gt;&lt;p&gt;Now Dave is ragging on Java Programmers and how they discount Ruby because
    of its&lt;em&gt; duck typing&lt;/em&gt;. In a Java program, most things are dynamically
    typed too. This is because most objects are stored in collections and whenever
    you pull things out of a collection - you have to cast from Object to the
    real type. The argument is that you don&apos;t &lt;em&gt;have &lt;/em&gt;to have static typing.
    Dave hates Generics because he thinks they should&apos;ve just done &lt;em&gt;automatic
    casting&lt;/em&gt;. &lt;/p&gt;&lt;p&gt;The basic gist of Dave&apos;s argument is that we use dynamic typing
        (using casting) in Java all the time and you don&apos;t see Runtime exceptions
        all of the place. So the biggest proponents of static typing are actually
    using dynamic typing all of the place.&lt;/p&gt;&lt;p&gt;Back to the code: in Ruby, you don&apos;t need parenthesis around conditionals
    (for instance in the &lt;em&gt;while&lt;/em&gt; statement above). The main reason we
    have parenthesis is because of Fortran. &lt;em&gt;There&apos;s no reason for them&lt;/em&gt;.
    You &lt;em&gt;can &lt;/em&gt; put parenthesis and semi-colons in your code, but you don&apos;t &lt;em&gt;need
    &lt;/em&gt;to. In this code example, the variables are scoped for the duration
    of the method. &lt;em&gt;puts&lt;/em&gt; (pronounced &quot;put s&quot;) just prints the value of
    a variable to the console.&lt;/p&gt;&lt;pre&gt;
class Song
  def initialize(a_title)
    @title = a_title
  end
  def title
    @title
  end
end
&lt;/pre&gt;&lt;p&gt;Instance variables in Ruby start with an @ sign. The first time you use them,
    they spring into existence. If you access an instance variable and it&apos;s value
    hasn&apos;t been set - it&apos;s value is &lt;em&gt;nil&lt;/em&gt;. Using the &lt;em&gt;return&lt;/em&gt; keyword
    at the end of a method is optional - the default is to return the last line
    of a method. You can change the &quot;title&quot; method to use&lt;/p&gt;&lt;pre&gt;attr_reader :title &lt;/pre&gt;&lt;p&gt;The &lt;em&gt;attr_reader&lt;/em&gt; call is actually a method of Class:class. The &lt;em&gt;attr_reader
        &lt;/em&gt;will dynamically add an accessor (that looks like the &lt;em&gt;title&lt;/em&gt; method
        above). To create a setter, you can use &lt;em&gt;attr_accessor&lt;/em&gt; and it&apos;ll
        create both a getter and setter. 
&lt;p&gt;Ruby is a single Inheritance language.
&lt;pre&gt;
class KaraokeSong &amp;lt; Song

  attr_reader :lyric

  def initialize(a_title, a_lyric)
    super(a_title)
    @lyric = a_lyric
  end
end
&lt;/pre&gt;&lt;p&gt;Unlike Java, the &lt;em&gt;super&lt;/em&gt; call can happen in any line, or not at all.
    To solve the single-inheritance problem, you can use &lt;em&gt;mixins&lt;/em&gt; and
apply them to any class.
&lt;p&gt;Blocks and iterators are pervasive in Ruby, and look to be very easy to use.
    
&lt;pre&gt;
3.times { puts &quot;Ho!&quot; }

hash.each { |key, value|
  puts &quot;#{key} -&gt; #{value}&quot;
end
&lt;/pre&gt;&lt;p&gt;To do method calls with blocks, you use the &lt;em&gt;yield&lt;/em&gt; keyword. 
&lt;p&gt;You can use blocks to simplify Resource Management and automatically close
    resources.
&lt;pre&gt;File.open(&quot;myfile.dat&quot;) do |f|
  name = f.gets
  # whatever
end&lt;/pre&gt;&lt;p&gt;When the above code hits &lt;em&gt;end&lt;/em&gt;, the file is automatically closed. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Duck Typing&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Strongly-typed objects, untyped variables and methods. Types are implicitly
    determined by the things that an object can do. Duck typing is great for
    testing, refactoring and maintenance. This is very similar to concepts in
    Smalltalk. There is a strong commitment to unit testing in Ruby - which
    makes duck typing even easier to use. Duck typing makes things very easy.
     For example,  you can have a method that takes a file as a parameter - and
    writes data to it. You can test this method by passing in a String (which
    also supports &amp;lt;&amp;lt; for appending) and verify that your method&apos;s logic works.&lt;/p&gt;&lt;p&gt;Duck typing is useful in regular code for reducing coupling and increasing
    flexibility. Ruby community now differentiates the &lt;em&gt;type&lt;/em&gt; (what it
    can do) of an object and the &lt;em&gt;class&lt;/em&gt; (what generated it) of an object. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Road to Metaprogramming&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Metaprogramming is really, really powerful in Ruby. Library writers use it,
    but most developers don&apos;t use it. The ActiveRecord framework is an example
    of metaprogramming. Rather than being an O/R Mapping tool, it&apos;s more of a &lt;em&gt;database
    table wrapper&lt;/em&gt;. The &lt;em&gt;belongs_to&lt;/em&gt;, &lt;em&gt;has_one&lt;/em&gt;, &lt;em&gt;has_many&lt;/em&gt; and
    other &lt;em&gt;validation_presence_of&lt;/em&gt; method calls can be written by you. Allowing
    you to write DSL (domain-specific languages) that appear to be a part of
    the Ruby language. &lt;/p&gt;&lt;p&gt;4 steps to metaprogramming:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Classes are  open:&lt;/strong&gt; in Ruby, you can always add methods,
        attributes, etc. to existing classes. For example, you can add an &lt;em&gt;encrypt() &lt;/em&gt;method
        to the &lt;code&gt;String&lt;/code&gt; class. &lt;em&gt;Isn&apos;t
        this dangerous? What if someone changes the logic of + for math expressions&lt;/em&gt;.   No,
        because if one of your programmers overrides methods that breaks things
        - you take them out in the parking lot and beat them with a rubber hose!
        The language shouldn&apos;t prohibit us from doing powerful things. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Definitions are active: &lt;/strong&gt;code executes during what would
        normally be compilation. As the class if being defined, the code is being
        executed. For example, you can check if an environment variable is set
        - and create methods (i.e. &lt;em&gt;log.debug()&lt;/em&gt;) accordingly. This can
        be great for caching. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;All method calls have a receiver: &lt;/strong&gt;Methods are executed
        on objects. There&apos;s always a current object: &lt;em&gt;self&lt;/em&gt;. Methods with
        no explicit receiver are executed on current object. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Classes are objects too: &lt;/strong&gt;You can easily add methods
        to classes.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Many more Ruby features: Reflection and ObjectSpace, Marshalling and Distributed
    Ruby, Tk, Gtk, Fox, networking, databases, etc. Garbage collection, Threads
    (like Java &lt;em&gt;green &lt;/em&gt;threads), Modules and mixins. ObjectSpace - allows
    you to reflect on all of the objects that exist at runtime. Marshalling allows
    you to serialize into binary or text formats. No XML - uses YAML instead.
    Unlike XML, it&apos;s readable and looks more like a properties file. Modules
    (and their methods) can be easily included into a class simply by using &quot;include
    ModuleName&quot;.&lt;/p&gt;&lt;p&gt;Now Dave is going to write a program to extract book sales ranks from Amazon
    pages, publish them as an RSS Feed, store them in a database, and access
    via a web application (using Rails). Since this is likely to involve a lot
    of live coding, I probably won&apos;t blog the code Dave writes.&lt;/p&gt;&lt;p&gt;Web Applications in Ruby can be done with Simple CGI, FastCGI, mod_ruby and
    frameworks (like Rails). Iowa, CGIKit, Nitro and Ruby on Rails are all web
    frameworks in Ruby. Iowa is a Ruby implementation of Apple&apos;s WebObjects.
    Dave&apos;s quote: &quot;Apple really screwed up with WebObjects, they could&apos;ve &lt;em&gt;owned
    &lt;/em&gt;the market on web frameworks.&quot;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;glassList&quot;&gt;&lt;li&gt;Use Ruby because it is &lt;em&gt;Lightweight. &lt;/em&gt;A Ruby download is under
            10 MB. Ruby Gems allows easy package management for downloading libraries
            and documentation. &lt;/li&gt;&lt;li&gt;Use Ruby is &lt;em&gt;Transparent&lt;/em&gt;. It&apos;s nice and easy to read - and it
        only takes a couple of hours to learn its syntax.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Portable &lt;/em&gt;- runs on PDAs and Mainframes.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Open Source &lt;/em&gt;- MIT/Artistic style license. 1.8.3&apos;s regular expression
            engine is LGPL, 1.9&apos;s engine will be BSD-style license.&lt;/li&gt;&lt;li&gt;&lt;em&gt;Easy to Learn&lt;/em&gt; - uses the Principle of Least Surprise. Things
        seem to work as you&apos;d expect. Dave knows people that&apos;ve downloaded Ruby
        and put web applications on line in the same morning - w/o any prior
        knowledge of Ruby. &lt;/li&gt;&lt;li&gt;&lt;em&gt;Fun!&lt;/em&gt; It&apos;s enjoyable to program in. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Ruby Resources&lt;/strong&gt;&lt;/p&gt;&lt;ul class=&quot;glassList&quot;&gt;&lt;li&gt;&lt;a href=&quot;http://www.ruby-lang.org&quot;&gt;http://www.ruby-lang.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.rubygarden.org/&quot;&gt;http://www.rubygarden.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.rubyonrails.org/&quot;&gt;http://www.rubyonrails.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt;com.lang.ruby - ruby-talk mailing list&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.pragmaticprogrammer.com/titles/ruby/&quot;&gt;http://pragmaticprogrammer.com/titles/ruby&lt;/a&gt; (1st edition online for free,
        covers Ruby 1.6) &lt;/li&gt;&lt;li&gt;Other Books: The Ruby Way, Ruby Developer&apos;s Guide, Agile Web Development
        with Rails (available for the first time at the OSCON bookstore)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;</description>          </item>
  </channel>
</rss>