BDD
                                Buzzword
                                Driven
                                Development


Build the next cool app (for fun and for profit fun)
@_orso_        @cirpo

mo@ideato.it   ac@ideato.it
J


       WEhPHP
disclaimer
L
BROGRAMMING
   The act of creating a computer
   program in the company of your bros.




embrace brogramming
BROGRAMMING
   The act of creating a computer
   program in the company of your bros.




embrace brogramming
BROGRAMMING




#lifeinideato
telecommuting            agile
                       functional programming
   mongodb                  tdd
                 startup               map/reduce
                             gattini
publish/suscribe nosql                xp
      realtime redis    javascript
  mvc                     closure hadoop
            backbonejs                       html5
                             gamification
   cloud      websockets
                         microframework
       boook      bdd                 responsive
    pair programming           nodejs
            css3       server-side javascript

buzzwords
LAMP stack is dead,
      long live the LAMP
            stack!


lamp stack
K


is PHP dead?
is PHP dead?   J

absolutely
   not!
J

    • big (and funny) community
    • lots of libraries
    • history
    • web oriented language



php ecosystem
USER
         STORIES
#lifeinideato
AS <role>
  I WANT <do something>
  SO THAT <benefit>

user story
AS Ua I WANT register to the app SO THAT I can join




                              estimation




#lifeinideato
@_orso_




                estimation




#lifeinideato
@_orso_




                estimation

        3
#lifeinideato
@_orso_                 @cirpo




                estimation

        3
#lifeinideato
@_orso_                 @cirpo




                estimation

        3                     2
#lifeinideato
{
telecommuting,
agile
}




#lifeinideato
{
startup,
agile
}




           TISTIMO
php ecosystem
{
agile
}




tistimo
php ecosystem
{
agile
}




tistimo
php ecosystem
{
agile
}




tistimo
php ecosystem
{
agile
}

AS Ua I WANT vedere la lista progetti ancora da stimare
AS Ua I WANT vedere la lista dei progetti stimati
AS Ua I WANT voglio autenticarmi con il mio account twitter
AS Ur I WANT rimanere in attesa che un altro ua si unisca al progetto
AS Ur I WANT visualizzare una storia
AS Ur I WANT votare una storia
AS Ur I WANT voglio assegnare una stima ad una storia senza votarla
AS Ur I WANT voglio vedere le storie stimate fino a quel momento
AS Ur I WANT voglio vedere quante storie mancano alla fine della stima
AS Ur I WANT voglio vedere il mio grado di affinità con i miei colleghi
AS Admin I WANT voglio inserire le storie

tistimo
{
mvc,
XP,
tdd,
closure
}




tistimo
{
mvc,
XP,
tdd,
closure
}




          K
tistimo
{



                     K
mvc,
XP,
tdd,
closure
}




          IT’S TOO
           MUCH
tistimo
{



                          J
mvc,
XP,
tdd,
closure,
microframework,
rest
}




                  SILEX

silex
 silex
{



                                              J
mvc,



                  SF2 vs SILEX
XP,
tdd,
closure,
microframework,
rest
}



                  100 MB vs 0.5 mb

                  Highly configurable vs simple
                  config

                  Solid base vs prototyping


silex
 silex
{



                  J
mvc,
XP,
tdd,
closure,
microframework,
rest
}




silex
 silex
{
bdd,
}
                J

        Behat
behat
{
bdd,
}       Behat   J




behat
{
bdd,
}       Behat   J




behat
{
bdd,
}       Behat   J




behat
{
bdd,
}       Behat   J




behat
L




mysql
J
{
nosql
}




nosql
J
{
nosql
}




        every value is accessible by a key (string)

        “project”

        “user:cirpo”




nosql
J
{
nosql
}




        Data types

        string

        hashes

        lists

        (sorted) sets

nosql
J
{
noslq
}




        id   User    Password     Name       Surname    Created

    234      cirpo    c1rp0     Alessandro   Cinelli   2012-03-03




