Thursday, March 14, 13
Structuring apps in Scala
               a.k.a.
   I have no idea what I’m doing
                                      phil calçado
                                       @pcalcado
                                http://philcalcado.com

                         Scala User Group - Berlin Brandenburg
Thursday, March 14, 13
WHY BOTHER?




Thursday, March 14, 13
SOLVING INTERESTING
                     PROBLEMS




Thursday, March 14, 13
SOLVING INTERESTING
                     PROBLEMS
                        meh.



Thursday, March 14, 13
SOLVING BORING
                           PROBLEMS IN A
                         INTERESTING WAY



Thursday, March 14, 13
SOLVING BORING
                           PROBLEMS IN A
                         INTERESTING WAY
                              hell yeah!

Thursday, March 14, 13
SOUNDCLOUD
     DEVELOPER CHALLENGE’S
           TEST SUITE



Thursday, March 14, 13
Recruitment Challenge



                          W(hy)TF?




Thursday, March 14, 13
Old Challenge



                   Build me a file uploader




Thursday, March 14, 13
Old Challenge



                   Build me a file uploader
                            Boring



Thursday, March 14, 13
Old Challenge



                   Build me a file uploader
                             Boring
                        Use flash plugin

Thursday, March 14, 13
Old Challenge



                   Build me a file uploader
                             Boring
                        Use flash plugin
                        Not enough code
Thursday, March 14, 13
New Challenge

              Given a series of events
             and a bunch of connected
               clients, who should be
             notified of which events?


Thursday, March 14, 13
What I’m used to




Thursday, March 14, 13
What I’m used to




Thursday, March 14, 13
Combinators all the way down




Thursday, March 14, 13
a LOT of code




Thursday, March 14, 13
a LOT of wiring




Thursday, March 14, 13
not leveraging
                         the type system




Thursday, March 14, 13
I am pretty sure
                         I’m doing it wrong.




Thursday, March 14, 13
TWITTER




Thursday, March 14, 13
Instance-Based Injection




Thursday, March 14, 13
Extremely thin, orthogonal, traits




Thursday, March 14, 13
Use method visibility




Thursday, March 14, 13
TYPESAFE/PRECOG




Thursday, March 14, 13
Modules are abstract




Thursday, March 14, 13
typesafe: self-types for
                       dependencies




Thursday, March 14, 13
Precog: Instead of import,
                 extends or with




Thursday, March 14, 13
SOUNDCLOUD
                            APPS



Thursday, March 14, 13
ACTUALLY, HOW ARE WE
             BUILDING APPS?




Thursday, March 14, 13
internet




                         Legacy Application
                               (Rails)




                              Database




Thursday, March 14, 13
internet




                                                    API




                            Sounds        Users              Stats       Stream




                         Notifications   Settings         Recommender   Messaging




Thursday, March 14, 13
SOUNDCLOUD
                            APPS



Thursday, March 14, 13
A LOT LIKE
                         TYPESAFE’S




Thursday, March 14, 13
Controllers define dependency
        on components




Thursday, March 14, 13
Components are abstract




Thursday, March 14, 13
One flat instance




Thursday, March 14, 13
I was pretty sure
                         I was doing it wrong.




Thursday, March 14, 13
I am pretty sure
                    I’m still doing it wrong.




Thursday, March 14, 13
I am pretty sure
                    I’m still doing it wrong.

                         what do you use?


Thursday, March 14, 13
REFERENCES

            •     http://bit.ly/pcalcado-goto
            •     http://bit.ly/effective-scala-Dependency-injection
            •     http://bit.ly/Bakery-from-the-Black-Lagoon
            •     http://bit.ly/Martin-Odersky-Reflection-and-
                  Compilers




Thursday, March 14, 13
phil calçado


                         http://philcalcado.com
                               @pcalcado



                              www.soundcloud.com




Thursday, March 14, 13

Structuring apps in Scala