SlideShare une entreprise Scribd logo
1  sur  96
Télécharger pour lire hors ligne
The

Even-Darker Art
        of

  Rails Engines
@lazyatom
github.com/lazyatom/engines
Rails 2.3
history
November 2005
it’s distracting!
reuse is overrated!
Evil!     Evil!
 Evil!

                                   Evil!

Evil!            Evil!
                                    Evil!

         Evil!           Shit!
eek!
appable_plugins
desert
merb slices?
engines
!quot;#$%&!quot;#$'#(%&$#)&!quot;#$%&*$+,#-.!)
!quot;#$%&'()
$$*%&'()$++,$-'%!.%&'()./0#'12%)/'0
quot;0!

3$405/0quot;6$%1quot;$7-(5/06$8/)9$%0$%77:$!/1quot;;)'1<=
!quot;#$quot;05/0quot;>
$$9%6.%77.!/1quot;;)'1<>
quot;0!

3$?quot;)(106$)1(quot;$/#$)9quot;$quot;05/0quot;$69/76$8/)9$%$1'()/05$#/-quot;
!quot;#$1'()quot;!>
$$@/-quot;=quot;A/6)>B1'()/05.#/-quot;C
quot;0!


!quot;#$D/quot;8.7%)9
$$@/-quot;=E'/0B!/1quot;;)'1<F$G%77GF$GD/quot;86GC
quot;0!
app/controllers/
    models/
    helpers/
    views/
    metal/
*$+,#-&quot;**&23-'!3$$(!&*$+,#-523-'!3$$(!.!)

 ;-%66$H-(5/0I'0)1'--quot;1/0/1**$#2quot;'#3-43-'!3$$(!
 $$!quot;#$/0!quot;A
 $$$$1quot;0!quot;1$J)quot;A)$,K$LMquot;--'F$H-(5/0NL
 $$quot;0!
 quot;0!
9quot;-7quot;1$J%--
won’t load from your plugin
Ticket #1905
config/routes.rb
*$+,#-&23-6#,&!3+'(%.!)



  O;)/'0I'0)1'--quot;1JJ?'()/05JJ?'()quot;6=!1%8$!'$+2%7+

  $$2%7=;'00quot;;)$G:7%)9GF$J;'0)1'--quot;1$,K$L7-(5/0LF$
  $$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!quot;AL

  quot;0!
top precedence
in your plugin:
 O;)/'0I'0)1'--quot;1JJ?'()/05JJ?'()quot;6=!1%8$!'$+2%7+
 $$2%7=;'00quot;;)$G:7%)9GF$J;'0)1'--quot;1$,K$L7-(5/0LF$
 $$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!quot;AL
 quot;0!


in your app:
 O;)/'0I'0)1'--quot;1JJ?'()/05JJ?'()quot;6=!1%8$!'$+2%7+
 $$3$===$')9quot;1$1'()quot;6$===
 $$2%7=;'00quot;;)$G:7%)9GF$J;'0)1'--quot;1$,K$L%77LF$
 $$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!quot;AL
 $$3$===$')9quot;1$1'()quot;6$===
 quot;0!
in your plugin:
 O;)/'0I'0)1'--quot;1JJ?'()/05JJ?'()quot;6=!1%8$!'$+2%7+
 $$2%7=;'00quot;;)$G:7%)9GF$J;'0)1'--quot;1$,K$L7-(5/0LF$
 $$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!quot;AL
 quot;0!


in your app:
 O;)/'0I'0)1'--quot;1JJ?'()/05JJ?'()quot;6=!1%8$!'$+2%7+
 $$3$===$')9quot;1$1'()quot;6$===
 $$2%7=;'00quot;;)$G:7%)9GF$J;'0)1'--quot;1$,K$L%77LF$
 $$$$$$$$$$$$$$$$$$$$$$$J%;)/'0$,K$L/0!quot;AL
 $$3$===$')9quot;1$1'()quot;6$===
 quot;0!
Ticket #2592
(also Ticket #329)
785*$+,#-&$#)&785*$+,#-.!)
2'!(-quot;$P<H-(5/0
$$!quot;#$6quot;-#=%!!.1'()quot;6B7quot;*C
$$$$2%7=;'00quot;;)$L:6)(##LF$J;'0)1'--quot;1$,K$L)9/056L
$$quot;0!
quot;0!

