all repos — h3rald @ d09109a183ec6e7e614fb0be19a73b921b3172ec

The sources of https://h3rald.com

Regenerated Ruby Compendium (new site layout).
h3rald h3rald@h3rald.com
Sat, 10 Nov 2012 22:17:19 +0100
commit

d09109a183ec6e7e614fb0be19a73b921b3172ec

parent

f2e0d43989b64ac11809fc693b3874214bc9160c

A content/ruby-compendium.textile

@@ -0,0 +1,30 @@

+----- +permalink: ruby-compendium +filters_pre: +- erb +- redcloth +title: "Project: Ruby Compendium" +subtitle: "An Essential Guide to the Ruby Ecosystem" +type: project +github: ruby-compendium +links: +- "Download": https://github.com/h3rald/ruby-compendium/downloads +- "Read Online": /ruby-compendium/book +- "Source": https://github.com/h3rald/ruby-compendium +- "Tracking": http://github.com/h3rald/ruby-compendium/issues +status: Active +version: 0.2.0 +----- + +<%= render 'project_data', :tag => 'ruby-compendium' %> + +<p>This book was written by Fabio Cevasco and it is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</p> +<p>This book was authored using <a href="http://www.h3rald.com/glyph">Glyph</a> and the <span class="caps">PDF</span> version was produced with <a href="http://www.princexml.org">Prince <span class="caps">XML</span></a>.</p> +<p>The Ruby logo is copyright &#169; 2006, Yukihiro Matsumoto, and used under the terms of the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License</a>.</p> +<p>Special thanks to the following individuals who contributed to the project, in some ways:</p> +<ul> + <li><a href="http://blog.dio.jp/">Akira Matsuda</a></li> + <li><a href="http://www.bitcetera.com/">Sven Schwyn</a></li> +</ul> + +<%= render 'project_updates', :tag => 'ruby-compendium' %>
A content/ruby-compendium/book/books.html

@@ -0,0 +1,131 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Books - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Books</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/web-sites.html">← Web Sites</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/podcasts.html">Podcasts and Screencasts →</a></nav> + + <p><strong><a href="http://www.humblelittlerubybook.com/book/">The Humble Little Ruby Book</a></strong> &ndash; A nicely-written free book on Ruby, by <a href="/ruby-compendium/book/rubyists.html#jm">Jeremy McAnally</a></p> + + <p><strong><a href="http://www.sapphiresteel.com/The-Little-Book-Of-Ruby">The Little Book of Ruby</a></strong> &ndash; An 87-page free introduction covering Ruby basics.</p> + + <p><strong><a href="http://www.sapphiresteel.com/Blog/The-Book-Of-Ruby-free-in-depth">The Book of Ruby</a></strong> &ndash; A 400-page free Ruby bible by Huw Collingbourne.</p> + + <p><strong><a href="http://ruby-doc.org/docs/ProgrammingRuby/">Programming Ruby</a></strong> &ndash; The first edition of the so-called <em>Pickaxe</em> book, available for free, by <a href="/ruby-compendium/book/rubyists.html#davethomas">Dave Thomas</a>, <a href="/ruby-compendium/book/rubyists.html#chad">Chad Fowler</a> and <a href="/ruby-compendium/book/rubyists.html#andyhunt">Andy Hunt</a></p> + + <p><strong><a href="http://mislav.uniqpath.com/poignant-guide/">Why&#8217;s (poignant) guide to Ruby</a></strong> &ndash; The legendary book by <a href="/ruby-compendium/book/rubyists.html#_why">why the lucky stiff</a>. With foxes, little elves, and&#8230; chunky bacon!). Exquisitely weird and witty.</p> + + <p><strong><a href="http://ruby.runpaint.org/">Read Ruby 1.9</a></strong> &ndash; <em>&#8220;Very early draft of a book about version 1.9 of the Ruby programming language, released under a Creative Commons license.&#8221;</em></p> + + <p><strong><a href="http://ruby.learncodethehardway.org/">Learn Ruby The Hard Way</a></strong> &ndash; A Ruby translation of the popular book <em>Learn Python The Hard Way</em>, by Zed Shaw.</p> +<aside class="box"> +<div class="box-title">What about <em>real</em> books?</div> +<p>All the books mentioned so far are free, but there&#8217;s plenty of published books on Ruby. Check out the following titles:</p> +<ul> + <li><a href="http://www.informit.com/imprint/series_detail.aspx?ser=2124042">Addison-Wesley Progessional Ruby Series</a></li> + <li><a href="http://oreilly.com/pub/topic/ruby">Ruby books by O&#8217;Reilly</a></li> + <li><a href="http://pragprog.com/categories/ruby_and_rails">Ruby books by Pragmatic Programmers</a></li> +</ul> + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/web-sites.html">← Web Sites</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/podcasts.html">Podcasts and Screencasts →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/core-stdlib.html

@@ -0,0 +1,132 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>The Core and the Standard Library - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>The Core and the Standard Library</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/syntax.html">← Syntax</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/features.html">Advanced Language Features →</a></nav> + <p>By default, Ruby always loads its core classes and modules when a script is executed. This means that in all Ruby programs you can always instantiate core objects like:</p> +<ul> + <li>Numbers (integers, floats)</li> + <li>Strings</li> + <li>Arrays</li> + <li>Hashes</li> + <li>Files</li> + <li>Regular expressions</li> + <li>Symbols</li> + <li>Threads</li> + <li>Times and dates</li> + <li>&#8230;and many more.</li> +</ul> +<p>Most likely, this is not going to be enough. That&#8217;s when the Standard Library comes into play: it&#8217;s a large collection of internal libraries that ships with every Ruby implementations. There are libraries to connect to the Internet, to read/write to various file formats such as <span class="caps">CSV</span> or <span class="caps">YAML</span>, to work with files and paths, access system features, and so on.</p> +<p>Unlike core classes, standard libraries must be required specifically if needed, before they can be used.</p> +<aside class="box"> +<div class="box-title">If you want to know more...</div> +<p>On core libraries and the Standard Library, checkout the official documentation:</p> +<ul> + <li><a href="http://www.ruby-doc.org/core/">Core Reference</a></li> + <li><a href="http://www.ruby-doc.org/stdlib/">Standard Library Reference</a></li> +</ul> +<p>Overwhelmed? Don&#8217;t know where to start? Familiarize yourself with the <a href="http://www.ruby-doc.org/core/classes/Enumerable.html">Enumerable</a> module; you won&#8217;t regret it!</p> + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/syntax.html">← Syntax</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/features.html">Advanced Language Features →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/features.html

@@ -0,0 +1,132 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Advanced Language Features - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Advanced Language Features</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/core-stdlib.html">← The Core and the Standard Library</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gems.html">Ruby Gems →</a></nav> + <p>One of the best things about Ruby is that you&#8217;re not stuck with a single programming paradigm. Even though everything in Ruby is an object (thereby making it a fully object-oriented language), nothing forbids you to program procedurally, or even use typical functional constructs.</p> +<p>The beauty of this is that you can (and should) combine elements from different paradigms, resulting in very powerful and expressive code. What I really like about Ruby though is its inherent dynamic nature.</p> +<p>You have a very few constraints when coding:</p> +<ul> + <li>you can open and close class definitions at will,</li> + <li>you are not constrained by object types</li> + <li>you can mix-in methods in multiple classes at the same time</li> + <li>you can write code that <em>writes itself</em> dynamically (this is commonly called <em>metaprogramming</em>)</li> + <li>you can easily create Domain-Specific Language to solve problems faster, with style</li> + <li>you can create and pass around blocks of code</li> +</ul> +<p>All these things make the language very flexible and powerful. Do not overuse Ruby&#8217;s power: if your code starts to look like black magic, you&#8217;re probably going too far.</p> +<aside class="box"> +<div class="box-title">If you want to know more...</div> +<p>&#8230;on specific and advanced Ruby features, check out these articles:</p> +<ul> + <li><a href="http://olabini.com/blog/2006/09/ruby-metaprogramming-techniques/">Ruby Metaprogramming techniques</a></li> + <li><a href="http://www.skorks.com/2010/05/ruby-procs-and-lambdas-and-the-difference-between-them/">Ruby Procs And Lambdas (And The Difference Between Them)</a></li> + <li><a href="http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/">Ruby Mixin Tutorial</a></li> + <li><a href="http://www.valibuk.net/2009/03/domain-specific-languages-in-ruby/">Domain Specific Languages in Ruby</a></li> +</ul> + +</aside> + + + <nav class="navigation"><a href="/ruby-compendium/book/core-stdlib.html">← The Core and the Standard Library</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gems.html">Ruby Gems →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/gem-tips.html

