за Ruby
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

за Ruby

  • 1,215 views
Uploaded on

Презентация от initLab

Презентация от initLab

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,215
On Slideshare
1,215
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
14
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. За Стефан Кънев -- 28 май -- initLab http://skanev.com/ @skanev
  • 2. && ?
  • 3. ЗЛО! АНАТЕМА!
  • 4. 3. 14159265358979323846264338327950288419716939937510 58209749445923078164062862089986280348253421170679 82148086513282306647093844609550582231725359408128 48111745028410270193852110555964462294895493038196 44288109756659334461284756482337867831652712019091 45648566923460348610454326648213393607260249141273 72458700660631558817488152092096282925409171536436 78925903600113305305488204665213841469519415116094 33057270365759591953092186117381932611793105118548 07446237996274956735188575272489122793818301194912 98336733624406566430860213949463952247371907021798 60943702770539217176293176752384674818467669405132 00056812714526356082778577134275778960917363717872 14684409012249534301465495853710507922796892589235 42019956112129021960864034418159813629774771309960 51870721134999999837297804995105973173281609631859 50244594553469083026425223082533446850352619311881 71010003137838752886587533208381420617177669147303 59825349042875546873115956286388235378759375195778 18577805321712268066130019278766111959092164201989 38095257201065485863278865936153381827968230301952 03530185296899577362259941389124972177528347913151 55748572424541506959508295331168617278558890750983 81754637464939319255060400927701671139009848824012 85836160356370766010471018194295559619894676783744 94482553797747268471040475346462080466842590694912 93313677028989152104752162056966024058038150193511 25338243003558764024749647326391419927260426992279 67823547816360093417216412199245863150302861829745 55706749838505494588586926995690927210797509302955
  • 5. instance Show Board where show (Board ps) = let ordered = (sort . swap) ps ranks = map (showRank ordered) [8,7..1] board = intersperse quot;--+--+--+--+--+--+--+--quot; ranks rlabels = intersperse quot; quot; (map (n->(show n)++quot; quot;) [8,7..1]) flabels = quot; a b c d e f g hquot; in unlines $ zipWith (++) rlabels board ++ [flabels] where swap = map ((a,b)->(b,a)) showRank ps r = let rnk = filter ((p,_)->(rank p)==r) ps cs = map (showPiece rnk) [A .. H] in concat (intersperse quot;|quot; cs) showPiece ps f = maybe quot; quot; (show . snd) (find ((p,_)->(file p)==f) ps)
  • 6. За Стефан Кънев -- 28 май -- initLab
  • 7. && Защо?
  • 8. • Налага се да работиш извънработно време. Като проститутка.
  • 9. • Налага се да работиш извънработно време. Като проститутка. • Обикновенно работиш до късно. Като проститутка.
  • 10. • Налага се да работиш извънработно време. Като проститутка. • Обикновенно работиш до късно. Като проститутка. • Никога няма да започнеш да се гордееш с работата си. Като проститутка.
  • 11. • Налага се да работиш извънработно време. Като проститутка. • Обикновенно работиш до късно. Като проститутка. • Никога няма да започнеш да се гордееш с работата си. Като проститутка. • Когато те питат с какво се занимаваш - не можеш да обясниш. Като проститутка.
  • 12. • Налага се да работиш извънработно време. Като проститутка. • Обикновенно работиш до късно. Като проститутка. • Никога няма да започнеш да се гордееш с работата си. Като проститутка. • Когато те питат с какво се занимаваш - не можеш да обясниш. Като проститутка. • В края края на крайщата се чувстваш сякаш си се измъкнал от ада. Като проститутка.
  • 13. • Налага се да работиш извънработно време. Като проститутка. • Обикновенно работиш до късно. Като проститутка. • Никога няма да започнеш да се гордееш с работата си. Като проститутка. • Когато те питат с какво се занимаваш - не можеш да обясниш. Като проститутка. • В края края на крайщата се чувстваш сякаш си се измъкнал от ада. Като проститутка. • Ако нещо не е както трябва, виновният си ти. Като проститутка.
  • 14. • Налага се да работиш извънработно време. Като проститутка. • Обикновенно работиш до късно. Като проститутка. • Никога няма да започнеш да се гордееш с работата си. Като проститутка. • Когато те питат с какво се занимаваш - не можеш да обясниш. Като проститутка. • В края края на крайщата се чувстваш сякаш си се измъкнал от ада. Като проститутка. • Ако нещо не е както трябва, виновният си ти. Като проститутка. • И се питаш накрая: quot;АБЕ, аз системен администратор ли съм или ....?quot;
  • 15. s/сис админ/програмист/
  • 16. Занаят
  • 17. Занаят Предизвикателство
  • 18. Занаят Предизвикателство Изкуство
  • 19. Fun
  • 20. C# AspectJ Groovy Perl Python
  • 21. Ruby
  • 22. class < ProgrammingLanguage
  • 23. class < ProgrammingLanguage is_not :rails
  • 24. class < ProgrammingLanguage is_not :rails is :general_purpose
  • 25. class < ProgrammingLanguage is_not :rails is :general_purpose is :dynamic
  • 26. class < ProgrammingLanguage is_not :rails is :general_purpose is :dynamic kicks_ass
  • 27. class < ProgrammingLanguage is_not :rails is :general_purpose is :dynamic kicks_ass end
  • 28. duck typing ала Perl и Python интерпретира се general purpose динамичен обектно-ориентиран вдъхновен от Perl, Smalltalk, CLU и Lisp
  • 29. +
  • 30. ООП
  • 31. regarding(:oop) { quot;Rubyquot; > quot;Pythonquot; }
  • 32. print reverse quot;dogquot;;
  • 33. print reverse quot;dogquot;; > dog
  • 34. print reverse quot;dogquot;; > dog print ucfirst reverse quot;dogquot;;
  • 35. print reverse quot;dogquot;; > dog print ucfirst reverse quot;dogquot;; > God
  • 36. regarding(:readability) { quot;Rubyquot; > quot;Perlquot; }
  • 37. Динамичен
  • 38.
  • 39. Идеология
  • 40. Matz
  • 41. Treating Code As an Essay •Brevity • Simplicity • Balance
  • 42. Programs must be written for people to read, and only incidentally for machines to execute
  • 43. Ruby.syntax
  • 44. # Променливи и константи savings = 1729 savings = savings - 42 PI = 3.1415
  • 45. # Условни конструкции if price < 100 savings -= price will_buy = yes else will_buy = no end
  • 46. # Цикли while savings > 1000 product, cost = find_cool_stuff() buy(product) savings -= cost end
  • 47. # Unless и Until unless hungry continue_programming() end until broke buy_stuff() end
  • 48. # Като модификатори buy(product) if price < 100 continue_programming() unless hungry buy_another() while savings > 1000 buy_stuff() until broke
  • 49. # Вградени типове primes = [2, 3, 5, 7, 11, 13] names = [quot;Matzquot;, quot;DHHquot;, quot;_whyquot;] family_names = { quot;Yukihiroquot; => quot;Matsumotoquot;, quot;Davidquot; => quot;Heinemeier Hansonquot;, quot;_whyquot; => quot;the lucky stiffquot;, } regex = /(bb|[^b]{2})/
  • 50. # Итерация primes = [2, 3, 5, 7, 11, 13] for n in primes puts n end primes.each do |n| puts n end
  • 51. # Функции def factorial(n) if n <= 1 return 1 else return n * factorial(n - 1) end end factorial(5)
  • 52. # Функции (2) def double(n) n + n end double(5) == 10
  • 53. # Всичко е израз classification = if price > 1000 quot;Expensivequot; elsif price > 300 quot;Normalquot; else quot;Cheapquot; end
  • 54. # Функции (3) def factorial(n) if n <= 1 1 else n * factorial(n - 1) end end
  • 55. # Функционално програмиране active_emails = [] for user in users if user.active? active_emails << user.email end end
  • 56. # Функционално програмиране (2) active_users = users.select { |user| user.active? } active_emails = active_users.map { |user| user.email }
  • 57. # Функционално програмиране (3) active_users = users.select { |user| user.active? } active_emails = active_users.map { |user| user.email } active_emails = users.select { |u| u.active? }.map { |u| u.email } active_emails = users.select(&:active?).map(&:email)
  • 58. # Обектно-ориентирано програмиране a = Vector.new(0, 1, 0) b = Vector.new(1, 0, 1) product = a * b len = (a.x*a.x + a.y*a.y + a.z*a.z) ** 0.5
  • 59. # Обектно-ориентирано програмиране (2) class Vector def initialize(x, y, z) @x = x @y = y @z = z end def len (@x * @x + @y * @y + @z * @z) ** 0.5 end def *(other) ... end end
  • 60. # Обектно-ориентирано програмиране (3) class Vector def x() @x end def x=(val) @x = val end end a = Vector(0, 1, 0) puts a.x puts a.x() a.x = 10 a.x=(10)
  • 61. # Обектно-ориентирано програмиране (4) class Vector attr_accessor :x attr_accessor :y end
  • 62. # Корутини write_to = users.select { |u| u.active? }.map { |u| u.email } primes = [1, 2, 3, 5, 7, 11, 13] sum = primes.inject { |a, b| a + b } open(quot;foo.txtquot;, quot;wquot;) do |file| primes.each do |prime| file.write prime.to_s end end
  • 63. # Корутини (2) def do_twice yield yield end do_twice { puts quot;Ruby rocks!quot; }
  • 64. # Корутини (3) def filter(things) result = [] things.each do |thing| result << thing if yield(thing) end result end filter([3, 5, 7, 11, 13, 17]) { |x| x > 10 }
  • 65. # Всички прости числа до 100 2.upto(100) do |n| puts n if (2...n).all? { |x| n % x != 0 } end
  • 66. # Mix-in module FunctionalStuff def map result = [] self.each { |item| result << yield(item) } result end def select result = [] self.each { |item| result << item if yield(item) } result end end class PrimesUpTo include FunctionalStuff def each ... end end
  • 67. # Monkey patch class Integer def factorial() (1..self).inject { |a, b| a * b } end end puts 5.factorial
  • 68. arr = [ quot;Freddiequot;, quot;Herbiequot;, quot;Ronquot;, quot;Maxquot;, quot;Ringoquot; ] callcc{|$cc|} puts(message = arr.shift) $cc.call unless message =~ /Max/ # Freddie # Herbie # Ron # Max
  • 69. callcc {|cont| for i in 0..4 print quot;n#{i}: quot; for j in i*5...(i+1)*5 cont.call() if j == 17 printf quot;%3dquot;, j end end } print quot;nquot; #0: 0 1 2 3 4 #1: 5 6 7 8 9 #2: 10 11 12 13 14 #3: 15 16
  • 70. (->_{_%_})['(->_{%%}_)[%p]']
  • 71. На практика
  • 72. Domain Specific Languages
  • 73. describe Stack do before(:each) do @stack = Stack.new [1, 2, 3, 4].each { |n| @stack << n } RSpec end it quot;should have all items in reversed orderquot; do @stack.should_not be_empty @stack.should have(4).items @stack.items.should == [4, 3, 2, 1] end it quot;should be empty if emptiedquot; do 4.times { @stack.pop } @stack.should be_empty @stack.should have(:no).items end end
  • 74. Shoes.app do background quot;#eeequot; @list = stack do para quot;Enter a URL to download:quot;, :margin => [10, 8, 10, 0] flow :margin => 10 do @url = edit_line :width => -120 Shoes button quot;Downloadquot;, :width => 120 do @list.append do stack do background quot;#eeequot;..quot;#ccdquot; stack :margin => 10 do dl = nil para @url.text, quot; [quot;, link(quot;cancelquot;) { dl.abort }, quot;]quot;, :margin => 0 d = inscription quot;Beginning transfer.quot;, :margin => 0 p = progress :width => 1.0, :height => 14 dl = download @url.text, :save => File.basename(@url.text), :progress => proc { |dl| d.text = quot;Transferred #{dl.transferred} of #{dl.length} b (#{dl.percent}%)quot; p.fraction = dl.percent * 0.01 }, :finish => proc { |dl| d.text = quot;Download completedquot; } end end end end end end end
  • 75. class User < ActiveRecord::Base ActiveRecord validates_presence_of :name, :faculty_number, :email validates_presence_of :password, :if => :password_required? validates_presence_of :password_confirmation, :if => :password_required? validates_length_of :password, :within => 4..40, :if => :password_required? validates_confirmation_of :password, :if => :password_required? validates_length_of :email, :within => 3..100 validates_uniqueness_of :email, :case_sensitive => false before_save :encrypt_password file_column :picture, :magick => { :geometry => quot;100x100>quot; } has_many :solutions has_many :topics has_many :replies belongs_to :project end
  • 76. Culture
  • 77.
  • 78. Innovation
  • 79. Иноватори Психопати
  • 80. Anti-professionalism Un-professionalism Elitism
  • 81. Леко аматьорска (само мъничко)
  • 82. Interpreters: MRI YARV JRuby Rubinius
  • 83. Resources
  • 84. http://poignantguide.net/
  • 85. ??? ( http://skanev.com/ ) ( @skanev )