Пак ли този Rails?

Preview:

DESCRIPTION

Презентация от OpenFest 2009

Citation preview

Пак ли този ?

Стефан Къневhttp://skanev.com/@skanev

OpenFest07 ноември 2009

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Аз ползвамWindows 7

Tuesday, April 27, 2010

Пак ли този ?

Стефан Къневhttp://skanev.com/@skanev

OpenFest07 ноември 2009

Tuesday, April 27, 2010

Пак ли този ?

Стефан Къневhttp://skanev.com/@skanev

OpenFest07 ноември 2009

Защо "пак"?

Tuesday, April 27, 2010

Tuesday, April 27, 2010

2 причини

Tuesday, April 27, 2010

Причина №1

Tuesday, April 27, 2010

Java PHP Python Haskell Rails Lolcats

Продуктивност "Фън"

Tuesday, April 27, 2010

• CakePHP

• CodeIgniter

• "чисто" PHP

PHP• Catalyst

• "чист" Perl

Perl

• Django

• TurboGears

Python• Servlet & JSP

• Struts (+ Hibernate)

• Wicket (+ Spring)

• JSF

Java

Tuesday, April 27, 2010

Причина №2

...по-късноTuesday, April 27, 2010

За какво ще говоря?

Tuesday, April 27, 2010

Introduction

Tuesday, April 27, 2010

1. За Rails накратко

2. Няколко интересни неща

3. Обществото около Rails

Планът

Tuesday, April 27, 2010

1. За Rails накратко

2. Няколко интересни неща

3. Обществото около Rails

Планът

Tuesday, April 27, 2010

Ruby on Rails

Език запрограмиране

Web framework

Tuesday, April 27, 2010

duck typing

динамичен

обектно-ориентиран

интерпретира сеgeneral purpose

ала Perl и Python

Tuesday, April 27, 2010

ModelViewController

Tuesday, April 27, 2010

Rails е...

...като:• CakePHP• CodeIgniter• Struts• Catalyst• TurboGears

...различен от:• Wicket• Google Web Tookit• Java Server Faces

Django

Tuesday, April 27, 2010

agile

Tuesday, April 27, 2010

1. За Rails накратко

2. Няколко интересни неща

3. Обществото около Rails

Планът

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола

Tuesday, April 27, 2010

>> a, b = 2, 8=> [2, 8]>> a ** b=> 256>> ["Interactive", "shell"].join(" ")=> "Interactive shell"

Tuesday, April 27, 2010

>> u = User.find_by_email 'paul@example.org'>> u.password = 'larodi'>> u.password_confirmation = 'larodi'>> u.save

Tuesday, April 27, 2010

начин да научите rails

Tuesday, April 27, 2010

server debugging

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

• HAML

Tuesday, April 27, 2010

<h1>Cheese</h1><ul id="cheese"> <li>Red Leicester</li> <li class="selected">Lancashire</li> <li>Danish Blue</li> <li>Gouda</li></ul>

HTML

Tuesday, April 27, 2010

<h1>Cheese</h1><ul id="cheese"> <li>Red Leicester</li> <li class="selected">Lancashire</li> <li>Danish Blue</li> <li>Gouda</li></ul>

%h1 Cheese%ul#cheese %li Red Leicester %li.selected Lancashire %li Danish Blue %li Gouda

HTML

HAML

Tuesday, April 27, 2010

OMG! Супер!

Tuesday, April 27, 2010

OMG! Ужас!

Tuesday, April 27, 2010

<h1>Cheese</h1><ul id="cheese"> <li>Red Leicester</li> <li class="selected">Lancashire</li> <li>Danish Blue</li> <li>Gouda</li></ul>

%h1 Cheese%ul#cheese %li Red Leicester %li.selected Lancashire %li Danish Blue %li Gouda

HTML

HAML

Tuesday, April 27, 2010