@@ -0,0 +1,453 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>What you can use for... - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>What you can use for...</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/gems.html">← Ruby Gems</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/resources.html">Resources →</a></nav> + <p>You could spend hours on the RubyGems web site to find what you&#8217;re looking for sometimes. Not because you can&#8217;t find it, but because often there are too many alternative libraries that overlap in terms of functionalities offered.</p> +<p>A site to check when you don&#8217;t know much of what has been done in a particular domain is <a href="http://ruby-toolbox.com/">The Ruby Toolbox</a>, which organizes quite a lot of gems into <a href="http://ruby-toolbox.com/categories.html">categories</a>. This section is somewhat similar, but it focuses on just a few common tasks and a small set of hand-picked gems.</p> + +<section class="section"> +<header><h1 id="h_18" class="toc">Command Line Applications</h1></header> +<p><strong>cmdparse</strong> <blockquote>&#8220;cmdparse provides classes for parsing commands on the command line; command line options are parsed using optparse or any other option parser implementation.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://cmdparse.rubyforge.org/">http://cmdparse.rubyforge.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/cmdparse">http://www.rubygems.org/gems/cmdparse</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/cmdparse">http://www.rubydoc.info/gems/cmdparse</a></li> +</ul> + + <p><strong>gli</strong> <blockquote>&#8220;An application and <span class="caps">API</span> for describing command line interfaces that can be used to quickly create a shell for executing command-line tasks.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://davetron5000.github.com/gli">http://davetron5000.github.com/gli</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/gli">http://www.rubygems.org/gems/gli</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/gli">http://www.rubydoc.info/gems/gli</a></li> +</ul> + + <p><strong>highline</strong> <blockquote>&#8220;A high-level IO library that provides validation, type conversion, and more for command-line interfaces. HighLine also includes a complete menu system that can crank out anything from simple list selection to complete shells with just minutes of work.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://highline.rubyforge.org/">http://highline.rubyforge.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/highline">http://www.rubygems.org/gems/highline</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/highline">http://www.rubydoc.info/gems/highline</a></li> +</ul> + + <p><strong>hirb</strong> <blockquote>&#8220;A mini view framework for console/irb that&#8217;s easy to use, even while under its influence. Console goodies include a no-wrap table, auto-pager, tree and menu&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="https://github.com/cldwalker/hirb">https://github.com/cldwalker/hirb</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/hirb">http://www.rubygems.org/gems/hirb</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/hirb">http://www.rubydoc.info/gems/hirb</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_19" class="toc">Documentation</h1></header> +<p><strong>glyph</strong> <blockquote>&#8220;Glyph is a framework for structured document authoring.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.h3rald.com/glyph/">http://www.h3rald.com/glyph/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/glyph">http://www.rubygems.org/gems/glyph</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/glyph">http://www.rubydoc.info/gems/glyph</a></li> +</ul> + + <p><strong>rdoc</strong> <blockquote>&#8220;RDoc produces <span class="caps">HTML</span> and online documentation for Ruby projects. RDoc includes the rdoc and ri tools for generating and displaying online documentation.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="https://github.com/rdoc/rdoc/">https://github.com/rdoc/rdoc/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/rdoc">http://www.rubygems.org/gems/rdoc</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/rdoc">http://www.rubydoc.info/gems/rdoc</a></li> +</ul> + + <p><strong>yard</strong> <blockquote>&#8220;<span class="caps">YARD</span> is a documentation generation tool for the Ruby programming language. It enables the user to generate consistent, usable documentation that can be exported to a number of formats very easily, and also supports extending for custom Ruby constructs such as custom class level definitions.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://yardoc.org/">http://yardoc.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/yard">http://www.rubygems.org/gems/yard</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/yard">http://www.rubydoc.info/gems/yard</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_20" class="toc">Gem Management</h1></header> +<p><strong>bundler</strong> <blockquote>&#8220;Bundler manages an application&#8217;s dependencies through its entire life, across many machines, systematically and repeatably.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://gembundler.com/">http://gembundler.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/bundler">http://www.rubygems.org/gems/bundler</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/bundler">http://www.rubydoc.info/gems/bundler</a></li> +</ul> + + <p><strong>jeweler</strong> <blockquote>&#8220;Simple and opinionated helper for creating Rubygem projects on GitHub&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://github.com/technicalpickles/jeweler">http://github.com/technicalpickles/jeweler</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/jeweler">http://www.rubygems.org/gems/jeweler</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/jeweler">http://www.rubydoc.info/gems/jeweler</a></li> +</ul> + + <p><strong>bones</strong> <blockquote>&#8220;Mr Bones is a handy tool that creates new projects from a code skeleton.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="https://github.com/TwP/bones">https://github.com/TwP/bones</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/bones">http://www.rubygems.org/gems/bones</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/bones">http://www.rubydoc.info/gems/bones</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_21" class="toc">GUI Programming</h1></header> +<p><strong>bowline</strong> <blockquote>&#8220;Ruby/JS <span class="caps">GUI</span> framework&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://bowlineapp.com/">http://bowlineapp.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/bowline">http://www.rubygems.org/gems/bowline</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/bowline">http://www.rubydoc.info/gems/bowline</a></li> +</ul> + + <p><strong>fxruby</strong> <blockquote>&#8220;FXRuby is the Ruby binding to the <span class="caps">FOX</span> <span class="caps">GUI</span> toolkit&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.fxruby.org/">http://www.fxruby.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/fxruby">http://www.rubygems.org/gems/fxruby</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/fxruby">http://www.rubydoc.info/gems/fxruby</a></li> +</ul> + + <p><strong>wxruby</strong> <blockquote>&#8220;wxRuby allows the creation of graphical user interface (<span class="caps">GUI</span>) applications via the wxWidgets library. wxRuby provides native-style <span class="caps">GUI</span> windows, dialogs and controls on platforms including Windows, OS X and Linux.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://wxruby.org/">http://wxruby.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/wxruby">http://www.rubygems.org/gems/wxruby</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/wxruby">http://www.rubydoc.info/gems/wxruby</a></li> +</ul> + + <p><strong>qtruby4</strong> <blockquote>&#8220;Qt4 Bindings for Ruby.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://rubyforge.org/projects/korundum/">http://rubyforge.org/projects/korundum/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/qtruby4">http://www.rubygems.org/gems/qtruby4</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/qtruby4">http://www.rubydoc.info/gems/qtruby4</a></li> +</ul> + + <p><strong>rugui</strong> <blockquote>&#8220;RuGUI is a framework which aims to help building desktop applications. RuGUI was mostly inspired by the Ruby on Rails framework, taking most of its features from it.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://rugui.org/">http://rugui.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/rugui">http://www.rubygems.org/gems/rugui</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/rugui">http://www.rubydoc.info/gems/rugui</a></li> +</ul> + <aside class="box"> +<div class="box-title">What about Shoes?</div> +<a href="http://shoesrb.com/">Shoes</a> is a cross-platform, easy-to-use Ruby toolkit originally created by <a href="/ruby-compendium/book/rubyists.html#_why"></a>. Unfortunately, it is distributed as a standalone application rather than a gem (yet), due to its internal architecture and dependencies. + +</aside> + +</section> +<section class="section"> +<header><h1 id="h_22" class="toc">Markup and Template Languages</h1></header> +<p><strong>bluecloth</strong> <blockquote>&#8220;BlueCloth is a Ruby implementation of Markdown, a text-to-<span class="caps">HTML</span> conversion tool for web writers. To quote from the project page: Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid <span class="caps">XHTML</span> (or <span class="caps">HTML</span>).&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.deveiate.org/projects/BlueCloth">http://www.deveiate.org/projects/BlueCloth</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/bluecloth">http://www.rubygems.org/gems/bluecloth</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/bluecloth">http://www.rubydoc.info/gems/bluecloth</a></li> +</ul> + + <p><strong>github-markup</strong> <blockquote>&#8220;This gem is used by GitHub to render any fancy markup such as Markdown, Textile, Org-Mode, etc. Fork it and add your own!&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://github.com/github/markup">http://github.com/github/markup</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/github-markup">http://www.rubygems.org/gems/github-markup</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/github-markup">http://www.rubydoc.info/gems/github-markup</a></li> +</ul> + + <p><strong>haml</strong> <blockquote>&#8220;Haml (<span class="caps">HTML</span> Abstraction Markup Language) is a layer on top of <span class="caps">XHTML</span> or <span class="caps">XML</span> that&#8217;s designed to express the structure of <span class="caps">XHTML</span> or <span class="caps">XML</span> documents in a non-repetitive, elegant, easy way, using indentation rather than closing tags and allowing Ruby to be embedded with ease. It was originally envisioned as a plugin for Ruby on Rails, but it can function as a stand-alone templating engine.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://haml-lang.com/">http://haml-lang.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/haml">http://www.rubygems.org/gems/haml</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/haml">http://www.rubydoc.info/gems/haml</a></li> +</ul> + + <p><strong>liquid</strong> <blockquote>&#8220;A secure, non-evaling end user template engine with aesthetic markup.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.liquidmarkup.org/">http://www.liquidmarkup.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/liquid">http://www.rubygems.org/gems/liquid</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/liquid">http://www.rubydoc.info/gems/liquid</a></li> +</ul> + + <p><strong>mustache</strong> <blockquote>&quot;Inspired by ctemplate, Mustache is a framework-agnostic way to render logic-free views. As ctemplates says, &#8220;It emphasizes separating logic from presentation: it is impossible to embed application logic in this template language. Think of Mustache as a replacement for your views. Instead of views consisting of <span class="caps">ERB</span> or <span class="caps">HAML</span> with random helpers and arbitrary logic, your views are broken into two parts: a Ruby class and an <span class="caps">HTML</span> template.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://github.com/defunkt/mustache">http://github.com/defunkt/mustache</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/mustache">http://www.rubygems.org/gems/mustache</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/mustache">http://www.rubydoc.info/gems/mustache</a></li> +</ul> + + <p><strong>rdiscount</strong> <blockquote>&#8220;Fast Implementation of Gruber&#8217;s Markdown in C&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://github.com/rtomayko/rdiscount/">http://github.com/rtomayko/rdiscount/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/rdiscount">http://www.rubygems.org/gems/rdiscount</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/rdiscount">http://www.rubydoc.info/gems/rdiscount</a></li> +</ul> + + <p><strong>redcloth</strong> <blockquote>&#8220;RedCloth is a Ruby library for converting Textile into <span class="caps">HTML</span>.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://redcloth.org/">http://redcloth.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/redcloth">http://www.rubygems.org/gems/redcloth</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/redcloth">http://www.rubydoc.info/gems/redcloth</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_23" class="toc">Static Web Site Generators</h1></header> +<p><strong>jekyll</strong> <blockquote>&#8220;Jekyll is a simple, blog aware, static site generator.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://jekyllrb.com/">http://jekyllrb.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/jekyll">http://www.rubygems.org/gems/jekyll</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/jekyll">http://www.rubydoc.info/gems/jekyll</a></li> +</ul> + + <p><strong>nanoc</strong> <blockquote>&#8220;a web publishing system written in Ruby for building small to medium-sized websites.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://nanoc.stoneship.org/">http://nanoc.stoneship.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/nanoc">http://www.rubygems.org/gems/nanoc</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/nanoc">http://www.rubydoc.info/gems/nanoc</a></li> +</ul> + + <p><strong>toto</strong> <blockquote>&#8220;the tiniest blog-engine in Oz.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://cloudhead.io/toto">http://cloudhead.io/toto</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/toto">http://www.rubygems.org/gems/toto</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/toto">http://www.rubydoc.info/gems/toto</a></li> +</ul> + + <p><strong>webby</strong> <blockquote>&#8220;Webby is a fantastic little website management system. It would be called a content management system if it were a bigger kid. But, it&#8217;s just a runt with a special knack for transforming text. And that&#8217;s really all it does &#8211; manages the legwork of turning text into something else, an <span class="caps">ASCII</span> Alchemist if you will.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://webby.rubyforge.org/">http://webby.rubyforge.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/webby">http://www.rubygems.org/gems/webby</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/webby">http://www.rubydoc.info/gems/webby</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_24" class="toc">Testing</h1></header> +<p><strong>bacon</strong> <blockquote>&#8220;Bacon is a small RSpec clone weighing less than 350 LoC but nevertheless providing all essential features.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://github.com/chneukirchen/bacon">http://github.com/chneukirchen/bacon</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/bacon">http://www.rubygems.org/gems/bacon</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/bacon">http://www.rubydoc.info/gems/bacon</a></li> +</ul> + + <p><strong>cucumber</strong> <blockquote>&#8220;Behaviour Driven Development with elegance and joy&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://cukes.info/">http://cukes.info/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/cucumber">http://www.rubygems.org/gems/cucumber</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/cucumber">http://www.rubydoc.info/gems/cucumber</a></li> +</ul> + + <p><strong>minitest</strong> <blockquote>&#8220;minitest provides a complete suite of testing facilities supporting <span class="caps">TDD</span>, <span class="caps">BDD</span>, mocking, and benchmarking. minitest/unit is a small and incredibly fast unit testing framework.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="https://github.com/seattlerb/minitest">https://github.com/seattlerb/minitest</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/minitest">http://www.rubygems.org/gems/minitest</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/minitest">http://www.rubydoc.info/gems/minitest</a></li> +</ul> + + <p><strong>rspec</strong> <blockquote>&#8220;RSpec is a Behaviour-Driven Development tool for Ruby programmers. <span class="caps">BDD</span> is an approach to software development that combines Test-Driven Development, Domain Driven Design, and Acceptance Test-Driven Planning. RSpec helps you do the <span class="caps">TDD</span> part of that equation, focusing on the documentation and design aspects of <span class="caps">TDD</span>.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://relishapp.com/rspec">http://relishapp.com/rspec</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/rspec">http://www.rubygems.org/gems/rspec</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/rspec">http://www.rubydoc.info/gems/rspec</a></li> +</ul> + + <p><strong>shoulda</strong> <blockquote>&#8220;Making tests easy on the fingers and eyes&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.thoughtbot.com/projects/shoulda">http://www.thoughtbot.com/projects/shoulda</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/shoulda">http://www.rubygems.org/gems/shoulda</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/shoulda">http://www.rubydoc.info/gems/shoulda</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_25" class="toc">Web Development</h1></header> +<p><strong>rails</strong> <blockquote>&#8220;Ruby on Rails is a full-stack web framework optimized for programmer happiness and sustainable productivity. It encourages beautiful code by favoring convention over configuration.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://rubyonrails.org/">http://rubyonrails.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/rails">http://www.rubygems.org/gems/rails</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/rails">http://www.rubydoc.info/gems/rails</a></li> +</ul> + + <p><strong>sinatra</strong> <blockquote>&#8220;Classy web-development dressed in a <span class="caps">DSL</span>&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.sinatrarb.com/">http://www.sinatrarb.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/sinatra">http://www.rubygems.org/gems/sinatra</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/sinatra">http://www.rubydoc.info/gems/sinatra</a></li> +</ul> + + <p><strong>padrino-framework</strong> <blockquote>&#8220;The Godfather of Sinatra provides a full-stack agnostic framework on top of Sinatra&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.padrinorb.com/">http://www.padrinorb.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/padrino-framework">http://www.rubygems.org/gems/padrino-framework</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/padrino-framework">http://www.rubydoc.info/gems/padrino-framework</a></li> +</ul> + + <p><strong>merb-core</strong> <blockquote>&#8220;Merb. Pocket rocket web framework.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.merbivore.com/">http://www.merbivore.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/merb-core">http://www.rubygems.org/gems/merb-core</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/merb-core">http://www.rubydoc.info/gems/merb-core</a></li> +</ul> + + <p><strong>ramaze</strong> <blockquote>&#8220;Ramaze is a simple and modular web framework&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://ramaze.net/">http://ramaze.net/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/ramaze">http://www.rubygems.org/gems/ramaze</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/ramaze">http://www.rubydoc.info/gems/ramaze</a></li> +</ul> + + <p><strong>camping</strong> <blockquote>&#8220;miniature rails for stay-at-home moms&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://camping.rubyforge.org/">http://camping.rubyforge.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/camping">http://www.rubygems.org/gems/camping</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/camping">http://www.rubydoc.info/gems/camping</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_26" class="toc">Web and App Servers</h1></header> +<p><strong>passenger</strong> <blockquote>&#8220;Easy and robust Ruby web application deployment.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://www.modrails.com/">http://www.modrails.com/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/passenger">http://www.rubygems.org/gems/passenger</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/passenger">http://www.rubydoc.info/gems/passenger</a></li> +</ul> + + <p><strong>rack</strong> <blockquote>&#8220;Rack provides a minimal interface between webservers supporting Ruby and Ruby frameworks.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://rack.rubyforge.org/">http://rack.rubyforge.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/rack">http://www.rubygems.org/gems/rack</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/rack">http://www.rubydoc.info/gems/rack</a></li> +</ul> + + <p><strong>thin</strong> <blockquote>&#8220;A thin and fast web server&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://code.macournoyer.com/thin/">http://code.macournoyer.com/thin/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/thin">http://www.rubygems.org/gems/thin</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/thin">http://www.rubydoc.info/gems/thin</a></li> +</ul> + + <p><strong>unicorn</strong> <blockquote>&#8220;Unicorn is an <span class="caps">HTTP</span> server for Rack applications designed to only serve fast clients on low-latency, high-bandwidth connections and take advantage of features in Unix/Unix-like kernels.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://unicorn.bogomips.org/">http://unicorn.bogomips.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/unicorn">http://www.rubygems.org/gems/unicorn</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/unicorn">http://www.rubydoc.info/gems/unicorn</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_27" class="toc">XML Parsing</h1></header> +<p><strong>hpricot</strong> <blockquote>&#8220;a swift, liberal <span class="caps">HTML</span> parser with a fantastic library&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://code.whytheluckystiff.net/hpricot/">http://code.whytheluckystiff.net/hpricot/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/hpricot">http://www.rubygems.org/gems/hpricot</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/hpricot">http://www.rubydoc.info/gems/hpricot</a></li> +</ul> + + <p><strong>nokogiri</strong> <blockquote>&#8220;An <span class="caps">HTML</span>, <span class="caps">XML</span>, <span class="caps">SAX</span>, &amp; Reader parser with the ability to search documents via XPath or CSS3 selectors&#8230; and much more&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://nokogiri.org/">http://nokogiri.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/nokogiri">http://www.rubygems.org/gems/nokogiri</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/nokogiri">http://www.rubydoc.info/gems/nokogiri</a></li> +</ul> + + <p><strong>xml-simple</strong> <blockquote>&#8220;A simple <span class="caps">API</span> for <span class="caps">XML</span> processing.&#8221;</blockquote></p> +<ul> + <li>Web Page: <a href="http://xml-simple.rubyforge.org/">http://xml-simple.rubyforge.org/</a></li> + <li>Download: <a href="http://www.rubygems.org/gems/xml-simple">http://www.rubygems.org/gems/xml-simple</a></li> + <li>Documentation: <a href="http://www.rubydoc.info/gems/xml-simple">http://www.rubydoc.info/gems/xml-simple</a></li> +</ul> + +</section> + <nav class="navigation"><a href="/ruby-compendium/book/gems.html">← Ruby Gems</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/resources.html">Resources →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/gems.html