O;)/'0I'0)1'--quot;1JJ?'()/05JJ?'()quot;6=!1%8$!'$+2%7+
$$3$<'(1$%77$1'()quot;6===

$$P<H-(5/0=%!!.1'()quot;6B2%7C

$$3$quot;);===
quot;0!
what’s missing?
public assets
copy
file clash
83+!5*$+,#-&#-%'quot;$$.!)

2<./2%5quot;6$,$H%)90%2quot;=0quot;8B@/-quot;=!/10%2quot;B..@QR4..CC$S$
$$$$$$$$$$$$$$L%66quot;)6:/2%5quot;6L
)%15quot;)$,$?%/-6=1'')$S$L7(&-/;:/2%5quot;6:2<.7-(5/0L

@/-quot;T)/-6=2U!/1.7B)%15quot;)C

2<./2%5quot;6=;9/-!1quot;0=quot;%;9$!'$+quot;+$
$$$$@/-quot;T)/-6=;7.1Bquot;F$)%15quot;)$S$quot;=&%6quot;0%2quot;C$
quot;0!
83+!5*$+,#-&#-%'quot;$$.!)

2<./2%5quot;6$,$H%)90%2quot;=0quot;8B@/-quot;=!/10%2quot;B..@QR4..CC$S$
$$$$$$$$$$$$$$L%66quot;)6:/2%5quot;6L
)%15quot;)$,$?%/-6=1'')$S$L7(&-/;:/2%5quot;6:2<.7-(5/0L

)%15quot;)=2%Uquot;.6<2-/0UB2<./2%5quot;6C$(0-quot;66$)%15quot;)=quot;A/6)>
migrations
simple DSL
rollback
version       !&:2/51%)quot;:
                 $$VWWXWYWYYVYVZ[.%-79%=1&
20090101121234     VWWXWYWVY[VZ[.&quot;)%=1&

20090102142345
                 7-(5/0:!&:2/51%)quot;:
2008123123456    $$VWW]YVZYZ[^.5%22%=1&
version       1%Uquot;$!&J1'--&%;U
                  P/51%)'1=1'--&%;U
20090101121234
                  P/51%)'13;(11quot;0).Dquot;16/'0
20090102142345
                  P/51%)'132/51%)quot;!=-%6)
