1. Erlang at Nu Echo
Some lessons learned
Dominique BoucherDominique Boucher
Nu Echo
2. Agenda
Who we are, what we doWho we are, what we do
NuGram Hosted Server
Why Erlang
Architecture
Some lessons
3. Who we are / what we do
• Speech applicationsSpeech applications
experts
Lots of R&D• Lots of R&D
• Many tools to
support our own practice
• Grammar tools
• Benchmarking/tuning tools
• Testing/monitoring toolsTesting/monitoring tools
5. NuGram Hosted Server
Hosted infrastructure for deploying andHosted infrastructure for deploying and
sharing speech grammars
– Supports static AND dynamic grammars– Supports static AND dynamic grammars
– Embeds the NuGram technologies
• Dynamic grammar instantiation• Dynamic grammar instantiation
• Grammar conversion to ABNF/GrXML/GSL
• Text-based semantic interpretationp
• To complement telephony in the cloudTo complement telephony in the cloud
(eg. Tropo)
6. NuGram Hosted Server
Components
RESTf l API– RESTful API
– www.grammarserver.com/api
C it b it– Community website
– www.grammarserver.com
– NuGram product website
– nugram.nuecho.com
7. NuGram Hosted Server
NuGram
Hosted Server
Your application
(Java Ruby PythonHosted Server (Java, Ruby, Python,
JavaScript, Erlang, etc.)
Telephony
Platform
8. NuGram Hosted Server
An example in Ruby
dyngrammar = "#ABNF 1.0 UTF-8;
...
"
server = GrammarServer.new()
session = server.create session("username", "passwrd")session server.create_session( username , passwrd )
session.upload("digits2.abnf", dyngrammar);
grammar = session.instantiate("digits2.abnf", {})
interpretation
i t t(' t th f ') t j= grammar.interpret('one two three four').to_json
session.disconnect
9. Why Erlang?
• Initial requirementsInitial requirements
• High-performance HTTP server
• Scalability Fault tolerance• Scalability, Fault-tolerance
• Hot code swapping
Di t ib t d d t b• Distributed database
• The Erlang appeal
• Single language, single platform
• Ideal projectp j
• for experimenting with a different technology
10. Components
• Behaviours for building robust
applications
• Behaviours for building robust
applications
OTP
(Open Telecom
Pl tf ) applicationsapplicationsPlatform)
• High performance HTTP Server• High performance HTTP ServerYaws • High-performance HTTP Server• High-performance HTTP ServerYaws
• Distributed, fault-tolerant, soft
realtime DB
• Distributed, fault-tolerant, soft
realtime DB
Mnesia
• Java API to expose Java/Kawa
code as a regular Erlang node
• Java API to expose Java/Kawa
code as a regular Erlang node
Jinterface
14. Session handling
• Sending messages to remote nodes isSending messages to remote nodes is
completely transparent
E l ( i lifi d)Example (simplified)
Process = db:get session(SessionID)Process = db:get_session(SessionID),
Process ! Request.
15. Session handling
• Session timeouts handled by theSession timeouts handled by the
session process
E lExample
receive
…
after Timeout ->
db:expire_session(self())
end
16. Mnesia
• StoresStores…
• User accounts
• All grammars
(templates and instantiated ones)
• Node IDs of all Java workers
• All session data
17. What we’ve developed
Account management
Registration, email confirmation, etc.
BBcode validation & conversion for comments
Twitter widget
A process caches the tweetsA process caches the tweets
and updates it every 5 minutes
Rendering of tweetse de g o ee s
RSS reader / widget
A process caches the feed contentA process caches the feed content
and updates it every hour
18. What we’ve developed
Code-based representationp
of the web site structure
Tree like structureTree-like structure
Documents, modules, sections
Supports the addition on new “modules”
Lots of unit tests!
20. Lessons learned
• Erlang strengths
• Glueing things togetherg g g
• Data transformations
• bbcode XML• bbcode, XML
• Protocol handling / processing byte
streamsstreams
• Like encoding detection
G t d i d l t i t• Great dynamic development environment
• REPL + connecting to a running node
21. Lessons learned
E l k• Erlang weaknesses
• Sequential computations
harder to express
• A matter of style
• String manipulationg p
• Somewhat better now (support for encodings)
22. Lessons learned
• Learn and use OTP
from day one
• Servers,
supervisors,
applicationsapplications
• Worth the investment
E l t itt f d• Example: twitter feed server
• First version without OTP
crashed way too often making the platform unreliable• crashed way too often, making the platform unreliable
• Second version using gen_server
23. Lessons learned
• Dynamically-typed languages makeDynamically typed languages make
non-trivial refactorings difficult and
error-proneerror-prone
• Not specific to Erlang,
b t litbut a reality
• Dializer can help
• Hot code loading is greatHot code loading is great
• But tricky to do right
24. Lessons learned
• Know your toolsKnow your tools
• Toolbar, tv,
appmon, pmanpp , p
D 't i t th h l• Don't reinvent the wheel
• There are a lot more libraries now
• we use Yaws, oauth, smtp_fsm
• rebar - great build tool