<h1>Cheese</h1><% unless @cheese.empty? %> <ul id="cheese"> <% @cheese.each do |name| %> <li><%= name %></li> <% end %> </ul><% else %> <p>Sorry sir, we don't have any cheese.</p><% end %>

ERB

Tuesday, April 27, 2010

%h1 Cheese- unless @cheese.empty? %ul#cheese - @cheese.each do |name| %li= name- else %p Sorry sir, we don't have any cheese

<h1>Cheese</h1><% unless @cheese.empty? %> <ul id="cheese"> <% @cheese.each do |name| %> <li><%= name %></li> <% end %> </ul><% else %> <p>Sorry sir, we don't have any cheese.</p><% end %>

ERB

HAML

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

• HAML

• SASS

Tuesday, April 27, 2010

h1 { height: 118px; margin-top: 1em;}

.tagline { font-size: 26px; text-align: right;}

h1 height: 118px margin-top: 1em

.tagline font-size: 26px text-align: right

SASS CSS

Прост пример

Tuesday, April 27, 2010

SASS CSS

Влагане

table.hl margin: 2em 0 td.ln text-align: right

li font: family: serif weight: bold size: 1.2em

table.hl { margin: 2em 0;}table.hl td.ln { text-align: right;}

li { font-family: serif; font-weight: bold; font-size: 1.2em;}

Tuesday, April 27, 2010

SASS CSS

Константи

!blue = #3bbfce!margin = 16px

.content_navigation border-color = !blue color = !blue - #111

.border padding = !margin / 2 margin = !margin / 2 border-color = !blue

