SlideShare a Scribd company logo
1 of 148
Itch Scratching
 the ActionMailer
        API
A brief foray into the mind of a masochist!
whoami?
whoami?
Working in Rails & Ruby for 4+ Years
whoami?
Working in Rails & Ruby for 4+ Years

Maintainer of TMail & Author of Mail
whoami?
Working in Rails & Ruby for 4+ Years

Maintainer of TMail & Author of Mail

    DBA and Internet Plumber
whoami?
Working in Rails & Ruby for 4+ Years

Maintainer of TMail & Author of Mail

    DBA and Internet Plumber

         Rails Contributor
whoami?
Working in Rails & Ruby for 4+ Years

Maintainer of TMail & Author of Mail

    DBA and Internet Plumber

         Rails Contributor

           Entrepreneur
y?
y?
Mail Application
y?
Mail Application

   Challenge
y?
Mail Application

   Challenge

     TMail
OMGLOLSPAM
OMGLOLSPAM
“TMail was a great SPAM checker...
if it crashed while parsing an email
  then you knew it was SPAM.”
               - Koz
Why not just fix TMail?
Why not just fix TMail?
 Released 10 patch and minor versions
Why not just fix TMail?
 Released 10 patch and minor versions

    I wrote over 600 lines of Docs
Why not just fix TMail?
 Released 10 patch and minor versions

    I wrote over 600 lines of Docs

      Built on a Strategy Pattern
Why not just fix TMail?
 Released 10 patch and minor versions

    I wrote over 600 lines of Docs

      Built on a Strategy Pattern

         Parser Written in C
Why not just fix TMail?
 Released 10 patch and minor versions

    I wrote over 600 lines of Docs

      Built on a Strategy Pattern

         Parser Written in C

        HARD TO FOLLOW
Why not just fix TMail?
Why not just fix TMail?
TMail was not very modular and hard to maintain
Why not just fix TMail?
TMail was not very modular and hard to maintain

        Wanted to write a major library
Why not just fix TMail?
TMail was not very modular and hard to maintain

        Wanted to write a major library

           How hard could email be?
Why not just fix TMail?
TMail was not very modular and hard to maintain

        Wanted to write a major library

           How hard could email be?

              I wanted a nice DSL
Why not just fix TMail?
TMail was not very modular and hard to maintain

        Wanted to write a major library

           How hard could email be?

              I wanted a nice DSL

                  Not as fun
Mail’s DSL is Simple
Mail’s DSL is Simple
Mail’s DSL is Simple
Mail’s DSL is Simple
Mail’s DSL is Simple
Mail’s DSL is Simple
Mail’s DSL is Simple
Mail’s DSL is Simple
How Hard Could It Be?
How Hard Could It Be?
        Read RFCs
How Hard Could It Be?
        Read RFCs

      Read more RFCs
How Hard Could It Be?
         Read RFCs

      Read more RFCs

     Keep reading RFCs...
How Hard Could It Be?
                 Read RFCs

              Read more RFCs

            Keep reading RFCs...

“email is defined in RFCs, so should be easy...”
RFCs
RFCs
RSpec FTW!
RSpec FTW!
I use RSpec because I am lazy
RSpec FTW!
I use RSpec because I am lazy

EVERYTHING in Mail is BDD
RSpec FTW!
I use RSpec because I am lazy

EVERYTHING in Mail is BDD

    Regressions Caught
RSpec FTW!
I use RSpec because I am lazy

EVERYTHING in Mail is BDD

    Regressions Caught

          Seriously
Spec’ing for Libraries
Spec’ing for Libraries
       Start Simple
Spec’ing for Libraries
           Start Simple

  Comments in Spec Files are OK
Spec’ing for Libraries
           Start Simple

  Comments in Spec Files are OK

      Use Custom Matchers
Spec’ing for Libraries
           Start Simple

  Comments in Spec Files are OK

      Use Custom Matchers

   Break Down Your Spec Files
Spec’ing for Libraries
           Start Simple

  Comments in Spec Files are OK

      Use Custom Matchers

   Break Down Your Spec Files

      Spec in Multiple Rubies