2008123123456     P/51%)'1=5quot;).%--.Dquot;16/'06

                 BL_4R4I`$Dquot;16/'0$@?aP$$
                 $$6;9quot;2%.2/51%)/'06LC
                 =2%7BbJ)'./C=6'1)
it gets worse
version   !&:2/51%)quot;:
          $$WWY.%-79%=1&
 001        WWV.&quot;)%=1&

 002
          7-(5/0:!&:2/51%)quot;:
          $$WWY.5%22%=1&
http://www.flickr.com/photos/bk2204/475332962/
single timeline
You                             1
                               tio n
                        ig  ra           tio n1
                  app
                      m
                                 mi gra
                         lug in              tio n2
                       p               i gra               3
Me                              pp
                                    m              at ion
                               a               igr
        nst all                      ap  pm              ig ra
       i                                            nm
                                            plu  gi

                         ra de
                    u pg
tio n1
You           i gra              n1
            m                tio
      app              mi gra
                 gin                 tio n2
             plu                   ra
                         pm
                                ig
                                              tio n3
                       ap               ig ra               n2
                                   pm                   tio
                                ap                mi gra
                                        plu gin
!&:2/51%)quot;:
$$WWY.%-79%=1&
  WWV.&quot;)%=1&
  WWZ.7-(5/0.)'.WWY=1&
  WW[.!quot;-)%=1&


7-(5/0:!&:2/51%)quot;:
$$WWY.5%22%=1&
Symlink?
 !&:2/51%)quot;:
 $$WWY.%-79%=1&
   WWV.&quot;)%=1&
Reference?
   WWZ.7-(5/0.)'.WWY=1&
   WW[.!quot;-)%=1&


 7-(5/0:!&:2/51%)quot;:
                    Copy &
              Retimestamp?
 $$WWY.5%22%=1&
Ticket #2058
interblah.net/plugin-migrations
my recommendation?
   (for the moment, at least)
write a generator
              (within your plugin)



c$6;1/7):5quot;0quot;1%)quot;$%;)6.%6.#(.2/51%)/'06
$$$$
$$$quot;A/6)6$$!&:2/51%)quot;
$$$;1quot;%)quot;$$!&:2/51%)quot;:VWWXWWYYYZZd.&-%9=1&

c$===
techniques
overriding functionality
views just work
controllers
straight override
module
namespaced
playing nice with the
     class cache
1/23*8/36/1**$#2quot;'#3-43-'!3$$(!/

                            <
'!((/)+'/#%/%'#$$/quot;2'#:(<< < <
                          <<  !
9quot;%/)((-/!(73:(;/6!37/'9(/73;+$(/
                             <
O;)/Dquot;_(77'1)JJequot;7quot;0!quot;0;/quot;6=-'%!.'0;quot;.7%)96
ApplicationController




AppController                 PluginController
ApplicationController




                  PluginController
23-6#,&(-:#!3-7(-'.!)


 ?%/-6JJQ0/)/%-/fquot;1=1(0$!'$+;'0#/5+
 $$3$quot;);===

 $$;'0#/5=1quot;-'%!.7-(5/06$,$)1(quot;
 $$
 quot;0!
83+!5*$+,#-&quot;**&23-'!3$$(!%&,33;523-'!3$$(!.!)



  ;-%66$g''!I'0)1'--quot;1$h$===
  $$(0-'%!%&-quot;
  $$
  $$3$quot;);$===

  quot;0!
init.rb woes
785*$+,#-&#-#'.!)



;'0#/5=)'.71quot;7%1quot;$!'

$$_'2quot;O77I-%66=quot;A)quot;0!BP<iquot;9%D/'(1C
$$
quot;0!
testing
ApplicationController




AppController                 PluginController
ApplicationController



                           ir C ode
                        The

                         Your Code




                  PluginController
quot;
    $
    !
#
unit test?
test in your own rails
    environment?
plugin_test_helper
I care about testing
     my chunk
You care about testing
   your whole app
empower the
 developer
avoiding fail
;%6quot;$;'!quot;=;'06(2quot;1

$$89quot;0$;'!quot;=%()9'1
$$$$1quot;(6quot;=2'6)-<$,j$:quot;##quot;;)/Dquot;:

$$89quot;0$1%0!B!quot;Dquot;-'7quot;1C
$$$$1quot;(6quot;=)1/;U/quot;1.&().7'66/&-quot;B)1(quot;C

$$quot;-6quot;
$$$$1quot;(6quot;='Dquot;11%)quot;!N

quot;0!
consume wisely
Nutrition Facts
Serving Size 14 kloc
Amount Per Serving 1 bad engine
Calories 10,666
                    % Daily Value*
Total Fat 2674g        98%
 Long Methods 1578g    34%
 God Objects 326g       7%
Stress 320mg         119%
Hairloss 45g         45.8%
Technical Debt 13g     87%
 Untested Code 1578mg 34%
 Hidden Bugs 326mg      7%
Benefit 1mg           0.1%
you will not be able to
 write some engines.
you will not be able to
  use some engines.
extract
specific functionality
establish some
clear integration points
you are customer #1
READ the CODE
james@lazyatom.com




  FIN
lets@gofreerange.com

Contenu connexe

Tendances

Connectix webserver
Connectix webserverConnectix webserver
Connectix webserver
steveheer
 
Draft final strategi nasional redd+
Draft final strategi nasional redd+Draft final strategi nasional redd+
Draft final strategi nasional redd+
earlpaulodiaz
 
ஆழ்கடலில் ஒரு கோபுரம்
ஆழ்கடலில் ஒரு கோபுரம்ஆழ்கடலில் ஒரு கோபுரம்
ஆழ்கடலில் ஒரு கோபுரம்
Ilyas Qadri Ziaee
 
三星上將梨
三星上將梨三星上將梨
三星上將梨
Jaing Lai
 

Tendances (19)

Connectix webserver
Connectix webserverConnectix webserver
Connectix webserver
 
Taureau Ailé
Taureau AiléTaureau Ailé
Taureau Ailé
 
Layouts
LayoutsLayouts
Layouts
 
用設計看世界
用設計看世界用設計看世界
用設計看世界
 
Isd 1420
Isd 1420Isd 1420
Isd 1420
 
Peace through understanding Islam || Mawlana Feizel Chothia || Australian Isl...
Peace through understanding Islam || Mawlana Feizel Chothia || Australian Isl...Peace through understanding Islam || Mawlana Feizel Chothia || Australian Isl...
Peace through understanding Islam || Mawlana Feizel Chothia || Australian Isl...
 
Fatwa arkanul islam_qa
Fatwa arkanul islam_qaFatwa arkanul islam_qa
Fatwa arkanul islam_qa
 
Hamdeli 2
Hamdeli 2Hamdeli 2
Hamdeli 2
 
NTA UGC NET JRF - 24 punjabi-new updated syllabus
NTA UGC NET JRF - 24 punjabi-new updated syllabusNTA UGC NET JRF - 24 punjabi-new updated syllabus
NTA UGC NET JRF - 24 punjabi-new updated syllabus
 
Draft final strategi nasional redd+
Draft final strategi nasional redd+Draft final strategi nasional redd+
Draft final strategi nasional redd+
 
Brand
BrandBrand
Brand
 
Manual marketing
Manual marketingManual marketing
Manual marketing
 
Calculo de volumenes para movimientos de tierra
Calculo de volumenes para movimientos de tierraCalculo de volumenes para movimientos de tierra
Calculo de volumenes para movimientos de tierra
 
ஆழ்கடலில் ஒரு கோபுரம்
ஆழ்கடலில் ஒரு கோபுரம்ஆழ்கடலில் ஒரு கோபுரம்
ஆழ்கடலில் ஒரு கோபுரம்
 
Plans Book: KU School of Journalism
Plans Book: KU School of JournalismPlans Book: KU School of Journalism
Plans Book: KU School of Journalism
 
Notes hadeeth
Notes hadeethNotes hadeeth
Notes hadeeth
 
De l'ADN à la protéine
De l'ADN à la protéineDe l'ADN à la protéine
De l'ADN à la protéine
 
Fichas para trabajar con euros y centimos
Fichas para trabajar con euros y centimosFichas para trabajar con euros y centimos
Fichas para trabajar con euros y centimos
 
三星上將梨
三星上將梨三星上將梨
三星上將梨
 

En vedette

Learning to Make Your Own Reality - IGDA Education Keynote 2009
Learning to Make Your Own Reality  - IGDA Education Keynote 2009Learning to Make Your Own Reality  - IGDA Education Keynote 2009
Learning to Make Your Own Reality - IGDA Education Keynote 2009
Jane McGonigal
 
Coordenadas 34 cópias frente e verso
Coordenadas   34 cópias frente e versoCoordenadas   34 cópias frente e verso
Coordenadas 34 cópias frente e verso
Otávio Sales
 
Microcontroladores6 8[1]
Microcontroladores6 8[1]Microcontroladores6 8[1]
Microcontroladores6 8[1]
Jose Fortes
 
Excellent Testcase
Excellent TestcaseExcellent Testcase
Excellent Testcase
guestf1dc2d
 
Beat Communication (SNS for Human Resources / Recruitment)
Beat Communication (SNS for Human Resources / Recruitment)Beat Communication (SNS for Human Resources / Recruitment)
Beat Communication (SNS for Human Resources / Recruitment)
Beat Communication
 
Caresse Sur Locean
Caresse Sur LoceanCaresse Sur Locean
Caresse Sur Locean
montcubi
 

En vedette (20)

Infinispan, a distributed in-memory key/value data grid and cache
 Infinispan, a distributed in-memory key/value data grid and cache Infinispan, a distributed in-memory key/value data grid and cache
Infinispan, a distributed in-memory key/value data grid and cache
 
Store management
Store managementStore management
Store management
 
Ssssss
SsssssSsssss
Ssssss
 
Résultats enquête portrait chambres d'hôtes et gites 2015 - Copyright "Guest ...
Résultats enquête portrait chambres d'hôtes et gites 2015 - Copyright "Guest ...Résultats enquête portrait chambres d'hôtes et gites 2015 - Copyright "Guest ...
Résultats enquête portrait chambres d'hôtes et gites 2015 - Copyright "Guest ...
 
Learning to Make Your Own Reality - IGDA Education Keynote 2009
Learning to Make Your Own Reality  - IGDA Education Keynote 2009Learning to Make Your Own Reality  - IGDA Education Keynote 2009
Learning to Make Your Own Reality - IGDA Education Keynote 2009
 
L4
L4L4
L4
 
ASFWS 11 - Nos partenaires et sponsors
ASFWS 11 - Nos partenaires et sponsorsASFWS 11 - Nos partenaires et sponsors
ASFWS 11 - Nos partenaires et sponsors
 
Lk math pokok
Lk math pokokLk math pokok
Lk math pokok
 
le manuel de Samsung K5 lecteur mp3!
le manuel de Samsung K5 lecteur mp3!le manuel de Samsung K5 lecteur mp3!
le manuel de Samsung K5 lecteur mp3!
 
Coordenadas 34 cópias frente e verso
Coordenadas   34 cópias frente e versoCoordenadas   34 cópias frente e verso
Coordenadas 34 cópias frente e verso
 
Microcontroladores6 8[1]
Microcontroladores6 8[1]Microcontroladores6 8[1]
Microcontroladores6 8[1]
 
Billie Jean
Billie JeanBillie Jean
Billie Jean
 
Excellent Testcase
Excellent TestcaseExcellent Testcase
Excellent Testcase
 
Beat Communication (SNS for Human Resources / Recruitment)
Beat Communication (SNS for Human Resources / Recruitment)Beat Communication (SNS for Human Resources / Recruitment)
Beat Communication (SNS for Human Resources / Recruitment)
 
Caresse Sur Locean
Caresse Sur LoceanCaresse Sur Locean
Caresse Sur Locean
 
Solvant écologique pour pressing et blanchisseries professionnelles System k4...
Solvant écologique pour pressing et blanchisseries professionnelles System k4...Solvant écologique pour pressing et blanchisseries professionnelles System k4...
Solvant écologique pour pressing et blanchisseries professionnelles System k4...
 
Dromedary
DromedaryDromedary
Dromedary
 
Gatlinburg Tourism Summit
Gatlinburg Tourism SummitGatlinburg Tourism Summit
Gatlinburg Tourism Summit
 
Marketing Online 2009 L4logistics
Marketing Online 2009 L4logisticsMarketing Online 2009 L4logistics
Marketing Online 2009 L4logistics
 
ACTIVIDAD 3 CONTESTADA
ACTIVIDAD 3 CONTESTADAACTIVIDAD 3 CONTESTADA
ACTIVIDAD 3 CONTESTADA
 

Similaire à The Even Darker Art Of Rails Engines

The Even Darker Art Of Rails Engines Presentation
The Even Darker Art Of Rails Engines PresentationThe Even Darker Art Of Rails Engines Presentation
The Even Darker Art Of Rails Engines Presentation
railsconf
 
Plastic Bags
Plastic BagsPlastic Bags
Plastic Bags
tjokke
 
Moss Jacosbon Ems Pla 182 Final Submission 12 15 08
Moss Jacosbon   Ems Pla 182 Final Submission 12 15 08Moss Jacosbon   Ems Pla 182 Final Submission 12 15 08
Moss Jacosbon Ems Pla 182 Final Submission 12 15 08
mossbmw
 
MUDD Assignment 1_Generic Report Final
MUDD Assignment 1_Generic Report FinalMUDD Assignment 1_Generic Report Final
MUDD Assignment 1_Generic Report Final
evelynkinwah
 
841charity
841charity841charity
841charity
spmath
 
open innovation
open innovationopen innovation
open innovation
Anto Recio
 
Wikimedia Foundation: Annual Plan 2008-2009
Wikimedia Foundation: Annual Plan 2008-2009Wikimedia Foundation: Annual Plan 2008-2009
Wikimedia Foundation: Annual Plan 2008-2009
guestc4425
 

Similaire à The Even Darker Art Of Rails Engines (20)

The Even Darker Art Of Rails Engines Presentation
The Even Darker Art Of Rails Engines PresentationThe Even Darker Art Of Rails Engines Presentation
The Even Darker Art Of Rails Engines Presentation
 
ESWC 2009 Lightning Talks
ESWC 2009 Lightning TalksESWC 2009 Lightning Talks
ESWC 2009 Lightning Talks
 
Vietnam Online Travel Behaviors
Vietnam Online Travel BehaviorsVietnam Online Travel Behaviors
Vietnam Online Travel Behaviors
 
2 Graph Theory
2 Graph Theory2 Graph Theory
2 Graph Theory
 
Plastic Bags
Plastic BagsPlastic Bags
Plastic Bags
 
OpenSSO Microsoft Interop
OpenSSO Microsoft InteropOpenSSO Microsoft Interop
OpenSSO Microsoft Interop
 
Informe skoool
Informe skooolInforme skoool
Informe skoool
 
Moss Jacosbon Ems Pla 182 Final Submission 12 15 08
Moss Jacosbon   Ems Pla 182 Final Submission 12 15 08Moss Jacosbon   Ems Pla 182 Final Submission 12 15 08
Moss Jacosbon Ems Pla 182 Final Submission 12 15 08
 
MUDD Assignment 1_Generic Report Final
MUDD Assignment 1_Generic Report FinalMUDD Assignment 1_Generic Report Final
MUDD Assignment 1_Generic Report Final
 
Matematica_Basica_Vol_1 (2).pdf
Matematica_Basica_Vol_1 (2).pdfMatematica_Basica_Vol_1 (2).pdf
Matematica_Basica_Vol_1 (2).pdf
 
Cifrado en Flujo y Bloque con Clave Secreta
Cifrado en Flujo y Bloque con Clave SecretaCifrado en Flujo y Bloque con Clave Secreta
Cifrado en Flujo y Bloque con Clave Secreta
 
841charity
841charity841charity
841charity
 
Gestão do conhecimento - Faculdade Shalom
Gestão do conhecimento - Faculdade ShalomGestão do conhecimento - Faculdade Shalom
Gestão do conhecimento - Faculdade Shalom
 
Entrepreneurs Request
Entrepreneurs RequestEntrepreneurs Request
Entrepreneurs Request
 
open innovation
open innovationopen innovation
open innovation
 
Wikimedia Foundation: Annual Plan 2008-2009
Wikimedia Foundation: Annual Plan 2008-2009Wikimedia Foundation: Annual Plan 2008-2009
Wikimedia Foundation: Annual Plan 2008-2009
 
Working in the UnOffice: A Guide to Coworking for Indie Workers, Small Busine...
Working in the UnOffice: A Guide to Coworking for Indie Workers, Small Busine...Working in the UnOffice: A Guide to Coworking for Indie Workers, Small Busine...
Working in the UnOffice: A Guide to Coworking for Indie Workers, Small Busine...
 
GCEMED2012 Rassegna stampa web
GCEMED2012 Rassegna stampa webGCEMED2012 Rassegna stampa web
GCEMED2012 Rassegna stampa web
 
this work took many years as this case was much suppressed by british-The sui...
this work took many years as this case was much suppressed by british-The sui...this work took many years as this case was much suppressed by british-The sui...
this work took many years as this case was much suppressed by british-The sui...
 
Arduino the Object Way.pdf
Arduino the Object Way.pdfArduino the Object Way.pdf
Arduino the Object Way.pdf
 

Plus de lazyatom

Plus de lazyatom (7)

Extending Rails with Plugins (2007)
Extending Rails with Plugins (2007)Extending Rails with Plugins (2007)
Extending Rails with Plugins (2007)
 
Engines: Team Development on Rails (2005)
Engines: Team Development on Rails (2005)Engines: Team Development on Rails (2005)
Engines: Team Development on Rails (2005)
 
The Even Darker Art of Rails Engines (2009)
The Even Darker Art of Rails Engines (2009)The Even Darker Art of Rails Engines (2009)
The Even Darker Art of Rails Engines (2009)
 
The Dark Art of Rails Plugins (2008)
The Dark Art of Rails Plugins (2008)The Dark Art of Rails Plugins (2008)
The Dark Art of Rails Plugins (2008)
 
Gem That (2009)
Gem That (2009)Gem That (2009)
Gem That (2009)
 
Do we need more test frameworks? (2011)
Do we need more test frameworks? (2011)Do we need more test frameworks? (2011)
Do we need more test frameworks? (2011)
 
IoT Printer (2012)
IoT Printer (2012)IoT Printer (2012)
IoT Printer (2012)
 

Dernier

Dernier (20)

GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
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
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
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
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
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...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
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
 

The Even Darker Art Of Rails Engines