.content_navigation { border-color: #3bbfce; color: #2aaebd;}

.border { padding: 8px; margin: 8px; border-color: #3bbfce;}

Tuesday, April 27, 2010

SASS CSS

Mix-ins

=rounded-corners(!size) -moz-border-radius = !size -webkit-border-radius = !size border-radius = !size

#data +rounded-corners(5px)

#data { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px;}

Tuesday, April 27, 2010

http://lesscss.org/

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

• HAML

• SASS

•Миграции

Tuesday, April 27, 2010

schema.sql

Tuesday, April 27, 2010

@Entityclass User { @Basic String name; @Basic int age; @ManyToOne City city;}

Автоматични промени

Tuesday, April 27, 2010

id title category_name

1 Dune Fiction

2 War & Peace Drama

3 Lord of the Rings Fiction

id title category_id

1 Dune 1

2 War & Peace 2

3 Lord of the Rings 1

id name

1 Fiction

2 Drama

Tuesday, April 27, 2010

class NormalizeCategories < ActiveRecord::Migration def self.up create_table :categories do |t| t.string :name end add_column :books, :category_id, :integer Book.all.each do |book| category = Category.find_or_create_by_name book.category_name book.category_id = category.id book.save! end drop_column :categories, :category_name endend

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

• HAML

• SASS

•Миграции• Webrat

Tuesday, April 27, 2010

Selenium

Tuesday, April 27, 2010

1. труден за поддръжка

Tuesday, April 27, 2010

2. бавен

Tuesday, April 27, 2010

Webrat

Tuesday, April 27, 2010

fill_in "Сума", :with => '1000'fill_in "Данък", :with => "20%"click_button "Изчисли"response.should include_text("1200 лв")

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

• HAML

• SASS

•Миграции• Webrat

• Cucumber

Tuesday, April 27, 2010

business domain

Tuesday, April 27, 2010

business analyst

Tuesday, April 27, 2010

use casesuser stories

Tuesday, April 27, 2010

Feature: Purchasing things In order for us to make money the user should be allowed to easily purchase our products Scenario: Purchases for more than 2500 should offer 20% Given there are these products: | Name | Price | | MacBook Pro | 2000 | | ThinkPad | 1000 | When I add 1 "MacBook Pro" to my basket And I add 1 "ThinkPad" to my basket Then the final price should be 2600

Tuesday, April 27, 2010

Feature: Purchasing things In order for us to make money the user should be allowed to easily purchase our products Scenario: Purchases for more than 2500 should offer 20% Given there are these products: | Name | Price | | MacBook Pro | 2000 | | ThinkPad | 1000 | When I add 1 "MacBook Pro" to my basket And I add 1 "ThinkPad" to my basket Then the final price should be 2600

Изпълнимо

Tuesday, April 27, 2010

Given /^there are these products$/ do |table| ...end

When /^I add (\d+) "(.*?)" to my basket$/ do |count, name| ...end

Then /^the final price should be (\d+)$/ do |price| ...end

Feature: Purchasing things In order for us to make money the user should be allowed to easily purchase our products Scenario: Purchases for more than 2500 should offer 20% Given there are these products: | Name | Price | | MacBook Pro | 2000 | | ThinkPad | 1000 | When I add 1 "MacBook Pro" to my basket And I add 1 "ThinkPad" to my basket Then the final price should be 2600

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Функционалност: Купуване на продукти За да печелим пари потребителят трябва да може лесно да пазарува продукти Сценарий: Поръчките за повече от 2000 трябва да имат 20% отстъпка Дадено че има следните три продукта: | Име | Price | | MacBook Air | 2000 | | ThinkPad | 1000 | Когато добавя 1 "MacBook Air" в кошницата си И добавя 2 "ThinkPad" в кошницата си То цената трябва да е 2600

Краставицата ми говори български

Tuesday, April 27, 2010

OH HAI: I CAN BAI STUFF SO WE CAN HAZ MONEYZ N00BZ SHOULD BAI STUFF MISHUN: BAI STUFF CHEAPER I CAN HAS CHEEZEBURGERS: | NAME | MONEYZ | | MacBook Air | 2000 | | ThinkPad | 1000 | WEN I AD 1 "MacBook Air" TO MAI BASKET AN I AD 1 "ThinkPad" TO MAI BASKET DEN I SHOULD PAY 2600

Краставицата ми говори lolspeak

Tuesday, April 27, 2010

2. Малки интересни неща

• Конзола• Debugger

• HAML

• SASS

•Миграции• Webrat

• Cucumber

• Test-Driven

Tuesday, April 27, 2010

unit teststest-driven development

Tuesday, April 27, 2010

behavior-driven development

Tuesday, April 27, 2010

Test-Driven Development is not about testing.

Tuesday, April 27, 2010

Tuesday, April 27, 2010

ruby е гъвкав:

stubs & mocks

Tuesday, April 27, 2010

1. За Rails накратко

2. Няколко интересни неща

3. Обществото около Rails

Планът

Tuesday, April 27, 2010

хората

Tuesday, April 27, 2010

jQuery

Tuesday, April 27, 2010

Yehuda Katz

Tuesday, April 27, 2010

Yehuda Katz

jQuery Rails 3Tuesday, April 27, 2010

JavaScript

Tuesday, April 27, 2010

prototype.js

Tuesday, April 27, 2010

Rails is about less code.- David Heinemeier Hansson

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Tuesday, April 27, 2010

много колоритни хора

Tuesday, April 27, 2010

Giles Bowkett

Tuesday, April 27, 2010

_why the lucky stiff

Tuesday, April 27, 2010

Zed ShawTuesday, April 27, 2010

Има и компании

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Tuesday, April 27, 2010

блогове

Tuesday, April 27, 2010

Tuesday, April 27, 2010

Екосистема

Tuesday, April 27, 2010

Най-хубавото нещо:

Общността

Tuesday, April 27, 2010

Отворен (OS) модел за:

кодметодипринципи

Tuesday, April 27, 2010

?Tuesday, April 27, 2010

http://skanev.com/@skanev

Tuesday, April 27, 2010

The happy programmer 2

Nikolay Bachiyski&

Stefan Kanev

Sunday, 10:00, OpenFest

Tuesday, April 27, 2010

Recommended