@@ -0,0 +1,121 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Ruby Gems - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Ruby Gems</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/features.html">← Advanced Language Features</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gem-tips.html">What you can use for... →</a></nav> + <p>Sure, the <a href="/ruby-compendium/book/core-stdlib.html#core-stdlib">Standard Library</a> is quite large but&#8230; no, it does not have everything you need. Luckily, it&#8217;s full of gems out there! Rubygems is Ruby&#8217;s packaging system, and the best way to distribute your own libraries and applications.</p> +<p>The Rubygems packaging system is now included in most Ruby implementation and distributions. Installing a gem and all its dependencies is as easy as issuing <code>gem install &lt;name of the gem&gt;</code>. So for example if you want to install the <a href="https://rubygems.org/gems/rails">rails</a> gem, you can just run</p> +<p><code>gem install rails</code></p> +<p>&#8230;and it will be automatically downloaded and installed on your system, along with the other gems it depends on.</p> +<section class="section"> +<header><h1 id="h_16" class="toc">RubyGems.org</h1></header> +There are over 1300 different gems publicly (and freely!) available. Luckily, the official gem host site, <a href="http://www.rubygems.org">RubyGems.org</a> makes it very easy to find what you're looking for: just search for a particular gem or a functionality you're looking for, and browse through the results. You can also register and <em>push</em> your own gems for other people to use. + +</section> +<aside class="box"> +<div class="box-title">What happened to RubyForge?</div> +<p>If you started to learn Ruby a few years ago, the <a href="http://www.rubyforge.org">RubyForge</a> was <em>the</em> place to find user-created ruby code and gems. The site is still there, but nowadays Rubyists prefer using <a href="http://www.github.com">GitHub</a> as host for their source code repositories and RubyGems.org as the home for their gems.</p> + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/features.html">← Advanced Language Features</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/gem-tips.html">What you can use for... →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/implementations.html

