<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: The Seductions of Scala, Part I</title>
    <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>The Seductions of Scala, Part I</title>
      <description>&lt;p&gt;(Update 12/23/2008: Thanks to Apostolos Syropoulos for pointing out an earlier reference for the concept of &amp;#8220;traits&amp;#8221;).&lt;/p&gt;


	&lt;p&gt;Because of all the recent hoo-ha about &lt;a href="http://en.wikipedia.org/wiki/Functional_programming"&gt;functional programming&lt;/a&gt; (&lt;em&gt;e.g.,&lt;/em&gt; as a &amp;#8220;cure&amp;#8221; for the &lt;a href="http://www.technologyreview.com/Infotech/17682/page1/"&gt;multicore problem&lt;/a&gt;), I decided to cast aside my dysfunctional ways and learn one of the FP languages. The question was, which one?&lt;/p&gt;


	&lt;p&gt;My distinguished colleague, &lt;a href="http://www.objectmentor.com/omTeam/feathers_m.html"&gt;Michael Feathers&lt;/a&gt;, has been on a &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; &lt;a href="http://twitter.com/mfeathers"&gt;binge&lt;/a&gt; of late. Haskell is a pure functional language and is probably most interesting as the &amp;#8220;flagship language&amp;#8221; for academic exploration, rather than production use. (That was not meant as flame bait&amp;#8230;) It&amp;#8217;s hard to underestimate the influence Haskell has had on language design, including Java generics, .NET &lt;span class="caps"&gt;LINQ&lt;/span&gt; and F#, &lt;em&gt;etc.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;However, I decided to learn &lt;a href="http://www.scala-lang.org"&gt;Scala&lt;/a&gt; first, because it is a &lt;span class="caps"&gt;JVM&lt;/span&gt; language that combines object-oriented and functional programming in one language. At ~13 years of age, Java is a bit dated. Scala has the potential of &lt;a href="http://www.adam-bien.com/roller/abien/entry/java_net_javaone_which_programming"&gt;replacing Java&lt;/a&gt; as the principle language of the &lt;span class="caps"&gt;JVM&lt;/span&gt;, an extraordinary piece of engineering that is arguably now more valuable than the language itself. (Note: there is also a .NET version of Scala under development.)&lt;/p&gt;


	&lt;p&gt;Here are some of my observations, divided over three blog posts.&lt;/p&gt;


	&lt;p&gt;First, a few disclaimers. I am a Scala novice, so any flaws in my analysis reflect on me, not Scala! Also, this is by no means an exhaustive analysis of the pros and cons of Scala &lt;em&gt;vs.&lt;/em&gt; other options. Start with the &lt;a href="http://www.scala-lang.org"&gt;Scala website&lt;/a&gt; for more complete information.&lt;/p&gt;


	&lt;h2&gt;A Better &lt;span class="caps"&gt;OOP&lt;/span&gt; Language&lt;/h2&gt;


	&lt;p&gt;Scala works seamlessly with Java. You can invoke Java APIs, extend Java classes and implement Java interfaces. You can even invoke Scala code from Java, once you understand how certain &amp;#8220;Scala-isms&amp;#8221; are translated to Java constructs (&lt;code&gt;javap&lt;/code&gt; is your friend). Scala syntax is more succinct and removes a lot of tedious boilerplate from Java code.&lt;/p&gt;


	&lt;p&gt;For example, the following &lt;code&gt;Person&lt;/code&gt; class in Java:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
class Person {
    private String firstName;
    private String lastName;
    private int    age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName  = lastName;
        this.age       = age;
    }

    public void setFirstName(String firstName) { this.firstName = firstName; }
    public void String getFirstName() { return this.firstName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
    public void String getLastName() { return this.lastName; }
    public void setAge(int age) { this.age = age; }
    public void int getAge() { return this.age; }
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;can be written in Scala thusly:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
class Person(var firstName: String, var lastName: String, var age: Int)
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Yes, that&amp;#8217;s it. The constructor is the argument list to the class, where each parameter is declared as a variable (&lt;code&gt;var&lt;/code&gt; keyword). It automatically generates the &lt;em&gt;equivalent&lt;/em&gt; of getter and setter methods, meaning they look like Ruby-style attribute accessors; the getter is &lt;code&gt;foo&lt;/code&gt; instead of &lt;code&gt;getFoo&lt;/code&gt; and the setter is &lt;code&gt;foo = &lt;/code&gt; instead of &lt;code&gt;setFoo&lt;/code&gt;. Actually, the setter function is really &lt;code&gt;foo_=&lt;/code&gt;, but Scala lets you use the &lt;code&gt;foo = &lt;/code&gt; &lt;em&gt;sugar&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;Lots of other well designed conventions allow the language to define almost everything as a method, yet support forms of syntactic sugar like the illusion of operator overloading, Ruby-like &lt;span class="caps"&gt;DSL&lt;/span&gt;&amp;#8217;s, &lt;em&gt;etc.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;You also get fewer semicolons, no requirements tying package and class definitions to the file system structure, type inference, multi-valued returns (tuples), and a better type and generics model.&lt;/p&gt;


	&lt;p&gt;One of the biggest deficiencies of Java is the lack of a complete &lt;em&gt;mixin&lt;/em&gt; model. Mixins are small, focused (think &lt;a href="http://www.objectmentor.com/resources/articles/srp.pdf"&gt;Single Responsibility Principle&lt;/a&gt; ...) bits of state and behavior that can be added to classes (or objects) to extend them as needed. In a language like C++, you can use multiple inheritance for mixins. Because Java only supports single inheritance and interfaces, which can&amp;#8217;t have any state and behavior, implementing a mixin-based design has always required various hacks. &lt;a href="http://www.aosd.net"&gt;Aspect-Oriented Programming&lt;/a&gt; is also one &lt;em&gt;partial&lt;/em&gt; solution to this problem.&lt;/p&gt;


	&lt;p&gt;The most exciting &lt;span class="caps"&gt;OOP&lt;/span&gt; enhancement Scala brings is its support for  &lt;a href="http://www.scala-lang.org/intro/traits.html"&gt;Traits&lt;/a&gt;, a concept first described &lt;a href="http://portal.acm.org/citation.cfm?doid=800210.806468"&gt;here&lt;/a&gt; and more recently discussed &lt;a href="http://portal.acm.org/citation.cfm?id=1119479.1119483"&gt;here&lt;/a&gt;. Traits support Mixins (and other design techniques) through composition rather than inheritance. You could think of traits as interfaces with implementations. They work a lot like Ruby modules.&lt;/p&gt;


	&lt;p&gt;Here is an example of the &lt;a href="http://en.wikipedia.org/wiki/Observer_pattern"&gt;Observer Pattern&lt;/a&gt; written as traits, where they are used to monitor changes to a bank account balance. First, here are reusable &lt;code&gt;Subject&lt;/code&gt; and &lt;code&gt;Observer&lt;/code&gt; traits.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
trait Observer[S] {
    def receiveUpdate(subject: S);
}

trait Subject[S] { 
    this: S =&amp;gt;
    private var observers: List[Observer[S]] = Nil
    def addObserver(observer: Observer[S]) = observers = observer :: observers

    def notifyObservers() = observers.foreach(_.receiveUpdate(this))
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;In Scala, generics are declared with square brackets, &lt;code&gt;[...]&lt;/code&gt;, rather than angled brackets, &lt;code&gt;&amp;lt;...&amp;gt;&lt;/code&gt;. Method definitions begin with the &lt;code&gt;def&lt;/code&gt; keyword. The &lt;code&gt;Observer&lt;/code&gt; trait defines one abstract method, which is called by the &lt;code&gt;Subject&lt;/code&gt; to notify the observer of changes. The &lt;code&gt;Subject&lt;/code&gt; is passed to the &lt;code&gt;Observer&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;This trait looks exactly like a Java interface. In fact, that&amp;#8217;s how traits are represented in Java byte code. If the trait has state and behavior, like &lt;code&gt;Subject&lt;/code&gt;, the byte code representation involves additional elements.&lt;/p&gt;


	&lt;p&gt;The &lt;code&gt;Subject&lt;/code&gt; trait is more complex. The strange line, &lt;code&gt;this: S =&amp;gt; &lt;/code&gt;, is called a &lt;em&gt;self type&lt;/em&gt; declaration. It tells the compiler that whenever &lt;code&gt;this&lt;/code&gt; is referenced in the trait, treat its type as &lt;code&gt;S&lt;/code&gt;, rather than &lt;code&gt;Subject[S]&lt;/code&gt;. Without this declaration, the call to &lt;code&gt;receiveUpdate&lt;/code&gt; in the &lt;code&gt;notifyObservers&lt;/code&gt; method would not compile, because it would attempt to pass a &lt;code&gt;Subject[S]&lt;/code&gt; object, rather than a &lt;code&gt;S&lt;/code&gt; object. The self type declaration solves this problem.&lt;/p&gt;


	&lt;p&gt;The next line creates a private list of observers, initialized to &lt;code&gt;Nil&lt;/code&gt;, which is an empty list. Variable declarations are &lt;code&gt;name: type&lt;/code&gt;. Why didn&amp;#8217;t they follow Java conventions, &lt;em&gt;i.e.,&lt;/em&gt; &lt;code&gt;type name&lt;/code&gt;? Because this syntax makes the code easier to parse when &lt;em&gt;type inference&lt;/em&gt; is used, meaning where the explicit &lt;code&gt;:type&lt;/code&gt; is omitted and inferred.&lt;/p&gt;


	&lt;p&gt;In fact, I&amp;#8217;m using type inference for all the method declarations, because the compiler can figure out what each method returns, in my examples. In this case, they all return type &lt;code&gt;Unit&lt;/code&gt;, the equivalent of Java&amp;#8217;s &lt;code&gt;void&lt;/code&gt;. (The name &lt;code&gt;Unit&lt;/code&gt; is a common term in functional languages.)&lt;/p&gt;


	&lt;p&gt;The third line defines a method for adding a new observer to the list. Notice that concrete method definitions are of the form&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
def methodName(parameter: type, ...) = {
    method body
}  
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;In this case, because there is only one line, I dispensed with the &lt;code&gt;{...}&lt;/code&gt;. The equals sign before the body emphasizes the functional nature of scala, that all methods are objects, too. We&amp;#8217;ll revisit this in a moment and in the next post.&lt;/p&gt;


	&lt;p&gt;The method body prepends the new observer object to the existing list. Actually, a new list is created. The &lt;code&gt;::&lt;/code&gt; operator, called &amp;#8220;cons&amp;#8221;, &lt;em&gt;binds to the right&lt;/em&gt;. This &amp;#8220;operator&amp;#8221; is really a method call, which could actually be written like this, &lt;code&gt;observers.::(observer)&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;Our final method in &lt;code&gt;Subject&lt;/code&gt; is &lt;code&gt;notifyObservers&lt;/code&gt;. It iterates through observers and invokes the block &lt;code&gt;observer.receiveUpdate(this)&lt;/code&gt; on each observer. The &lt;code&gt;_&lt;/code&gt; evaluates to the current observer reference. For comparison, in Ruby, you would define this method like so:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
def notifyObservers() 
    @observers.each { |o| o.receiveUpdate(self) }
end
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Okay, let&amp;#8217;s look at how you would actually use these traits. First, our &amp;#8220;plain-old Scala object&amp;#8221; (POSO) &lt;code&gt;Account&lt;/code&gt;.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
class Account(initialBalance: Double) {
    private var currentBalance = initialBalance
    def balance = currentBalance
    def deposit(amount: Double)  = currentBalance += amount
    def withdraw(amount: Double) = currentBalance -= amount
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Hopefully, this is self explanatory, except for two things. First, recall that the whole class declaration is actually the constructor, which is why we have an &lt;code&gt;initialBalance: Double&lt;/code&gt; parameter on &lt;code&gt;Account&lt;/code&gt;. This looks strange to the Java-trained eye, but it actually works well and is another example of Scala&amp;#8217;s economy. (You can define multiple constructors, but I won&amp;#8217;t go into that here&amp;#8230;).&lt;/p&gt;


	&lt;p&gt;Second, note that I omitted the parentheses when I defined the &lt;code&gt;balance&lt;/code&gt; &amp;#8220;getter&amp;#8221; method. This supports the &lt;em&gt;uniform access principle&lt;/em&gt;. Clients will simply call &lt;code&gt;myAccount.balance&lt;/code&gt;, without parentheses and I could redefine &lt;code&gt;balance&lt;/code&gt; to be a &lt;code&gt;var&lt;/code&gt; or &lt;code&gt;val&lt;/code&gt; and the client code would not have to change!&lt;/p&gt;


	&lt;p&gt;Next, a subclass that supports observation.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
class ObservedAccount(initialBalance: Double) extends Account(initialBalance) with Subject[Account] {
    override def deposit(amount: Double) = {
        super.deposit(amount)
        notifyObservers()
    }
    override def withdraw(amount: Double) = {
        super.withdraw(amount)
        notifyObservers()
    }
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;The &lt;code&gt;with&lt;/code&gt; keyword is how a trait is used, much the way that you &lt;code&gt;implement&lt;/code&gt; an interface in Java, but now you don&amp;#8217;t have to implement the interface&amp;#8217;s methods. We&amp;#8217;ve already done that.&lt;/p&gt;


	&lt;p&gt;Note that the expression, &lt;code&gt;ObservedAccount(initialBalance: Double) extends Account(initialBalance)&lt;/code&gt;, not only defines the (single) inheritance relationship, it also functions as the constructor&amp;#8217;s call to &lt;code&gt;super(initialBalance)&lt;/code&gt;, so that &lt;code&gt;Account&lt;/code&gt; is properly initialized.&lt;/p&gt;


	&lt;p&gt;Next, we have to override the &lt;code&gt;deposit&lt;/code&gt; and &lt;code&gt;withdraw&lt;/code&gt; methods, calling the parent methods and then invoking &lt;code&gt;notifyObservers&lt;/code&gt;. Anytime you override a concrete method, scala requires the &lt;code&gt;override&lt;/code&gt; keyword. This tells you unambiguously that you are overriding a method and the Scala compiler throws an error if you aren&amp;#8217;t actually overriding a method, &lt;em&gt;e.g.,&lt;/em&gt; because of a typo. Hence, the keyword is much more reliable (and hence useful&amp;#8230;) than Java&amp;#8217;s &lt;code&gt;@Override&lt;/code&gt; annotation.&lt;/p&gt;


	&lt;p&gt;Finally, here is an &lt;code&gt;Observer&lt;/code&gt; that prints to stdout when the balance changes.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
class AccountReporter extends Observer[Account] {
    def receiveUpdate(account: Account) =
        println("Observed balance change: "+account.balance)
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Rather than use &lt;code&gt;with&lt;/code&gt;, I just extend the &lt;code&gt;Observer&lt;/code&gt; trait, because I don&amp;#8217;t have another parent class.&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s some code to test what we&amp;#8217;ve done.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
def changingBalance(account: Account) = {
    println("==== Starting balance: " + account.balance)
    println("Depositing $10.0")
    account.deposit(10.0)
    println("new balance: " + account.balance)
    println("Withdrawing $5.60")
    account.withdraw(5.6)
    println("new balance: " + account.balance)
}

var a = new Account(0.0)
changingBalance(a)

var oa = new ObservedAccount(0.0)
changingBalance(oa)
oa.addObserver(new AccountReporter)
changingBalance(oa)
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Which prints out:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
==== Starting balance: 0.0
Depositing $10.0
new balance: 10.0
Withdrawing $5.60
new balance: 4.4
==== Starting balance: 0.0
Depositing $10.0
new balance: 10.0
Withdrawing $5.60
new balance: 4.4
==== Starting balance: 4.4
Depositing $10.0
Observed balance change: 14.4
new balance: 14.4
Withdrawing $5.60
Observed balance change: 8.8
new balance: 8.8
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Note that we only observe the last transaction.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.scala-lang.org/downloads/index.html"&gt;Download Scala&lt;/a&gt; and try it out. Put all this code in one &lt;code&gt;observer.scala&lt;/code&gt; file, for example, and run the command:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
scala observer.scala
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;h2&gt;But Wait, There&amp;#8217;s More!&lt;/h2&gt;


	&lt;p&gt;In the next post, I&amp;#8217;ll look at Scala&amp;#8217;s support for Functional Programming and why OO programmers should find it interesting. In the third post, I&amp;#8217;ll look at the specific case of concurrent programming in Scala and make some concluding observations of the pros and cons of Scala.&lt;/p&gt;


	&lt;p&gt;For now, here are some references for more information.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;The &lt;a href="http://www.scala-lang.org"&gt;Scala website&lt;/a&gt;, for downloads, documentation, mailing lists, &lt;em&gt;etc.&lt;/em&gt;&lt;/li&gt;
		&lt;li&gt;Ted Neward&amp;#8217;s excellent &lt;a href="http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=scala+neward"&gt;multipart introduction&lt;/a&gt; to Scala at &lt;a href="http://www.ibm.com/developerworks"&gt;developerWorks&lt;/a&gt;.&lt;/li&gt;
		&lt;li&gt;The forthcoming &lt;a href="http://www.artima.com/shop/programming_in_scala"&gt;Programming in Scala&lt;/a&gt; book.&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Sun, 03 Aug 2008 15:30:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d4a4acbf-e300-4146-83c7-0536785997e1</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i</link>
      <category>Dean's Deprecations</category>
      <category>Design Principles</category>
      <category>Java</category>
      <category>Scala</category>
      <category>statically</category>
      <category>typed</category>
      <category>dynamically</category>
      <category>OOP</category>
      <category>FP</category>
      <category>functional</category>
      <category>object</category>
      <category>oriented</category>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by d</title>
      <description>&lt;p&gt;sd&lt;/p&gt;</description>
      <pubDate>Sat, 21 Jan 2012 10:02:19 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:35ae4efc-8ea9-42dc-9553-b7ee15b96c9d</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-198757</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Computer repair 89147</title>
      <description>&lt;p&gt;First, a few disclaimers. I am a Scala novice, so any flaws in my analysis reflect on me, not Scala&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 11:14:03 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:e40fd177-bd37-400f-a213-1b6a93d3282b</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-197859</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by most fuel efficient suv</title>
      <description>&lt;p&gt;This is programming is a good source of &lt;a href="w3school.com" rel="nofollow"&gt;learning&lt;/a&gt; too i appreciate this very much. &lt;a href="http://www.mostfuelefficientsuv.info/nissan-pathfinder-concept-most-fuel-efficient-suv/" rel="nofollow"&gt;Nissan Pathfinder Concept  SUV 2013&lt;/a&gt; is a new concept of 2013 which is expected to sell very large numbers.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 01:36:21 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8087608b-4ace-4aea-b637-c9ca58fb256e</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-197788</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Breguet watches</title>
      <description>&lt;p&gt;you have made&lt;/p&gt;</description>
      <pubDate>Fri, 23 Dec 2011 21:18:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:1bcd0b4a-f70b-4757-8e96-43a0febecb53</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-190977</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Cheap Oakley Sunglasses Outlet</title>
      <description>&lt;p&gt;&lt;a href="http://www.oakleysunglasses-hut.com" rel="nofollow"&gt;&lt;strong&gt;Oakley Sunglasses Hut&lt;/strong&gt;&lt;/a&gt; has provided the environment for a variety of colors mountain light lens coating, with Iridium? &lt;a href="http://www.oakleysunglasses-hut.com" rel="nofollow"&gt;&lt;strong&gt;Cheap Oakley Sunglasses Outlet&lt;/strong&gt;&lt;/a&gt; with the use of harsh sunlight and reduce the balance of light transmission, so that the light reaching the eyes of athletes precisely adjusted to produce the best visual . Our G30?&lt;a href="http://www.oakleysunglasses-hut.com" rel="nofollow"&gt;&lt;strong&gt;Best Oakley Sunglasses&lt;/strong&gt;&lt;/a&gt; Lens color is popular favorite athletes want to enhance the visual contrast of a choice. Oakley VR28?&lt;a href="http://www.oakleysunglasses-hut.com/oakley-lifestyle-sunglasses-c-14.html" rel="nofollow"&gt;&lt;strong&gt;Oakley Lifestyle Sunglasses&lt;/strong&gt;&lt;/a&gt; Has proven to be versatile lens colors, widely used in various light conditions.&lt;a href="http://www.oakleysunglasses-hut.com" rel="nofollow"&gt;&lt;strong&gt;Discount Oakley Sunglasses Outlet&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 23 Dec 2011 03:26:54 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:3c619eba-61b7-4df0-b9e5-76f41c106bee</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-190632</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Sale Ladies Leather Handbags</title>
      <description>&lt;p&gt;Allow phonetic typingMost of this season&amp;#8217;s no longer the exclusive expedition &lt;a href="http://www.saleladiesleatherhandbags.com" rel="nofollow"&gt;&lt;strong&gt;Sale Ladies Leather Handbags&lt;/strong&gt;&lt;/a&gt; workplace &amp;#8216;Skeleton&amp;#8217;, &lt;a href="http://www.saleladiesleatherhandbags.com" rel="nofollow"&gt;&lt;strong&gt;Black Leather Handbags&lt;/strong&gt;&lt;/a&gt; they seem to be for those who like slow-paced, understand humor, and occasionally a big love like a baby girl tailor-made. . Relax pastoral style Replaced with a small square bag, Previous broad-brush woven bag,Make this a more refined shape,Striking Chromic gentle, sweet,Material is also the finest ostrich and nubuck leather treated,&lt;a href="http://www.saleladiesleatherhandbags.com" rel="nofollow"&gt;&lt;strong&gt;Ladies Leather Handbags&lt;/strong&gt;&lt;/a&gt; From the inside filled with feelings of holiday joy,Gold is still the preferred destination for summer magic light,This year the popular rock but not metal, the metal line of luxury.&lt;/p&gt;</description>
      <pubDate>Fri, 23 Dec 2011 03:24:46 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ef0f3cc1-c9bf-4593-a37a-2ac3fb00db9a</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-190620</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Gadget Bologna</title>
      <description>&lt;p&gt;thank you from Italy!&lt;/p&gt;</description>
      <pubDate>Mon, 19 Dec 2011 16:08:05 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b1ead63d-e848-4c31-9191-25c47347557d</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-189570</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by belstaff</title>
      <description>&lt;p&gt;Christopher Parr, Pursuitist &lt;a href="http://www.belstaff-jp.com/" rel="nofollow"&gt;belstaff&lt;/a&gt; CEO &amp;#38; EIC, is included on this great list, which also includes Luis Fernandez, Timo Weiland, Michael Macko, James Andrew and Ryan Cook. The bloggers, designers and &lt;a href="http://www.belstaff-jp.com/" rel="nofollow"&gt;??&lt;/a&gt; luxury marketing gurus showcased on the list share their favorite fashion brands and style advice. Parr, our very own EIC, shares his go-to style staples &#8212; which &lt;a href="http://www.belstaff-jp.com/" rel="nofollow"&gt;???????&lt;/a&gt; includes J.Crew, Louis Vuitton, Burberry, Belstaff, TAG Heuer, Cole Haan &#8212; adding&#8220;When traveling, I grab my Belstaff jacket and go with a &lt;a href="http://www.belstaff-jp.com/" rel="nofollow"&gt;belstaff jacket&lt;/a&gt; Barbour bag tossed over my shoulder &#8212; it&#8217;s stocked with my iPad 2, a few Cuban cigars and Johnnie Walker Black flask.&#8221;&lt;/p&gt;</description>
      <pubDate>Wed, 30 Nov 2011 19:27:10 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:049858f8-ba70-4609-8e66-104ee9849bf4</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-180123</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by ????</title>
      <description>&lt;p&gt;good &lt;code&gt;#&lt;/code&gt;@@!!!!&lt;/p&gt;</description>
      <pubDate>Wed, 30 Nov 2011 03:13:50 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:7f149f90-48ed-441a-ab46-0195daa81b5d</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-180022</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by tv show</title>
      <description>&lt;p&gt;thanks for sharing. great stuff!&lt;/p&gt;</description>
      <pubDate>Sat, 26 Nov 2011 10:08:47 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:53499616-a560-4a16-8e6b-bbc8a6bdc264</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-178759</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by koko</title>
      <description>&lt;p&gt;oakley mens antix sunglassesoakley batwolf sunglassesdiscount oakley batwolf sunglassesoakley batwolf sunglasses saleoakley mens batwolf sunglassesoakley dispatch sunglassesdiscount oakley dispatch sunglassesoakley dispatch sunglasses saleoakley mens dispatch sunglassesoakley fives squared sunglassesdiscount oakley fives squared sunglassesoakley fives squared sunglasses saleoakley mens fives squared sunglassesoakley fuel cell sunglassesdiscount oakley fuel cell sunglassesoakley fuel cell sunglasses saleoakley mens fuel cell sunglassesoakley gascan sunglassesdiscount oakley gascan sunglassesoakley gascan sunglasses saleoakley mens gascan sunglassesoakley half wire sunglassesdiscount oakley half wire sunglassesoakley half wire sunglasses saleoakley mens half wire sunglassesoakley hijinx sunglassesdiscount oakley hijinx sunglassesoakley hijinx sunglasses sale&lt;/p&gt;</description>
      <pubDate>Fri, 25 Nov 2011 18:38:44 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c817bcf0-5231-41e4-9180-eb122aa37523</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-178178</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Professional Resume</title>
      <description>&lt;p&gt;Thank you for sharing this insightful article.Also, there are lot of ways 
to cook and execute the all-good Professional Resume.&lt;/p&gt;</description>
      <pubDate>Wed, 23 Nov 2011 23:46:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:a8618012-3caf-41b6-8865-52fa138bc844</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-177308</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by belstaff jackets</title>
      <description>&lt;p&gt;A star: do you believe I one day only sleep for an hour? Reporter: that you other 23 hours doing? Star: falling asleep.&lt;/p&gt;</description>
      <pubDate>Tue, 08 Nov 2011 20:16:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:ba5d27bf-c9d3-47b2-9edc-9fa4a8f8509b</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-170114</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Ventless Gas Logs</title>
      <description>&lt;p&gt;Such a post is what I&amp;#8217;ve been looking for as you
have detailed the necessary information on the topic.Hope I could also find articles on Ventless Gas Logs.&lt;/p&gt;</description>
      <pubDate>Sun, 06 Nov 2011 20:09:23 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:bab75367-7ef8-4a05-8164-aa20b62f5e50</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-168973</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Calculus For Dummies</title>
      <description>&lt;p&gt;I liked how the thoughts and the insights of this article is well put together
and well-written. Hope to see more of this soon like Calculus For Dummies perhaps.&lt;/p&gt;</description>
      <pubDate>Wed, 02 Nov 2011 22:58:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:19ce392b-3183-46f5-99ee-a53227fd1b09</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-167221</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by erewr</title>
      <description>&lt;p&gt;Now what do you feel? Chelsea&lt;b&gt;&lt;a href="http://www.jeremyscottwingsshop.com/" rel="nofollow"&gt;jeremy scott shoes&lt;/a&gt;&lt;/b&gt;&lt;br&gt; and Manchester City are certainly no problem, Manchester United? With experience, with the coach &amp;#8217;s ability, it&amp;#8217;s not a big problem, four years accounted for three, the remaining one, as I now see it, most likely for the Tottenham and Liverpool, Arsenal need to pay several times in the opponent&amp;#8217;s ability is possible.&lt;b&gt;&lt;a href="http://www.jeremyscottwingsshop.com/" rel="nofollow"&gt;jeremy scott wings&lt;/a&gt;&lt;/b&gt;&lt;br&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 30 Oct 2011 20:26:29 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c652bb58-0c6e-45be-92c3-42c99f041f9f</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-165807</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by erfwe</title>
      <description>&lt;p&gt;&lt;b&gt;&lt;a href="http://www.ufc.com" rel="nofollow"&gt;onitsuka tiger mexico 66 baja&lt;/a&gt;&lt;/b&gt;&lt;br&gt;&lt;/p&gt;</description>
      <pubDate>Sun, 30 Oct 2011 20:23:34 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c4393d26-50f4-4012-9e08-df09dd37659c</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-165801</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by christian louboutin</title>
      <description>&lt;p&gt;Good artical,I learn something!&lt;/p&gt;</description>
      <pubDate>Sun, 30 Oct 2011 03:36:32 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bcb753e2-3d0d-4a20-a563-34c18cefbf6c</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-165630</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by tv guide listings</title>
      <description>&lt;p&gt;Good article! keep up the good work!&lt;/p&gt;</description>
      <pubDate>Sat, 29 Oct 2011 03:19:13 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e6906aac-0d84-4915-bac4-021b100567cb</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-165446</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Anna</title>
      <description>&lt;p&gt;Hm there seems to be a problem loading the images on your site, I don&amp;#8217;t know what it is but it looks kind of strange right now. Like, text only. Maybe it&amp;#8217;s just temporary I don&amp;#8217;t know, but you might want to check it out&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Thu, 27 Oct 2011 03:11:30 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f0ad4711-41ac-4363-b398-9a9f0235f770</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-164497</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by Dirt Cheap Cameras</title>
      <description>&lt;p&gt;Such a post is what I&amp;#8217;ve been looking for as you
have detailed the necessary information on the topic.Hope I could also find articles on Dirt Cheap Cameras.&lt;/p&gt;</description>
      <pubDate>Tue, 25 Oct 2011 22:46:25 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:adc57589-8ca3-42d7-ad4e-855949971a79</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-163453</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by real haunted places</title>
      <description>&lt;p&gt;I have been reading about this lately but found it hard to understand. This is easier to follow so I thank you for helping clear up my confusion.&lt;/p&gt;</description>
      <pubDate>Tue, 25 Oct 2011 15:01:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:57033c89-4701-4cf4-890b-1532b5c9f7f2</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-163295</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by cheap north face</title>
      <description>&lt;p&gt;It is really a nice post, it is always great reading such posts, this post is good in regards of both knowledge as well as information.&lt;/p&gt;</description>
      <pubDate>Tue, 25 Oct 2011 04:28:36 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5889d5c1-e624-4b00-9884-aa0937af3587</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-163180</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by north face coats</title>
      <description>&lt;p&gt;There is actually some good points on this blog some of my readers may find this useful, I must send a link, many thanks.&lt;/p&gt;</description>
      <pubDate>Tue, 25 Oct 2011 04:27:53 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:29b05839-e5dd-4cf1-9503-e1e762716c05</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-163179</link>
    </item>
    <item>
      <title>"The Seductions of Scala, Part I" by wordpress installation service</title>
      <description>&lt;p&gt;When it comes to feather dress, what appears in your mind? Which kind brand of down jacket do you like prefer?&lt;/p&gt;</description>
      <pubDate>Fri, 21 Oct 2011 17:35:38 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:567f7bfe-0e63-43d0-a34a-8d6735a5e65a</guid>
      <link>http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i#comment-160867</link>
    </item>
  </channel>
</rss>

