SlideShare a Scribd company logo
1 of 58
Download to read offline
4. Метапрограмиране

class << self
  speaker quot;Стефан Къневquot;
  speaker quot;Николай Бачийскиquot;
  on_date quot;20‐10‐2008quot;
end
lectures.last.recap
class Vector
  def initialize(x, y, z)
    @x, @y, @z = x, y, z
  end

 def length
   (@x * @x + @y * @y + @z * @z) ** 0.5
 end

  def to_s() “(#@x, #@y, #@z)” end
end

orientation = Vector.new 1.0, 0.0, 1.0
puts orientation.length
class Vector
  attr_accessor :x, :y, :z

  def initialize(x, y, z)
    @x, @y, @z = x, y, z
  end
end
class Vector

 def +(other)
   Vector.new self.x + other.x,
       self.y + other.y,
       self.z + other.z
 end

 def *(n)
   Vector.new @x * n, @y * n, @z * n
 end

end
class Fixnum
  alias broken_equal? ==

  def ==(other)
    if (self.equal?(0) and other.equal?(1)) or
         (self.equal?(1) and other.equal?(0))
      true
    else
      self.broken_equal?(other)
    end
  end
end
pesho = Coin.new 0.50

def pesho.pick_up(person)
  person.get_hopes_high
  person.humiliate
  person.make_sad
end
metaprogramming.inspect
class Student < ActiveRecord::Base
  validates_presence_of :name, :fn, :email
  validates_numericality_of :fn
  validates_email :email

 belongs_to :university
 has_many :grades
 has_many :courses, :through => :courses
 has_and_belongs_to_many :groups

  before_destroy do |student|
    InformationMailer.deliver_destroyed(student)
  end
end
html :xmlns => quot;http://www.w3.org/1999/xhtmlquot; do
  head do
    title quot;Registered studentsquot;
    style :type => quot;text/cssquot; do
      content quot;* { font‐family: Verdana; }quot;
    end
  end
  body do
    h1 quot;Registered students
    ul do
      @students.each do |student|
        li do
          p student.name
          unless student.url.nil?
            a quot;Personal websitequot;, :href => student.url
          end
        end
      end
    end
  end
end
class Person; end
class Programmer < Person; end
class Rubyist < Programmer; end

>> chunky = Rubyist.new
>> chunky.class
Rubyist
>> chunky.class.superclass
Programmer
>> chunky.class.ancestors
[Rubyist, Programmer, Person, Object, Kernel]
>> chunky.instance_of?(Rubyist), chunky.instance_of? Programmer
[true, false]
>> chunky.kind_of?(Rubyist), chunky.kind_of?(Programmer)
[true, true]
>> Rubyist < Person, Rubyist < Programmer, Person < Rubyist
[true, true, false]
respond_to?
class Vector
  def initialize(x, y, z) @x, @y, @z = x, y, z end
  def length() (@x * @x + @y * @y + @z * @z) ** 0.5 end
  def method_missing(name, *args)
    return Vector.new(‐@x, ‐@y, ‐@z) if name.to_sym == :invert
    super
  end
  private
    def sum() @x + @y + @z end 
end

>> vector = Vector.new 1.0, 2.0, 3.0
>> vector.respond_to? :length
true
>> vector.respond_to? :invert
false
>> vector.respond_to? :sum
false
>> vector.respond_to?(:sum, true)
false
class Vector
  attr_accessor :x, :y, :z
  def initialize(x, y, z) @x, @y, @z = x, y, z end
end

>> vector = Vector.new 1.0, 2.0, 3.0
>> vector.instance_variable_get :@y
2.0
>> vector.instance_variable_set :@y, 5.0
5.0
>> vector.instance_variable_get :@y
5.0
>> vector.y
5.0
>> vector.instance_variables
[quot;@zquot;, quot;@yquot;, quot;@xquot;]
public_methods(all=true)
protected_methods(all=true)
 private_methods(all=true)
         methods
>> vector = Vector.new 1.0, 2.0, 3.0
>> vector.methods
[quot;inspectquot;, quot;taguriquot;, quot;clonequot;, quot;public_methodsquot;, quot;taguri=quot;, 
quot;displayquot;, quot;method_missingquot;, quot;instance_variable_defined?quot;, 
quot;equal?quot;, quot;freezequot;, quot;methodsquot;, quot;respond_to?quot;, quot;dupquot;, 
quot;instance_variablesquot;, quot;__id__quot;, quot;methodquot;, quot;eql?quot;, quot;idquot;, 
quot;singleton_methodsquot;, quot;sendquot;, quot;lengthquot;, quot;taintquot;, quot;frozen?quot;, 
quot;instance_variable_getquot;, quot;__send__quot;, quot;instance_of?quot;, quot;to_aquot;, 
quot;to_yaml_stylequot;, quot;typequot;, quot;protected_methodsquot;, quot;instance_evalquot;, 
quot;object_idquot;, quot;require_gemquot;, quot;==quot;, quot;requirequot;, quot;===quot;, 
quot;instance_variable_setquot;, quot;kind_of?quot;, quot;extendquot;, 
quot;to_yaml_propertiesquot;, quot;gemquot;, quot;to_squot;, quot;to_yamlquot;, quot;hashquot;, 
quot;classquot;, quot;private_methodsquot;, quot;=~quot;, quot;tainted?quot;, quot;untaintquot;, 
quot;nil?quot;, quot;is_a?“]
>> vector.public_methods(false)
[quot;method_missingquot;, quot;lengthquot;]
method(:length)
>> v1 = Vector.new 1.0, 0.0, 0.0
>> v2 = Vector.new 0.0, 3.0, 4.0
>> length = v1.method(:length)
>> puts length[]
1.0
>> unbinded = length.unbind
>> unbinded.bind(v2)[]
5.0
Vector.instance_method(:length)
class Coin

 def initialize(value)
   @value = value
 end

  def pick_up(person)
    person.enrich self.value
  end

  def put_on_train_rail!
    self.flatten
  end
end

pesho = Coin.new 0.50
gosho = Coin.new 1.00
gosho
@value = 1.00         Coin
                 pick_up(person)
                put_on_train_rails()




   pesho
@value = 0.50
def pesho.pick_up(person)
  person.get_hopes_high
  person.humiliate
  person.make_sad
end

def pesho.flip
  :heads
end
singleton_methods
>> pesho.singleton_methods
[quot;pick_upquot;, quot;flip“]
gosho
@value = 1.00                       Coin
                               pick_up(person)
                              put_on_train_rails()




                 pesho` < Coin
                pick_up(person)
   pesho             flip()
@value = 0.50
def pesho.pick_up(person)
  person.get_hopes_high
  person.humiliate
  person.make_sad
end

class << pesho
  def pick_up(person)
    person.get_hopes_high
    person.humiliate
    person.make_sad
  end
end
class << pesho
  attr_accessor :value
  alias take_from_ground pick_up
end

>> pesho.value
0.50
>> pesho.take_from_ground(stefan)
:(
>> singleton_class = class << pesho
                       self
                     end
>> p pesho
#<Coin:0x3ec5cf4 @value=0.50>
>> p singleton_class
#<Class:#<Coin:0x3ec5cf4>>
>> p singleton_class != pesho.class
true
class Object
  def singleton_class
    class << self
      self
    end
  end
end

>> pesho.singleton_class
eval
>> x, y = 5, 10
>> code = quot;x + yquot;
>> sum = eval(code)
>> puts sum
15
>> eval quot;def square(x) x ** 2 endquot;
>> puts square(10)
100
instance_eval
>> v = Vector.new 1.0, 2.0, 3.0
>> v.instance_eval quot;@x + @y + @zquot;
6.0
>> v.instance_eval { @x + @y + @z }
6.0
class_eval
>> v = Vector.new 1.0, 2.0, 3.0
>> Vector.class_eval quot;def sum() @x + @y + @z endquot;
>> p v.sum
6.0
>> Vector.class_eval do
      def sum()
        @x + @y + @z
      end
    end
>> p v.sum
6.0
def add_name_method(klass, given_name)
  klass.class_eval do
    def name
      given_name
    end
  end
end

>> add_name_method(Vector, quot;I, Vectorquot;)
>> v = Vector.new 1.0, 2.0, 3.0
>> p v.name
undefined method `given_name' for Vector
define_method
def add_name_method(klass, given_name)
  klass.send(:define_method, :name) do
    given_name
  end
end

>> add_name_method(Vector, quot;I, Vectorquot;)
>> v = Vector.new 1.0, 2.0, 3.0
>> p v.name
quot;I, Vectorquot;
Module
namespace
  mix‐in
namespace
module PseudoMath
  class Vector
    def initalize(x, y) @x, @y = x, y end
  end

  def PseudoMath.square_root(number)
    number ** 0.5
  end

  PI = 3.0
end

puts PseudoMath::PI
height = PseudoMath::Vector.new 3.0, 4.0
puts PseudoMath::square_root(5)
puts PseudoMath.square_root(5)
mix‐in
module Debug
  def who_am_i?
    quot;#{self.class.name} (##{self.object_id})quot; +
       quot; #{self.to_s}quot;
  end
end

class Coin
  include Debug
end

>> coin = Coin.new
>> puts coin.who_am_i?
Coin (#33139900) #<Coin:0x3f35978>
>> pesho = Coin.new
>> pesho.extend(Debug)
>> puts Coin.who_am_i?
Coin (#33139900) #<Coin:0x3f35978>
Умни константи
module Unicode
  def self.const_missing(name)
        if name.to_s =~ /^U([0‐9a‐fA‐F]{4,6})$/
                utf8 = [$1.to_i(16)].pack('U')
                const_set(name, utf8)
        else
                raise NameError, quot;Unitinitialized constant: #{name}quot;
        end
  end
end


puts Unicode::U00A9
puts Unicode::U221E
puts Unicode::X
Генериране на XML
XML.new(STDOUT) do
 html do
     head do
          title { quot;Extrapolate mequot; }
     end
     body(:class => 'ruby')
 end
end
class XML
  def initialize(out, indent='  ', &block)
        @res = out
        @indent = indent
        @depth = 0
        self.instance_eval(&block)
        @res << quot;nquot;
  end

 def tag(name, attributes={})




 end
    ?
  alias method_missing tag
end
def tag(name, attributes={})
      @res << quot;<#{name}quot;
      attributes.each { |attr, value| @res << quot; #{attr}='#{value}'quot;}
      if block_given?
              @res << quot;>quot;
              inside = yield
              @res << inside.to_s
              @res << quot;</#{name}>quot;
      else
              @res << ' />'
      end
      nil
end
DSL RPG Иху‐аху
Game.new do
 pencho = Singlerich.new('Pencho')
 kuncho = Eigendiel.new('Kuncho')

 kuncho.knife pencho
 kuncho.bow pencho
 kuncho.sword kuncho
pencho.kick kuncho
puts kuncho.health pencho.health
end
class Eigendiel < Monster

 weapons :bow, :knife

 def after_bow(other)
     # special poison, doesn’t work on me
     other.hurt 2 if !other.equal?(self)
 end
end
class Singlerich < Monster

 weapons :knife, :sword, :kick

 def before_knife(other)
     # kicks at the same time
     kick other
 end
end
class Monster
  attr_reader :health, :name

  BASIC_DAMAGE = 11

  def initialize(name)
          @name = name
          @health = 100
  end

  def self.weapons(*weapons_list)




  end
      ?
  def hurt(amount)
          @health ‐= amount
          puts quot;#{@name} is a loser!nquot; if @health < 0
  end

end
def self.weapons(*weapons_list)
  weapons_list.each do |weapon|
    weapon = weapon.to_s
    define_method weapon do |whom|
      send quot;before_#{weapon}quot;, whom if self.class.method_def...
      whom.hurt BASIC_DAMAGE
      send quot;after_#{weapon}quot;, whom if self.class.method_def...
    end
  end
end
Game.new do
  pencho = Singlerich.new('Pencho')
  kuncho = Eigendiel.new('Kuncho')

 kuncho.knife pencho
 kuncho.bow pencho
 kuncho.bow kuncho

 chuck = Singlerich.new(quot;Chuckquot;)
 def chuck.explode(whom)
       whom.hurt 100
 end

  chuck.explode pencho
  chuck.explode kuncho
end

More Related Content

What's hot

Javascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introductionJavascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introductionIban Martinez
 
PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!Ivan Tsyganov
 
Testing and Testable Code
Testing and Testable CodeTesting and Testable Code
Testing and Testable CodePawel Szulc
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10minIvelina Dimova
 
Hexadite Real Life Django ORM
Hexadite Real Life Django ORMHexadite Real Life Django ORM
Hexadite Real Life Django ORMMaxim Braitmaiere
 
Shortcodes In-Depth
Shortcodes In-DepthShortcodes In-Depth
Shortcodes In-DepthMicah Wood
 
Web Security Mistakes: Trusting The Client
Web Security Mistakes: Trusting The ClientWeb Security Mistakes: Trusting The Client
Web Security Mistakes: Trusting The Clientgrutz
 
What your testtool doesn't tell you
What your testtool doesn't tell youWhat your testtool doesn't tell you
What your testtool doesn't tell youAnnemarie Klaassen
 
Worth the hype - styled components
Worth the hype - styled componentsWorth the hype - styled components
Worth the hype - styled componentskathrinholzmann
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.jsSarah Drasner
 
Basic articles of incorporation template free basic articles of incorporatio...
Basic articles of incorporation template  free basic articles of incorporatio...Basic articles of incorporation template  free basic articles of incorporatio...
Basic articles of incorporation template free basic articles of incorporatio...Lloyd Peace
 
My app is secure... I think
My app is secure... I thinkMy app is secure... I think
My app is secure... I thinkWim Godden
 
Vidéo approche en immobilier
Vidéo approche en immobilierVidéo approche en immobilier
Vidéo approche en immobilierhervepouliot
 
Writing DSLs with Parslet - Wicked Good Ruby Conf
Writing DSLs with Parslet - Wicked Good Ruby ConfWriting DSLs with Parslet - Wicked Good Ruby Conf
Writing DSLs with Parslet - Wicked Good Ruby ConfJason Garber
 
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascriptmpnkhan
 
Gaspard tutorial
Gaspard tutorialGaspard tutorial
Gaspard tutorialpboulet
 

What's hot (20)

Javascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introductionJavascript & jQuery: A pragmatic introduction
Javascript & jQuery: A pragmatic introduction
 
PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!PyCon Siberia 2016. Не доверяйте тестам!
PyCon Siberia 2016. Не доверяйте тестам!
 
Testing and Testable Code
Testing and Testable CodeTesting and Testable Code
Testing and Testable Code
 
Theme verdadeiro
Theme verdadeiroTheme verdadeiro
Theme verdadeiro
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10min
 
Hexadite Real Life Django ORM
Hexadite Real Life Django ORMHexadite Real Life Django ORM
Hexadite Real Life Django ORM
 
Shortcodes In-Depth
Shortcodes In-DepthShortcodes In-Depth
Shortcodes In-Depth
 
Web Security Mistakes: Trusting The Client
Web Security Mistakes: Trusting The ClientWeb Security Mistakes: Trusting The Client
Web Security Mistakes: Trusting The Client
 
What your testtool doesn't tell you
What your testtool doesn't tell youWhat your testtool doesn't tell you
What your testtool doesn't tell you
 
Worth the hype - styled components
Worth the hype - styled componentsWorth the hype - styled components
Worth the hype - styled components
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.js
 
Basic articles of incorporation template free basic articles of incorporatio...
Basic articles of incorporation template  free basic articles of incorporatio...Basic articles of incorporation template  free basic articles of incorporatio...
Basic articles of incorporation template free basic articles of incorporatio...
 
[ HackFest.pl 2012] Testing - what for and how
[ HackFest.pl 2012] Testing - what for and how[ HackFest.pl 2012] Testing - what for and how
[ HackFest.pl 2012] Testing - what for and how
 
My app is secure... I think
My app is secure... I thinkMy app is secure... I think
My app is secure... I think
 
Vidéo approche en immobilier
Vidéo approche en immobilierVidéo approche en immobilier
Vidéo approche en immobilier
 
Writing DSLs with Parslet - Wicked Good Ruby Conf
Writing DSLs with Parslet - Wicked Good Ruby ConfWriting DSLs with Parslet - Wicked Good Ruby Conf
Writing DSLs with Parslet - Wicked Good Ruby Conf
 
Headless Js Testing
Headless Js TestingHeadless Js Testing
Headless Js Testing
 
Effecient javascript
Effecient javascriptEffecient javascript
Effecient javascript
 
Gaspard tutorial
Gaspard tutorialGaspard tutorial
Gaspard tutorial
 

Viewers also liked

Ciclo Sup. Mantenimiento de Instalaciones térmicas y de fluidos
Ciclo Sup. Mantenimiento de Instalaciones térmicas y de fluidosCiclo Sup. Mantenimiento de Instalaciones térmicas y de fluidos
Ciclo Sup. Mantenimiento de Instalaciones térmicas y de fluidosTic Eraiken
 
Ecophon - Akusto - FR
Ecophon - Akusto - FREcophon - Akusto - FR
Ecophon - Akusto - FRArchitectura
 
Guia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOCGuia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOCAlejandro Videla
 
Esencia y Estirpe de Bolívar y Sucre
Esencia y Estirpe de Bolívar y SucreEsencia y Estirpe de Bolívar y Sucre
Esencia y Estirpe de Bolívar y Sucreguestf78b1e8
 
Shiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor Roller
Shiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor RollerShiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor Roller
Shiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor RollerIndiaMART InterMESH Limited
 
Prueba
PruebaPrueba
PruebaItsaso
 

Viewers also liked (11)

Ciclo Sup. Mantenimiento de Instalaciones térmicas y de fluidos
Ciclo Sup. Mantenimiento de Instalaciones térmicas y de fluidosCiclo Sup. Mantenimiento de Instalaciones térmicas y de fluidos
Ciclo Sup. Mantenimiento de Instalaciones térmicas y de fluidos
 
Developing Data Analytics Skills in Japan: Status and Challenge
Developing Data Analytics Skills in Japan: Status and ChallengeDeveloping Data Analytics Skills in Japan: Status and Challenge
Developing Data Analytics Skills in Japan: Status and Challenge
 
Presentación estructura
Presentación estructuraPresentación estructura
Presentación estructura
 
Ecophon - Akusto - FR
Ecophon - Akusto - FREcophon - Akusto - FR
Ecophon - Akusto - FR
 
Guia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOCGuia argentina de tratamiento de la EPOC
Guia argentina de tratamiento de la EPOC
 
Esencia y Estirpe de Bolívar y Sucre
Esencia y Estirpe de Bolívar y SucreEsencia y Estirpe de Bolívar y Sucre
Esencia y Estirpe de Bolívar y Sucre
 
Shiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor Roller
Shiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor RollerShiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor Roller
Shiv Dhara Fabricators & Engineering, Ahmedabad, Conveyor Roller
 
Prueba
PruebaPrueba
Prueba
 
Milieu
MilieuMilieu
Milieu
 
Football Dbq
Football DbqFootball Dbq
Football Dbq
 
Ravi Demo
Ravi DemoRavi Demo
Ravi Demo
 

Similar to 4. Метапрограмиране

Building Web Interface On Rails
Building Web Interface On RailsBuilding Web Interface On Rails
Building Web Interface On RailsWen-Tien Chang
 
Secure Coding With Wordpress (BarCamp Orlando 2009)
Secure Coding With Wordpress (BarCamp Orlando 2009)Secure Coding With Wordpress (BarCamp Orlando 2009)
Secure Coding With Wordpress (BarCamp Orlando 2009)Mark Jaquith
 
Rails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity PresentationRails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity Presentationrailsconf
 
Django - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazosDjango - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazosIgor Sobreira
 
Ruby 程式語言簡介
Ruby 程式語言簡介Ruby 程式語言簡介
Ruby 程式語言簡介Wen-Tien Chang
 
Impacta - Show Day de Rails
Impacta - Show Day de RailsImpacta - Show Day de Rails
Impacta - Show Day de RailsFabio Akita
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?brynary
 
And the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack SupportAnd the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack SupportBen Scofield
 
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)Carles Farré
 
Solr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJsSolr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJsWildan Maulana
 
Exploiting Php With Php
Exploiting Php With PhpExploiting Php With Php
Exploiting Php With PhpJeremy Coates
 
Ajax On S2 Odp
Ajax On S2 OdpAjax On S2 Odp
Ajax On S2 Odpghessler
 
Couch Db.0.9.0.Pub
Couch Db.0.9.0.PubCouch Db.0.9.0.Pub
Couch Db.0.9.0.PubYohei Sasaki
 
My First Rails Plugin - Usertext
My First Rails Plugin - UsertextMy First Rails Plugin - Usertext
My First Rails Plugin - Usertextfrankieroberto
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в MagentoMagecom Ukraine
 

Similar to 4. Метапрограмиране (20)

Merb jQuery
Merb jQueryMerb jQuery
Merb jQuery
 
Building Web Interface On Rails
Building Web Interface On RailsBuilding Web Interface On Rails
Building Web Interface On Rails
 
Secure Coding With Wordpress (BarCamp Orlando 2009)
Secure Coding With Wordpress (BarCamp Orlando 2009)Secure Coding With Wordpress (BarCamp Orlando 2009)
Secure Coding With Wordpress (BarCamp Orlando 2009)
 
Rails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity PresentationRails 3 And The Real Secret To High Productivity Presentation
Rails 3 And The Real Secret To High Productivity Presentation
 
Django - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazosDjango - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazos
 
Ruby 程式語言簡介
Ruby 程式語言簡介Ruby 程式語言簡介
Ruby 程式語言簡介
 
Impacta - Show Day de Rails
Impacta - Show Day de RailsImpacta - Show Day de Rails
Impacta - Show Day de Rails
 
What's new in Rails 2?
What's new in Rails 2?What's new in Rails 2?
What's new in Rails 2?
 
And the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack SupportAnd the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack Support
 
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)
 
Solr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJsSolr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJs
 
Ajax
AjaxAjax
Ajax
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Javascript Basic
Javascript BasicJavascript Basic
Javascript Basic
 
Exploiting Php With Php
Exploiting Php With PhpExploiting Php With Php
Exploiting Php With Php
 
Ajax On S2 Odp
Ajax On S2 OdpAjax On S2 Odp
Ajax On S2 Odp
 
Front End on Rails
Front End on RailsFront End on Rails
Front End on Rails
 
Couch Db.0.9.0.Pub
Couch Db.0.9.0.PubCouch Db.0.9.0.Pub
Couch Db.0.9.0.Pub
 
My First Rails Plugin - Usertext
My First Rails Plugin - UsertextMy First Rails Plugin - Usertext
My First Rails Plugin - Usertext
 
Система рендеринга в Magento
Система рендеринга в MagentoСистема рендеринга в Magento
Система рендеринга в Magento
 

More from Stefan Kanev

Как блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалистКак блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалистStefan Kanev
 
Щастливият програмист 2.0
Щастливият програмист 2.0Щастливият програмист 2.0
Щастливият програмист 2.0Stefan Kanev
 
Пак ли този Rails?
Пак ли този Rails?Пак ли този Rails?
Пак ли този Rails?Stefan Kanev
 
The Happy Programmer
The Happy ProgrammerThe Happy Programmer
The Happy ProgrammerStefan Kanev
 
ФМИ Python: Agile & Friends
ФМИ Python: Agile & FriendsФМИ Python: Agile & Friends
ФМИ Python: Agile & FriendsStefan Kanev
 
Behavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и CucumberBehavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и CucumberStefan Kanev
 
Test-Driven Development + Refactoring
Test-Driven Development + RefactoringTest-Driven Development + Refactoring
Test-Driven Development + RefactoringStefan Kanev
 
Защо Ruby on Rails
Защо Ruby on RailsЗащо Ruby on Rails
Защо Ruby on RailsStefan Kanev
 
5. HTTP и приятели
5. HTTP и приятели5. HTTP и приятели
5. HTTP и приятелиStefan Kanev
 
3. Обекти и класове
3. Обекти и класове3. Обекти и класове
3. Обекти и класовеStefan Kanev
 
2. Функционални Закачки
2. Функционални Закачки2. Функционални Закачки
2. Функционални ЗакачкиStefan Kanev
 
1. Въведение в Ruby
1. Въведение в Ruby1. Въведение в Ruby
1. Въведение в RubyStefan Kanev
 
0. За курса, Ruby и Rails
0. За курса, Ruby и Rails0. За курса, Ruby и Rails
0. За курса, Ruby и RailsStefan Kanev
 

More from Stefan Kanev (18)

Ruby 0 2012
Ruby 0 2012Ruby 0 2012
Ruby 0 2012
 
Ruby 0
Ruby 0Ruby 0
Ruby 0
 
Debugging Habits
Debugging HabitsDebugging Habits
Debugging Habits
 
Защо MongoDB?
Защо MongoDB?Защо MongoDB?
Защо MongoDB?
 
Как блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалистКак блогът ми ме направи по-добър професионалист
Как блогът ми ме направи по-добър професионалист
 
Щастливият програмист 2.0
Щастливият програмист 2.0Щастливият програмист 2.0
Щастливият програмист 2.0
 
Пак ли този Rails?
Пак ли този Rails?Пак ли този Rails?
Пак ли този Rails?
 
The Happy Programmer
The Happy ProgrammerThe Happy Programmer
The Happy Programmer
 
ФМИ Python: Agile & Friends
ФМИ Python: Agile & FriendsФМИ Python: Agile & Friends
ФМИ Python: Agile & Friends
 
Behavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и CucumberBehavior-Driven Development с RSpec и Cucumber
Behavior-Driven Development с RSpec и Cucumber
 
Test-Driven Development + Refactoring
Test-Driven Development + RefactoringTest-Driven Development + Refactoring
Test-Driven Development + Refactoring
 
за Ruby
за Rubyза Ruby
за Ruby
 
Защо Ruby on Rails
Защо Ruby on RailsЗащо Ruby on Rails
Защо Ruby on Rails
 
5. HTTP и приятели
5. HTTP и приятели5. HTTP и приятели
5. HTTP и приятели
 
3. Обекти и класове
3. Обекти и класове3. Обекти и класове
3. Обекти и класове
 
2. Функционални Закачки
2. Функционални Закачки2. Функционални Закачки
2. Функционални Закачки
 
1. Въведение в Ruby
1. Въведение в Ruby1. Въведение в Ruby
1. Въведение в Ruby
 
0. За курса, Ruby и Rails
0. За курса, Ruby и Rails0. За курса, Ruby и Rails
0. За курса, Ruby и Rails
 

Recently uploaded

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

4. Метапрограмиране