Start Somewhere
Start Somewhere
Start Somewhere
Start Somewhere
Comments are OK
Comments are OK
Use Custom Matchers
       when appropriate
Use Custom Matchers
       when appropriate
Use Custom Matchers
       when appropriate
Use Custom Matchers
       when appropriate
Custom Matchers
Custom Matchers
Break Down Spec Files
Break Down Spec Files
Break Down Spec Files
          26 Sub Directories
Break Down Spec Files
          26 Sub Directories

          79 Ruby Spec Files
Break Down Spec Files
          26 Sub Directories

          79 Ruby Spec Files

          73 Edge Case Emails
Break Down Spec Files
          26 Sub Directories

          79 Ruby Spec Files

          73 Edge Case Emails

          Many Many Lines of Specs
Break Down Spec Files
          26 Sub Directories

          79 Ruby Spec Files

          73 Edge Case Emails

          Many Many Lines of Specs

          1161 examples
Break Down Spec Files
          26 Sub Directories

          79 Ruby Spec Files

          73 Edge Case Emails

          Many Many Lines of Specs

          1161 examples

          No Failures :)
Spec in Multiple Rubies
Spec in Multiple Rubies
   Have to be a good Ruby Citizen
Spec in Multiple Rubies
   Have to be a good Ruby Citizen

               JRuby
Spec in Multiple Rubies
   Have to be a good Ruby Citizen

               JRuby

                REE
Spec in Multiple Rubies
   Have to be a good Ruby Citizen

               JRuby

                REE

              Rubinius
                (almost)
Spec in Multiple Rubies
   Have to be a good Ruby Citizen

                JRuby

                 REE

               Rubinius
                  (almost)



    MRI - 1.8.6, 1.8.7, 1.9.1, 1.9.2
But What About Real Life?
But What About Real Life?
  Mail parses the Enron and Trec Data Sets
But What About Real Life?
  Mail parses the Enron and Trec Data Sets
              mikel@baci ~/Code
               $ du -hs corpus/


            2.4G    of Emails
But What About Real Life?
  Mail parses the Enron and Trec Data Sets
               mikel@baci ~/Code
                $ du -hs corpus/


             2.4G     of Emails

                mikel@baci ~/Code
      $ find corpus -name "*" -print | wc -l


               328,248 Emails
show me the model!
show me the model!
Mail
show me the model!
Mail   Message
show me the model!
Mail   Message   Header
show me the model!
Mail   Message   Header




                 Body
show me the model!
show me the model!
Message   Body
show me the model!
Message            Body




          Header
show me the model!
Message            Body




          Header          FieldList
show me the model!
Message            Body




          Header          FieldList   Fields
show me the model!
Message            Body




          Header          FieldList                          Fields




                                  StructuredField

                                      Content-Type
                               Content-Transfer-Encoding
                               To, From, Cc, Bcc, Reply-To
show me the model!
Message            Body




          Header          FieldList                          Fields




                                  StructuredField                      UnstructuredField

                                      Content-Type                            Subject
                               Content-Transfer-Encoding                  X-Headers et al
                               To, From, Cc, Bcc, Reply-To            Any other unparsable field
show me the model!
show me the model!
Message   Header
show me the model!
Message          Header




          Body
show me the model!
Message          Header



                          Preamble



          Body
show me the model!
Message          Header



                          Preamble


                           One or
          Body
                          Many Parts
show me the model!
Message          Header



                          Preamble


                           One or
          Body
                          Many Parts


                           Epilogue
show me the model!
Message          Header



                          Preamble


                           One or
          Body                           Message
                          Many Parts

                                       Ohhh... O.O.
                                        Recursive
                           Epilogue
                                        Type Stuff
show me the model!
show me the model!
      And Thats It!
show me the model!
      And Thats It!

      Simple Hey?
show me the model!
   Header Errors                             Legacy Emails
      Parsers     rfc822      Delivery Agents
                       And Thats It!           SMTP
   Body Decoding
          SPAM       PGP Signing       POP3 File Types
    Mbox               Simple Hey?              Network
               IMAP           Language Support