@@ -0,0 +1,184 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Versions and Implementations - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Versions and Implementations</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/ten-good-things.html">← 10 Good Things about Ruby</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/syntax.html">Syntax →</a></nav> + <p>One thing that may appear unusual and even discouraging to newcomers is the different versions and implementations of the language. Ruby has two version branches:</p> +<ul> + <li><strong>1.8</strong> &ndash; The former stable version, which is still widely used in production and it is still updated.</li> + <li><strong>1.9</strong> &ndash; As of release 1.9.2, this is considered the current stable and recommended version of the language. Although most third-party libraries work with it, some old and now unmaintained libraries may not. The good news is that there are normally newer and better libraries available instead.</li> +</ul> +<p>Different implementations of Ruby offer different degrees of support to one or the other version. Compared to 1.8, Ruby 1.9 has some additional syntax for certain expressions, improved character encoding support and a few new bundled libraries and features.</p> +<p>If you&#8217;re new to Ruby and you have no particular restrictions or needs, you should start learning Ruby using version 1.9 (either <a href="#yarv">the official implementation</a>, <a href="#jruby">JRuby</a> or <a href="#macruby">MacRuby</a>)!</p> +<aside class="box"> +<div class="box-title">If you want to know more...</div> +<p>There are many articles and presentations online outlining the changes in Ruby 1.9, for example:</p> +<ul> + <li><a href="http://www.slideshare.net/komrade/piterrb-2-ruby-18-vs-ruby-19">Piter.rb #2 &#8211; Ruby 1.8 vs Ruby 1.9</a></li> + <li><a href="http://eigenclass.org/hiki/Changes+in+Ruby+1.9">Changes in Ruby 1.9</a></li> + <li><a href="http://slideshow.rubyforge.org/ruby19.html#1">Ruby 1.9: What to Expect</a></li> +</ul> + +</aside> +<section class="section"> +<header><h1 id="h_6" class="notoc">Official Ruby 1.8 Implementation</h1></header> +<p>The official Ruby 1.8 implementation was written in C by Yukihiru Matsumoto, the creator of Ruby.</p> +<ul> + <li>Current Version: <strong>1.8.7-p352</strong></li> + <li>Download: <a href="http://www.ruby-lang.org/en/downloads/">Official Ruby Web Site</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="yarv" class="notoc">Official Ruby 1.9 Implementation</h1></header> +<p>The official Ruby 1.9 implementation is based on a bytecode interpreter written Koichi Sasada.</p> +<ul> + <li>Current Version: <strong>1.9.2-p200</strong></li> + <li>Preview Version: <strong>1.9.2-preview1</strong></li> + <li>Download: <a href="http://www.ruby-lang.org/en/downloads/">Official Ruby Web Site</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="jruby" class="notoc">JRuby</h1></header> +<p>An implementation of the Ruby language running on the Java Virtual Machine, mature and usable in production. It offers real threading, performance improvements, and Java interoperability. Fully-compatible with both Ruby 1.8 and 1.9.</p> +<ul> + <li>Current Version: <strong>1.6.3</strong></li> + <li>Download: <a href="http://jruby.org/">JRuby Web Site</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_9" class="notoc">Rubinius</h1></header> +<p>A C++ and <a href="http://llvm.org/"><span class="caps">LLVM</span></a>-powered Ruby implementation. Although still not as mature as <span class="caps">YARV</span> or JRuby, it&#8217;s getting there. It currently aims at being compatible with Ruby 1.8.7, although support for Ruby 1.9 is planned.</p> +<ul> + <li>Current Version: <strong>1.2.4</strong></li> + <li>Download: <a href="http://rubini.us/">Rubinius Web Site</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="macruby" class="notoc">MacRuby</h1></header> +<p>A Mac-only Ruby implementation compatible with Ruby 1.9, specifically tuned for Mac OS X operating systems.</p> +<ul> + <li>Current Version: <strong>0.10</strong></li> + <li>Download: <a href="http://www.macruby.org/">MacRuby Web Site</a></li> +</ul> + +</section> +<section class="section"> +<header><h1 id="h_11" class="notoc">IronRuby</h1></header> +<p>A .<span class="caps">NET</span> implementation of the Ruby Programming Language, compatible with Ruby 1.8.6 (IronRuby 1.0) and 1.9 (IronRuby 1.1.1 onwards). Not as mature as the other implementations.</p> +<ul> + <li>Current Version: <strong>1.1.3</strong></li> + <li>Download: <a href="http://www.ironruby.net/">IronRuby Web Site</a></li> +</ul> + +</section> +<aside class="box"> +<div class="box-title">Try'em All!</div> +<p>Don&#8217;t know which Ruby to choose? You don&#8217;t have to! <a href="/ruby-compendium/book/rubyists.html#wayneeseguin"></a> created <a href="https://rvm.beginrescueend.com/">Ruby Version Manager</a> (<span class="caps">RVM</span>) to allow you to install, upgrade and manage several Ruby installation seamlessly on the same computer. If you&#8217;re on OS X or Linux, that is. If you&#8217;re on a Windows computer, <a href="https://github.com/vertiginous/pik">Pik</a> provides something similar.</p> + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/ten-good-things.html">← 10 Good Things about Ruby</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/syntax.html">Syntax →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
M content/ruby-compendium/book/index.htmlcontent/ruby-compendium/book/index.html

@@ -1,10 +1,7 @@

<!DOCTYPE html> <html lang="en"> <head> - <title>Ruby Compendium - An Essential Guide to the Ruby Ecosystem</title> - <link href='http://fonts.googleapis.com/css?family=Crimson+Text:400,400italic,600,600italic,700,700italic' rel='stylesheet' type='text/css'> - - + <title>Glyph - Document Authoring Framework</title> <meta charset="utf-8" /> <meta name="author" content="Fabio Cevasco" />

