<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>CodeSnippets: CodeDrive Snippets courtesy of Peter Coopers handy little app</title>
    <link>http://codesnippets.joyent.com/rss</link>
    <pubDate>Tue, 09 Feb 2010 03:51:27 GMT</pubDate>
    <description>CodeSnippets: CodeDrive Snippets courtesy of Peter Coopers handy little app</description>
    <item>
      <title>teknopaylasim.net</title>
      <link>http://codesnippets.joyent.com/posts/show/7465</link>
      <description>thanx</description>
      <pubDate>Tue, 09 Feb 2010 03:51:27 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7465</guid>
      <author>teknopaylasim (engin)</author>
    </item>
    <item>
      <title>Subscribe to a RSS feed of your posts</title>
      <link>http://codesnippets.joyent.com/posts/show/7464</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// insert code here..&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;// insert code here..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * This script depends on the Prototype JavaScript library&lt;br /&gt; * http://prototypejs.org&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;var Inflector = Class.create();&lt;br /&gt;&lt;br /&gt;Inflector.prototype = {&lt;br /&gt;    /*&lt;br /&gt;     * The order of all these lists has been reversed from the way &lt;br /&gt;     * ActiveSupport had them to keep the correct priority.&lt;br /&gt;     */&lt;br /&gt;    plural: [&lt;br /&gt;        [/(quiz)$/i,               "$1zes"  ],&lt;br /&gt;        [/^(ox)$/i,                "$1en"   ],&lt;br /&gt;        [/([m|l])ouse$/i,          "$1ice"  ],&lt;br /&gt;        [/(matr|vert|ind)ix|ex$/i, "$1ices" ],&lt;br /&gt;        [/(x|ch|ss|sh)$/i,         "$1es"   ],&lt;br /&gt;        [/([^aeiouy]|qu)y$/i,      "$1ies"  ],&lt;br /&gt;        [/(hive)$/i,               "$1s"    ],&lt;br /&gt;        [/(?:([^f])fe|([lr])f)$/i, "$1$2ves"],&lt;br /&gt;        [/sis$/i,                  "ses"    ],&lt;br /&gt;        [/([ti])um$/i,             "$1a"    ],&lt;br /&gt;        [/(buffal|tomat)o$/i,      "$1oes"  ],&lt;br /&gt;        [/(bu)s$/i,                "$1ses"  ],&lt;br /&gt;        [/(alias|status)$/i,       "$1es"   ],&lt;br /&gt;        [/(octop|vir)us$/i,        "$1i"    ],&lt;br /&gt;        [/(ax|test)is$/i,          "$1es"   ],&lt;br /&gt;        [/s$/i,                    "s"      ],&lt;br /&gt;        [/$/,                      "s"      ]&lt;br /&gt;    ],&lt;br /&gt;    singular: [&lt;br /&gt;        [/(quiz)zes$/i,                                                    "$1"     ],&lt;br /&gt;        [/(matr)ices$/i,                                                   "$1ix"   ],&lt;br /&gt;        [/(vert|ind)ices$/i,                                               "$1ex"   ],&lt;br /&gt;        [/^(ox)en/i,                                                       "$1"     ],&lt;br /&gt;        [/(alias|status)es$/i,                                             "$1"     ],&lt;br /&gt;        [/(octop|vir)i$/i,                                                 "$1us"   ],&lt;br /&gt;        [/(cris|ax|test)es$/i,                                             "$1is"   ],&lt;br /&gt;        [/(shoe)s$/i,                                                      "$1"     ],&lt;br /&gt;        [/(o)es$/i,                                                        "$1"     ],&lt;br /&gt;        [/(bus)es$/i,                                                      "$1"     ],&lt;br /&gt;        [/([m|l])ice$/i,                                                   "$1ouse" ],&lt;br /&gt;        [/(x|ch|ss|sh)es$/i,                                               "$1"     ],&lt;br /&gt;        [/(m)ovies$/i,                                                     "$1ovie" ],&lt;br /&gt;        [/(s)eries$/i,                                                     "$1eries"],&lt;br /&gt;        [/([^aeiouy]|qu)ies$/i,                                            "$1y"    ],&lt;br /&gt;        [/([lr])ves$/i,                                                    "$1f"    ],&lt;br /&gt;        [/(tive)s$/i,                                                      "$1"     ],&lt;br /&gt;        [/(hive)s$/i,                                                      "$1"     ],&lt;br /&gt;        [/([^f])ves$/i,                                                    "$1fe"   ],&lt;br /&gt;        [/(^analy)ses$/i,                                                  "$1sis"  ],&lt;br /&gt;        [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, "$1$2sis"],&lt;br /&gt;        [/([ti])a$/i,                                                      "$1um"   ],&lt;br /&gt;        [/(n)ews$/i,                                                       "$1ews"  ],&lt;br /&gt;        [/s$/i,                                                            ""       ]&lt;br /&gt;    ],&lt;br /&gt;    irregular: [&lt;br /&gt;        ['move',   'moves'   ],&lt;br /&gt;        ['sex',    'sexes'   ],&lt;br /&gt;        ['child',  'children'],&lt;br /&gt;        ['man',    'men'     ],&lt;br /&gt;        ['person', 'people'  ]&lt;br /&gt;    ],&lt;br /&gt;    uncountable: [&lt;br /&gt;        "sheep",&lt;br /&gt;        "fish",&lt;br /&gt;        "series",&lt;br /&gt;        "species",&lt;br /&gt;        "money",&lt;br /&gt;        "rice",&lt;br /&gt;        "information",&lt;br /&gt;        "equipment"&lt;br /&gt;    ],&lt;br /&gt;    initialize: function() {&lt;br /&gt;        // Nothing here now&lt;br /&gt;    },&lt;br /&gt;    ordinalize: function(number) {&lt;br /&gt;        if (11 &lt;= parseInt(number) % 100 &amp;&amp; parseInt(number) % 100 &lt;= 13) {&lt;br /&gt;            return number + "th";&lt;br /&gt;        } else {&lt;br /&gt;            switch (parseInt(number) % 10) {&lt;br /&gt;                case  1: return number + "st";&lt;br /&gt;                case  2: return number + "nd";&lt;br /&gt;                case  3: return number + "rd";&lt;br /&gt;                default: return number + "th";&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    pluralize: function(word) {&lt;br /&gt;        for (var i = 0; i &lt; this.uncountable.length; i++) {&lt;br /&gt;            var uncountable = this.uncountable[i];&lt;br /&gt;            if (word.toLowerCase() == uncountable) {&lt;br /&gt;                return uncountable;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.irregular.length; i++) {&lt;br /&gt;            var singular = this.irregular[i][0];&lt;br /&gt;            var plural   = this.irregular[i][1];&lt;br /&gt;            if ((word.toLowerCase() == singular) || (word == plural)) {&lt;br /&gt;                return plural;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.plural.length; i++) {&lt;br /&gt;            var regex          = this.plural[i][0];&lt;br /&gt;            var replace_string = this.plural[i][1];&lt;br /&gt;            if (regex.test(word)) {&lt;br /&gt;                return word.replace(regex, replace_string);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    singularize: function(word) {&lt;br /&gt;        for (var i = 0; i &lt; this.uncountable.length; i++) {&lt;br /&gt;            var uncountable = this.uncountable[i];&lt;br /&gt;            if (word.toLowerCase() == uncountable) {&lt;br /&gt;                return uncountable;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.irregular.length; i++) {&lt;br /&gt;            var singular = this.irregular[i][0];&lt;br /&gt;            var plural   = this.irregular[i][1];&lt;br /&gt;            if ((word.toLowerCase() == singular) || (word == plural)) {&lt;br /&gt;                return singular;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.singular.length; i++) {&lt;br /&gt;            var regex          = this.singular[i][0];&lt;br /&gt;            var replace_string = this.singular[i][1];&lt;br /&gt;            if (regex.test(word)) {&lt;br /&gt;                return word.replace(regex, replace_string);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ordinalize(number) {&lt;br /&gt;    var i = new Inflector;&lt;br /&gt;    return i.ordinalize(number);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * pluralize expects between 2 to 3 arguments.&lt;br /&gt; * 1. The count of items to pluralize&lt;br /&gt; * 2. The singular form of the item to pluralize&lt;br /&gt; * 3. The plural form of the item to pluralize (optional)&lt;br /&gt; */&lt;br /&gt;function pluralize() {&lt;br /&gt;    var i = new Inflector;&lt;br /&gt;    &lt;br /&gt;    var count    = arguments[0];&lt;br /&gt;    var singular = arguments[1];&lt;br /&gt;    var plural   = arguments[2];&lt;br /&gt;    &lt;br /&gt;    if (arguments.length &lt; 2) return "";&lt;br /&gt;    if (isNaN(count))         return "";&lt;br /&gt;    &lt;br /&gt;    return count + " " + (1 == parseInt(count) ?&lt;br /&gt;            singular :&lt;br /&gt;            plural || i.pluralize(singular));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function singularize(plural) {&lt;br /&gt;    var i = new Inflector;&lt;br /&gt;    return i.singularize(plural);&lt;br /&gt;}</description>
      <pubDate>Mon, 08 Feb 2010 22:37:31 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7464</guid>
      <author>birisi (birisi)</author>
    </item>
    <item>
      <title>Compile &amp; install cdecl on Mac OS XX</title>
      <link>http://codesnippets.joyent.com/posts/show/7462</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// insert code here..&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.EntityManagerFactory;&lt;br /&gt;import javax.persistence.Persistence;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;  public static void main(String[] a) throws Exception {&lt;br /&gt;    JPAUtil util = new JPAUtil();&lt;br /&gt;&lt;br /&gt;    EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService");&lt;br /&gt;    EntityManager em = emf.createEntityManager();&lt;br /&gt;    ProfessorService service = new ProfessorService(em);&lt;br /&gt;&lt;br /&gt;    em.getTransaction().begin();&lt;br /&gt;&lt;br /&gt;    service.executetQuery("SELECT e.name, e.salary FROM Professor e");&lt;br /&gt;    &lt;br /&gt;    util.checkData("select * from Professor");&lt;br /&gt;&lt;br /&gt;    em.getTransaction().commit();&lt;br /&gt;    em.close();&lt;br /&gt;    emf.close();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;File: Address.java&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Address {&lt;br /&gt;    @Id&lt;br /&gt;    private int id;&lt;br /&gt;    private String street;&lt;br /&gt;    private String city;&lt;br /&gt;    private String state;&lt;br /&gt;    private String zip;&lt;br /&gt;    &lt;br /&gt;    public int getId() {&lt;br /&gt;        return id;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setId(int id) {&lt;br /&gt;        this.id = id;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public String getStreet() {&lt;br /&gt;        return street;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setStreet(String address) {&lt;br /&gt;        this.street = address;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getCity() {&lt;br /&gt;        return city;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setCity(String city) {&lt;br /&gt;        this.city = city;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getState() {&lt;br /&gt;        return state;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setState(String state) {&lt;br /&gt;        this.state = state;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getZip() {&lt;br /&gt;        return zip;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setZip(String zip) {&lt;br /&gt;        this.zip = zip;&lt;br /&gt;    }&lt;br /&gt;    public String toString() {&lt;br /&gt;        return "Address id: " + getId() + &lt;br /&gt;               ", street: " + getStreet() +&lt;br /&gt;               ", city: " + getCity() +&lt;br /&gt;               ", state: " + getState() +&lt;br /&gt;               ", zip: " + getZip();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;</description>
      <pubDate>Mon, 08 Feb 2010 21:36:34 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7462</guid>
      <author>birisi (birisi)</author>
    </item>
    <item>
      <title>Get String Properties From Entitiesss</title>
      <link>http://codesnippets.joyent.com/posts/show/7461</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.Reader;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.DriverManager;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.ResultSetMetaData;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;&lt;br /&gt;public class JPAUtil {&lt;br /&gt;  Statement st;&lt;br /&gt;  &lt;br /&gt;  public JPAUtil() throws Exception{&lt;br /&gt;    Class.forName("org.hsqldb.jdbcDriver");&lt;br /&gt;    System.out.println("Driver Loaded.");&lt;br /&gt;    String url = "jdbc:hsqldb:data/tutorial";&lt;br /&gt;&lt;br /&gt;    Connection conn = DriverManager.getConnection(url, "sa", "");&lt;br /&gt;    System.out.println("Got Connection.");&lt;br /&gt;    st = conn.createStatement();&lt;br /&gt;  }&lt;br /&gt;  public void executeSQLCommand(String sql) throws Exception {&lt;br /&gt;    st.executeUpdate(sql);&lt;br /&gt;  }&lt;br /&gt;  public void checkData(String sql) throws Exception {&lt;br /&gt;    ResultSet rs = st.executeQuery(sql);&lt;br /&gt;    ResultSetMetaData metadata = rs.getMetaData();&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; metadata.getColumnCount(); i++) {&lt;br /&gt;      System.out.print("\t"+ metadata.getColumnLabel(i + 1)); &lt;br /&gt;    }&lt;br /&gt;    System.out.println("\n----------------------------------");&lt;br /&gt;&lt;br /&gt;    while (rs.next()) {&lt;br /&gt;      for (int i = 0; i &lt; metadata.getColumnCount(); i++) {&lt;br /&gt;        Object value = rs.getObject(i + 1);&lt;br /&gt;        if (value == null) {&lt;br /&gt;          System.out.print("\t       ");&lt;br /&gt;        } else {&lt;br /&gt;          System.out.print("\t"+value.toString().trim());&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      System.out.println("");&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 08 Feb 2010 21:35:21 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7461</guid>
      <author>birisi (birisi)</author>
    </item>
    <item>
      <title>Failed generation of resource route for action</title>
      <link>http://codesnippets.joyent.com/posts/show/7460</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;These methods test that the routes for resources defined in routes.rb are working as expected. Call them from your functional (controller) tests.&lt;br /&gt;&lt;br /&gt;Add the following 3 methods to test/test_helper.rb (updated for Rails 1.2.5 which no longer uses semicolons as a separator for the edit action):&lt;br /&gt;&lt;br /&gt;# Test for routes generated by map.resource (singular).&lt;br /&gt;def assert_routing_for_resource(controller, skip=[], nesting=[])&lt;br /&gt;  routes = [&lt;br /&gt;    ["new",'/new',{},:get], ["create",'',{},:post],&lt;br /&gt;    ["show",'',{},:get], ["edit",'/edit',{},:get],&lt;br /&gt;    ["update",'',{},:put], ["destroy",'',{},:delete]&lt;br /&gt;    ]&lt;br /&gt;  check_resource_routing(controller, routes, skip, nesting)&lt;br /&gt;end&lt;br /&gt;# Test for routes generated by map.resources (plural).&lt;br /&gt;def assert_routing_for_resources(controller, skip=[], nesting=[])&lt;br /&gt;  routes = [&lt;br /&gt;    ["index",'',{},:get], ["new",'/new',{},:get], ["create",'',{},:post],&lt;br /&gt;    ["show",'/1',{:id=&gt;'1'},:get], ["edit",'/1/edit',{:id=&gt;'1'},:get],&lt;br /&gt;    ["update",'/1',{:id=&gt;'1'},:put], ["destroy",'/1',{:id=&gt;'1'},:delete]&lt;br /&gt;    ]&lt;br /&gt;  check_resource_routing(controller, routes, skip, nesting)&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;# Check that the expected paths will be generated by a resource, and that&lt;br /&gt;# the expected params will be generated by paths defined by a resource.&lt;br /&gt;# routes is array of [action, url string after controller, extra params].&lt;br /&gt;def check_resource_routing(controller, routes, skip=[], nesting=[])&lt;br /&gt;  # set a prefix for nested resources&lt;br /&gt;  prefix = nesting.join('s/1/')&lt;br /&gt;  unless prefix.blank?&lt;br /&gt;    prefix += "s/1/"&lt;br /&gt;  end&lt;br /&gt;  # Add params for nested resources.&lt;br /&gt;  # For each 'nest', include a ":nest_id=&gt;'1'" param.&lt;br /&gt;  params = {}&lt;br /&gt;  nesting.each do |param|&lt;br /&gt;    params["#{param}_id".to_sym] = '1'&lt;br /&gt;  end&lt;br /&gt;  # Test each of the standard resource routes.&lt;br /&gt;  routes.each do |pair|&lt;br /&gt;    unless skip.include? pair[0]&lt;br /&gt;      assert_generates("/#{prefix}#{controller}#{pair[1]}",&lt;br /&gt;        {:controller=&gt;controller,&lt;br /&gt;        :action=&gt;pair[0]}.merge(pair[2]).merge(params), {}, {},&lt;br /&gt;        "Failed generation of resource route for action #{pair[0]} /#{prefix}#{controller}#{pair[1]}")&lt;br /&gt;      assert_recognizes(&lt;br /&gt;        {:controller=&gt;controller,&lt;br /&gt;          :action=&gt;pair[0]}.merge(pair[2]).merge(params),&lt;br /&gt;        {:path=&gt;"/#{prefix}#{controller}#{pair[1]}", :method=&gt;pair[3]},&lt;br /&gt;        {}, "Failed to recognize resource route for path #{pair[3]}:/#{prefix}#{controller}#{pair[1]}")&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Mon, 08 Feb 2010 21:30:02 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7460</guid>
      <author>birisi (birisi)</author>
    </item>
    <item>
      <title>Extending acts_as_taggable for real-world</title>
      <link>http://codesnippets.joyent.com/posts/show/7459</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// insert code here..&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// insert code here..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * This script depends on the Prototype JavaScript library&lt;br /&gt; * http://prototypejs.org&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;var Inflector = Class.create();&lt;br /&gt;&lt;br /&gt;Inflector.prototype = {&lt;br /&gt;    /*&lt;br /&gt;     * The order of all these lists has been reversed from the way &lt;br /&gt;     * ActiveSupport had them to keep the correct priority.&lt;br /&gt;     */&lt;br /&gt;    plural: [&lt;br /&gt;        [/(quiz)$/i,               "$1zes"  ],&lt;br /&gt;        [/^(ox)$/i,                "$1en"   ],&lt;br /&gt;        [/([m|l])ouse$/i,          "$1ice"  ],&lt;br /&gt;        [/(matr|vert|ind)ix|ex$/i, "$1ices" ],&lt;br /&gt;        [/(x|ch|ss|sh)$/i,         "$1es"   ],&lt;br /&gt;        [/([^aeiouy]|qu)y$/i,      "$1ies"  ],&lt;br /&gt;        [/(hive)$/i,               "$1s"    ],&lt;br /&gt;        [/(?:([^f])fe|([lr])f)$/i, "$1$2ves"],&lt;br /&gt;        [/sis$/i,                  "ses"    ],&lt;br /&gt;        [/([ti])um$/i,             "$1a"    ],&lt;br /&gt;        [/(buffal|tomat)o$/i,      "$1oes"  ],&lt;br /&gt;        [/(bu)s$/i,                "$1ses"  ],&lt;br /&gt;        [/(alias|status)$/i,       "$1es"   ],&lt;br /&gt;        [/(octop|vir)us$/i,        "$1i"    ],&lt;br /&gt;        [/(ax|test)is$/i,          "$1es"   ],&lt;br /&gt;        [/s$/i,                    "s"      ],&lt;br /&gt;        [/$/,                      "s"      ]&lt;br /&gt;    ],&lt;br /&gt;    singular: [&lt;br /&gt;        [/(quiz)zes$/i,                                                    "$1"     ],&lt;br /&gt;        [/(matr)ices$/i,                                                   "$1ix"   ],&lt;br /&gt;        [/(vert|ind)ices$/i,                                               "$1ex"   ],&lt;br /&gt;        [/^(ox)en/i,                                                       "$1"     ],&lt;br /&gt;        [/(alias|status)es$/i,                                             "$1"     ],&lt;br /&gt;        [/(octop|vir)i$/i,                                                 "$1us"   ],&lt;br /&gt;        [/(cris|ax|test)es$/i,                                             "$1is"   ],&lt;br /&gt;        [/(shoe)s$/i,                                                      "$1"     ],&lt;br /&gt;        [/(o)es$/i,                                                        "$1"     ],&lt;br /&gt;        [/(bus)es$/i,                                                      "$1"     ],&lt;br /&gt;        [/([m|l])ice$/i,                                                   "$1ouse" ],&lt;br /&gt;        [/(x|ch|ss|sh)es$/i,                                               "$1"     ],&lt;br /&gt;        [/(m)ovies$/i,                                                     "$1ovie" ],&lt;br /&gt;        [/(s)eries$/i,                                                     "$1eries"],&lt;br /&gt;        [/([^aeiouy]|qu)ies$/i,                                            "$1y"    ],&lt;br /&gt;        [/([lr])ves$/i,                                                    "$1f"    ],&lt;br /&gt;        [/(tive)s$/i,                                                      "$1"     ],&lt;br /&gt;        [/(hive)s$/i,                                                      "$1"     ],&lt;br /&gt;        [/([^f])ves$/i,                                                    "$1fe"   ],&lt;br /&gt;        [/(^analy)ses$/i,                                                  "$1sis"  ],&lt;br /&gt;        [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i, "$1$2sis"],&lt;br /&gt;        [/([ti])a$/i,                                                      "$1um"   ],&lt;br /&gt;        [/(n)ews$/i,                                                       "$1ews"  ],&lt;br /&gt;        [/s$/i,                                                            ""       ]&lt;br /&gt;    ],&lt;br /&gt;    irregular: [&lt;br /&gt;        ['move',   'moves'   ],&lt;br /&gt;        ['sex',    'sexes'   ],&lt;br /&gt;        ['child',  'children'],&lt;br /&gt;        ['man',    'men'     ],&lt;br /&gt;        ['person', 'people'  ]&lt;br /&gt;    ],&lt;br /&gt;    uncountable: [&lt;br /&gt;        "sheep",&lt;br /&gt;        "fish",&lt;br /&gt;        "series",&lt;br /&gt;        "species",&lt;br /&gt;        "money",&lt;br /&gt;        "rice",&lt;br /&gt;        "information",&lt;br /&gt;        "equipment"&lt;br /&gt;    ],&lt;br /&gt;    initialize: function() {&lt;br /&gt;        // Nothing here now&lt;br /&gt;    },&lt;br /&gt;    ordinalize: function(number) {&lt;br /&gt;        if (11 &lt;= parseInt(number) % 100 &amp;&amp; parseInt(number) % 100 &lt;= 13) {&lt;br /&gt;            return number + "th";&lt;br /&gt;        } else {&lt;br /&gt;            switch (parseInt(number) % 10) {&lt;br /&gt;                case  1: return number + "st";&lt;br /&gt;                case  2: return number + "nd";&lt;br /&gt;                case  3: return number + "rd";&lt;br /&gt;                default: return number + "th";&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    pluralize: function(word) {&lt;br /&gt;        for (var i = 0; i &lt; this.uncountable.length; i++) {&lt;br /&gt;            var uncountable = this.uncountable[i];&lt;br /&gt;            if (word.toLowerCase() == uncountable) {&lt;br /&gt;                return uncountable;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.irregular.length; i++) {&lt;br /&gt;            var singular = this.irregular[i][0];&lt;br /&gt;            var plural   = this.irregular[i][1];&lt;br /&gt;            if ((word.toLowerCase() == singular) || (word == plural)) {&lt;br /&gt;                return plural;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.plural.length; i++) {&lt;br /&gt;            var regex          = this.plural[i][0];&lt;br /&gt;            var replace_string = this.plural[i][1];&lt;br /&gt;            if (regex.test(word)) {&lt;br /&gt;                return word.replace(regex, replace_string);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    singularize: function(word) {&lt;br /&gt;        for (var i = 0; i &lt; this.uncountable.length; i++) {&lt;br /&gt;            var uncountable = this.uncountable[i];&lt;br /&gt;            if (word.toLowerCase() == uncountable) {&lt;br /&gt;                return uncountable;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.irregular.length; i++) {&lt;br /&gt;            var singular = this.irregular[i][0];&lt;br /&gt;            var plural   = this.irregular[i][1];&lt;br /&gt;            if ((word.toLowerCase() == singular) || (word == plural)) {&lt;br /&gt;                return singular;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        for (var i = 0; i &lt; this.singular.length; i++) {&lt;br /&gt;            var regex          = this.singular[i][0];&lt;br /&gt;            var replace_string = this.singular[i][1];&lt;br /&gt;            if (regex.test(word)) {&lt;br /&gt;                return word.replace(regex, replace_string);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function ordinalize(number) {&lt;br /&gt;    var i = new Inflector;&lt;br /&gt;    return i.ordinalize(number);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt; * pluralize expects between 2 to 3 arguments.&lt;br /&gt; * 1. The count of items to pluralize&lt;br /&gt; * 2. The singular form of the item to pluralize&lt;br /&gt; * 3. The plural form of the item to pluralize (optional)&lt;br /&gt; */&lt;br /&gt;function pluralize() {&lt;br /&gt;    var i = new Inflector;&lt;br /&gt;    &lt;br /&gt;    var count    = arguments[0];&lt;br /&gt;    var singular = arguments[1];&lt;br /&gt;    var plural   = arguments[2];&lt;br /&gt;    &lt;br /&gt;    if (arguments.length &lt; 2) return "";&lt;br /&gt;    if (isNaN(count))         return "";&lt;br /&gt;    &lt;br /&gt;    return count + " " + (1 == parseInt(count) ?&lt;br /&gt;            singular :&lt;br /&gt;            plural || i.pluralize(singular));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function singularize(plural) {&lt;br /&gt;    var i = new Inflector;&lt;br /&gt;    return i.singularize(plural);&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;</description>
      <pubDate>Mon, 08 Feb 2010 21:26:15 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7459</guid>
      <author>birisi (birisi)</author>
    </item>
    <item>
      <title>Compile &amp; install cdecl on Mac OS X</title>
      <link>http://codesnippets.joyent.com/posts/show/7456</link>
      <description>&lt;code&gt;&lt;br /&gt;&lt;br /&gt;# 1. readline&lt;br /&gt;&lt;br /&gt;# first compile and install the latest version of readline (into /usr/local/lib)&lt;br /&gt;open http://tiswww.case.edu/php/chet/readline/rltop.html&lt;br /&gt;&lt;br /&gt;# let's make sure we use standard system libs &amp; files&lt;br /&gt;sudo mv -i /opt/local /opt/local-off&lt;br /&gt;sudo mv -i /usr/local /usr/local-off&lt;br /&gt;&lt;br /&gt;#sudo mv -i /opt/local-off /opt/local&lt;br /&gt;#sudo mv -i /usr/local-off /usr/local&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cd ~/Desktop&lt;br /&gt;&lt;br /&gt;fwftp   # open ipfw firewall for ftp (cf. http://codesnippets.joyent.com/posts/show/1284)&lt;br /&gt;&lt;br /&gt;curl -L -O ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz&lt;br /&gt;&lt;br /&gt;fwdef   # restore default ipfw rules&lt;br /&gt;&lt;br /&gt;tar -xzf readline-6.1.tar.gz&lt;br /&gt;&lt;br /&gt;cd readline-6.1&lt;br /&gt;&lt;br /&gt;./configure&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;&lt;br /&gt;sudo mv -i /usr/local-off /usr/local&lt;br /&gt;&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;sudo mv -i /opt/local-off /opt/local&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;find ~/Desktop/readline-6.1 -name "*dylib"&lt;br /&gt;ls -1 /usr/local/lib/*readline*&lt;br /&gt;&lt;br /&gt;[[ -d /usr/local ]] &amp;&amp; sudo mkdir -p /usr/local/src || echo 'mkdir failed!'&lt;br /&gt;&lt;br /&gt;sudo cp ~/Desktop/readline-6.1.tar.gz /usr/local/src&lt;br /&gt;&lt;br /&gt;tar -C /usr/local/src -xzf ~/Desktop/readline-6.1.tar.gz&lt;br /&gt;&lt;br /&gt;find /usr/local/src/readline-6.1 -name "*compat.c"&lt;br /&gt;&lt;br /&gt;otool -L /usr/local/lib/*readline*6*&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# 2. cdecl&lt;br /&gt;&lt;br /&gt;# compile &amp; install cdecl (into /usr/local/bin; with readline support)&lt;br /&gt;&lt;br /&gt;open http://www.cdecl.org&lt;br /&gt;&lt;br /&gt;cd ~/Desktop&lt;br /&gt;&lt;br /&gt;curl -L -O http://cdecl.org/files/cdecl-blocks-2.5.tar.gz&lt;br /&gt;&lt;br /&gt;tar -xzf cdecl-blocks-2.5.tar.gz&lt;br /&gt;&lt;br /&gt;cd cdecl-blocks-2.5&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# edit Makefile&lt;br /&gt;sed -i "" -E \&lt;br /&gt;   -e 's/^( *CFLAGS *=.+)/\1 -Ddodebug -Ddoyydebug -DUSE_READLINE/' \&lt;br /&gt;   -e 's|^ *LIBS *=.+|LIBS= -L/usr/local/lib -lreadline -L/usr/lib -lncurses|' \&lt;br /&gt;   -e 's|^ *BINDIR *=.+|BINDIR= /usr/local/bin|' \&lt;br /&gt;   -e 's|^ *MANDIR *=.+|MANDIR= /usr/local/share/man/man1|' \&lt;br /&gt;   -e 's|^ *CATDIR *=.+|CATDIR = /usr/local/share/man/cat1|' \&lt;br /&gt;   Makefile&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# edit cdecl.c&lt;br /&gt;sed -i "" -E \&lt;br /&gt;   -e 's/^([[:space:]]*)void cdecl_setprogname\(char \*\);/\1void cdecl_setprogname(char const *);/' \&lt;br /&gt;   -e 's/^ *char *\*progname *= *"cdecl";/char const *progname = "cdecl";/' \&lt;br /&gt;   -e 's/char *\*argv0/char const *argv0/' \&lt;br /&gt;   -e 's/^( *rl_completion_entry_function *= *\()( *[^ ]+ *)(\* *\)keyword_completion;)/\1 rl_compentry_func_t \3/' \&lt;br /&gt;  cdecl.c&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# add some include statements to cdecl.c&lt;br /&gt;cat &lt;&lt;-'EOF' | sed -e 's/^ *//' -e 's/ *$//' | /bin/ed -s cdecl.c&lt;br /&gt;   H&lt;br /&gt;   /^[[:space:]]\{0,\}#[[:space:]]\{0,\}include[[:space:]]\{0,\}&lt;readline\/readline.h&gt;/a&lt;br /&gt;&lt;br /&gt;   #include &lt;/usr/local/src/readline-6.1/compat.c&gt;&lt;br /&gt;   #include &lt;/usr/local/include/readline/readline.h&gt;&lt;br /&gt;   //#include &lt;/usr/local/include/readline/rltypedefs.h&gt;&lt;br /&gt;&lt;br /&gt;   .&lt;br /&gt;   /^[[:space:]]\{0,\}#[[:space:]]\{0,\}include[[:space:]]\{0,\}&lt;readline\/readline.h&gt;/d&lt;br /&gt;   wq&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;# open -e cdecl.c Makefile&lt;br /&gt;&lt;br /&gt;make&lt;br /&gt;&lt;br /&gt;make test&lt;br /&gt;&lt;br /&gt;echo $?&lt;br /&gt;&lt;br /&gt;sudo make install&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ls -l "$(type -P cdecl)"&lt;br /&gt;otool -L "$(type -P cdecl)"&lt;br /&gt;type -a c++decl cdecl&lt;br /&gt;ls -l $(type -P c++decl cdecl)&lt;br /&gt;&lt;br /&gt;man cdecl&lt;br /&gt;cdecl --help&lt;br /&gt;&lt;br /&gt;cdecl&lt;br /&gt;explain int (*(*foo)(void ))[3]&lt;br /&gt;declare bar as volatile pointer to array 64 of const int&lt;br /&gt;cast foo into block(int, long long) returning double&lt;br /&gt;explain char ** const * const x&lt;br /&gt;declare x as const pointer to const pointer to pointer to char&lt;br /&gt;[ctrl-c]&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 08 Feb 2010 19:12:19 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7456</guid>
      <author>jvs (jvscode [[at]] fastmail [[dot]] fm)</author>
    </item>
    <item>
      <title>Get String Properties From Entities</title>
      <link>http://codesnippets.joyent.com/posts/show/7455</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.Reader;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.DriverManager;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.ResultSetMetaData;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;&lt;br /&gt;public class JPAUtil {&lt;br /&gt;  Statement st;&lt;br /&gt;  &lt;br /&gt;  public JPAUtil() throws Exception{&lt;br /&gt;    Class.forName("org.hsqldb.jdbcDriver");&lt;br /&gt;    System.out.println("Driver Loaded.");&lt;br /&gt;    String url = "jdbc:hsqldb:data/tutorial";&lt;br /&gt;&lt;br /&gt;    Connection conn = DriverManager.getConnection(url, "sa", "");&lt;br /&gt;    System.out.println("Got Connection.");&lt;br /&gt;    st = conn.createStatement();&lt;br /&gt;  }&lt;br /&gt;  public void executeSQLCommand(String sql) throws Exception {&lt;br /&gt;    st.executeUpdate(sql);&lt;br /&gt;  }&lt;br /&gt;  public void checkData(String sql) throws Exception {&lt;br /&gt;    ResultSet rs = st.executeQuery(sql);&lt;br /&gt;    ResultSetMetaData metadata = rs.getMetaData();&lt;br /&gt;&lt;br /&gt;    for (int i = 0; i &lt; metadata.getColumnCount(); i++) {&lt;br /&gt;      System.out.print("\t"+ metadata.getColumnLabel(i + 1)); &lt;br /&gt;    }&lt;br /&gt;    System.out.println("\n----------------------------------");&lt;br /&gt;&lt;br /&gt;    while (rs.next()) {&lt;br /&gt;      for (int i = 0; i &lt; metadata.getColumnCount(); i++) {&lt;br /&gt;        Object value = rs.getObject(i + 1);&lt;br /&gt;        if (value == null) {&lt;br /&gt;          System.out.print("\t       ");&lt;br /&gt;        } else {&lt;br /&gt;          System.out.print("\t"+value.toString().trim());&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      System.out.println("");&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 08 Feb 2010 15:42:46 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7455</guid>
      <author>stimus778 (Samin Burgos)</author>
    </item>
    <item>
      <title>Get Two Properties From Entity</title>
      <link>http://codesnippets.joyent.com/posts/show/7454</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;import javax.persistence.EntityManagerFactory;&lt;br /&gt;import javax.persistence.Persistence;&lt;br /&gt;&lt;br /&gt;public class Main {&lt;br /&gt;  public static void main(String[] a) throws Exception {&lt;br /&gt;    JPAUtil util = new JPAUtil();&lt;br /&gt;&lt;br /&gt;    EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProfessorService");&lt;br /&gt;    EntityManager em = emf.createEntityManager();&lt;br /&gt;    ProfessorService service = new ProfessorService(em);&lt;br /&gt;&lt;br /&gt;    em.getTransaction().begin();&lt;br /&gt;&lt;br /&gt;    service.executetQuery("SELECT e.name, e.salary FROM Professor e");&lt;br /&gt;    &lt;br /&gt;    util.checkData("select * from Professor");&lt;br /&gt;&lt;br /&gt;    em.getTransaction().commit();&lt;br /&gt;    em.close();&lt;br /&gt;    emf.close();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;File: Address.java&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;import javax.persistence.Id;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Address {&lt;br /&gt;    @Id&lt;br /&gt;    private int id;&lt;br /&gt;    private String street;&lt;br /&gt;    private String city;&lt;br /&gt;    private String state;&lt;br /&gt;    private String zip;&lt;br /&gt;    &lt;br /&gt;    public int getId() {&lt;br /&gt;        return id;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setId(int id) {&lt;br /&gt;        this.id = id;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public String getStreet() {&lt;br /&gt;        return street;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    public void setStreet(String address) {&lt;br /&gt;        this.street = address;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getCity() {&lt;br /&gt;        return city;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setCity(String city) {&lt;br /&gt;        this.city = city;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getState() {&lt;br /&gt;        return state;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setState(String state) {&lt;br /&gt;        this.state = state;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public String getZip() {&lt;br /&gt;        return zip;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setZip(String zip) {&lt;br /&gt;        this.zip = zip;&lt;br /&gt;    }&lt;br /&gt;    public String toString() {&lt;br /&gt;        return "Address id: " + getId() + &lt;br /&gt;               ", street: " + getStreet() +&lt;br /&gt;               ", city: " + getCity() +&lt;br /&gt;               ", state: " + getState() +&lt;br /&gt;               ", zip: " + getZip();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 08 Feb 2010 15:38:14 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7454</guid>
      <author>stimus778 (Samin Burgos)</author>
    </item>
    <item>
      <title>This is a subversion pre-commit hook</title>
      <link>http://codesnippets.joyent.com/posts/show/7452</link>
      <description>// This is a subversion pre-commit hook&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/usr/bin/env ruby&lt;br /&gt;&lt;br /&gt;repo_path = ARGV[0]&lt;br /&gt;transaction = ARGV[1]&lt;br /&gt;svnlook = '/usr/bin/svnlook'&lt;br /&gt;&lt;br /&gt;commit_dirs_changed = `#{svnlook} dirs-changed #{repo_path} -t #{transaction}`&lt;br /&gt;commit_changed = `#{svnlook} changed #{repo_path} -t #{transaction}`&lt;br /&gt;#commit_author = `#{svnlook} author #{repo_path} -t #{transaction}`.chop&lt;br /&gt;commit_log = `#{svnlook} log #{repo_path} -t #{transaction}`&lt;br /&gt;#commit_diff = `#{svnlook} diff #{repo_path} -t #{transaction}`&lt;br /&gt;#commit_date = `#{svnlook} date #{repo_path} -t #{transaction}`&lt;br /&gt;&lt;br /&gt;# ******* Migration check ********&lt;br /&gt;# if this is a migration then check that there is not already a migration with the same version number in the repository&lt;br /&gt;files = commit_changed.split(/\n/)&lt;br /&gt;current_migrations = nil&lt;br /&gt;for file in files&lt;br /&gt;  if(file =~ /A\s*(.*?\/migrate\/)(\d+)(.*)/)&lt;br /&gt;    migration_path = $1&lt;br /&gt;    migration_version = $2&lt;br /&gt;    &lt;br /&gt;    if(current_migrations == nil)&lt;br /&gt;      current_migrations = {}&lt;br /&gt;      migration_files = `#{svnlook} tree #{repo_path} #{migration_path}`&lt;br /&gt;      for migration in migration_files&lt;br /&gt;        current_migrations[$1] = true if(migration =~ /\s*(\d+)_(.*)/)&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;    &lt;br /&gt;    if(current_migrations[migration_version])&lt;br /&gt;     STDERR.puts("The is a pre-existing migration with version #{migration_version} in #{migration_path}")&lt;br /&gt;     exit(1)&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 08 Feb 2010 10:38:33 GMT</pubDate>
      <guid>http://codesnippets.joyent.com/posts/show/7452</guid>
      <author>jasiopan (Jefrey Heuy)</author>
    </item>
  </channel>
</rss>
