What is Erlang? Why it is important? Why should Python programmers learn Erlang? How is Erlang different? How is Erlang the same? These and other questions will be answered during this talk, as well as this one: Should Erlang be the new programming language you learn this year?
The document summarizes Alvaro Videla's presentation on integrating Erlang with PHP. It introduces Erlang as a general purpose, functional programming language invented at Ericsson in 1986. It then discusses some popular products built with Erlang like Amazon SimpleDB and RabbitMQ. The presentation covers the PHP Erlang Bridge extension, which allows PHP to communicate with Erlang nodes. Examples are given of building a RabbitMQ admin console and using Erlang for PHP session storage. The document concludes by discussing how to install the extension and use it to send/receive messages and make RPC calls to Erlang.
This document provides an overview of Clojure and why one may want to try it. Some key points include:
- Clojure is a functional programming language that runs on the JVM and allows easy interoperability with Java.
- It has a very small and elegant syntax based on Lisp with sensible macro names and prefix notation.
- Clojure encourages pure functional programming and the use of immutable data structures, while providing tools like Software Transactional Memory to allow safe mutable state changes.
- Its focus on functions as first-class citizens and referential transparency can provide benefits for writing parallel and concurrent code more easily compared to other languages.
Erlang and XMPP can be used together in several ways:
1. Erlang is well-suited for implementing XMPP servers due to its high concurrency and reliability. ejabberd is an example of a popular Erlang XMPP server.
2. The XMPP protocol can be used to connect Erlang applications and allow them to communicate over the XMPP network. Libraries like Jabberlang facilitate writing Erlang XMPP clients.
3. XMPP provides a flexible messaging backbone that can be extended using Erlang modules. This allows Erlang code to integrate with and enhance standard XMPP server functionality.
The document discusses tips for improving developer productivity by optimizing the edit-build-test cycle. It presents several tools that can help speed up and streamline the development workflow, such as PeepOpen for navigating code, Kerl for managing Erlang versions, Rebar for simplifying build processes, Mochiweb Reloader for automatic reloading of code changes, and Sync for automatic compilation and reloading without using the shell. It also recommends writing unit tests with EUnit and Cover to catch errors and measure code coverage. The overall message is that by reducing inefficiencies in the edit-build-test cycle through these kinds of tools, developers can significantly increase the progress they are able to make.
This document provides an introduction to the Elixir programming language. It discusses what Elixir and Erlang are, how to install Elixir, manage packages and environments with Mix, set up a new project, run code, and work with basic data types like integers, floats, booleans, strings, lists, tuples, and maps. It also covers conditionals, functions, modules, debugging, exercises, and suggests topics to learn next like iterating, mapping, recursion, OTP, Phoenix, Ecto, and Nerves.
The document discusses Erlang and scalability. It introduces common scalability killers like synchronization and resource contention. It describes Erlang's design decisions that promote scalability, including processes with no sharing, no implicit synchronization, and concurrency-oriented programming. The document provides examples of thinking concurrently, rules of thumb for scalability, and case studies showing how Erlang scales on multicore systems.
20 reasons why we don't need architects (@pavlobaron)Pavlo Baron
This document discusses the changing role of software architects and argues that they are no longer needed. It notes that agility has become mainstream and that conflicts between architects and developers are too large. It suggests that the team as a whole can serve as the architect and that what is needed are tools to help with architecture management, workflow, and reproducing architectures across teams. The document questions what an architect should be in this new landscape, listing roles like visionary, chief motivator, and worker.
The document describes a talk on thinking in the Clojure way. It discusses Clojure's syntax, core functional programming concepts, recursion and lazy sequences. It also covers Clojure's spirit of pragmatism, correctness through immutable data, uniform interfaces, and use of sequences as computation media. Mutation is handled through reference types that embody well-defined patterns. The document encourages thinking functionally by avoiding imperative and object-oriented habits, and provides Conway's Game of Life as an example of rethinking a typically loop-based problem functionally.
The document summarizes Alvaro Videla's presentation on integrating Erlang with PHP. It introduces Erlang as a general purpose, functional programming language invented at Ericsson in 1986. It then discusses some popular products built with Erlang like Amazon SimpleDB and RabbitMQ. The presentation covers the PHP Erlang Bridge extension, which allows PHP to communicate with Erlang nodes. Examples are given of building a RabbitMQ admin console and using Erlang for PHP session storage. The document concludes by discussing how to install the extension and use it to send/receive messages and make RPC calls to Erlang.
This document provides an overview of Clojure and why one may want to try it. Some key points include:
- Clojure is a functional programming language that runs on the JVM and allows easy interoperability with Java.
- It has a very small and elegant syntax based on Lisp with sensible macro names and prefix notation.
- Clojure encourages pure functional programming and the use of immutable data structures, while providing tools like Software Transactional Memory to allow safe mutable state changes.
- Its focus on functions as first-class citizens and referential transparency can provide benefits for writing parallel and concurrent code more easily compared to other languages.
Erlang and XMPP can be used together in several ways:
1. Erlang is well-suited for implementing XMPP servers due to its high concurrency and reliability. ejabberd is an example of a popular Erlang XMPP server.
2. The XMPP protocol can be used to connect Erlang applications and allow them to communicate over the XMPP network. Libraries like Jabberlang facilitate writing Erlang XMPP clients.
3. XMPP provides a flexible messaging backbone that can be extended using Erlang modules. This allows Erlang code to integrate with and enhance standard XMPP server functionality.
The document discusses tips for improving developer productivity by optimizing the edit-build-test cycle. It presents several tools that can help speed up and streamline the development workflow, such as PeepOpen for navigating code, Kerl for managing Erlang versions, Rebar for simplifying build processes, Mochiweb Reloader for automatic reloading of code changes, and Sync for automatic compilation and reloading without using the shell. It also recommends writing unit tests with EUnit and Cover to catch errors and measure code coverage. The overall message is that by reducing inefficiencies in the edit-build-test cycle through these kinds of tools, developers can significantly increase the progress they are able to make.
This document provides an introduction to the Elixir programming language. It discusses what Elixir and Erlang are, how to install Elixir, manage packages and environments with Mix, set up a new project, run code, and work with basic data types like integers, floats, booleans, strings, lists, tuples, and maps. It also covers conditionals, functions, modules, debugging, exercises, and suggests topics to learn next like iterating, mapping, recursion, OTP, Phoenix, Ecto, and Nerves.
The document discusses Erlang and scalability. It introduces common scalability killers like synchronization and resource contention. It describes Erlang's design decisions that promote scalability, including processes with no sharing, no implicit synchronization, and concurrency-oriented programming. The document provides examples of thinking concurrently, rules of thumb for scalability, and case studies showing how Erlang scales on multicore systems.
20 reasons why we don't need architects (@pavlobaron)Pavlo Baron
This document discusses the changing role of software architects and argues that they are no longer needed. It notes that agility has become mainstream and that conflicts between architects and developers are too large. It suggests that the team as a whole can serve as the architect and that what is needed are tools to help with architecture management, workflow, and reproducing architectures across teams. The document questions what an architect should be in this new landscape, listing roles like visionary, chief motivator, and worker.
The document describes a talk on thinking in the Clojure way. It discusses Clojure's syntax, core functional programming concepts, recursion and lazy sequences. It also covers Clojure's spirit of pragmatism, correctness through immutable data, uniform interfaces, and use of sequences as computation media. Mutation is handled through reference types that embody well-defined patterns. The document encourages thinking functionally by avoiding imperative and object-oriented habits, and provides Conway's Game of Life as an example of rethinking a typically loop-based problem functionally.
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaHakka Labs
Mahesh talks about the buddha-nature of Erlang/OTP, pointing out how the various features of the language tie together into one seamless Fault Tolerant whole. Mahesh emphasizes that Erlang begins and ends with Fault Tolerance. Fault Tolerance is baked into the very genes of Erlang/OTP - something that ends up being amazingly useful when building any kind of system. Mahesh Paolini-Subramanya is the V.P. of R&D at Ubiquiti Networks - a manufacturer of disruptive technology platforms for emerging markets. He has spent the recent past building out Erlang-based massively concurrent Cloud Services and VoIP platforms. Mahesh was previously the CTO of Vocalocity after its merger with Aptela, where he was a founder and CTO.
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
Erlang excels at building distributed, fault-tolerant, concurrent applications due to its lightweight process model and built-in support for distribution. However, Java is more full-featured and is generally a better choice for applications that require more traditional object-oriented capabilities or need to interface with existing Java libraries and frameworks. Both languages have their appropriate uses depending on the requirements of the specific application being developed.
The document provides an agenda for a two-day workshop on Clojure. Day one covers Clojure overviews and fundamentals including syntax, functions, flow control, and collections. Day two covers additional topics like testing, concurrency, polymorphism, performance, and tooling. The document also provides background on Clojure being a Lisp designed for functional programming and concurrency on the JVM.
VoltDB and Erlang: two very promising beasts, made for the new parallel world, but still lingering in the wings. Not only are they addressing todays challenges but they are using parallel architectures as corner stone of their new and surprising approach to be faster and more productive. What are they good for? Why are we working to team them up?
Erlang promises faster implementation, way better maintenance and 4 times shorter code. VoltDB claims to be two orders of magnitude faster than its competitors. The two share many similarities: both are the result of scientific research and designed from scratch to address the new reality of parallel architectures with full force.
This talk presents the case for Erlang as server language, where it shines, how it looks, and how to get started. It details Erlang's secret sauce: microprocesses, actors, atoms, immutable variables, message passing and pattern matching. (Note: for a longer version of this treatment of Erlang only see: Why Erlang? http://www.slideshare.net/eonblast/why-erlang-gdc-online-2012)
VoltDB's inner workings are explained to understand why it can be so incredibly fast and still better than its NoSQL competitors. The well publicized Node.js benchmark clocking in at 695,000 transactions per second is described and the simple steps to get VoltDB up and running to see the prodigy from up close.
Source examples are presented that show Erlang and VoltDB in action.
The speaker is creator and maintainer of the Erlang VoltDB driver Erlvolt.
Ruben Amortegui discusses his journey from Perl to Elixir. He was drawn to Elixir for building real-time and IoT applications due to its ability to scale and its functional programming syntax similar to Ruby. He ported his Perl e-commerce cart plugin EcCart to Elixir to familiarize himself with Elixir and functional programming concepts. The ported version of EcCart is now available on Hex.pm and its code is on GitHub. Amortegui found Elixir and its tools like Phoenix, Ecto and Hex made him productive and he enjoys Elixir's approach to functional programming.
The document is a presentation about Elixir for aspiring Erlang developers. It begins with background information, stating the presentation is aimed at computer science students who have taken a course on Erlang. It then covers an introduction to Elixir and some key differences between Erlang and Elixir such as syntax and semantics. The presentation demonstrates how to create a simple "Hello World" application in Elixir and also how to build a simple web page using Phoenix. It concludes by discussing when it may be appropriate to use Elixir versus other options.
Clojure is a LISP-like programming language that runs on the Java Virtual Machine. It was created in 2007 by Rich Hickey and is currently at version 1.1. Clojure is a functional, immutable, and concurrency-oriented language. It features LISP syntax, macros, immutability, functional programming, and easy interoperability with Java. Data structures in Clojure are code, allowing homoiconicity. Clojure also supports lazy sequences, STM-based concurrency without locks, and dynamic behavior via its REPL.
The goal of this talk is to provide new and existing Elixir programmers with knowledge on how to get their application into production and, once it's there, how to tune it for scale.
The document discusses the Erlang programming language and its focus on fault tolerance. It summarizes the "Big Six" principles of Erlang - concurrency, fault detection, fault identification, error encapsulation, code upgrade, and stable storage. It explains how Erlang implements processes that can crash and restart independently, with supervision to restart failed processes when needed. The principles of loose coupling and monitoring are also discussed in the context of building fault-tolerant systems and organizations.
Clojure is wonderful new language for the JVM that's really making waves: a functional Lisp dialect with full interoperation with Java, and a suite of excellent concurrency utilities ... but it's more than that.
Clojure is a highly expressive and highly adaptable language that allows you to focus on your craft in a way traditional languages such as Java and C# do not. In this session, we'll introduce the language and its core utilities and then introduce the fundamental concepts of functional programming as they apply to Clojure. Clojure has been described as a "high level language beamed back from the near future" ... come see what your future may hold, and why you're really going to like it!
This introduction to Clojure was given to the Utah Java Users Group Aug. 15. It's main focus was on Clojure's time model and how the design of Clojure separates (decomplects) many concepts which are all implemented onto of Objects in Java, and other OO languages. This is the abstract for the original talk:
Tony Hoare famously said "There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." Clojure is a functional Lisp that targets, among other platforms, the JVM and strives to enable the former approach to building software.
In its pursuit of simplicity Clojure encourages the use of pure functions, sequence abstractions which allow for lazy and parallel processing of data, persistent (immutable) data structures, and a novel way of dealing with state as a succession of values. While these concepts may sound intimidating for those unfamiliar with functional programming, they are actually less complicated than many programming constructs that programmers use everyday.
This talk will cover these concepts and the motivation behind them. You will learn the basics of Clojure programming and will be given a taste of what developing an application in Clojure is like.
This document provides an overview of using Clojure for data science. It discusses why Clojure is suitable for data science due to its functional programming capabilities, performance on the JVM, and rich library ecosystem. It introduces core.matrix, a Clojure library that provides multi-dimensional array programming functionality through Clojure protocols. The document covers core.matrix concepts like array creation and manipulation, element-wise operations, broadcasting, and optional support for mutability. It also discusses core.matrix implementation details like the performance benefits of using Clojure protocols.
This document introduces Clojure for Java developers with little Clojure experience. It discusses why Clojure is a good option, what Clojure is, its core concepts like immutability and functional programming, and how to interact with Java from Clojure. It also provides an overview of managing Clojure projects and deploying Clojure applications to the cloud.
Erlang - Concurrent Language for Concurrent WorldZvi Avraham
This document provides biographical information about Zvi Avraham, the founder and CEO of ZADATA Ltd. It then discusses concurrency-oriented programming (COP) and how it differs from object-oriented programming (OOP). COP focuses on processes rather than objects and emphasizes location transparency, isolation of processes without shared memory, and message passing between processes. The document outlines principles of COP like "share nothing" and "no mutable state." It discusses the Erlang programming language, which is designed for COP. Key aspects of Erlang covered include lightweight processes, distribution, fault tolerance, hot code reloading, and the BEAM virtual machine. Tools for Erlang like OTP, libraries, and debuggers are also
Clojure is a functional programming language that promotes functional programming style. In functional programming, functions are the fundamental building blocks rather than program instructions. Pure functions depend only on their parameters and return a value without side effects. Clojure supports defining functions using defn, anonymous functions, and higher-order functions. Functions can be composed together and curried to create new functions. Recursion is natural in functional programming through expressions like recursion without modifying state.
Clojure: Towards The Essence Of Programming (What's Next? Conference, May 2011)Howard Lewis Ship
The document discusses Clojure and its approach to programming. It begins by defining the essence of programming as the intrinsic nature that determines a language's character. It then discusses how Clojure focuses on the essential aspects of programming by removing ceremony and focusing on data rather than objects or classes. The document uses examples to illustrate how Clojure allows for concise yet expressive code through its emphasis on data, immutability, and functional programming.
Erlang uses pattern matching rather than variable assignment. When using the = symbol in Erlang, it matches the left-hand side to the right-hand side rather than assigning a value. This means a variable can only be matched once - a bound variable cannot be reused like in other languages. So a statement like A = A + 1 would generate an error, as it is trying to match the already bound variable A to a new value.
A somewhat strange and convoluted explanation why Elixir is interesting for a programmer who is already happily coding Python as a day job. Presented at Montel Intergalactic TekijäTorstai (April 2018).
This document provides an overview introduction to the Ruby programming language. It discusses what Ruby is, basic syntax, key features like being dynamically typed and object-oriented, implementations, applications, and the ecosystem. It also covers topics like variables, data types, control flow, methods, classes, and encapsulation. Code examples are provided to demonstrate various language constructs.
Erlang - Because s**t Happens by Mahesh Paolini-SubramanyaHakka Labs
Mahesh talks about the buddha-nature of Erlang/OTP, pointing out how the various features of the language tie together into one seamless Fault Tolerant whole. Mahesh emphasizes that Erlang begins and ends with Fault Tolerance. Fault Tolerance is baked into the very genes of Erlang/OTP - something that ends up being amazingly useful when building any kind of system. Mahesh Paolini-Subramanya is the V.P. of R&D at Ubiquiti Networks - a manufacturer of disruptive technology platforms for emerging markets. He has spent the recent past building out Erlang-based massively concurrent Cloud Services and VoIP platforms. Mahesh was previously the CTO of Vocalocity after its merger with Aptela, where he was a founder and CTO.
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
Erlang excels at building distributed, fault-tolerant, concurrent applications due to its lightweight process model and built-in support for distribution. However, Java is more full-featured and is generally a better choice for applications that require more traditional object-oriented capabilities or need to interface with existing Java libraries and frameworks. Both languages have their appropriate uses depending on the requirements of the specific application being developed.
The document provides an agenda for a two-day workshop on Clojure. Day one covers Clojure overviews and fundamentals including syntax, functions, flow control, and collections. Day two covers additional topics like testing, concurrency, polymorphism, performance, and tooling. The document also provides background on Clojure being a Lisp designed for functional programming and concurrency on the JVM.
VoltDB and Erlang: two very promising beasts, made for the new parallel world, but still lingering in the wings. Not only are they addressing todays challenges but they are using parallel architectures as corner stone of their new and surprising approach to be faster and more productive. What are they good for? Why are we working to team them up?
Erlang promises faster implementation, way better maintenance and 4 times shorter code. VoltDB claims to be two orders of magnitude faster than its competitors. The two share many similarities: both are the result of scientific research and designed from scratch to address the new reality of parallel architectures with full force.
This talk presents the case for Erlang as server language, where it shines, how it looks, and how to get started. It details Erlang's secret sauce: microprocesses, actors, atoms, immutable variables, message passing and pattern matching. (Note: for a longer version of this treatment of Erlang only see: Why Erlang? http://www.slideshare.net/eonblast/why-erlang-gdc-online-2012)
VoltDB's inner workings are explained to understand why it can be so incredibly fast and still better than its NoSQL competitors. The well publicized Node.js benchmark clocking in at 695,000 transactions per second is described and the simple steps to get VoltDB up and running to see the prodigy from up close.
Source examples are presented that show Erlang and VoltDB in action.
The speaker is creator and maintainer of the Erlang VoltDB driver Erlvolt.
Ruben Amortegui discusses his journey from Perl to Elixir. He was drawn to Elixir for building real-time and IoT applications due to its ability to scale and its functional programming syntax similar to Ruby. He ported his Perl e-commerce cart plugin EcCart to Elixir to familiarize himself with Elixir and functional programming concepts. The ported version of EcCart is now available on Hex.pm and its code is on GitHub. Amortegui found Elixir and its tools like Phoenix, Ecto and Hex made him productive and he enjoys Elixir's approach to functional programming.
The document is a presentation about Elixir for aspiring Erlang developers. It begins with background information, stating the presentation is aimed at computer science students who have taken a course on Erlang. It then covers an introduction to Elixir and some key differences between Erlang and Elixir such as syntax and semantics. The presentation demonstrates how to create a simple "Hello World" application in Elixir and also how to build a simple web page using Phoenix. It concludes by discussing when it may be appropriate to use Elixir versus other options.
Clojure is a LISP-like programming language that runs on the Java Virtual Machine. It was created in 2007 by Rich Hickey and is currently at version 1.1. Clojure is a functional, immutable, and concurrency-oriented language. It features LISP syntax, macros, immutability, functional programming, and easy interoperability with Java. Data structures in Clojure are code, allowing homoiconicity. Clojure also supports lazy sequences, STM-based concurrency without locks, and dynamic behavior via its REPL.
The goal of this talk is to provide new and existing Elixir programmers with knowledge on how to get their application into production and, once it's there, how to tune it for scale.
The document discusses the Erlang programming language and its focus on fault tolerance. It summarizes the "Big Six" principles of Erlang - concurrency, fault detection, fault identification, error encapsulation, code upgrade, and stable storage. It explains how Erlang implements processes that can crash and restart independently, with supervision to restart failed processes when needed. The principles of loose coupling and monitoring are also discussed in the context of building fault-tolerant systems and organizations.
Clojure is wonderful new language for the JVM that's really making waves: a functional Lisp dialect with full interoperation with Java, and a suite of excellent concurrency utilities ... but it's more than that.
Clojure is a highly expressive and highly adaptable language that allows you to focus on your craft in a way traditional languages such as Java and C# do not. In this session, we'll introduce the language and its core utilities and then introduce the fundamental concepts of functional programming as they apply to Clojure. Clojure has been described as a "high level language beamed back from the near future" ... come see what your future may hold, and why you're really going to like it!
This introduction to Clojure was given to the Utah Java Users Group Aug. 15. It's main focus was on Clojure's time model and how the design of Clojure separates (decomplects) many concepts which are all implemented onto of Objects in Java, and other OO languages. This is the abstract for the original talk:
Tony Hoare famously said "There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult." Clojure is a functional Lisp that targets, among other platforms, the JVM and strives to enable the former approach to building software.
In its pursuit of simplicity Clojure encourages the use of pure functions, sequence abstractions which allow for lazy and parallel processing of data, persistent (immutable) data structures, and a novel way of dealing with state as a succession of values. While these concepts may sound intimidating for those unfamiliar with functional programming, they are actually less complicated than many programming constructs that programmers use everyday.
This talk will cover these concepts and the motivation behind them. You will learn the basics of Clojure programming and will be given a taste of what developing an application in Clojure is like.
This document provides an overview of using Clojure for data science. It discusses why Clojure is suitable for data science due to its functional programming capabilities, performance on the JVM, and rich library ecosystem. It introduces core.matrix, a Clojure library that provides multi-dimensional array programming functionality through Clojure protocols. The document covers core.matrix concepts like array creation and manipulation, element-wise operations, broadcasting, and optional support for mutability. It also discusses core.matrix implementation details like the performance benefits of using Clojure protocols.
This document introduces Clojure for Java developers with little Clojure experience. It discusses why Clojure is a good option, what Clojure is, its core concepts like immutability and functional programming, and how to interact with Java from Clojure. It also provides an overview of managing Clojure projects and deploying Clojure applications to the cloud.
Erlang - Concurrent Language for Concurrent WorldZvi Avraham
This document provides biographical information about Zvi Avraham, the founder and CEO of ZADATA Ltd. It then discusses concurrency-oriented programming (COP) and how it differs from object-oriented programming (OOP). COP focuses on processes rather than objects and emphasizes location transparency, isolation of processes without shared memory, and message passing between processes. The document outlines principles of COP like "share nothing" and "no mutable state." It discusses the Erlang programming language, which is designed for COP. Key aspects of Erlang covered include lightweight processes, distribution, fault tolerance, hot code reloading, and the BEAM virtual machine. Tools for Erlang like OTP, libraries, and debuggers are also
Clojure is a functional programming language that promotes functional programming style. In functional programming, functions are the fundamental building blocks rather than program instructions. Pure functions depend only on their parameters and return a value without side effects. Clojure supports defining functions using defn, anonymous functions, and higher-order functions. Functions can be composed together and curried to create new functions. Recursion is natural in functional programming through expressions like recursion without modifying state.
Clojure: Towards The Essence Of Programming (What's Next? Conference, May 2011)Howard Lewis Ship
The document discusses Clojure and its approach to programming. It begins by defining the essence of programming as the intrinsic nature that determines a language's character. It then discusses how Clojure focuses on the essential aspects of programming by removing ceremony and focusing on data rather than objects or classes. The document uses examples to illustrate how Clojure allows for concise yet expressive code through its emphasis on data, immutability, and functional programming.
Erlang uses pattern matching rather than variable assignment. When using the = symbol in Erlang, it matches the left-hand side to the right-hand side rather than assigning a value. This means a variable can only be matched once - a bound variable cannot be reused like in other languages. So a statement like A = A + 1 would generate an error, as it is trying to match the already bound variable A to a new value.
A somewhat strange and convoluted explanation why Elixir is interesting for a programmer who is already happily coding Python as a day job. Presented at Montel Intergalactic TekijäTorstai (April 2018).
This document provides an overview introduction to the Ruby programming language. It discusses what Ruby is, basic syntax, key features like being dynamically typed and object-oriented, implementations, applications, and the ecosystem. It also covers topics like variables, data types, control flow, methods, classes, and encapsulation. Code examples are provided to demonstrate various language constructs.
Erlang is a general-purpose, concurrent, fault-tolerant programming language and runtime environment used to build distributed, real-time applications like WhatsApp chat. It uses lightweight processes, message passing, and supervision trees to enable robust concurrency. Some key features include functional programming, pattern matching, recursion, and built-in support for distribution, concurrency, and monitoring of processes.
Experiments in Sharing Java VM Technology with CRubyMatthew Gaudet
IBM is developing a just-in-time (JIT) compiler called Testarossa based on its Open Runtime (OMR) toolkit. The goal is to integrate the JIT compiler into MRI Ruby to improve performance without changing how MRI works. So far, the JIT supports most opcodes and can run Rails applications, but performance gains are modest. IBM hopes to collaborate with the Ruby community to further optimize Ruby and help make it faster.
The hangover: A "modern" (?) high performance approach to build an offensive ...Nelson Brito
T50 (an Experimental Mixed Packet Injector) very first public tak about the version 2.5 (The Murder Version).
Check the original demonstration videos:
- https://www.youtube.com/playlist?list=PLda9TmFadx_m2qdd-euUf4zhQ-5juTVEx
For further source codes, please, refer to:
- http://t50.sourceforge.net/
The document discusses compilers and their role in translating high-level programming languages into machine-readable code. It provides examples of Fortran code being compiled into Java byte code. A compiler consists of a front end that analyzes syntax and semantics and a back end that generates machine code. The front end performs lexical analysis, parsing, and generates an abstract syntax tree and symbol table. The back end then takes this intermediate representation and converts it into executable machine instructions.
Eugene Pirogov talks about “Origins of Elixir” during #pivorak Lviv Ruby MeetUp 2016
Details:
“For the past 6 years I've been programming in Ruby. Began shifting from Ruby to Elixir during a sabbatical. Started doing programming exercises in Elixir as well as contributing to Elixir language and variety of small libraries in the ecosystem. I'm a strong believer that Elixir, being backed by immensely powerful, robust and battle-tested Erlang VM will take over the world of web development.” - that’s what Eugene says.
Simple presentation for an Introductory Session for local area youth and other interested individuals who might want to learn more of what is not currently being taught in schools anymore.
A short presentation about Erlang, specifically designed for concurrency characteristics.
For the course: Scientific Writing and Communication (KTH Royal Institute of Technology)
Introduction to Ruby On Rails Killer wannabe: Elixir - a functional concurrent, distributed language compiled to Erlang VM. Presentation from #wrug on 30th of June.
Sugar is a meta-programming language that provides a syntactic wrapper for other programming languages. It aims to have an easy to learn syntax that focuses on software architecture, readability, and expressiveness. Sugar translates code written in its syntax to commonly used languages like JavaScript, Python, and ActionScript by taking advantage of their common features while abstracting differences. It provides a full program representation through its LambdaFactory API to allow meta-programming capabilities like modifying or analyzing programs.
The winning entry titled "Most competitive" leverages complex Ruby tricks to obfuscate a program that evaluates itself. It uses techniques like dynamically generating code strings, manipulating character encodings, and exploiting edge cases in Ruby's parsing and evaluation rules. The goal is to demonstrate both the robustness of Ruby interpreters in running such esoteric code, as well as uncover subtle aspects of Ruby's specification and implementation. The judges awarded it high honors for achieving the contest's goals of producing transcendental, imbroglio code.
This document discusses the Go programming language and why it has become popular. It notes that Go is an optional language released in 2012 that does not force developers to use it for certain applications like Java does for Android. The document states that the one main reason Go has become popular is that "It just works" - Go makes development simpler by handling things like concurrency and deployment automatically while still exposing lower-level functionality. It recommends using Go for distributed systems, portable command line tools, and situations where team productivity is important.
A short training introducing binary reverse engineering in x86. Some application to malware is presented as well. The actual training is hands on and contains a software package for the participants.
The document discusses open source hardware and the open source nature of projects from SparkFun and .:oomlout:. Open source means designs, guides, code, and 3D models are freely available to download, reproduce, modify, and distribute under a Creative Commons license as long as credit is given and developments are shared in a similar open manner. The goal is to make physical things as accessible and fun to learn with as open source software has been.
[Ruxcon 2011] Post Memory Corruption Memory AnalysisMoabi.com
The document introduces PMCMA, a debugger tool that analyzes memory corruption bugs by forcing processes to fork, overwriting memory locations in the offspring processes, and monitoring execution to map exploitable scenarios. PMCMA aims to provide a roadmap for exploitation by identifying vulnerabilities and possible exploitation techniques like truncating function pointers or exploiting 4-byte aligned memory writes. The tool is available online and has received over 10,000 downloads in its first two months.
Erlang is a programming language used to build distributed, fault-tolerant systems. It was developed in the late 1980s at Ericsson for building telecom applications. Erlang uses lightweight processes to model systems and provides features like process isolation, message passing, distribution, and hot code swapping. The Open Telecom Platform (OTP) is a set of libraries and design principles for building robust Erlang applications. Many companies use Erlang for building scalable and reliable systems, including WhatsApp, Klarna, and Ericsson.
Python Ireland June Meetup @ Science Gallery.
For many programs, it's important to have some strategy for doing I/O in an async manner. This talk will attempt to provide a quick overview of the basic principles of the topic, some examples of existing support in Python frameworks and an introduction to recent work by Guido to bring async I/O support into Python core.
Presentation about how Python Ireland started, who we are, how we got to where we are today, the events we hold including PyCon Ireland and how we integrate with other user groups in Ireland.
Object Orientation vs. Functional Programming in PythonPython Ireland
The document discusses object orientation and functional programming approaches in Python. It covers various object-oriented programming concepts like the template method pattern, abstract base classes, mixins, and composition. It also covers functional programming concepts like callbacks, higher-order functions, decorators, and partial function application. It concludes that Python supports both paradigms well and that depending on the situation, one approach may be more appropriate, but the tools can also complement each other.
At PyCon Ireland 2010, Paul described his experience of working with Python 3 in creating O'Reilly's Head First Programming and Head First Python (both of which target Python 3). As a big fan of Python 3, Paul suggested that all Python 2 programmers needed to at least try Python 3 as soon as was practical, if not embrace it for all "new" work. In this talk, Paul provides an update on the current status of Python 3 and discusses the community's adoption (or lack of) the latest version of the Python programming language, talking about what has changed in the year and a bit since last year, as well as describing his own experience of working with Python on recent consultancy projects.
Google App Engine in 40 minutes (the absolute essentials)Python Ireland
This talk covers just the stuff needed to get you up-to-speed with Google App Engine and its associated technologies (based on the Python run-time, of course). In addition to a bit of talking, Paul will also demo a working webapp built and deployed on the App Engine cloud... all in 40 minutes.
Web-service based Mobile Geospatial Application Development using PythonPython Ireland
As the development of mobile technology keeps marching forward, a noticeable trend of integrating location- and orientation-aware sensors (i.e., GPS receiver, digital compass, and accelerometer) into today’s smartphones has significantly promoted the development of mobile Location Based Services (LBS). At the same time, geospatial information is increasingly recognized as the common denominator in both today’s “Web 2.0” peer-to-peer social network era and tomorrow’s “Web 4.0”. As a result, embracing the growing rich spatial resources and adopting them for the mobile geospatial application development is essential. However, considering the large amount spatial data for processing and the physical limitation of today’s mobile devices in relation to battery power, CPU speed and data storage etc., it is nearly impossible to accomplish all computation intensive tasks efficiently on the device itself. Therefore, client-server architecture is usually a preferred option where the mobile devices act as clients sending requests and receiving responses whilst the calculation modules are wrapped and delivered in the form of web services. In this case, on the server side, the geospatial applications can take advantages of the capability of a variety of spatial databases back-ends, including spatial indexing, searching and retrieving. There are now a variety of Python modules, libraries and open sources etc. available for fast constructing and deploying web services for mobile geospatial applications. This talk attempts to give an introduction on using Python for building RESTful web-services for mobile geospatial application development, including back-end spatial database access and spatial information retrieval.
Utopia Kingdoms scaling case. From 4 users to 50.000+Python Ireland
This document summarizes the scaling of a fantasy strategy game called Utopia Kingdoms from 4 users to over 90,000 users. It discusses the technology stack including Python, CherryPy, Amazon SimpleDB, and frontend technologies. It also describes some performance issues encountered with the database and solutions attempted, such as migrating from SimpleDB to MongoDB and implementing caching, queueing actions, and optimizing database queries. The importance of ongoing measurement and monitoring to identify bottlenecks is emphasized.
The Larch - a visual interactive programming environmentPython Ireland
The Larch Environment is a visual interactive programming environment for Jython/Python, that makes programming more visual. Its is designed for the creation of visual interactive programs, and programs that operate as interactive technical literature. To this end, protocols for presenting objects visually have been devised. An active document based programming environment builds on the edit-run-debug cycle of a standard console, allowing a programmer to experiment with ideas, and develop visual programs at the same time. Additionally, a way of embellishing source code with visual content is presented.
http://sites.google.com/site/larchenv
Python vs JLizard.... a python logging experiencePython Ireland
The presentation will give a general overview of logging and why it is becoming more important for cloud based systems. In particular it will focus on limitations in PAAS logging infrastructures and will outline how more powerful logging can be achieved on python platforms such as app engine giving details on python/app engine plug in libraries that have been developed. The talk will also outline how JLizard has made wide use of python as part of its log management as a service technology (Logentries.com).
(Level: Beginner)
Abstract: Vim makes for a great editing experience for Python projects. In this session Derek will show you:
- Vim basics and modes
- Vim plugins that are useful for - Python development
- How to organise your plugins
- How to script Vim with Python.
Google App Engine provides a platform for building and hosting scalable web applications. It allows developers to write applications in Python, Java, Go or PHP and handle all the complexities of scaling an application. The document demonstrates building a simple Stack Overflow clone called App Overflow on App Engine, including adding user authentication, storing and querying data, and using services like Memcache, Images and Task Queue. It also discusses how App Engine handles scalability automatically through its distributed architecture and services.
Python Ireland May 2011 - What is Pyramid and where is it with respect to Dja...Python Ireland
(Level: Intermediate) Tutorial introduction to Pyramid, showing how to install and create a simple view and a database mapped view. Will focus on the differences with respect to Django.
Python Ireland Nov 2010 Talk: Unit TestingPython Ireland
Unit testing for those seeking instant gratification - Maciej Bliziński
Abstract: Unit testing has long term benefits. However, depending on how you use it, it can have short term benefits too. This is an introductory talk, aimed at both beginner and experienced Python programmers who would like to get started testing their code.
Python Ireland Nov 2010 - RESTing with DjangoPython Ireland
This document discusses building RESTful APIs with Django. It provides a quick overview of REST principles like resources, representations, and uniform interfaces using HTTP methods. It then outlines a general approach to building REST APIs with Django by mapping URLs and views to models. Specific HTTP methods like GET, POST, PUT, DELETE are mapped to CRUD operations. Tools like Firebug and SQLite Manager are recommended for testing and viewing REST responses. Overall it provides guidance on implementing RESTful APIs in Django following best practices.
Python Ireland Feb '11 Talks: Introduction to PythonPython Ireland
"Introduction to Python" by Sean O'Donnell
Level: Beginner
Abstract:
The content is an introduction to python, by means of comparing it to C, Java and Ruby.
Video:
http://vimeo.com/groups/pythonireland/videos/20239008
Thanks to all who came along. Approx. 30 people turned up.
Thanks to Science Gallery for being our host.
sciencegallery.com/
Python Ireland Dec Talks - Windows Azure -- The Nuts and BoltsPython Ireland
Speaker: Stephen Fitzmaurice
Abstract:
With the Windows Azure platform, we get a highly scalable environment, pay only for the resources we need, and relieve subscribers of the responsibilities required for supporting dynamic software and hardware infrastructure.
This is an introductory talk to…
- Explain the foundation constituents of the Windows Azure Platform and the underlying infrastructure.
- Demonstrate the Cloud developer experience in Windows Azure.
- Showcase one of the early Windows Azure adopters revealing the reasons behind their choice, the flexibility that they are now empowered with and the success it has brought to their business.
Questions? You can contact Stephen at stephen.fitzmaurice@microsoft.com
This short document introduces some basic Python concepts like PRINT, IF, and FOR statements in only 3 lines without providing much context or examples.
Sept 2010 Talks @ The Science Gallery
Speaker: Alan Kennedy
(Level: Intermediate/Advanced)
Abstract:
Cloud computing is a growing force in business, with the principal benefit being reduction of the costs of providing business functionality to users. Dynamic languages are very popular on cloud computing platforms, offering rapid development and deployment cycles, which further reduce costs and decrease time to market. Python is one of the most popular dynamic languages for cloud computing, as evidenced by the support it garners from large cloud computing players such as Google and Microsoft. The purpose of this talk is to give you an overview what cloud computing options exist if you want to use cpython, jython or ironpython for your next cloud computing project, be it on Google AppEngine, Microsoft Azure, or other platforms.
More info: http://www.python.ie/meetup/2010/sept_2010_talks__the_science_gallery/
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on integration of Salesforce with Bonterra Impact Management.
Interested in deploying an integration with Salesforce for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
Trusted Execution Environment for Decentralized Process MiningLucaBarbaro3
Presentation of the paper "Trusted Execution Environment for Decentralized Process Mining" given during the CAiSE 2024 Conference in Cyprus on June 7, 2024.
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.
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Tatiana Kojar
Skybuffer AI, built on the robust SAP Business Technology Platform (SAP BTP), is the latest and most advanced version of our AI development, reaffirming our commitment to delivering top-tier AI solutions. Skybuffer AI harnesses all the innovative capabilities of the SAP BTP in the AI domain, from Conversational AI to cutting-edge Generative AI and Retrieval-Augmented Generation (RAG). It also helps SAP customers safeguard their investments into SAP Conversational AI and ensure a seamless, one-click transition to SAP Business AI.
With Skybuffer AI, various AI models can be integrated into a single communication channel such as Microsoft Teams. This integration empowers business users with insights drawn from SAP backend systems, enterprise documents, and the expansive knowledge of Generative AI. And the best part of it is that it is all managed through our intuitive no-code Action Server interface, requiring no extensive coding knowledge and making the advanced AI accessible to more users.
GraphRAG for Life Science to increase LLM accuracyTomaz Bratanic
GraphRAG for life science domain, where you retriever information from biomedical knowledge graphs using LLMs to increase the accuracy and performance of generated answers
Dive into the realm of operating systems (OS) with Pravash Chandra Das, a seasoned Digital Forensic Analyst, as your guide. 🚀 This comprehensive presentation illuminates the core concepts, types, and evolution of OS, essential for understanding modern computing landscapes.
Beginning with the foundational definition, Das clarifies the pivotal role of OS as system software orchestrating hardware resources, software applications, and user interactions. Through succinct descriptions, he delineates the diverse types of OS, from single-user, single-task environments like early MS-DOS iterations, to multi-user, multi-tasking systems exemplified by modern Linux distributions.
Crucial components like the kernel and shell are dissected, highlighting their indispensable functions in resource management and user interface interaction. Das elucidates how the kernel acts as the central nervous system, orchestrating process scheduling, memory allocation, and device management. Meanwhile, the shell serves as the gateway for user commands, bridging the gap between human input and machine execution. 💻
The narrative then shifts to a captivating exploration of prominent desktop OSs, Windows, macOS, and Linux. Windows, with its globally ubiquitous presence and user-friendly interface, emerges as a cornerstone in personal computing history. macOS, lauded for its sleek design and seamless integration with Apple's ecosystem, stands as a beacon of stability and creativity. Linux, an open-source marvel, offers unparalleled flexibility and security, revolutionizing the computing landscape. 🖥️
Moving to the realm of mobile devices, Das unravels the dominance of Android and iOS. Android's open-source ethos fosters a vibrant ecosystem of customization and innovation, while iOS boasts a seamless user experience and robust security infrastructure. Meanwhile, discontinued platforms like Symbian and Palm OS evoke nostalgia for their pioneering roles in the smartphone revolution.
The journey concludes with a reflection on the ever-evolving landscape of OS, underscored by the emergence of real-time operating systems (RTOS) and the persistent quest for innovation and efficiency. As technology continues to shape our world, understanding the foundations and evolution of operating systems remains paramount. Join Pravash Chandra Das on this illuminating journey through the heart of computing. 🌟
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
5. “Erlang is a declarative,dynamically-typed,
functional, concurrent, distributed and
fault-tolerant programming language
with garbage collection and code
hot-swapping built into its runtime.”
Buzz-word city,
dude!
5
17. Erlang wasn't designed to...
Run in a browser
Process text efficiently
Be easy to teach
Be easy to learn
Build dynamic websites
Run on mobile phones
Allow non-programmers to program
Build GUIs
17
20. “Never” at Ericsson means “no more
than 4 minutes downtime per year”...
http://www.infoq.com/presentations/Systems-that-Never-Stop-Joe-Armstrong 20
32. Strange punctuation symbols . ; ,
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end.
32
33. Lots of arrows -> in lots of places
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end.
33
34. Even stranger symbols - _ !
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end.
34
35. What's the deal with [] {} and () ?
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end.
35
36. Functions that call themselves
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end.
36
47. List Comprehensions
Erlang:
Alist = [1, 2, 3, 4, 5].
Doubled = [X*2 || X <- Alist].
Python:
alist = [1, 2, 3, 4, 5]
doubled = [x*2 for x in alist]
Note: alist and doubled are mutable; Alist and Doubled are not
47
72. Can you spot the pattern match?
%% Saved in 'hello_server.erl'.
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end. 72
73. The {FromPID, Who} tuple matches
%% Saved in 'hello_server.erl'.
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end. 73
74. Send a message back...
%% Saved in 'hello_server.erl'.
-module(hello_server).
-export([hello/0]).
hello() ->
receive
{FromPID, Who} ->
case Who of
robert -> FromPID ! "Hello Robert.";
mike -> FromPID ! "Hello Mike.";
joe -> FromPID ! "Hello Joe.";
_ -> FromPID ! "I don't know you."
end,
hello()
end. 74
76. Things get really interesting
when the processes are
linked together with spawn_link()
and the trap_exit signal
76
77. Processes that are linked together can
react appropriately to EXIT messages from
each other... and what happens next is
controlled by the programmer
77
78. Distributed Erlang
I need to spawn
hello/0 hello/0 is
on glasnost... registered
pbmac.itcarlow.ie as 'hr'
78
glasnost.itcarlow.ie
89. Erlang in Gaming
“…Mochi Media is the world's
largest browser-based games
network, with more than 140 million
monthly active users and 15,000
games on nearly 40,000 publisher
websites…”
89
Check out Bob Ippolito’s Erlang-Factory talks!
90. More Erlang in Gaming
90
Thanks to Malcolm Dowse (of DemonWare, Dublin) for permission to use these
images, which were first delivered as part of Malcolm's talk to Erlang Factory London 2011.
93. Lots more to discover...
Fun with fun
Bit-strings and bit syntax
ETS and DETS
“Live” code updating
The Mnesia Distributed Database
The Standard Library
CEAN
93