Sendmail Delivery Bad Emails              Encoding
                             Edge Cases
  Pattern Matching
                    OMGMIME! Decoding Attachments
     Interceptors
                         File IO    Domain Key Emails
       Observers                  Status Reports
          Inline Attachments
OK, ActionMailer?
OK, ActionMailer?
   Much Easier to Use
OK, ActionMailer?
    Much Easier to Use

  Nicer Defaults & Config
OK, ActionMailer?
          Much Easier to Use

        Nicer Defaults & Config

ActionMailer Methods Return Mail Object
OK, ActionMailer?
          Much Easier to Use

        Nicer Defaults & Config

ActionMailer Methods Return Mail Object

   Deprecated (not Decapitated) API
OK, ActionMailer?
          Much Easier to Use

        Nicer Defaults & Config

ActionMailer Methods Return Mail Object

   Deprecated (not Decapitated) API

               Tutorials
Much Easier to Use
Much Easier to Use
   New Mailer Directory
Much Easier to Use
        New Mailer Directory

Can Call “mail” method and pass a hash
Nicer Defaults
Nicer Defaults
Nicer Config
Nicer Config
AM Returns Mail
AM Returns Mail
AM Returns Mail
Mail Call Back Hooks
Mail Call Back Hooks
Mail Call Back Hooks
Mail Call Back Hooks
Mail Call Back Hooks
Mail Call Back Hooks
Deprecated API
   Decapitation Free Zone
Deprecated API
      Decapitation Free Zone



 Did not nuke the old API
Deprecated API
             Decapitation Free Zone



       Did not nuke the old API

New API triggers ONLY if you call “mail”
Deprecated API
             Decapitation Free Zone



       Did not nuke the old API

New API triggers ONLY if you call “mail”

    Old API in place if no “mail” call
Deprecated API
             Decapitation Free Zone



       Did not nuke the old API

New API triggers ONLY if you call “mail”

    Old API in place if no “mail” call

        Will be Removed in 3.1
Deprecated API
   Decapitation Free Zone
Deprecated API
   Decapitation Free Zone
Deprecated API
   Decapitation Free Zone
HELP!!!
HELP!!!
Replace treetop with Ragel or RACC
HELP!!!
 Replace treetop with Ragel or RACC

Implement full POP3 and IMAP Support
HELP!!!
 Replace treetop with Ragel or RACC

Implement full POP3 and IMAP Support

     Domain Key Implementation
HELP!!!
 Replace treetop with Ragel or RACC

Implement full POP3 and IMAP Support

     Domain Key Implementation

            PGP Signing
HELP!!!
 Replace treetop with Ragel or RACC

Implement full POP3 and IMAP Support

     Domain Key Implementation

            PGP Signing

        More Documentation
Tutorials
Tutorials
 lindsaar.net
Tutorials
     lindsaar.net

www.RailsDispatch.com
Tutorials
     lindsaar.net

www.RailsDispatch.com

 www.RailsCasts.com
KTHXBAI
  Questions?

   @raasdnil

mikel@rubyx.com

   lindsaar.net
Itch Scratching

More Related Content

Similar to Itch Scratching

Spark NLP: State of the Art Natural Language Processing at Scale
Spark NLP: State of the Art Natural Language Processing at ScaleSpark NLP: State of the Art Natural Language Processing at Scale
Spark NLP: State of the Art Natural Language Processing at ScaleDatabricks
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)Wooga
 
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015Chef
 
Scaling search to a million pages with Solr, Python, and Django
Scaling search to a million pages with Solr, Python, and DjangoScaling search to a million pages with Solr, Python, and Django
Scaling search to a million pages with Solr, Python, and Djangotow21
 
Write your Ruby in Style
Write your Ruby in StyleWrite your Ruby in Style
Write your Ruby in StyleBhavin Javia
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivationjistr
 
RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013
RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013
RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013CA API Management
 
2010 08-06 - sd ruby - solr
2010 08-06 - sd ruby - solr2010 08-06 - sd ruby - solr
2010 08-06 - sd ruby - solrNick Zadrozny
 
