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

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I 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
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
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
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 

Recently uploaded (20)

Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I 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
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 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
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 

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