The document summarizes the history and features of the Erlang programming language. It discusses how Erlang was developed at Ericsson in the 1980s to build robust, distributed telecom systems. It highlights Erlang's strengths like concurrency, distribution, hot code loading and fault tolerance. Examples are given of large Erlang projects at Ericsson and how the language enables high reliability, scalability and productivity. Popular open source and commercial products using Erlang are also listed.
This document compares Erlang and Java for building a bookstore application. It provides background on the history and principles of Erlang and Java. It then describes how each approach would structure the bookstore application using common design patterns and frameworks. For Erlang, it discusses using the Actor model with lightweight processes and message passing. For Java, it discusses using the Model-View-Controller pattern with services implemented as Enterprise JavaBeans. It also covers deployment strategies and the key aspects of the Erlang and Java languages.
Let it crash! The Erlang Approach to Building Reliable ServicesBrian Troutwine
In this talk, using the Erlang hacker's semi-official motto "Let it Crash!" as a lens, I'll speak to how radical simplicity of implementation, straight-forward runtime characteristics and discoverability of the running system lead to computer systems which have great success in networked, always-on deployments.
I will argue that while Erlang natively implements many features which aid the construction of such systems--functional programming language semantics, lack of global mutable state, first-class networking, for instance--these characteristics can be replicated in any computer system, as a part of initial design of new systems or the gradual evolution of an existing project. I'll discuss common design patterns and anti-patterns, using my own work at AdRoll and project experience reports from a variety of fields--both successes and failures--to advance my argument.
This will be a very practical talk and will be accessible to engineers of all backgrounds.
This document provides an overview of actor modeling and how to implement actors using the Akka library. It begins with explaining the actor model and benefits of actors over threads. It then discusses how to create actors with Akka, demonstrating with a multiplayer chess game. The schedule outlines explaining the actor model for 1/4 of the time and how to create Akka actors for 3/4 of the time using the chess game demo. Useful links are provided for Akka documentation and chess/game related projects.
This document discusses internationalizing (i18n) Scala programs using the gettext approach. It describes marking strings for translation, extracting them to template files, loading translation files, and translating at runtime. Tools are introduced for extracting strings from Scala code and templates, editing translation files, and parsing loaded files. The approach works for various Scala template engines and frameworks like Play.
Develop realtime web with Scala and XitrumNgoc Dao
This document discusses a talk given by Ngoc Dao on developing realtime and distributed web applications with Scala and Xitrum. The talk covers:
1) An overview of Scala, including its functional features, object-oriented features, tools like SBT and REPL, and how to get started.
2) Using Scala for web development with the Xitrum framework, including routing, responding to requests, internationalization, and metrics.
3) Using Scala for concurrency with futures, actors, and Akka FSM.
4) Building realtime web applications with websockets, Socket.IO and SockJS.
5) Distributed systems with Akka remoting
This document discusses writing web frameworks. It begins by introducing the speaker, Ngoc, and his experience writing several web frameworks in different languages. It then asks questions to prompt discussion about web frameworks, including differences between frameworks and libraries, challenges in writing frameworks, and important framework features. The document emphasizes that frameworks should have a clear vision and workflow. It also provides examples from Sinetja and Xitrum frameworks to illustrate concepts.
This document provides an overview of Xitrum, an asynchronous and clustered Scala web framework built on top of Netty and Akka. It describes what Xitrum is, why it should be used, how it works, examples of its features like actions, views, routing, authentication, and more. It also provides links to the Xitrum homepage, guides, community, and examples of where Xitrum is used in production.
Actor-based concurrency and Akka FundamentalsNgoc Dao
This document discusses actor-based concurrency and the Akka framework. It explains that actors are lightweight processes that communicate asynchronously by message passing rather than by sharing memory. This allows for high levels of concurrency. The document provides an example demonstrating how to define actor messages and behaviors in Akka to implement a simple counter actor. It also discusses some antipatterns to avoid, such as directly modifying actor state from outside the actor.
This document provides an overview of how to use the Xitrum web framework, including how to create a new project, routes, run and debug the application, internationalization, scaling, and monitoring. It also compares Xitrum to the Play framework and lists some key differences.
Xitrum is a Scala web framework inspired by Rails that provides asynchronous and clustered capabilities. It uses Netty for asynchronous IO, Hazelcast for clustered data, and Akka for remote code. The framework was created because existing Scala options like Scalatra and Lift were not fully featured or easy to use from a Ruby perspective. Xitrum aims to provide more features than Scalatra and easier use than Lift. It has been used in many of the creator's projects involving chat systems, APIs, and real-time websites.
SockJS provides a WebSocket-like API that works across all browsers, including older browsers, by using multiple transport mechanisms as needed such as xhr-polling. It supports both client-side and server-side libraries for major platforms. While SockJS mimics the WebSocket API, it is simpler than solutions like Socket.IO that provide additional functionality beyond a raw protocol.
Tsung is an open source tool for load testing applications. It can perform load testing from a single machine or in a distributed manner across multiple machines. The document discusses how to install Tsung and Erlang, configure a basic load test using a test.xml file, run the test, and view reports. It also covers how to set up distributed load testing using multiple client nodes and load balancing across Erlang VMs. Load testing WebSocket applications with Tsung is also briefly mentioned.
This document provides an introduction to using Scala, including how to install Scala, use the Scala interactive console and compile Scala scripts and programs. It also discusses SBT (Scala Build Tool) for managing Scala projects and dependencies, and introduces some useful Scala frameworks like Xitrum for building web applications and Akka for building concurrent and distributed applications.
Xitrum uses the Netty framework and follows a handler-based architecture. It aggregates HTTP requests and responses into a HandlerEnv object that passes through various handlers. These handlers include converting requests to HandlerEnv, selecting and calling actions, converting responses back to HTTP, and more. Routing is done by collecting routes specified by annotations at startup and dispatching requests to the appropriate action class execute method.
This document provides a general overview of the Camellia project from November 2003. It discusses smart cameras and their applications, as well as the motivations and goals of the Camellia project, which aims to develop algorithms and an architecture for a co-processor to enable smart camera functionality. The document outlines the project's applications, co-processor requirements, prototyping efforts, and conclusions.
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua HungNgoc Dao
The document discusses open source software, providing definitions and examples. It describes open source processes like global collaboration, iterative development, and decentralized testing. Technologies enabled by open source include source code availability and modular components. Open source is said to provide benefits like better quality, reliability, flexibility, and lower costs through peer review and transparency. Business models around open source involve services like packaging, support, and customization.
Solutions for Radiation Threats: The Zytekno Catalogomnicnc
Alright, here's a condensed version of the Zytekno radiation detection catalog description, aiming for under 1000 words:
Zytekno: Advanced Radiation Detection Solutions
Introduction:
Zytekno provides cutting-edge radiation detection technologies for diverse applications, ensuring safety and security. Our catalog features innovative solutions, from drones to wearable devices, designed for optimal performance in challenging environments.
Our Commitment:
We focus on innovation and reliability, integrating the latest advancements and rigorously testing our products.
Product Categories:
Drone-Based: Aerial surveillance for hard-to-reach areas.
Robotic: Autonomous operation in hazardous environments.
Vehicle-Mounted: Mobile monitoring for rapid deployment.
Portal: Automated screening for personnel and cargo.
Backpack/Wearable: Personal monitoring for first responders.
Array Camera: High-resolution radiation source imaging.
Exoskeleton: Wearable tech with enhanced mobility and detection.
Product Highlights:
Drone Systems: Equipped with high-sensitivity detectors and GPS navigation for comprehensive area coverage.
Robotic Platforms: Designed for hazardous environments, featuring remote control and customizable arms, and robotic dog platforms for complex terrain.
Vehicle Systems: Mobile monitoring with real-time data and GPS tracking for rapid response.
Portal Systems: Automated screening with customizable configurations and integrated access control.
Wearable Devices: Lightweight and ruggedized for personal monitoring with real-time alerts.
Array Cameras: High-resolution imaging for detailed radiation source analysis.
Exoskeletons: Enhanced mobility and radiation detection for personnel in hazardous areas.
Applications:
Nuclear monitoring and decommissioning.
Hazardous material handling and cleanup.
Border security and contraband detection.
Emergency response and search and rescue.
Environmental surveys and mapping.
Industrial inspections and security.
Military and defense applications.
Key Features:
High-sensitivity radiation detectors.
Real-time data transmission and analysis.
GPS-guided navigation and tracking.
Customizable payloads and sensor configurations.
Ruggedized and weather-resistant designs.
Automated alert systems.
Integrated access control.
Conclusion:
Zytekno delivers advanced radiation detection solutions tailored to meet the demands of diverse applications. Our commitment to innovation ensures reliable and effective technologies.
Reduce Your Cloud Spend with ScyllaDB by Tzach LivyatanScyllaDB
This talk will explore why ScyllaDB Cloud is a cost-effective alternative to DynamoDB, highlighting efficient design implementations like shared compute, local NVMe storage, and storage compression. It will also discuss new X Cloud features, better plans and pricing, and a direct cost comparison between ScyllaDB and DynamoDB
This document provides an overview of Xitrum, an asynchronous and clustered Scala web framework built on top of Netty and Akka. It describes what Xitrum is, why it should be used, how it works, examples of its features like actions, views, routing, authentication, and more. It also provides links to the Xitrum homepage, guides, community, and examples of where Xitrum is used in production.
Actor-based concurrency and Akka FundamentalsNgoc Dao
This document discusses actor-based concurrency and the Akka framework. It explains that actors are lightweight processes that communicate asynchronously by message passing rather than by sharing memory. This allows for high levels of concurrency. The document provides an example demonstrating how to define actor messages and behaviors in Akka to implement a simple counter actor. It also discusses some antipatterns to avoid, such as directly modifying actor state from outside the actor.
This document provides an overview of how to use the Xitrum web framework, including how to create a new project, routes, run and debug the application, internationalization, scaling, and monitoring. It also compares Xitrum to the Play framework and lists some key differences.
Xitrum is a Scala web framework inspired by Rails that provides asynchronous and clustered capabilities. It uses Netty for asynchronous IO, Hazelcast for clustered data, and Akka for remote code. The framework was created because existing Scala options like Scalatra and Lift were not fully featured or easy to use from a Ruby perspective. Xitrum aims to provide more features than Scalatra and easier use than Lift. It has been used in many of the creator's projects involving chat systems, APIs, and real-time websites.
SockJS provides a WebSocket-like API that works across all browsers, including older browsers, by using multiple transport mechanisms as needed such as xhr-polling. It supports both client-side and server-side libraries for major platforms. While SockJS mimics the WebSocket API, it is simpler than solutions like Socket.IO that provide additional functionality beyond a raw protocol.
Tsung is an open source tool for load testing applications. It can perform load testing from a single machine or in a distributed manner across multiple machines. The document discusses how to install Tsung and Erlang, configure a basic load test using a test.xml file, run the test, and view reports. It also covers how to set up distributed load testing using multiple client nodes and load balancing across Erlang VMs. Load testing WebSocket applications with Tsung is also briefly mentioned.
This document provides an introduction to using Scala, including how to install Scala, use the Scala interactive console and compile Scala scripts and programs. It also discusses SBT (Scala Build Tool) for managing Scala projects and dependencies, and introduces some useful Scala frameworks like Xitrum for building web applications and Akka for building concurrent and distributed applications.
Xitrum uses the Netty framework and follows a handler-based architecture. It aggregates HTTP requests and responses into a HandlerEnv object that passes through various handlers. These handlers include converting requests to HandlerEnv, selecting and calling actions, converting responses back to HTTP, and more. Routing is done by collecting routes specified by annotations at startup and dispatching requests to the appropriate action class execute method.
This document provides a general overview of the Camellia project from November 2003. It discusses smart cameras and their applications, as well as the motivations and goals of the Camellia project, which aims to develop algorithms and an architecture for a co-processor to enable smart camera functionality. The document outlines the project's applications, co-processor requirements, prototyping efforts, and conclusions.
Sinh hoat CLB tin hoc Komaba lan 1 - Phat bieu cua HungNgoc Dao
The document discusses open source software, providing definitions and examples. It describes open source processes like global collaboration, iterative development, and decentralized testing. Technologies enabled by open source include source code availability and modular components. Open source is said to provide benefits like better quality, reliability, flexibility, and lower costs through peer review and transparency. Business models around open source involve services like packaging, support, and customization.
Solutions for Radiation Threats: The Zytekno Catalogomnicnc
Alright, here's a condensed version of the Zytekno radiation detection catalog description, aiming for under 1000 words:
Zytekno: Advanced Radiation Detection Solutions
Introduction:
Zytekno provides cutting-edge radiation detection technologies for diverse applications, ensuring safety and security. Our catalog features innovative solutions, from drones to wearable devices, designed for optimal performance in challenging environments.
Our Commitment:
We focus on innovation and reliability, integrating the latest advancements and rigorously testing our products.
Product Categories:
Drone-Based: Aerial surveillance for hard-to-reach areas.
Robotic: Autonomous operation in hazardous environments.
Vehicle-Mounted: Mobile monitoring for rapid deployment.
Portal: Automated screening for personnel and cargo.
Backpack/Wearable: Personal monitoring for first responders.
Array Camera: High-resolution radiation source imaging.
Exoskeleton: Wearable tech with enhanced mobility and detection.
Product Highlights:
Drone Systems: Equipped with high-sensitivity detectors and GPS navigation for comprehensive area coverage.
Robotic Platforms: Designed for hazardous environments, featuring remote control and customizable arms, and robotic dog platforms for complex terrain.
Vehicle Systems: Mobile monitoring with real-time data and GPS tracking for rapid response.
Portal Systems: Automated screening with customizable configurations and integrated access control.
Wearable Devices: Lightweight and ruggedized for personal monitoring with real-time alerts.
Array Cameras: High-resolution imaging for detailed radiation source analysis.
Exoskeletons: Enhanced mobility and radiation detection for personnel in hazardous areas.
Applications:
Nuclear monitoring and decommissioning.
Hazardous material handling and cleanup.
Border security and contraband detection.
Emergency response and search and rescue.
Environmental surveys and mapping.
Industrial inspections and security.
Military and defense applications.
Key Features:
High-sensitivity radiation detectors.
Real-time data transmission and analysis.
GPS-guided navigation and tracking.
Customizable payloads and sensor configurations.
Ruggedized and weather-resistant designs.
Automated alert systems.
Integrated access control.
Conclusion:
Zytekno delivers advanced radiation detection solutions tailored to meet the demands of diverse applications. Our commitment to innovation ensures reliable and effective technologies.
Reduce Your Cloud Spend with ScyllaDB by Tzach LivyatanScyllaDB
This talk will explore why ScyllaDB Cloud is a cost-effective alternative to DynamoDB, highlighting efficient design implementations like shared compute, local NVMe storage, and storage compression. It will also discuss new X Cloud features, better plans and pricing, and a direct cost comparison between ScyllaDB and DynamoDB
A Dist Sys Programmer's Journey into AI by Piotr SarnaScyllaDB
This talk explores the culture shock of transitioning from distributed databases to AI. While AI operates at massive scale, distributed storage and compute remain essential. Discover key differences, unexpected parallels, and how database expertise applies in the AI world.
C-level executives, directors, and product managers face the complex task of integrating AI into existing systems while addressing challenges related to data quality, scalability, interoperability, ethics, skill gaps, and security compliance.
Join Calvin Hendryx-Parker — AWS Hero and CTO of Six Feet Up, the premier AI and Python agency in the U.S. — for this interactive talk exploring generative AI technologies. You’ll gain ready-to-use resources and a clear understanding of how to roll out AI in your organization.
What You’ll Learn:
AI Implementation Strategies: Get practical tips on evaluating and integrating open source and closed AI models, addressing governance, compliance, and scalability.
Real-Case Demo: Explore what it takes to leverage generative AI technology using RAG.
Team Enablement: Discover how other companies are fostering innovation internally.
Walk away with the tools and insights you need to confidently lead your organization’s AI journey.
Cleveland Salesforce Developer Group March 2025Lynda Kane
Slide deck from the Cleveland Salesforce Developer Group March virtual meeting. Topics included AI Certification changes, Spring '25 Release, and a TDX recap.
[QUICK TALK] "Coaching 101: How to Identify and Develop Your Leadership Quali...Fwdays
What does it mean to be a leader, and what qualities should you develop in yourself? And how do you know if you even have these skills? This isn’t just a question—it’s the key to understanding where to start and how to move forward in unlocking your potential.
Let’s break down leadership and coaching as a tool for unleashing your leadership potential. We’ll explore how coaching differs from mentoring, psychotherapy, and training—and why they’re not all the same. Special focus will be on self-coaching: learning to engage in an internal dialogue so you can keep moving forward even when external support is lacking.
I’ll share a few practical life hacks and real-world examples that will help you create a plan and start taking action as soon as tomorrow.
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
Verbose AI: The Accessibility Challenge - CSUN 2025Ted Drake
This presentation was created for the 2025 CSUN Assistive Technology Conference
Verbose AI: The Accessibility Challenge
Explore how verbose AI-generated image descriptions could hinder screen reader accessibility. We'll share real-world examples, the importance of context, AI's limitations, and practical solutions to promote inclusivity and encourage action.
[QUICK TALK] "How to study to acquire a skill, not a certificate?", Uliana Du...Fwdays
How many certificates do you have on your shelf or on LinkedIn? Now the real question is: did these courses really help you develop your skills?
Learning is not just a line on your resume, it makes a real difference in your work and life. In her speech, Uliana will share practical tools that will help you learn so that your knowledge works and your skills are strengthened, not just add to your collection of certificates.
We will talk about effective approaches to learning, motivation, and how to avoid the trap of the “eternal student”.
As modern infrastructures become more complex, traditional monitoring tools often struggle to provide a complete understanding of system health. This presentation will explore how ClickHouse, a high-performance columnar database, enables unified observability by consolidating metrics, logs, traces, and eBPF data into a scalable platform.
Attendees will learn how fragmented telemetry systems can hinder root-cause analysis and operational efficiency and how ClickHouse overcomes these challenges by offering seamless integration with tools like OpenTelemetry, Grafana, Prometheus, and more. We will also compare observability solutions, such as Coroot, qryn, and custom stacks with Jaeger and Loki, to demonstrate how ClickHouse simplifies data management, enhances real-time analysis, and supports large-scale telemetry use cases.
This session will provide practical insights into implementing ClickHouse for observability, enabling engineers to focus on system insights while minimizing infrastructure complexity.
UiPath Automation Developer Associate Training Series 2025 - Session 4DianaGray10
Please join us for session 4 of the Developer Associate series, where we will cover selectors in Studio and PDF Automation in Studio.
Topics covered:
Selectors in Studio
PDF Automation with Studio
Required self-paced training to be completed for this session:
Selectors in Studio Deep Dive - 2 modules - 1h 30m - https://academy.uipath.com/courses/selectors-in-studio-deep-dive
PDF Automation with Studio - 2 modules - 1h 15m - https:/academy.uipath.com/courses/pdf-automation-in-studio
⁉️ For any questions you may have, please use the dedicated Forum thread. You can tag the hosts and mentors directly and they will reply as soon as possible.
The 4 Billion Device Future: IoT Insights for Commercial Building LeadersMemoori
This presentation discusses our latest research on IoT connectivity in commercial buildings, projecting growth from approximately 2 billion connected devices in 2024 to 4 billion by 2030.
Our analysis covers retail, offices, hotels, warehouses, and data centers, examining connectivity types, implementation frameworks, emerging technologies, and security considerations.
"Surfing the IT Waves: How Not to Drown in the Information Ocean", Serhii Nem...Fwdays
In the world of IT, where technologies develop at the speed of light, it's crucial to understand not only what to learn but also when to do it. In this presentation, we will explore a practical approach to the professional development of an IT specialist and figure out how to effectively track industry innovations without compromising your main work.
We will discuss what truly influences your value as a developer, when it's worth investing time in learning new technologies, and how this relates to other important skills - from English proficiency to understanding the business value of projects.
The presentation will be useful for both beginners who are just entering the job market and experienced developers who strive to remain competitive.
AI and developer obsolescence - BCS 2025.pdfSeb Rose
Everything looks solvable if you ignore most of the complications. Many things look impossible when you’re overwhelmed by the details.
Abstraction has been fundamental in helping humanity harness computing technology to deliver world changing solutions. But, over the years, there have been many failed attempts to raise the level of abstraction and empower the wider population to create software without the need for specialist developers. And the need for skilled software developers has risen inexorably.
Does the current interest in AI and low/no code development simply herald the cyclical return of our economy's yearning for ever higher levels of abstraction and reduced reliance on software developers? Or has the technological landscape changed sufficiently to make developer obsolescence a more likely outcome?
How Agoda Scaled 50x Throughput with ScyllaDB by Worakarn IsarathamScyllaDB
Learn about Agoda's performance tuning strategies for ScyllaDB. Worakarn shares how they optimized disk performance, fine-tuned compaction strategies, and adjusted SSTable settings to match their workload for peak efficiency.
The Most Important Tech Innovations of 2024Arif Efendi
Connective technology is a realm where technological advancements are having a game-changing impact, such as reconfigurable intelligent surfaces that optimise wireless communications links. In addition, high-altitude platform station systems are posing the potential for new levels of communication and observation capabilities.
Ensuring AI Trust and Transparency with Inclusive Design Ted Drake
Trauma-informed design (TID) principles were established in architecture and service design with an emphasis on providing safe spaces for those who have suffered trauma. More recently, TID has been adopted within digital design of web and mobile applications. The core principles of TID also lead to usable design that respects the user’s privacy, security, and trust.
VMware Workstation Pro 17.6.0 Crack License Key 2025 Full [Latest]Design4web
Copy & Paste in new tab https://a2zfullfile.click/download-setup/ VMware Workstation Pro Crack is an impressive application that allows you to run multiple operating systems on one computer without affecting the system’s stability.
Vector Search with ScyllaDB by Szymon WasikScyllaDB
Vector search is an essential element of contemporary machine learning pipelines and AI tools. This talk will share preliminary results on the forthcoming vector storage and search features in ScyllaDB. By leveraging Scylla's scalability and USearch library's performance, we have designed a system with exceptional query latency and throughput. The talk will cover vector search use cases, our roadmap, and a comparison of our initial implementation with other vector databases.
Vector Search with ScyllaDB by Szymon WasikScyllaDB
Mats Cronqvist - The nine nines and how to get there
1. The nine nines
mats.cronqvist@klarna.com
Ruminations on tools and strategies.
With boring anecdotes!
2. rumination
n 1: a calm lengthy intent consideration [syn:
contemplation, reflection, reflexion, musing,
thoughtfulness]
2: (of ruminants) chewing (the cud); "ruminants
have remarkable powers of rumination"
3: regurgitation of small amounts of food; seen in
some infants after feeding
3. this talk
the nine nines
debugging in the telecom world
debugging Erlang
4. the claim
"99.9999999% reliability (9 nines) (31 ms.
year!)"
http://ll2.ai.mit.edu/talks/armstrong.pdf
“The AXD301 has achieved a NINE nines
reliability (yes, you read that right,
99.9999999%). Let’s put this in context: 5 nines
is reckoned to be good (5.2 minutes of
downtime/year). 7 nines almost unachievable …
but we did 9.”
http://www.pragprog.com/articles/erlang
6. the reaction
"Before a power failure drained the USV the server this blog
has been running on had a uptime of about 420 days. So it had
NO downtime in a year. Does this mean 100% reliability? No."
"So obviously Erlang is not the only thing which makes an AXD
301 tick. I assume there is also a lot of clever reliability
engineering in the C code and in the hardware."
"There is no need use 99.9999999 % which ring so hollow."
http://blogs.23.nu/c0re/2007/08/
7. what I remember (a.k.a. The Truth)
(I was system architect/troubleshooter)
The customer (British Telecom) claimed
nine nines service availability integrated
over about 5 node-years.
As far as I know, no one in the AXD 301
project claimed that this was normal, or
even possible.
For the record, Joe Armstrong was not part
of the AXD 301 team.
8. the claim is pretty bogus...
there was much more C than Erlang in the
system
there were no restarts and no upgrades
the functionality was very well defined
9. nevertheless...
the system was very reliable
compared to similar systems, it was
amazingly reliable
I have been unable to find any publicly
available reference to this.
An ancdote will have to do!
10. the Dark Side
Embedded system.
Multi-million lines of C++.
The disks were too small for core files.
100s of units deployed.
...but...
The network worked.
11. why was it so stable?
high quality programmers? no...
superior system architecture? no...
realistic project management? yes.
testing and development were close
highly stable infrastructure? yes.
solaris/beam/OTP
properties of the Erlang language? yes.
highly productive (small team)
no memory management
selective receive
debugging
12. something rotten in Denmark...
Embedded system running OTP R5.
Live in Denmark.
There was no way to log into the CPU.
There was no way to load new code.
There was no usable application debugging
tool.
You could physically connect a terminal.
The node got overloaded after 90 days.
A tech traveled there and rebooted every 90
days.
13. ...tracing...
Wrote a one-liner...
...that ran a one-minute trace and wrote
to a file.
Sent it to the Danish tech by mail...
...who ran it by pasting it into a shell...
...before and after the reboot...
...and emailed the files to me (base-64
encoded)
14. ...saves the day!
Wrote a comparison profiler.
Compare the average execution time for
each function, before and after the reboot.
ets:lookup/2
was 100 times slower before the reboot.
24. Interrupts
The Erlang VM has 2 interrupt mechanisms
erlang:trace/3 (redbug)
erlang:system_monitor/2 (watchdog)
25. UNIX strace
STRACE(1) STRACE(1)
NAME
strace - trace system calls and signals
SYNOPSIS
...
DESCRIPTION
Strace intercepts and records the system calls which are called by a process
and the signals which are received by a process. The name of each system
call, its arguments and its return value are printed...
26. dbg - cons
dbg is too hard to use correctly
very tricky API
not safe
needed:
much simpler API
safer
disallow bad patterns
terminate if something bad happens
27. the Frankfurter
Pi = fun(P) when pid(P) -> case process_info(P, registered_name) of[] -> case process_info(P, initial_call) of {_, {proc_lib,init_p,5}}-> proc_lib:translate_initial_call(P); {_,
MFA} -> MFA; undefined ->unknown end; {_,Nam} -> Nam; undefined -> unknown end; (P) whenport(P) -> {name,N} = erlang:port_info(P,name), [Hd|_] =string:tokens
(N," "), Tl =lists:reverse(hd(string:tokens(lists:reverse(Hd),"/"))),list_to_atom(Tl); (R) when atom(R) -> R; ({R,Node}) when atom(R),Node == node() -> R; ({R, Node}) when
atom(R), atom(Node) -> {R,Node} end, Ts = fun(Nw) -> {_,{H,M,S}} =calendar:now_to_local_time(Nw), {H,M,S,element(3,Nw)} end, Munge =fun(I) -> case string:str(I,
"Return addr") of 0 -> casestring:str(I, "cp = ") of 0 -> []; _ -> [_, C|_] =string:tokens(I,"()+"), list_to_atom(C) end; _ -> case string:str(I,"erminate process normal") of 0 -> [_,
C|_] =string:tokens(I,"()+"), list_to_atom(C); _ -> [] end end end, Stack= fun(Bin) -> L = string:tokens( binary_to_list( Bin),"n"),{stack,lists:flatten(lists:map(Munge,L))} end,
Prc = fun(all) ->all; (Pd) when pid(Pd) -> Pd; ({pid,P1,P2}) when integer(P1),integer(P2) -> c:pid(0,P1,P2); (Reg) when atom(Reg) -> case whereis(Reg) of undefined -> exit
({rdbg, no_such_process, Reg}); Pid when pid(Pid) -> Pid end end, MsF = fun(stack, [{Head,Cond,Body}])-> [{Head,Cond,[{message,{process_dump}}|Body]}]; (return,
[{Head,Cond,Body}]) -> [{Head,Cond, [{return_trace}|Body]}]; (Head,[{_,Cond,Body}]) when tuple(Head)-> [{Head,Cond,Body}]; (X,_) ->exit({rdbg,bad_match_spec,X})
end, Ms = fun(Mss) -> lists:foldl(MsF,[{'_',[],[]}], Mss) end, ChkTP = fun({M,F}) when atom(M), atom(F),M/='_', F/='_' -> {{M,F,'_'},[],[global]}; ({M,F,MS}) when atom
(M),atom(F), M/='_', F/='_' -> {{M,F,'_'},Ms(MS),[global]};({M,F,MS,local}) when atom(M), atom(F), M/='_', F/='_' ->{{M,F,'_'},Ms(MS), [local]}; ({M,F,MS,global})
when atom(M), atom(F),M/='_', F/='_' -> {{M,F,'_'},Ms(MS),[global]}; (X) ->exit({rdbg,unrec_trace_pattern,X}) end, ChkTPs = fun(TPs) when list(TPs) -> lists:map(ChkTP,
TPs); (TP) -> [ChkTP(TP)] end, SetTPs =fun({MFA,MS,Fs}) -> erlang:trace_pattern(MFA,MS,Fs) end, DoInitFun =fun(Time) -> erlang:register(rdbg, self()),erlang:
start_timer(Time,self(), {die}),erlang:trace_pattern({'_','_','_'}, false,[local]),erlang:trace_pattern({'_','_','_'},false,[global]) end, InitFun =fun(Time,all,send) -> exit({rdbg,
too_many_processes}); (Time,all,'receive') -> exit({rdbg,too_many_processes}); (Time,P,send) -> DoInitFun(Time), erlang:trace(Prc(P),true,[send,timestamp]); (Time,
P,'receive') ->DoInitFun(Time), erlang:trace(Prc(P),true, ['receive', timestamp]);(Time,P,TPs) -> CTPs = ChkTPs(TPs), DoInitFun(Time),erlang:trace(Prc(P),true, [call,
timestamp]), lists:foreach(SetTPs,CTPs) end, LoopFun = fun(G,N,Out) when N < 1 -> erlang:trace(all, false,[call,send,'receive']), erlang:trace_pattern({'_','_','_'},false,
[local]), erlang:trace_pattern( {'_','_','_'},f alse,[global]), io:fwrite("**rdbg, ~w msgs **~n", [length(Out)]), io:fwrite("~p~n", [lists:reverse(Out)]), io:fwrite
("~p~n", process_info(self(), message_queue_len)]); (G,Cnt,Out) -> case process_info(self(),message_queue_len) of {_,N} when N > 100 -exit({rdbg,msg_queue, N}); _ -> ok
end, receive {timeout,_,{die}} ->G(G,0,Out); {trace_ts,Pid,send,Msg,To,TS} ->G(G,Cnt-1,[{send,Ts(TS), Pi(To),Msg}|Out]); {trace_ts,Pid,'receive',Msg,TS} ->G(G,Cnt-1,
[{'receive',Ts(TS),Msg}|Out]); {trace_ts,Pid,return_from, MFA,V,TS} ->G(G,Cnt-1,[{return,MFA,V}|Out]); {trace_ts,Pid,call,MFA,B,TS} whenbinary(B) -> G(G,Cnt-1,[{Pi
(Pid),Ts(TS), {Stack(B),MFA}}|Out]);{trace_ts,Pid,call,MFA,TS} -> G(G,Cnt-1,[{Pi(Pid),Ts(TS),MFA}|Out])end end, Rdbg = fun(Time,Msgs,Proc, Trc) when integer
(Time),integer(Msgs) -> Start = fun() ->InitFun(Time,Proc,Trc), LoopFun(LoopFun,Msgs,[]) end, erlang:spawn_link(Start) end.
29. redbug - safety
Safety comes from
turns off if
reach timeout
reach number of trace message limit
trace messages are too large
trace messages coming in too fast
disallows potentially dangerous traces
33. redbug opts
time (15000) stop trace after this many ms
msgs (10) stop trace after this many msgs
proc (all) (list of) Erlang process(es)
targ (node()) node to trace on
print_file (standard_io) print to this file
file (none) use a trc file
34. conclusions
reliability is easier in Erlang than in C++
...but not by any means automatic
to get high reliability you need testing
...and debugging
debuggability is a core strength of Erlang
...especially call tracing
eper.googlecode.com/