@@ -17,7 +14,7 @@ <meta name="country" content="United States" />

<meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> - <meta name="keywords" content="h3rald, fabio cevasco, ruby-compendium" /> + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> <link rel="shortcut icon" href="/favicon.png" type="image/png" /> <meta content="44.388041;9.073248" name="ICBM" />

@@ -27,7 +24,7 @@

<script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> <script src="/js/sevenup.js" type="text/javascript"></script> <script src="/js/sevenup_black.js" type="text/javascript"></script> - <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> <script src="/js/jquery-timeago.js" type="text/javascript"></script> <script src="/js/jquery-easing.js" type="text/javascript"></script> <script src="/js/jquery-fancybox.js" type="text/javascript"></script>

@@ -43,23 +40,23 @@

<header class="page"> <nav class="home-link"> <a href="/"> - <img src="/images/h3rald_small.png" alt="H3RALD" class="default"/> - <![if !IE]> - <img src="/images/h3rald_hover_small.png" alt="H3RALD" class="hover"/> - <![endif]> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> </a> </nav> <nav class="section"> - /<a href="/ruby-compendium/" rel="ruby-compendium">RUBY-COMPENDIUM</a> + /<a href="/glyph/" rel="glyph">GLYPH</a> </nav> </header> <article class="page"> <header> <hgroup> - <h1>Ruby Compendium</h1> - <h2>An Essential Guide to the Ruby Ecosystem</h2> + <h1>Glyph - Document Authoring Framework</h1> + <h2>Documentation</h2> </hgroup>

@@ -68,38 +65,22 @@ <section id="body-text" class="hyphenate glyph-index">

<nav class="contents"> <h1 class="toc-header" id="toc">Table of Contents</h1> <ol class="toc"> - + <li class="frontmatter introduction"><a href="/ruby-compendium/book/intro.html#h_1">So you want to learn Ruby...</a></li><li><ol><li class="frontmatter section"><a href="/ruby-compendium/book/notes.html#h_2">About this Book</a></li></ol></li> +<li class="bodymatter chapter"><a href="/ruby-compendium/book/language.html#h_3">Quick Tour</a></li><li><ol><li class="bodymatter section"><a href="/ruby-compendium/book/ten-good-things.html#ten-good-things">10 Good Things about Ruby</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/implementations.html#implementations">Versions and Implementations</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/syntax.html#syntax">Syntax</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/core-stdlib.html#core-stdlib">The Core and the Standard Library</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/features.html#features">Advanced Language Features</a></li></ol></li> +<li class="bodymatter chapter"><a href="/ruby-compendium/book/gems.html#gems">Ruby Gems</a></li><li><ol><li class="bodymatter section"><a href="/ruby-compendium/book/gem-tips.html#h_17">What you can use for...</a></li></ol></li> +<li class="bodymatter chapter"><a href="/ruby-compendium/book/resources.html#resources">Resources</a></li><li><ol><li class="bodymatter section"><a href="/ruby-compendium/book/web-sites.html#websites">Web Sites</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/books.html#books">Books</a></li><li class="bodymatter section"><a href="/ruby-compendium/book/podcasts.html#podcasts">Podcasts and Screencasts</a></li></ol></li> +<li class="backmatter appendix"><a href="/ruby-compendium/book/rubyists.html#h_32">Notable Rubyists</a></li> </ol> </nav> <nav id="sharing-buttons"> <a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> -<g:plusone size="medium"></g:plusone> -<script type="text/javascript"> - (function() { - var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; - po.src = 'https://apis.google.com/js/plusone.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); - })(); -</script> </nav> </section> </article> <footer> - <section class="ads"> - <script type="text/javascript"><!-- - google_ad_client = "pub-2871497824158668"; - /* 728x90, created 9/10/10 */ - google_ad_slot = "3963343166"; - google_ad_width = 728; - google_ad_height = 90; - //--> - </script> - <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> - </script> - </section> <section> <nav> <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a>
A content/ruby-compendium/book/intro.html

@@ -0,0 +1,112 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>So you want to learn Ruby... - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>So you want to learn Ruby...</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/notes.html">About this Book →</a></nav> + <p>&#8230;or maybe not. Maybe you&#8217;re <em>thinking</em> about it, but you&#8217;re not entirely convinced it&#8217;s a good idea. Maybe you have an annoying co-worker who constantly raves about it and made you curious. Whatever the case, this tiny book is about telling you all you need to know about the language before you actually start getting your hands dirty.</p> +<p>There are many different ways to learn new programming languages. Typically, you&#8217;d start reading tutorials online, try a few example programs, maybe buy a book and start reading it. That&#8217;s what most people do nowadays, and it works, in the end. The downside of this is that you may spend weeks or even months trying to get the hang of the language, spend a lot of time trying to find information about it, ask dumb questions in forums and mailing lists, re-invent the wheel only to find out &mdash;months later&mdash; that someone already made a library which does exactly the same thing as yours, but in a much better way.</p> +<p>You can learn through mistakes, but there&#8217;s no harm in starting with the right foot.</p> +<p>This <em>Ruby Compendium</em> gives you an overview of the Ruby Ecosystem from 10,000ft. It briefly describes the language, its libraries, and what resources you can find online. By the time you finish reading this, you will <em>not</em> know how to write Ruby programs (yet) but you&#8217;ll definitely know <em>how to learn</em> this amazing and powerful language and where to look for information and help.</p> +<p>Close your editor now, relax, and enjoy!</p> + <nav class="navigation"> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/notes.html">About this Book →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/language.html