nosql
J
{
noslq
}




        A redis user

        “obj_type:id:attribute”

        “user:234:name” => “Alessandro”

        “user:234:username” => “cirpo”


nosql
J
{
noslq
}




        Users
            “user:username”
            “user:username:is_logged”
            “user:username:score” => int

        Projects
             “project:projectname”
             “project:projectname:estimate_queue” => list



nosql
J
{
noslq
}




        User Stories
            “user_story:id”
            “user_story:status” => hash

        Scores
            “users_scores” => sorted set
            “users_affinity” => sorted set




nosql
J
{
noslq
}




nosql
J


          w00t!
tistimo
L




tistimo
•     php single request
    •     shared nothing architecture




tistimo
{



                         J
nodejs,
serverside-javascript,
websockets
realtime
}




nodejs
{



                           J
nodejs,
serverside-javascript,
websockets
realtime
}




                    code

nodejs
{



                         J
nodejs,
serverside-javascript,
websockets
realtime
}




socket.io
{



                         J
nodejs,
serverside-javascript,
websockets
realtime
}




  server side




socket.io
J
{
websockets
realtime
}




   client side




socket.io
{



                           J
nodejs,
serverside-javascript,
websockets
realtime
}




                    code

nosql
{


             J
mvc,
javascript
}




backbonejs
{


             J
mvc,
javascript
}




backbonejs
{


             J
mvc,
javascript
}




backbonejs
{


             J
mvc,
javascript
}




backbonejs
{


             J
mvc,
javascript
}




backbonejs
{


             J
mvc,
javascript
}




backbonejs
telecommuting            agile
                      functional programming
   mongodb                  tdd
                startup                map/reduce
                             gattini
publish/suscribe nosql                xp
      realtime redis    javascript
  mvc                     closure hadoop
            backbonejs                      html5
                              gamification
   cloud      websockets
                         microframework
       boook     bdd                  responsive
    pair programming           nodejs
            css3       server-side javascript

buzzwords
J




Who's using Redis?
J +                 J




Who's using Redis? (and our beloved PHP!)
J




Who's using nodejs?
J




Who's using backbonejs?
TISTIMO
 github.com/cirpo/tistimo
phpbestpractices.it
• nodejsconf
Thank YOU!


@_orso_            @cirpo

mo@ideato.it       ac@ideato.it

