b712929fab3715ba05e4bdd846a61ee9.ppt
- Количество слайдов: 68
Ruby And Ruby on Rails Jim Fawcett CSE 686 – Internet Programming Summer 2006 03/03/2006
References n n n Brown-Bag Seminar Presentation, Beyond Java Chapters 4 and 5, Jim Fawcett, Spring 2006 Brown-Bag Seminar Presentation, Beyond Java Chapters 6 and 7, Taylan Yamliha, Spring 2006 Beyond Java, Bruce Tate, O’Reilly, 2005 Programming Ruby, Dave Thomas, Pragmatic. Programmer, 2005 Agile Web Development with Rails, Dave Thomas, David Hansson, Pragmatic. Programmer, 2005 03/03/2006
A Useful Definition for this Presentation n Spin – from Word. Reference. com • A distinctive interpretation (especially as used by politicians to sway public opinion); “the campaign put a favorable spin on the story”. n When spun, your job is to: • Listen, but be somewhat skeptical • Make up your own mind 03/03/2006
Some Spins n n n Bruce Tate - Author of “Beyond Java” • Java is nifty, but growing too complex for a lot of the jobs we need to do. Enter Ruby? Kanat Bolazar– one of my Ph. D. candidate advisees • Java is nifty, has lots of tools that let me do interesting research. I love it! I’m skeptical of what the author says. Jim Fawcett - pragmatist • Windows world is where most of the jobs are. There are lots of interesting, but complicated, technologies to use there. But windows development isn’t the only game in town; Its just the one I have most interest in. • I think the author is smart, has lots of interesting things to say, and will give us a view into another world, if we let him. 03/03/2006
03/03/2006
Chapter 4 – Glass Breaking n Java’s new job description • Early use to develop quick applications • Then moved server-side Web site applications n Enterprise Systems n • Mapping objects into relational model • Distributed transactions • Messaging middleware • Java is flexible, so its been able to accommodate these changes. 03/03/2006
Typical Requirements n n Good fit to middleware development because of its existing packages Servlets and web programming is not as productive as PHP • “Java just isn’t very good for the simplest and most typical applications. ” n n Better alternatives exist for XML processing. Java’s strings are too verbose. Natural fit to large enterprise projects due to its libraries and large number of Java developers. 03/03/2006
The Learning Curve n n n Most Java-based web applications use Java Server Pages (JSP) technology, probably through Tomcat. There are more steps, now, in using Tomcat, which take longer to learn. But that’s not all. You’ll need to understand: • • Ant – build and deploy web applications Tapestry or Struts – organize user interface code Hibernate – object relational mapper Spring – organize application resources and support testing 03/03/2006
Resources n See the End Notes for summaries of: • • • • PHP JSP J 2 EE EJB Apache Tomcat Struts Tapestry Spring Frmwrk Bee. Hive Hibernate Ibatus Maven 03/03/2006 Hypertext Pre. Processor Java Server Pages Java, Enterprise Edition Enterprise Java Beans Apache web server Containers for Java Server Pages Model-View-Controller application management Simpler MVC application management Framework for building containers of Java Server Pages Builds object model on top of J 2 EE and Struts Object-Relational mapper Data mapper framework Manage build, reporting, and documentation
Java for the Typcial Application n n For the basic problem, a web-based user interface for a relational database, you have to learn a lot more today than you did five years ago. The advanced frameworks will drive the Java language away from the base that made it popular 03/03/2006
Agile Development n Simplicity • Use the simplest thing that will work n Automated Unit Testing • Junit framework is recommended n Shortened Iterations • Shorter schedules, better integration of customer feedback, and smaller iterations 03/03/2006
Development Processes & Java n n Java’s community and tools provide excellent support for agile programming Java is not such a good language for agile development • Not the simplest language • Not friendly to very short iterations n 03/03/2006 Because of the need for frameworks (implied)
Basic Java Limitations n n n Frameworks make experienced Java developers more productive but make a steep learning curve for new developers. Compile-time type checking adds safety at the cost of additional time and syntax. Java is not able to express structured data leading to over-dependence on XML. Java’s many compromises, like primitives (different than user types) make Java harder to learn and more complex to write. Java is nowhere near as dynamic as Smalltalk and Ruby. • Java’s long compile/deploy cycle is much longer than interpreted, dynamic alternatives. 03/03/2006
Alternatives n Are the Java community and large code base worth sacrificing the productivity of other alternatives? • The waters are rising. n n n A clean, dynamic language could gain footing in the gap between Visual Basic (6. 0) and Enterprise Java. The lion’s share of Java development, even in the enterprise, is not full of distributed transaction and backbreaking loads. Developers want a way to baby-sit a big relational database with a web-based user interface. 03/03/2006
Chapter 5 – Rules of the Game n Portability • Must have a virtual machine for: n n Security, portability, extensibility, interoperability Internet Focus • • The internet has two interfaces, for people and machines. The next language should build better interfaces more easily, using a component model. • It should deal with XML productively and efficiently. n Enterprise Integration • The next language will should interoperate with the existing code base. n Database Integration • The language should access relational data in a natural, productive way. n Transactions and Security • Needs to integrate with existing enterprise security frameworks. 03/03/2006
Generating Buzz n Technically superior languages have failed because they didn’t generate buzz. • Walter Bright’s D is probably superior to C++, but it’s generating little interest among the developer community. n n Without buzz there is no community Now is a good time for a new language: • Open source software makes it easier for smaller companies to become a force by virtue of numbers. • Web services and other protocols make it easier to interoperate between languages. • A JVM (or CLR) can support other languages. n But generating buzz is more art than science, and perhaps more luck than art. 03/03/2006
Necessary Ingredients n Economics • Someone has to pay the check, and superior productivity makes that likely. n Approachability • New language needs to grab new users quickly to prosper. n You should be able to get started quickly, and solve a problem that is important to you quickly. • C was approachable because you could solve low-level problems with a high-level language. • C++ was approachable because you could add C++ features to C, as you needed them. • Java was approachable because the syntax was familiar and it had a clear path to internet applications. n The killer App • A language needs an active community to prosper. • A killer application can quickly draw new users. n 03/03/2006 Applets and servlets did that for Java.
Language Features n Dynamic typing • Static typing promotes safety through compile-time checks, at the cost of productivity. • Dynamically typed languages are easier to explore and build prototypes. n Code blocks • Code blocks are anonymous functions that are used to quickly assemble callbacks, provide thread processing, and do repetitive operations on databases and collections. • They’re useful anywhere you need a “once-only” small function, and that’s lots of places. • They also reduce the remoteness factor. n n The function body is defined right where it is used. Continuations • Saved stackframe hierarchies re-applied to go back to a prior state. • Purported to be very useful for supporting backtracking in the stateless web model. n Rapid feedback • Reduce the time between making a change and seeing the result. • The interpreted languages Smalltalk, Lisp, Perl, Ruby, and VB 6. 0 all have rapid feedback and are very productive languages. 03/03/2006
More Language Features n User Interface Focus • “User interface focus demands more than Java has to give”. n Dynamic Class Model • A Java successor should be much more dynamic and reflexive. n n Java’s reflection API is verbose, partly because of the distinction between primitives and user types. It has to deal differently with primitives, arrays, and classes. • Tate gives two examples where a dozen lines of Java code are replaced with one or two lines of Ruby code. • With Ruby “you can also change classes, at runtime, on the fly. You can change a method on an object and leave the class untouched. Also, interceptions are childs play”. n Sound Foundations • The next language should be object oriented and purer than Java. n Here, the author means that primitives are first class objects. • Consistency is important. n 03/03/2006 Languages with consistent naming and behavior are far easier to learn.
Potential Suitors n Perl • Productive scripting language • Write only language with cryptic syntax n Python • A successful dynamic programming language, close to Ruby in syntax and power and supports the specified features. • Syntax depends too much on white space. • Has weak web development tools. n Ruby • Object oriented dynamic language, created in Japan, and just now becoming popular in US • Beautiful syntax that stays out of your way. • Highly dynamic • Educated core of Ruby community works hard to produce clean, simple APIs. • Has strong web frameworks, good support for XML and web services. • Ruby has a couple of high profile frameworks, like Ruby on Rails. • Ruby has good commercial backing in Japan, but not in US. • JVM support is immature, though improving rapidly. 03/03/2006
More Suitors n PHP • Scripting language. • Start with html and mark up with tags for scripted actions with databases and request and response objects. • Easy to understand learn. • Good for controlling a database from a web page. • Technically awful n n n Couples user interface and database together. Method names are inconsistent. C# and. Net Languages • C# is a Java clone with many of the same benefits and drawbacks. • Microsoft languages are a closed ecosystem. They succeed or fail with the Microsoft platforms, rather than on their own merits. n Smalltalk • Never caught on commercially, despite attempts by IBM as late as 1995. • “Hughly productive, slightly awkward, and quirky to the extreme. ” • Clean object model, incredible expressive power, and an intelligent design and community. • Not seen as a credible alternative. • “It just wasn’t ever approachable enough. ” 03/03/2006
A Random Quote from the Web n “I've been developing web apps for years, in both PHP and Java. You really notice how much stuff is repeated and unnecessary. How many times do you enter the same variable or field name in the database, in the classes, in the HTML/view? It's a waste of time. I had developed some helper utilities that are basically a crude form of Active. Record (a Ruby on Rails construct). I used to do a lot of Java development. J 2 EE [#@$%^&]. Servlets, entity beans, etc. The amount of garbage you have to go through just to get something deployed made me angry. Seeing Rails was wonderful. It was all my "good ideas" implemented cleanly with none of the PHP hacks or Java verbosity”. n Note: There are many quotables about Ruby on Rails that are favorable, and many that are not. 03/03/2006
Next UP n n Chapter 6 - Ruby in the Rough Chapter 7 – Ruby on Rails 03/03/2006
End Notes – Chapters 4 and 5 n n n PHP, JSP, Java Beans, EJB, J 2 EE Apache, Tomcat, Spring Framework Struts, Tapestry Bee. Hive, Hibernate, IBatus Maven 03/03/2006
PHP - http: //us 3. php. net/manual/en/introduction. php n n n (recursive acronym for "PHP: Hypertext Preprocessor") is a widelyused Open Source general-purpose scripting language that is especially suited for Web development and can be embedded into HTML. Simple answer, but what does that mean? An example: Example 1 -1. An introductory example <html> <head> <title>Example</title> </head> <body> <? php echo "Hi, I'm a PHP script!"; ? > </body> </html> 03/03/2006
JSP - http: //www. webdevelopersjournal. com/articles/jsp_build. html n “If you've ever used Microsoft's very popular Active Server Pages (ASP) then you'll have a good idea of what JSP is. It consists of HTML or XML markup into which special tags and code blocks are inserted. The code is executed on the server and the result is a dynamic page that is returned to the client browser. Although JSPs are simple to build they have at their disposal the full power of object-oriented Java and the Java Server API. JSPs make heavy use of Java Beans, which are classes that follow a standard pattern of a no-argument constructor (required in JSPs) and public GET and SET methods. ” 03/03/2006
Java Beans - http: //en. wikipedia. org/wiki/Java_Beans n n n Java. Beans are software components written in the Java programming language. The Java. Beans specification by Sun Microsystems defines them as "reusable software components that can be manipulated visually in a builder tool". In spite of many similarities, Java. Beans should not be confused with Enterprise Java. Beans (EJB), a server-side component technology that is part of J 2 EE. In order to function as a Java. Bean class, an object class must obey certain conventions about method naming, construction, and behavior. These conventions make it possible to have tools that can use, replace, and connect Java. Beans. The required conventions are: • The class should be serializable (able to persistently save and restore its state) • It should have a no-argument constructor • Its properties should be accessed using get and set methods that follow a standard naming convention • It should contain any required event-handling methods n Because these requirements are largely expressed as conventions rather than by implementing interfaces, some developers view Java Beans as Plain Old Java Objects that follow certain naming conventions. However, this view is misleading for Java Beans that support event handling, because the method conventions and associated support classes for event handling are fairly intricate, and require the use of specific base classes and interfaces. 03/03/2006
EJB - http: //en. wikipedia. org/wiki/EJB n n The Enterprise Java. Beans specification is one of the several Java APIs in the Java 2 Platform, Enterprise Edition. EJB is a server-side component that encapsulates the business logic of an application. The specification details how an application server provides server-side objects known as Enterprise Java. Beans, or EJBs, with: • • n persistence transactions concurrency control events using Java Message Service naming and directory services security deployment of components in an application server remote communication using CORBA Additionally, the Enterprise Java. Bean specification defines the roles played by the EJB container and the EJBs as well as how to deploy the EJBs in a container. 03/03/2006
J 2 EE - http: //www. webopedia. com/TERM/J/J 2 EE. html n Short for Java 2 Platform Enterprise Edition. J 2 EE is a platformindependent, Java-centric environment from Sun for developing, building and deploying Web-based enterprise applications online. The J 2 EE platform consists of a set of services, APIs, and protocols that provide the functionality for developing multitiered, Web-based applications. Some of the key features and services of J 2 EE: • At the client tier, J 2 EE supports pure HTML, as well as Java • • • applets or applications. It relies on Java Server Pages and servlet code to create HTML or other formatted data for the client. Enterprise Java. Beans (EJBs) provide another layer where the platform's logic is stored. An EJB server provides functions such as threading, concurrency, security and memory management. These services are transparent to the author. Java Database Connectivity (JDBC), which is the Java equivalent to ODBC, is the standard interface for Java databases. The Java servlet API enhances consistency for developers without requiring a graphical user interface. 03/03/2006
J 2 EE - http: //en. wikipedia. org/wiki/J 2 EE n n Java Platform, Enterprise Edition or Java EE (formerly also J 2 EE) is a programming platform – part of the Java platform – for developing and running distributed multi-tier architecture applications, based largely on modular components running on an application server. The Java EE platform is defined by a specification. Java EE is also considered informally to be a language or standard because providers must agree to certain conformance requirements in order to declare their products as Java EE compliant; albeit with no ISO or ECMA standard. Java EE includes several API specifications, such as JDBC, clientside applets, RPC, CORBA, and defines how to coordinate them. Java EE also features some specifications unique to Java EE for components. These include Enterprise Java Beans, servlets, portlets (following the JSR 168 specification), Java. Server Pages and several web service technologies. This allows the developer to create an enterprise application that is portable between platforms and scalable, while integrating with legacy technologies. 03/03/2006
Apache - http: //httpd. apache. org/ n n n The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows NT. The goal of this project is to provide a secure, efficient and extensible server that provides HTTP services in sync with the current HTTP standards. Apache has been the most popular web server on the Internet since April 1996. The November 2005 Netcraft Web Server Survey found that more than 70% of the web sites on the Internet are using Apache, thus making it more widely used than all other web servers combined. The Apache HTTP Server is a project of the Apache Software Foundation. 03/03/2006
Tomcat - http: //java. sun. com/products/jsp/tomcat/ n n is a free, open-source implementation of Java Servlet and Java. Server Pages technologies developed under the Jakarta project at the Apache Software Foundation. Apache Tomcat is the servlet container that is used in the official Reference Implementation for the Java Servlet and Java. Server Pages technologies. 03/03/2006
Spring Framework n n n - http: //www. springframework. org/about The most complete lightweight container , providing centralized, automated configuration and wiring of your application objects. The container is non-invasive , capable of assembling a complex system from a set of loosely-coupled components ( POJOs) in a consistent and transparent fashion. The container brings agility and leverage, and improves application testability and scalability by allowing software components to be first developed and tested in isolation, then scaled up for deployment in any environment (J 2 SE or J 2 EE). A common abstraction layer for transaction management , allowing for pluggable transaction managers, and making it easy to demarcate transactions without dealing with low-level issues. Generic strategies for JTA and a single JDBC Data. Source are included. In contrast to plain JTA or EJB CMT, Spring's transaction support is not tied to J 2 EE environments. A JDBC abstraction layer that offers a meaningful exception hierarchy (no more pulling vendor codes out of SQLException), simplifies error handling, and greatly reduces the amount of code you'll need to write. You'll never need to write another finally block to use JDBC again. The JDBC-oriented exceptions comply to Spring's generic DAO exception hierarchy. Integration with Toplink, Hibernate, JDO, and i. BATIS SQL Maps: in terms of resource holders, DAO implementation support, and transaction strategies. First-class Hibernate support with lots of Io. C convenience features, addressing many typical Hibernate integration issues. All of these comply to Spring's generic transaction and DAO exception hierarchies. AOP functionality, fully integrated into Spring configuration management. You can AOP-enable any object managed by Spring, adding aspects such as declarative transaction management. With Spring, you can have declarative transaction management without EJB. . . even without JTA, if you're using a single database in Tomcat or another web container without JTA support. A flexible MVC web application framework , built on core Spring functionality. This framework is highly configurable via strategy interfaces, and accommodates multiple view technologies like JSP, Velocity, Tiles, i. Text, and POI. Note that a Spring middle tier can easily be combined with a web tier based on any other web MVC framework, like Struts, Web. Work, or Tapestry. 03/03/2006
Struts - http: //struts. apache. org/ n n The goal of the Apache Struts project is to encourage application architectures based on the "Model 2" approach, a variation of the classic Model-View. Controller (MVC) design paradigm. Under Model 2, a servlet (or equivalent) manages business logic execution, and presentation logic resides mainly in server pages. The Apache Struts project encourages Model 2 designs in two ways. First, by providing open source frameworks and toolkits that help developers build applications for the web. Second, by providing friendly and honest mailing lists where both newcomers and veterans discuss how to use Struts software in their own Model 2 applications. 03/03/2006
Tapestry - http: //jakarta. apache. org/tapestry/index. html n n n Tapestry is an open-source framework for creating dynamic, robust, highly scalable web applications in Java. Tapestry complements and builds upon the standard Java Servlet API, and so it works in any servlet container or application server. Tapestry divides a web application into a set of pages, each constructed from components. Developing Tapestry applications involves creating HTML templates using plain HTML, and combining the templates with small amounts of Java code using (optional) XML descriptor files. In Tapestry, you create your application in terms of objects, and the methods and properties of those objects -- and specifically not in terms of URLs and query parameters. Tapestry brings true object oriented development to Java web applications. 03/03/2006 n
Bee. Hive - http: //beehive. apache. org/ n The Beehive goal is to make J 2 EE programming easier by building a simple object model on J 2 EE and Struts. Using the new JSR-175 annotations, Beehive reduces the coding necessary for J 2 EE. The initial Beehive project has three pieces. • Net. UI: An annotation-driven web application programming framework that is built atop Struts. Net. UI centralizes navigation logic, state, metadata, and exception handling in a single encapsulated and reusable Page Flow Controller class. In addition, Net. UI provides a set of JSP tags for rendering HTML / XHTML and higher-level UI constructs such as data grids and trees and has first-class integration with Java. Server Faces and Struts. • Controls: A lightweight, metadata-driven component framework for building that reduces the complexity of being a client of enterprise resources. Controls provide a unified client abstraction that can be implemented to access a diverse set of enterprise resources using a single configuration model. • Web Service Metadata (WSM): An implementation of JSR 181 which standardizes a simplified, annotation-driven model for building Java web services. n In addition, Beehive includes a set of system controls that are abstractions for low-level J 2 EE resource APIs such as EJB, JMS, JDBC, and web services. 03/03/2006
Hibernate - http: //www. hibernate. org/ n Hibernate is a powerful, high performance object/relational persistence and query service. n n Hibernate lets you develop persistent classes following object-oriented idiom - including association, inheritance, polymorphism, composition, and collections. Hibernate allows you to express queries in its own portable SQL extension (HQL), as well as in native SQL, or with an object-oriented Criteria and Example API. 03/03/2006
i. Batis - http: //ibatis. apache. org/ n n The i. BATIS Data Mapper framework makes it easier to use a database with Java and. NET applications. i. BATIS couples objects with stored procedures or SQL statements using a XML descriptor. This framework maps classes to SQL statements using a very simple XML descriptor. 03/03/2006
Maven - http: //maven. apache. org/ n Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. 03/03/2006
End of End Notes – Chapters 4 and 5 03/03/2006
Ruby n n n Dynamic Fully object-oriented Interpreted 03/03/2006
OO n Everything is an object (ints, strings, etc. ) irb(main): 002: 0> 7 => 7 irb(main): 003: 0> 7. class Þ Fixnum irb(main): 011: 0> 7. 5. round => 8 irb(main): 012: 0> nil. class => Nil. Class 03/03/2006
Typing n Dynamically typed irb(main): 013: 0> n=1 => 1 irb(main): 014: 0> n. class => Fixnum irb(main): 015: 0> n="bbs" => "bbs" irb(main): 016: 0> n. class => String 03/03/2006
Typing n Strongly typed irb(main): 017: 0> n+3 Type. Error: cannot convert Fixnum into String from (irb): 17: in `+' from (irb): 17 03/03/2006
Conditionals irb(main): 020: 0> def silence? (b) irb(main): 021: 1> puts "aaaa" if b irb(main): 022: 1> end => nil irb(main): 023: 0> silence? true aaaa => nil irb(main): 025: 0> silence? false => nil irb(main): 026: 0> silence? 0 aaaa => nil irb(main): 028: 0> silence? nil => nil 03/03/2006
Looping irb(main): 030: 0> puts line while line = gets "aaa" one two three ^Z => nil 03/03/2006
Ranges irb(main): 031: 0> range = 1. . 3 => 1. . 3 irb(main): 032: 0> range. class => Range irb(main): 033: 0> ('a'. . 'z')==='h' => true irb(main): 034: 0> ('a'. . 'z')==='H' => false irb(main): 035: 0> (1. . 10) === 5 => true 03/03/2006
Ranges irb(main): 036: 0> for c in 'g'. . 'j' irb(main): 037: 1> print c + '-' irb(main): 038: 1> end g-h-i-j-=> "g". . "j" irb(main): 039: 0> for c in 'g'. . 'j' irb(main): 040: 1> puts c irb(main): 041: 1> end g h i j => "g". . "j" 03/03/2006
Regular Expressions irb(main): 042: 0> regex = /better/ => /better/ irb(main): 043: 0> regex. class => Regexp irb(main): 044: 0> "Mine is bigger" =~ regex => nil irb(main): 045: 0> "Mine is better" =~ regex => 8 03/03/2006
Containers - Hashes irb(main): 046: 0> numbers={0=>"zero", 1=>"one", 2=>"two", 3=>"three"} => {0=>"zero", 1=>"one", 2=>"two", 3=>"three"} irb(main): 047: 0> 4. times {|i| puts numbers[i]} zero one two three => 4 03/03/2006
Containers - Arrays irb(main): 048: 0> stack = [1, 2, 3] => [1, 2, 3] irb(main): 049: 0> stack. push "cat" => [1, 2, 3, "cat"] irb(main): 050: 0> stack. pop => "cat" irb(main): 051: 0> stack => [1, 2, 3] 03/03/2006
Files A simple GREP n File. open(ARGV[0]) do |file| rx = Regexp. new(ARGV[1]) while line=file. gets puts line if line =~ rx end ruby grep. rb filename regex 03/03/2006
Applying Some Structure n n Inside-out Refactoring Group common code in libraries Call them in your methods Outside in refactoring Your methods can take code-blocks as parameters call them even pass parameters to them 03/03/2006
Outside-in Refactoring def three. Times yield end three. Times { puts "Hello" } produces: Hello 03/03/2006
Classes calculator. rb class Calculator def initialize @total = 0 end def add(x) @total += x end def subtract(x) @total -= x end 03/03/2006
Classes irb(main): 001: 0> require calculator Name. Error: undefined local variable or method `calculator' for main: Object from (irb): 1 irb(main): 002: 0> require 'Calculator' => true irb(main): 003: 0> c = Calculator. new => #<Calculator: 0 x 2 bd 2500 @total=0> irb(main): 004: 0> c. add 100 => 100 irb(main): 005: 0> c. subtract 40 => 60 03/03/2006
Classes irb(main): 006: 0> class Calculator irb(main): 007: 1> def reset irb(main): 008: 2> @total = 0 irb(main): 009: 2> end irb(main): 010: 1> end => nil irb(main): 011: 0> c. reset => 0 03/03/2006
Classes irb(main): 012: 0> class Irs. Calculator < Calculator irb(main): 013: 1> def add(x) irb(main): 014: 2> x = x/2 if x>0 irb(main): 015: 2> super irb(main): 016: 2> end irb(main): 017: 1> end => nil irb(main): 018: 0> c = Irs. Calculator. new => #<Irs. Calculator: 0 x 2 bba 038 @total=0> irb(main): 019: 0> c. add 100 => 50 03/03/2006
Classes irb(main): 020: 0> Class. superclass => Module irb(main): 021: 0> Module. superclass => Object irb(main): 022: 0> Object. superclass => nil 03/03/2006
Mixins n n Interfaces with implementation Can access the including class’s methods Partly adds the benefit of multiinheritance Implemented using Modules 03/03/2006
Interceptors n You can rename methods on-the-fly class Class alias_method : orig_new, : new def new(*args) result = orig_new(*args) print “Unattended laptop error! ” #puts result return result end 03/03/2006
Interceptors irb(main): 001: 0> require "Class" => true irb(main): 002: 0> a=[1, 2, 3] #<Ruby. Token: : Tk. IDENTIFIER: 0 x 2941 d 40> #<Ruby. Token: : Tk. ASSIGN: 0 x 2941 b 48> #<Ruby. Token: : Tk. LBRACK: 0 x 2941950> #<Ruby. Token: : Tk. INTEGER: 0 x 29416 c 8> #<Ruby. Token: : Tk. COMMA: 0 x 29414 d 0> #<Ruby. Token: : Tk. INTEGER: 0 x 2941278> #<Ruby. Token: : Tk. COMMA: 0 x 29410 b 0> #<Ruby. Token: : Tk. INTEGER: 0 x 2940 e 70> #<Ruby. Token: : Tk. RBRACK: 0 x 2940 c 60> #<Ruby. Token: : Tk. NL: 0 x 2940438> => [1, 2, 3] 03/03/2006
Ruby On Rails n n What is it? “Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups” David H. Hansson 03/03/2006
Some Numbers n The author’s test case gives shows impressively superior numbers for Rails over Java/Spring/Hibernate solution in development time/code size as well as performance in most cases. 03/03/2006
Architecture 03/03/2006
Under the Hood n Active Record It’s a wrapper around a db table, with domain logic built into the wrapper. You can also do inheritance and manage relationships. n Action Pack Splits the request into a controller part and a view part. 03/03/2006
Showcases Ruby. BB by Russ Smith http: //rubybb. readbim. com/ 384 Lines of Code Story. Cards Web app to support XP style dev. by Jim Weirich http: //onestepback. org: 3030/ 1, 250 Lines of code 8 hours of development time Basecamp: A commercial Rails web-app with over 10, 000 users. “Web-based project management” http: //www. basecamphq. com/ Launched after 4, 000 Lines of Code. 2 man-months of programming by a single developer 03/03/2006
End of Presentation 03/03/2006
b712929fab3715ba05e4bdd846a61ee9.ppt