@@ -0,0 +1,117 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Quick Tour - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Quick Tour</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/notes.html">← About this Book</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/ten-good-things.html">10 Good Things about Ruby →</a></nav> + <p>Ruby is a relatively new programming language. It was created by <a href="/ruby-compendium/book/rubyists.html#matz">Yukihiro Matzumoto</a> (aka &#8220;Matz&#8221;) in 1995, but it took another ten years to become popular outside Japan, thanks to the <em>Ruby on Rails</em> web framework.</p> +<aside class="box"> +<div class="box-title">Isn't Ruby <em>slow?</em></div> +<p>Being a high-level, interpreted language, Ruby is slower than compiled languages like C or C++ or even other interpreted languages like Perl 5. However, this may vary depending on the implementation.</p> +<ul> + <li>If you are interested in Ruby benchmarks, check out Antonio Cangiano&#8217;s <a href="http://programmingzen.com/2010/07/19/the-great-ruby-shootout-july-2010/">Great Ruby Shootout</a>, which also includes data on <a href="http://www.rubyenterpriseedition.com/">Ruby Enterprise Edition</a> and <a href="http://ruby.gemstone.com/">MagLev</a> implementations.</li> + <li>If you are interested in benchmarks between Ruby implementations and other languages, the <a href="http://shootout.alioth.debian.org/">Computer Language Benchmark Game</a> is a good place to start.</li> +</ul> + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/notes.html">← About this Book</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/ten-good-things.html">10 Good Things about Ruby →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/notes.html

@@ -0,0 +1,115 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>About this Book - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>About this Book</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/intro.html">← So you want to learn Ruby...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/language.html">Quick Tour →</a></nav> + <p>This book was written by Fabio Cevasco and it is licensed under a <a href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.</p> +<p>This book was authored using <a href="http://www.h3rald.com/glyph">Glyph</a> and the <span class="caps">PDF</span> version was produced with <a href="http://www.princexml.org">Prince <span class="caps">XML</span></a>.</p> +<p>The Ruby logo is copyright &#169; 2006, Yukihiro Matsumoto, and used under the terms of the <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License</a>.</p> +<p>Special thanks to the following individuals who contributed to the project, in some ways:</p> +<ul> + <li><a href="http://blog.dio.jp/">Akira Matsuda</a></li> + <li><a href="http://www.bitcetera.com/">Sven Schwyn</a></li> +</ul> + <nav class="navigation"><a href="/ruby-compendium/book/intro.html">← So you want to learn Ruby...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/language.html">Quick Tour →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/podcasts.html

@@ -0,0 +1,119 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Podcasts and Screencasts - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Podcasts and Screencasts</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/books.html">← Books</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/rubyists.html">Notable Rubyists →</a></nav> + + <p><strong><a href="http://5by5.tv/rubyshow">The Ruby Show</a></strong> &ndash; <em>The</em> Ruby podcast, with <a href="/ruby-compendium/book/rubyists.html#danbenjamin">Dan Benjamin</a> and <a href="/ruby-compendium/book/rubyists.html#jseifer">Jason Seifer</a>.</p> + + <p><strong><a href="http://ruby5.envylabs.com/">Ruby5</a></strong> &ndash; Frequently-released short podcasts on what&#8217;s new in the Ruby and Rails community. By <a href="/ruby-compendium/book/rubyists.html#greggpollack">Gregg Pollack</a>.</p> + + <p><strong><a href="http://rubyonrails.org/screencasts">Ruby On Rails Screencasts</a></strong> &ndash; Free Ruby on Rails screencasts</p> + + <p><strong><a href="http://sdruby.org/podcast">SD Ruby Podcast</a></strong> &ndash; Ruby podcasts by the San Diego Ruby community.</p> + + <p><strong><a href="http://www.rubypulse.com/">Ruby Pulse</a></strong> &ndash; Free Ruby-related podcasts.</p> + + <p><strong><a href="http://ruby-kickstart.com/">Ruby Kickstart</a></strong> &ndash; Hours of free screencast to teach you how to program in Ruby, with loads of free material, quizzes, and goodies.</p> + <nav class="navigation"><a href="/ruby-compendium/book/books.html">← Books</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/rubyists.html">Notable Rubyists →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/resources.html

@@ -0,0 +1,110 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Resources - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Resources</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/gem-tips.html">← What you can use for...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/web-sites.html">Web Sites →</a></nav> + <p>There are a lot of resources out there to help you get started or stay up-to-date with Ruby. The Ruby community is active and supportive, as long as you ask nicely.</p> +<p>The following section contains a small set of hand-picked web sites, books and podcasts which you should definitely have a look at. For even more community resources, check out the <a href="http://www.ruby-lang.org/en/community/">Community Page</a> on the Official Ruby Web Site.</p> + + <nav class="navigation"><a href="/ruby-compendium/book/gem-tips.html">← What you can use for...</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/web-sites.html">Web Sites →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/rubyists.html

@@ -0,0 +1,372 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Notable Rubyists - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Notable Rubyists</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/podcasts.html">← Podcasts and Screencasts</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | </nav> + + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="chad"></a><strong><a href="http://chadfowler.com/">Chad Fowler</a></strong> &ndash; <a href="http://twitter.com/chadfowler">@chadfowler</a> + </span> + <div style="margin-left: 30px;"> + +Pragmatic Programmer, published author, Ruby core committer. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="matz"></a><strong><a href="http://www.rubyist.net/~matz/">Yukihiro Matsumoto</a></strong> &ndash; <a href="http://twitter.com/yukihiro_matz">@yukihiro_matz</a> + </span> + <div style="margin-left: 30px;"> + +The creator of the Ruby Programming Language. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="davethomas"></a><strong><a href="http://pragdave.pragprog.com/">Dave Thomas</a></strong> &ndash; <a href="http://twitter.com/pragdave">@pragdave</a> + </span> + <div style="margin-left: 30px;"> + +Pragmatic Programmer, published author, Ruby core committer. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="dhh"></a><strong><a href="http://www.loudthinking.com/">David Heinemeier Hansson</a></strong> &ndash; <a href="http://twitter.com/dhh">@dhh</a> + </span> + <div style="margin-left: 30px;"> + +Creator of the Ruby on Rails framework. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="_why"></a><strong><a href="http://viewsourcecode.org/why/">why the lucky stiff</a></strong> &ndash; <a href="http://twitter.com/_why">@_why</a> + </span> + <div style="margin-left: 30px;"> + +Semi-legendary, prolific Ruby developer, core committer, blogger, book author. Mysteriously disappeared in August 2009. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="wycatz"></a><strong><a href="http://www.yehudakatz.com/">Yehuda Katz</a></strong> &ndash; <a href="http://twitter.com/wycatz">@wycatz</a> + </span> + <div style="margin-left: 30px;"> + +Rails core committer, lead developer of the Merb project. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="jm"></a><strong><a href="http://www.jeremymcanally.com/">Jeremy McAnally</a></strong> &ndash; <a href="http://twitter.com/jm">@jm</a> + </span> + <div style="margin-left: 30px;"> + +Published author, blogger. Known for the Little Humble Ruby Book. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="obie"></a><strong><a href="http://obiefernandez.com/">Obie Fernandez</a></strong> &ndash; <a href="http://twitter.com/obie">@obie</a> + </span> + <div style="margin-left: 30px;"> + +Published author, editor of Addison-Wesley's Professional Ruby Series, enterpreneur. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="olabini"></a><strong><a href="http://olabini.com/blog">Ola Bini</a></strong> &ndash; <a href="http://twitter.com/olabini">@olabini</a> + </span> + <div style="margin-left: 30px;"> + +JRuby core committer, published author, blogger. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="peterc"></a><strong><a href="http://peterc.org/">Peter Cooper</a></strong> &ndash; <a href="http://twitter.com/peterc">@peterc</a> + </span> + <div style="margin-left: 30px;"> + +Published author, blogger, enterpreneaur. Creator of Ruby Inside. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="acangiano"></a><strong><a href="http://antoniocangiano.com/">Antonio Cangiano</a></strong> &ndash; <a href="http://twitter.com/acangiano">@acangiano</a> + </span> + <div style="margin-left: 30px;"> + +Technical Evangelist, blogger, published author, and Ruby's unofficial benchmarker. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="andyhunt"></a><strong><a href="http://blog.toolshed.com/">Andy Hunt</a></strong> &ndash; <a href="http://twitter.com/pragmaticandy">@pragmaticandy</a> + </span> + <div style="margin-left: 30px;"> + +Pragmatic Programmer, published author. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="satish"></a><strong><a href="http://satishtalim.com/">Satish Talim</a></strong> &ndash; <a href="http://twitter.com/indianguru">@indianguru</a> + </span> + <div style="margin-left: 30px;"> + +Creator of RubyLearning.com, one of the best resources for learning Ruby. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="dablack"></a><strong><a href="http://dablog.rubypal.com/">David A. Black</a></strong> &ndash; <a href="http://twitter.com/david_a_black">@david_a_black</a> + </span> + <div style="margin-left: 30px;"> + +Ruby core committer, published. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="jeg2"></a><strong><a href="http://blog.grayproductions.net/">James Edward Gray II</a></strong> &ndash; <a href="http://twitter.com/jeg2">@jeg2</a> + </span> + <div style="margin-left: 30px;"> + +Ruby core committer, conference organizer, published author and blogger. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="luislavena"></a><strong><a href="http://blog.mmediasys.com/">Luis Lavena</a></strong> &ndash; <a href="http://twitter.com/luislavena">@luislavena</a> + </span> + <div style="margin-left: 30px;"> + +Ruby core committer, maintainer of RubyInstaller for Windows. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="tenderlove"></a><strong><a href="http://tenderlovemaking.com/">Aaron Petterson</a></strong> &ndash; <a href="http://twitter.com/tenderlove">@tenderlove</a> + </span> + <div style="margin-left: 30px;"> + +Ruby core committer, blogger. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="greggpollack"></a><strong><a href="http://envylabs.com/">Gregg Pollack</a></strong> &ndash; <a href="http://twitter.com/greggpollack">@greggpollack</a> + </span> + <div style="margin-left: 30px;"> + +Founder of EnvyLabs, creator of many Ruby and Rails-related podcasts, including Ruby5. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="danbenjamin"></a><strong><a href="http://danbenjamin.com/">Dan Benjamin</a></strong> &ndash; <a href="http://twitter.com/danbenjamin">@danbenjamin</a> + </span> + <div style="margin-left: 30px;"> + +Founder of 5by5 Studios, creator and host of The Ruby Show podcast. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="jseifer"></a><strong><a href="http://jasonseifer.com/">Jason Seifer</a></strong> &ndash; <a href="http://twitter.com/jseifer">@jseifer</a> + </span> + <div style="margin-left: 30px;"> + +Co-host of The Ruby Show podcast. + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="wayneeseguin"></a><strong><a href="http://beginrescueend.com/">Wayne E. Seguin</a></strong> &ndash; <a href="http://twitter.com/wayneeseguin">@wayneeseguin</a> + </span> + <div style="margin-left: 30px;"> + +Creator of Ruby Version Manager (RVM). + </div> + +</section> + + <section class="section"> +<span style="padding-top: 20px;display: block;"> + +<a id="steveklabnik"></a><strong><a href="http://www.steveklabnik.com/">Steve Klabnik</a></strong> &ndash; <a href="http://twitter.com/steveklabnik">@steveklabnik</a> + </span> + <div style="margin-left: 30px;"> + +Maintainer of Hackety Hack, creator of rstat.us. + </div> + +</section> + <nav class="navigation"><a href="/ruby-compendium/book/podcasts.html">← Podcasts and Screencasts</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | </nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/syntax.html

@@ -0,0 +1,180 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Syntax - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Syntax</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/implementations.html">← Versions and Implementations</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/core-stdlib.html">The Core and the Standard Library →</a></nav> + <p> +Teaching you how to program in Ruby goes beyond the scope of this book, however, this section will show you at least what Ruby code looks like. If you know another programming language already, some things may already be familiar to you. If you don't, hopefully the following code will not appear too intimidating. +</p> +<div class="CodeRay"> + <div class="code"><pre><span class="line-numbers"> <a href="#n1" name="n1">1</a></span><span class="comment"># This is a comment and will not be executed </span> +<span class="line-numbers"> <a href="#n2" name="n2">2</a></span><span class="comment"># by the Ruby interpreter.</span> +<span class="line-numbers"> <a href="#n3" name="n3">3</a></span><span class="comment">#</span> +<span class="line-numbers"> <a href="#n4" name="n4">4</a></span><span class="comment"># This is not the usual 'Hello World' example, so </span> +<span class="line-numbers"> <a href="#n5" name="n5">5</a></span><span class="comment"># don't worry if you don't understand everything. </span> +<span class="line-numbers"> <a href="#n6" name="n6">6</a></span><span class="comment"># This example is meant to give you a general feeling </span> +<span class="line-numbers"> <a href="#n7" name="n7">7</a></span><span class="comment"># of what it is like to write Ruby programs.</span> +<span class="line-numbers"> <a href="#n8" name="n8">8</a></span> +<span class="line-numbers"> <a href="#n9" name="n9">9</a></span>require <span class="string"><span class="delimiter">'</span><span class="content">pathname</span><span class="delimiter">'</span></span> <span class="comment"># Here we're requiring an external library</span> +<span class="line-numbers"><strong><a href="#n10" name="n10">10</a></strong></span> <span class="comment"># which is part of the Ruby Standard Library.</span> +<span class="line-numbers"><a href="#n11" name="n11">11</a></span> +<span class="line-numbers"><a href="#n12" name="n12">12</a></span><span class="keyword">class</span> <span class="class">FilePrinter</span> +<span class="line-numbers"><a href="#n13" name="n13">13</a></span> +<span class="line-numbers"><a href="#n14" name="n14">14</a></span> <span class="comment"># Constructor method</span> +<span class="line-numbers"><a href="#n15" name="n15">15</a></span> <span class="keyword">def</span> <span class="function">initialize</span>(path) +<span class="line-numbers"><a href="#n16" name="n16">16</a></span> <span class="comment"># This method expects a valid path, however Ruby is dynamically-typed</span> +<span class="line-numbers"><a href="#n17" name="n17">17</a></span> <span class="comment"># so anything can be passed to this method.</span> +<span class="line-numbers"><a href="#n18" name="n18">18</a></span> <span class="comment"># To check that the input value is valid, just check if if it behaves</span> +<span class="line-numbers"><a href="#n19" name="n19">19</a></span> <span class="comment"># like a path. This is called 'duck typing'.</span> +<span class="line-numbers"><strong><a href="#n20" name="n20">20</a></strong></span> raise <span class="constant">RuntimeError</span>, <span class="string"><span class="delimiter">&quot;</span><span class="content">Invalid path: </span><span class="inline"><span class="inline-delimiter">#{</span>path<span class="inline-delimiter">}</span></span><span class="delimiter">&quot;</span></span> <span class="keyword">unless</span> path.respond_to? <span class="symbol">:basename</span> +<span class="line-numbers"><a href="#n21" name="n21">21</a></span> <span class="instance-variable">@path</span> = path +<span class="line-numbers"><a href="#n22" name="n22">22</a></span> <span class="instance-variable">@name</span> = <span class="instance-variable">@path</span>.basename +<span class="line-numbers"><a href="#n23" name="n23">23</a></span> <span class="keyword">end</span> +<span class="line-numbers"><a href="#n24" name="n24">24</a></span> +<span class="line-numbers"><a href="#n25" name="n25">25</a></span> <span class="keyword">def</span> <span class="function">show</span> +<span class="line-numbers"><a href="#n26" name="n26">26</a></span> <span class="comment"># Ruby objects and expressions can be interpolated in strings</span> +<span class="line-numbers"><a href="#n27" name="n27">27</a></span> puts <span class="string"><span class="delimiter">&quot;</span><span class="content"> </span><span class="delimiter">#</span><span class="instance-variable">@name</span><span class="content"> -- </span><span class="inline"><span class="inline-delimiter">#{</span><span class="instance-variable">@path</span>.stat.size<span class="inline-delimiter">}</span></span><span class="content"> bytes</span><span class="delimiter">&quot;</span></span> +<span class="line-numbers"><a href="#n28" name="n28">28</a></span> <span class="keyword">end</span> +<span class="line-numbers"><a href="#n29" name="n29">29</a></span> +<span class="line-numbers"><strong><a href="#n30" name="n30">30</a></strong></span><span class="keyword">end</span> +<span class="line-numbers"><a href="#n31" name="n31">31</a></span> +<span class="line-numbers"><a href="#n32" name="n32">32</a></span><span class="keyword">class</span> <span class="class">DirPrinter</span> &lt; <span class="constant">FilePrinter</span> <span class="comment"># Definition of a child class</span> +<span class="line-numbers"><a href="#n33" name="n33">33</a></span> +<span class="line-numbers"><a href="#n34" name="n34">34</a></span> <span class="keyword">def</span> <span class="function">initialize</span>(path) +<span class="line-numbers"><a href="#n35" name="n35">35</a></span> <span class="keyword">super</span> <span class="comment"># Call to the parent's constructur</span> +<span class="line-numbers"><a href="#n36" name="n36">36</a></span> <span class="instance-variable">@children</span> = <span class="instance-variable">@path</span>.children +<span class="line-numbers"><a href="#n37" name="n37">37</a></span> <span class="keyword">end</span> +<span class="line-numbers"><a href="#n38" name="n38">38</a></span> +<span class="line-numbers"><a href="#n39" name="n39">39</a></span> <span class="keyword">def</span> <span class="function">show</span> +<span class="line-numbers"><strong><a href="#n40" name="n40">40</a></strong></span> puts <span class="string"><span class="delimiter">&quot;</span><span class="content"> </span><span class="delimiter">#</span><span class="instance-variable">@name</span><span class="content">/ -- </span><span class="inline"><span class="inline-delimiter">#{</span><span class="instance-variable">@children</span>.length<span class="inline-delimiter">}</span></span><span class="content"> item(s)</span><span class="delimiter">&quot;</span></span> +<span class="line-numbers"><a href="#n41" name="n41">41</a></span> <span class="keyword">end</span> +<span class="line-numbers"><a href="#n42" name="n42">42</a></span> +<span class="line-numbers"><a href="#n43" name="n43">43</a></span><span class="keyword">end</span> +<span class="line-numbers"><a href="#n44" name="n44">44</a></span> +<span class="line-numbers"><a href="#n45" name="n45">45</a></span><span class="comment"># No parenthesis are required unless needed!</span> +<span class="line-numbers"><a href="#n46" name="n46">46</a></span>pwd = <span class="constant">Pathname</span>.new <span class="constant">Dir</span>.pwd +<span class="line-numbers"><a href="#n47" name="n47">47</a></span> +<span class="line-numbers"><a href="#n48" name="n48">48</a></span>puts <span class="string"><span class="delimiter">&quot;</span><span class="content">Current Directory: </span><span class="inline"><span class="inline-delimiter">#{</span>pwd<span class="inline-delimiter">}</span></span><span class="delimiter">&quot;</span></span> +<span class="line-numbers"><a href="#n49" name="n49">49</a></span> +<span class="line-numbers"><strong><a href="#n50" name="n50">50</a></strong></span><span class="comment"># Get the children items of the current directory, </span> +<span class="line-numbers"><a href="#n51" name="n51">51</a></span><span class="comment"># select only directories, </span> +<span class="line-numbers"><a href="#n52" name="n52">52</a></span><span class="comment"># sort them alphabetically,</span> +<span class="line-numbers"><a href="#n53" name="n53">53</a></span><span class="comment"># and for each one of them...</span> +<span class="line-numbers"><a href="#n54" name="n54">54</a></span>pwd.children.select{|i| i.directory? }.sort.each <span class="keyword">do</span> |item| +<span class="line-numbers"><a href="#n55" name="n55">55</a></span> <span class="comment"># Call the show method, printing the </span> +<span class="line-numbers"><a href="#n56" name="n56">56</a></span> <span class="comment"># directory name and the number of child items</span> +<span class="line-numbers"><a href="#n57" name="n57">57</a></span> <span class="constant">DirPrinter</span>.new(item).show +<span class="line-numbers"><a href="#n58" name="n58">58</a></span><span class="keyword">end</span> +<span class="line-numbers"><a href="#n59" name="n59">59</a></span> +<span class="line-numbers"><strong><a href="#n60" name="n60">60</a></strong></span>pwd.children.select{|i| !i.directory? }.sort.each <span class="keyword">do</span> |item| +<span class="line-numbers"><a href="#n61" name="n61">61</a></span> <span class="constant">FilePrinter</span>.new(item).show +<span class="line-numbers"><a href="#n62" name="n62">62</a></span><span class="keyword">end</span></pre></div> +</div> + +<aside class="box"> +<div class="box-title">Trying out Ruby...</div> +If your hands are itching to try writing Ruby code, but you don't want to install it just yet, head over to <a href="http://tryruby.org/">Try Ruby!</a>, a unique way to try the language right in your browser. Or, if you already installed Ruby, follow the <a href="http://www.ruby-lang.org/en/documentation/quickstart/">Ruby in 20 minutes</a> tutorial, using Interactive RuBy (IRB). + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/implementations.html">← Versions and Implementations</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/core-stdlib.html">The Core and the Standard Library →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/ten-good-things.html

@@ -0,0 +1,124 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>10 Good Things about Ruby - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>10 Good Things about Ruby</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/language.html">← Quick Tour</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/implementations.html">Versions and Implementations →</a></nav> + <ol> + <li>It&#8217;s free and open source.</li> + <li>It&#8217;s high-level, no need to worry about memory allocation or similar.</li> + <li>It&#8217;s fully cross platform, or at least most of its <a href="/ruby-compendium/book/implementations.html#implementations">implementations</a> are.</li> + <li>It&#8217;s elegant. Really, Ruby <a href="/ruby-compendium/book/syntax.html#syntax">syntax</a> is truly beautiful, with no semicolons or braces, generally.</li> + <li>It has a large <a href="/ruby-compendium/book/core-stdlib.html#core-stdlib">core and Standard Library</a>.</li> + <li>It has over 1300 user-contributed <a href="/ruby-compendium/book/gems.html#gems">libraries</a> for almost anything you can think of.</li> + <li>It is multi-paradigm and offers many advanced language <a href="/ruby-compendium/book/features.html#features">features</a>.</li> + <li>It has a friendly and supportive community and plenty of useful <a href="/ruby-compendium/book/resources.html#resources">resources</a>.</li> + <li>There are loads of <a href="/ruby-compendium/book/web-sites.html#websites">web sites</a> about it and free online learning material.</li> + <li>A lot of <a href="/ruby-compendium/book/books.html#books">books</a> have been written about it.</li> +</ol> +<aside class="box"> +<div class="box-title">If you want to know more...</div> +For general information on Ruby and more introductory material, head over to the <a href="http://www.ruby-lang.org/">Official Ruby Web Site</a>, in particular to the <a href="http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/">Ruby from Other Languages</a> articles, if you are already familiar with C, C++, Java, PHP, Perl, or Python. + +</aside> + <nav class="navigation"><a href="/ruby-compendium/book/language.html">← Quick Tour</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/implementations.html">Versions and Implementations →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>
A content/ruby-compendium/book/web-sites.html

@@ -0,0 +1,132 @@

+<!DOCTYPE html> +<html lang="en"> + <head> + <title>Web Sites - Glyph</title> + + <meta charset="utf-8" /> + <meta name="author" content="Fabio Cevasco" /> + <meta name="copyright" content="Fabio Cevasco" /> + <meta name="robots" content="all, follow" /> + <meta name="Revisit-After" content="2 Days" /> + <meta name="language" content="en" /> + <meta name="target_country" content="en-us" /> + <meta name="country" content="United States" /> + <meta name="readability-verification" content="XmaVzRjmcFL5Bb2Fu9TZVdDKzhA3apQdxexTB2rK"/> + <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> + + <meta name="keywords" content="h3rald, fabio cevasco, glyph" /> + <link rel="shortcut icon" href="/favicon.png" type="image/png" /> + <meta content="44.388041;9.073248" name="ICBM" /> + + <link rel="stylesheet" type="text/css" href="/styles/html5reset.css" /> + <link rel="stylesheet" type="text/css" href="/styles/style.css" /> + + <script src="http://www.google.com/jsapi?key=ABQIAAAAr6RY1Z6dchG_sX9WDLSy3xRlq2n1sm52B5HDRR5tm6o8XM18FhR56xHNNH6CsX86uN5VoTrglpyOyQ" type="text/javascript"></script> + <script src="/js/sevenup.js" type="text/javascript"></script> + <script src="/js/sevenup_black.js" type="text/javascript"></script> + <script type="text/javascript">google.load("jquery", "1");</script> + <script src="/js/jquery-timeago.js" type="text/javascript"></script> + <script src="/js/jquery-easing.js" type="text/javascript"></script> + <script src="/js/jquery-fancybox.js" type="text/javascript"></script> + <script src="/js/date.js" type="text/javascript"></script> + <script src="/js/feeds.js" type="text/javascript"></script> + <script src="/js/hyphenator.js" type="text/javascript"></script> + <script src="/js/init.js" type="text/javascript"></script> + <script src="/js/search.js" type="text/javascript"></script> + </head> + <body> + <section id="container"> + + <header class="page"> + <nav class="home-link"> + <a href="/"> + <span class="logo"> + <span class="hrald"><span class="h">H</span>&nbsp;<span class="rald">RALD</span></span> + <span class="three">3</span> + </span> + </a> + </nav> + + <nav class="section"> + /<a href="/glyph/" rel="glyph">GLYPH</a> + </nav> + +</header> + <article class="page glyph-book"> + <header> + <hgroup> + <h1>Web Sites</h1> + <h2>Glyph</h2> + </hgroup> + </header> + <section id="body-text" class="hyphenate glyph-book"> + + <nav class="navigation"><a href="/ruby-compendium/book/resources.html">← Resources</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/books.html">Books →</a></nav> + + <p><strong><a href="http://www.ruby-lang.org/">Ruby-Lang.org</a></strong> &ndash; The official Ruby web site, completely maintained by members of the Ruby community and available in several languages.</p> + + <p><strong><a href="https://rubygems.org/">RubyGems.org</a></strong> &ndash; The home of all Ruby gems.</p> + + <p><strong><a href="http://rubykoans.com/">Ruby Koans</a></strong> &ndash; Learn Ruby (and testing) through Koans. Probably the coolest way to learn Ruby right now.</p> + + <p><strong><a href="http://rubylearning.com/">Ruby Learning</a></strong> &ndash; Ruby guru <a href="/ruby-compendium/book/rubyists.html#satish">Satish Talim</a>&#8217;s web site about learning the Ruby language. It contains tutorials, study notes, and even <a href="http://rubylearning.org/class/">online classes</a>.</p> + + <p><strong><a href="http://rubycorner.com/">Ruby Corner</a></strong> &ndash; The most comprehensive Ruby blog aggregator.</p> + + <p><strong><a href="http://www.rubyinside.com/">Ruby Inside</a></strong> &ndash; <em>The</em> Ruby blog, by <a href="/ruby-compendium/book/rubyists.html#peterc">Peter Cooper</a>.</p> + + <p><strong><a href="http://www.ruby-forum.com/">Ruby Forum</a></strong> &ndash; A mirror of the most important Ruby-related mailing lists.</p> + + <p><strong><a href="http://rubydoc.info/">RubyDoc.info</a></strong> &ndash; Your one-stop resource for reference documentation. Everything from Ruby core, Standard Library, gems, and even Github-hosted Ruby projects.</p> + + <p><strong><a href="http://www.rubyflow.com/">RubyFlow</a></strong> &ndash; Community-powered link blog. Created by <a href="/ruby-compendium/book/rubyists.html#peterc">Peter Cooper</a></p> + + <p><strong><a href="http://ruby-toolbox.com/">The Ruby Toolbox</a></strong> &ndash; A collection of ruby resources and libraries, organized by category and popularity.</p> + + <p><strong><a href="http://rubycommitters.org/">RubyCommitters.org</a></strong> &ndash; List of all the Ruby core committers. Created by <a href="/ruby-compendium/book/rubyists.html#tenderlove">Aaron Petterson</a>.</p> + + <p><strong><a href="http://rubylang.info/">RubyLang.info</a></strong> &ndash; <em>&#8220;RubyLang.info is a community driven web site, dedicated to helping both new and experienced Ruby developers.&#8221;</em></p> + + <nav class="navigation"><a href="/ruby-compendium/book/resources.html">← Resources</a> | <a href="/ruby-compendium/book/index.html">Contents</a> | <a href="/ruby-compendium/book/books.html">Books →</a></nav> + <nav id="sharing-buttons"> +<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="h3rald">Tweet</a> +<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> +</nav> + </section> + </article> + + + <footer> + <section> + <nav> + <a href="/about/">ABOUT</a>|<a href="/contact/">CONTACT</a> + </nav> + <p>H3RALD Web Site v8.1.2 &copy; 2004 &mdash; 2012 <em>Fabio Cevasco</em></p> + </section> + </footer> + </section><!-- #container end --> + + + <!-- Start Google Analytics --> + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-18587377-1']); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); + </script> + <!-- End Google Analytics --> + <!-- Start of StatCounter Code --> + <script type="text/javascript"> + var sc_project=6193656; + var sc_invisible=1; + var sc_security="57f7ee2a"; + </script> + <script type="text/javascript" src="http://www.statcounter.com/counter/counter_xhtml.js"></script> + <!-- End of StatCounter Code --> + </body> +</html>