BDD - Buzzword Driven Development - Build the next cool app for fun and for... fun

  • 1.
    BDD Buzzword Driven Development Build the next cool app (for fun and for profit fun)
  • 2.
  • 3.
    J WEhPHP disclaimer
  • 4.
  • 5.
    BROGRAMMING The act of creating a computer program in the company of your bros. embrace brogramming
  • 6.
    BROGRAMMING The act of creating a computer program in the company of your bros. embrace brogramming
  • 7.
  • 8.
    telecommuting agile functional programming mongodb tdd startup map/reduce gattini publish/suscribe nosql xp realtime redis javascript mvc closure hadoop backbonejs html5 gamification cloud websockets microframework boook bdd responsive pair programming nodejs css3 server-side javascript buzzwords
  • 9.
    LAMP stack isdead, long live the LAMP stack! lamp stack
  • 10.
  • 11.
    is PHP dead? J absolutely not!
  • 12.
    J • big (and funny) community • lots of libraries • history • web oriented language php ecosystem
  • 13.
    USER STORIES #lifeinideato
  • 14.
    AS <role> I WANT <do something> SO THAT <benefit> user story
  • 15.
    AS Ua IWANT register to the app SO THAT I can join estimation #lifeinideato
  • 16.
    @_orso_ estimation #lifeinideato
  • 17.
    @_orso_ estimation 3 #lifeinideato
  • 18.
    @_orso_ @cirpo estimation 3 #lifeinideato
  • 19.
    @_orso_ @cirpo estimation 3 2 #lifeinideato
  • 20.
  • 21.
    { startup, agile } TISTIMO php ecosystem
  • 22.
  • 23.
  • 24.
  • 25.
    { agile } AS Ua IWANT vedere la lista progetti ancora da stimare AS Ua I WANT vedere la lista dei progetti stimati AS Ua I WANT voglio autenticarmi con il mio account twitter AS Ur I WANT rimanere in attesa che un altro ua si unisca al progetto AS Ur I WANT visualizzare una storia AS Ur I WANT votare una storia AS Ur I WANT voglio assegnare una stima ad una storia senza votarla AS Ur I WANT voglio vedere le storie stimate fino a quel momento AS Ur I WANT voglio vedere quante storie mancano alla fine della stima AS Ur I WANT voglio vedere il mio grado di affinità con i miei colleghi AS Admin I WANT voglio inserire le storie tistimo
  • 26.
  • 27.
  • 28.
    { K mvc, XP, tdd, closure } IT’S TOO MUCH tistimo
  • 29.
    { J mvc, XP, tdd, closure, microframework, rest } SILEX silex silex
  • 30.
    { J mvc, SF2 vs SILEX XP, tdd, closure, microframework, rest } 100 MB vs 0.5 mb Highly configurable vs simple config Solid base vs prototyping silex silex
  • 31.
    { J mvc, XP, tdd, closure, microframework, rest } silex silex
  • 32.
    { bdd, } J Behat behat
  • 33.
    { bdd, } Behat J behat
  • 34.
    { bdd, } Behat J behat
  • 35.
    { bdd, } Behat J behat
  • 36.
    { bdd, } Behat J behat
  • 37.
  • 38.
  • 39.
    J { nosql } every value is accessible by a key (string) “project” “user:cirpo” nosql
  • 40.
    J { nosql } Data types string hashes lists (sorted) sets nosql
  • 41.
    J { noslq } id User Password Name Surname Created 234 cirpo c1rp0 Alessandro Cinelli 2012-03-03 nosql
  • 42.
    J { noslq } A redis user “obj_type:id:attribute” “user:234:name” => “Alessandro” “user:234:username” => “cirpo” nosql
  • 43.
    J { noslq } Users “user:username” “user:username:is_logged” “user:username:score” => int Projects “project:projectname” “project:projectname:estimate_queue” => list nosql
  • 44.
    J { noslq } User Stories “user_story:id” “user_story:status” => hash Scores “users_scores” => sorted set “users_affinity” => sorted set nosql
  • 45.
  • 46.
    J w00t! tistimo
  • 47.
  • 48.
    php single request • shared nothing architecture tistimo
  • 49.
    { J nodejs, serverside-javascript, websockets realtime } nodejs
  • 50.
    { J nodejs, serverside-javascript, websockets realtime } code nodejs
  • 51.
    { J nodejs, serverside-javascript, websockets realtime } socket.io
  • 52.
    { J nodejs, serverside-javascript, websockets realtime } server side socket.io
  • 53.
    J { websockets realtime } client side socket.io
  • 54.
    { J nodejs, serverside-javascript, websockets realtime } code nosql
  • 55.
    { J mvc, javascript } backbonejs
  • 56.
    { J mvc, javascript } backbonejs
  • 57.
    { J mvc, javascript } backbonejs
  • 58.
    { J mvc, javascript } backbonejs
  • 59.
    { J mvc, javascript } backbonejs
  • 60.
    { J mvc, javascript } backbonejs
  • 61.
    telecommuting agile functional programming mongodb tdd startup map/reduce gattini publish/suscribe nosql xp realtime redis javascript mvc closure hadoop backbonejs html5 gamification cloud websockets microframework boook bdd responsive pair programming nodejs css3 server-side javascript buzzwords
  • 62.
  • 63.
    J + J Who's using Redis? (and our beloved PHP!)
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.