Solr Powr — Enterprise-grade search for your app
Solr Powr — Enterprise-grade search for your appSolr Powr — Enterprise-grade search for your app
Solr Powr — Enterprise-grade search for your appNick Zadrozny
 
Querying rich text with XQuery
Querying rich text with XQueryQuerying rich text with XQuery
Querying rich text with XQuerylucenerevolution
 
Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex Espen Brækken
 
Enlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & ToolkitEnlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & ToolkitSamsung Open Source Group
 
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukQ con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukRoger Xia
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИPavel Tsukanov
 
Le PERL est mort
Le PERL est mortLe PERL est mort
Le PERL est mortapeiron
 
Aspose.Network Brochure
Aspose.Network BrochureAspose.Network Brochure
Aspose.Network BrochureShahzad Latif
 
Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008Brian Sam-Bodden
 
Moving from Relational to Document Store
Moving from Relational to Document StoreMoving from Relational to Document Store
Moving from Relational to Document StoreGraham Tackley
 
Rails Vs CakePHP
Rails Vs CakePHPRails Vs CakePHP
Rails Vs CakePHPGautam Rege
 

Similar to Itch Scratching (20)

Spark NLP: State of the Art Natural Language Processing at Scale
Spark NLP: State of the Art Natural Language Processing at ScaleSpark NLP: State of the Art Natural Language Processing at Scale
Spark NLP: State of the Art Natural Language Processing at Scale
 
Intro to EmberJS
Intro to EmberJSIntro to EmberJS
Intro to EmberJS
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)
 
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
Your Goat Antifragiled My Snowflake!: Demystifying DevOps Jargon - ChefConf 2015
 
Scaling search to a million pages with Solr, Python, and Django
Scaling search to a million pages with Solr, Python, and DjangoScaling search to a million pages with Solr, Python, and Django
Scaling search to a million pages with Solr, Python, and Django
 
Write your Ruby in Style
Write your Ruby in StyleWrite your Ruby in Style
Write your Ruby in Style
 
Ruby and Rails short motivation
Ruby and Rails short motivationRuby and Rails short motivation
Ruby and Rails short motivation
 
RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013
RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013
RESTing in the ALPS Mike Amundsen's Presentation from QCon London 2013
 
2010 08-06 - sd ruby - solr
2010 08-06 - sd ruby - solr2010 08-06 - sd ruby - solr
2010 08-06 - sd ruby - solr
 
Solr Powr — Enterprise-grade search for your app
Solr Powr — Enterprise-grade search for your appSolr Powr — Enterprise-grade search for your app
Solr Powr — Enterprise-grade search for your app
 
Querying rich text with XQuery
Querying rich text with XQueryQuerying rich text with XQuery
Querying rich text with XQuery
 
Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex Ruby on Rails (RoR) as a back-end processor for Apex
Ruby on Rails (RoR) as a back-end processor for Apex
 
Enlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & ToolkitEnlightenment: A Cross Platform Window Manager & Toolkit
Enlightenment: A Cross Platform Window Manager & Toolkit
 
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukQ con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
 
Le PERL est mort
Le PERL est mortLe PERL est mort
Le PERL est mort
 
Aspose.Network Brochure
Aspose.Network BrochureAspose.Network Brochure
Aspose.Network Brochure
 
Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008Ruby Metaprogramming - OSCON 2008
Ruby Metaprogramming - OSCON 2008
 
Moving from Relational to Document Store
Moving from Relational to Document StoreMoving from Relational to Document Store
Moving from Relational to Document Store
 
Rails Vs CakePHP
Rails Vs CakePHPRails Vs CakePHP
Rails Vs CakePHP
 

Recently uploaded

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
 
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
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
🐬 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
 
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
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
#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
 
[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.pdfhans926745
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Recently uploaded (20)

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
 
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...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
#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
 
[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
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Itch Scratching

Editor's Notes

  1. No CS Experience
  2. No CS Experience
  3. No CS Experience
  4. No CS Experience
  5. No CS Experience
  6. Read design patterns in Ruby
  7. Read design patterns in Ruby
  8. Read design patterns in Ruby
  9. Read design patterns in Ruby
  10. Read design patterns in Ruby