Haskell is Not For Production and Other TalesKatie Ots
Some say it was written exclusively for Unix-bearded wizards with PhDs. Some say only 10x programmers and unicorns can decipher its many operators. Some say any coding problem it touches will be saved from callback hell and find everlasting peace. The Haskell programming language has long been the subject of myths and misconceptions. Nonetheless it has been adopted by a slew of companies big and small, including Facebook, which has a large Haskell deployment and dozens of engineers using the language.
In this keynote, Katie will explore some of the pervasive stereotypes about the poster child of statically typed functional programming and compare and contrast them with her experiences working as a Haskell developer on the open-source Haxl project, which is used to fight spam at Facebook. As the former journalist investigates which stories stack up, she’ll share insights on what functional programming and Haskell have to offer, the challenges that come with their use, and where the ecosystem could be improved.
Pursuing the Strong, Not So Silent Type: A Haskell StoryKatie Ots
In recent months Katie's Facebook team has completely replaced an in-house interpreted language, moving to a strong and statically typed Haskell DSL called Haxl. Dozens of Facebook developers have become functional programmers, using the open-source Haxl framework to battle spam at scale. This talk will explain how Haskell shines in this context, bust a few myths about the language, and highlight lessons Rubyists and Haskellers could learn from each other.
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
If you're like me you remember the days of PHP3 and PHP4; you remember when PHP5 was released, and how it was touted to change to your life. It's still changing and there are some features of PHP 5.3 and new ones coming with PHP 5.4 that will improve your code readability and reusability. Let's look at some touted features such as closures, namespaces, and traits, as well as some features being discussed for future releases.
Haskell is Not For Production and Other TalesKatie Ots
Some say it was written exclusively for Unix-bearded wizards with PhDs. Some say only 10x programmers and unicorns can decipher its many operators. Some say any coding problem it touches will be saved from callback hell and find everlasting peace. The Haskell programming language has long been the subject of myths and misconceptions. Nonetheless it has been adopted by a slew of companies big and small, including Facebook, which has a large Haskell deployment and dozens of engineers using the language.
In this keynote, Katie will explore some of the pervasive stereotypes about the poster child of statically typed functional programming and compare and contrast them with her experiences working as a Haskell developer on the open-source Haxl project, which is used to fight spam at Facebook. As the former journalist investigates which stories stack up, she’ll share insights on what functional programming and Haskell have to offer, the challenges that come with their use, and where the ecosystem could be improved.
Pursuing the Strong, Not So Silent Type: A Haskell StoryKatie Ots
In recent months Katie's Facebook team has completely replaced an in-house interpreted language, moving to a strong and statically typed Haskell DSL called Haxl. Dozens of Facebook developers have become functional programmers, using the open-source Haxl framework to battle spam at scale. This talk will explain how Haskell shines in this context, bust a few myths about the language, and highlight lessons Rubyists and Haskellers could learn from each other.
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
If you're like me you remember the days of PHP3 and PHP4; you remember when PHP5 was released, and how it was touted to change to your life. It's still changing and there are some features of PHP 5.3 and new ones coming with PHP 5.4 that will improve your code readability and reusability. Let's look at some touted features such as closures, namespaces, and traits, as well as some features being discussed for future releases.
(originally presented at YAPC::Europe::2007)
No-one is as critical about something as those that love it dearly. Mark Fowler has been collecting complaints from professional Perl developers for years about what warts still remain with the language when strict and warnings are turned on.
Are these problems unsolvable? A veteran Perl programmer himself Mark attempted to try and solve these issues - and then turned to the experts, the people who write books on Perl, the people who maintain the perl interpreter itself, for help.
This is what he learned...
As presented at Confoo 2013.
More than some arcane NoSQL tool, Redis is a simple but powerful swiss army knife you can begin using today.
This talk introduces the audience to Redis and focuses on using it to cleanly solve common problems. Along the way, we'll see how Redis can be used as an alternative to several common PHP tools.
Innovative Specifications for Better Performance Logging and MonitoringCary Millsap
Imagine a car with no speedometer. There are speed limit signs and policemen all around with radar guns waiting to catch you speeding, but you have no way of knowing how fast you're going. Of course, a car like this has no openable hood (no bonnet), so to change the air filter, you have to hire a specialist to saw into the body of your car. A car like this would be preposterous. Yet people write software like this all the time.
The Oracle Database has some of the best performance logging features built into it of any software in the world. You can use it with any application—even applications that were built without logging and monitoring in mind. But you can go SO much further if you bother to include some performance logging features in your application. In this session, I explain Oracle's extended SQL tracing feature and describe how to enable and disable it. Then I show some innovative ideas that will help you design and build database applications that are easier to monitor, manage, and maintain throughout the software development life cycle.
I discovered CoffeeScript during a recent project that Jim Garvin and I were working on. We knew the app was going to be heavy on the JavaScript, and that’s how we started – writing straight JavaScript. Even though I have written JavaScript for years, this time, the JavaScript syntax itself got in the way. CoffeeScript’s elegant syntax relieved the burden.
I quickly fell so in love with CoffeeScript that I have since sworn off writing raw JavaScript directly ever again. The goal of this talk is to convince the audience to try CoffeeScript in hopes that they too will find it as valuable as I did.
Hi, I am Artem Sokovets and I am the Head of Automation Quality Assurance at Sberbank-Technology.
In my talk, I will tell you about the latest Java features that were introduced in JDK 9 - 13. Moreover, I will describe interesting themes from java conference – CodeOne 2019.
At the end of my talk, I will suggest you to take a java quiz and if you get the maximum score you will win a surprise from me.
Ruby is amazing. It has a huge standard library and a core choc full of weird and wonderful things. In this talk, given at the Ipswich Ruby User Group, I give a whimsical nonstop tour through some of the more obscure parts of Ruby.
Gisting is an implementation of Google\'s MapReduce framework for processing and extracting useful information from very large data sets. At the time of this writing, the code is available for PREVIEW at http://github.com/mchung/gisting. I am currently working to release this framework for general usage.
Reviews examples of details on how to pass data to a stored procedure and how to return data from a stored procedure. Further shows how to pass status or debugging messages from stored procedure, including message localization.
Redis & ZeroMQ: How to scale your applicationrjsmelo
Presented at #PHPLX 11 July 2013
When you need to do some heavy processing how do you scale you application?
You can use Redis and ZeroMQ to leverage the heavy work for you!
With this presentation we will know more about this two technologies and how they can be used to help solve problems with the performance and scalability of your application.
Defensive programming in Javascript and Node.jsRuben Tan
Various factors to consider when trying to adopt a defensive programming mindset, methodology and process. This is especially useful for teams working with node.js.
Rails Sojourn: One Man's Journey - Wicked Good Ruby Conference 2013Mike Desjardins
With several spawling, monolithic Rails apps under my belt, I had the opportunity to go a different route. Bulging models, obtuse controllers, and views chock full of logic were my world. When I came up for air, all the cool kids were writing thick clients with svelte backends. Perhaps Sinatra and some hip Javascript framework were the way? Here's what I learned...
(originally presented at YAPC::Europe::2007)
No-one is as critical about something as those that love it dearly. Mark Fowler has been collecting complaints from professional Perl developers for years about what warts still remain with the language when strict and warnings are turned on.
Are these problems unsolvable? A veteran Perl programmer himself Mark attempted to try and solve these issues - and then turned to the experts, the people who write books on Perl, the people who maintain the perl interpreter itself, for help.
This is what he learned...
As presented at Confoo 2013.
More than some arcane NoSQL tool, Redis is a simple but powerful swiss army knife you can begin using today.
This talk introduces the audience to Redis and focuses on using it to cleanly solve common problems. Along the way, we'll see how Redis can be used as an alternative to several common PHP tools.
Innovative Specifications for Better Performance Logging and MonitoringCary Millsap
Imagine a car with no speedometer. There are speed limit signs and policemen all around with radar guns waiting to catch you speeding, but you have no way of knowing how fast you're going. Of course, a car like this has no openable hood (no bonnet), so to change the air filter, you have to hire a specialist to saw into the body of your car. A car like this would be preposterous. Yet people write software like this all the time.
The Oracle Database has some of the best performance logging features built into it of any software in the world. You can use it with any application—even applications that were built without logging and monitoring in mind. But you can go SO much further if you bother to include some performance logging features in your application. In this session, I explain Oracle's extended SQL tracing feature and describe how to enable and disable it. Then I show some innovative ideas that will help you design and build database applications that are easier to monitor, manage, and maintain throughout the software development life cycle.
I discovered CoffeeScript during a recent project that Jim Garvin and I were working on. We knew the app was going to be heavy on the JavaScript, and that’s how we started – writing straight JavaScript. Even though I have written JavaScript for years, this time, the JavaScript syntax itself got in the way. CoffeeScript’s elegant syntax relieved the burden.
I quickly fell so in love with CoffeeScript that I have since sworn off writing raw JavaScript directly ever again. The goal of this talk is to convince the audience to try CoffeeScript in hopes that they too will find it as valuable as I did.
Hi, I am Artem Sokovets and I am the Head of Automation Quality Assurance at Sberbank-Technology.
In my talk, I will tell you about the latest Java features that were introduced in JDK 9 - 13. Moreover, I will describe interesting themes from java conference – CodeOne 2019.
At the end of my talk, I will suggest you to take a java quiz and if you get the maximum score you will win a surprise from me.
Ruby is amazing. It has a huge standard library and a core choc full of weird and wonderful things. In this talk, given at the Ipswich Ruby User Group, I give a whimsical nonstop tour through some of the more obscure parts of Ruby.
Gisting is an implementation of Google\'s MapReduce framework for processing and extracting useful information from very large data sets. At the time of this writing, the code is available for PREVIEW at http://github.com/mchung/gisting. I am currently working to release this framework for general usage.
Reviews examples of details on how to pass data to a stored procedure and how to return data from a stored procedure. Further shows how to pass status or debugging messages from stored procedure, including message localization.
Redis & ZeroMQ: How to scale your applicationrjsmelo
Presented at #PHPLX 11 July 2013
When you need to do some heavy processing how do you scale you application?
You can use Redis and ZeroMQ to leverage the heavy work for you!
With this presentation we will know more about this two technologies and how they can be used to help solve problems with the performance and scalability of your application.
Defensive programming in Javascript and Node.jsRuben Tan
Various factors to consider when trying to adopt a defensive programming mindset, methodology and process. This is especially useful for teams working with node.js.
Rails Sojourn: One Man's Journey - Wicked Good Ruby Conference 2013Mike Desjardins
With several spawling, monolithic Rails apps under my belt, I had the opportunity to go a different route. Bulging models, obtuse controllers, and views chock full of logic were my world. When I came up for air, all the cool kids were writing thick clients with svelte backends. Perhaps Sinatra and some hip Javascript framework were the way? Here's what I learned...
Una mirada al proceso de desarrollo de Hashrocket y la forma de trabajo de una de las mas renombradas boutiques web, desde la perspectiva de la oficina de sudamérica basada en Santiago de Chile.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
4. Capistrano
namespace :deploy do
task :start, :roles => :app, :except => { :no_release => true } do
run "sudo monit start miapp_unicorn"
run "sudo monit -g resque start all"
end
end
Saturday, February 9, 13
5. RSpec
describe Math do
describe "#pow" do
it "computes the n-th-power of the receiver" do
3.pow(3).should == 27
end
end
end
Saturday, February 9, 13
15. # patient_dsl.rb
class PatientDSL
attr_reader :patient
def initialize(patient)
@patient = patient
end
delegate :age, :allergies, :gender, :labs, :medications,
:prescriptions, :providers, :visits, :survey, :to => :patient
def drug_cat(name)
(1..6).to_a.reverse.detect do |level|
medication = medications.detect do |m|
m.send("lvl#{level}conceptname") == name
end and break medication
end
end
def dosage(name)
drug(name).try(:dosage) || 0
end
# Many, many more methods
end
Saturday, February 9, 13
17. Recuerden, las reglas las ingresas usuarios, en una gran
caja de texto en la interfaz web del sistema
¿Que problemas pueden ocurrir con la solución hasta
ahora?
Saturday, February 9, 13
18. age
>=
18
and
patient.destroy!
Saturday, February 9, 13
25. # pharmmd_dsl.treetop (cont.)
rule boolean_operator
">=" /
"<=" /
">" /
"<" /
"==" /
"!="
end
rule function_call
function_name:([a-zA-Z_] [a-zA-Z_0-9]*) arguments:("(" argument
("," spaces? argument)* ")")? <FunctionNode>
end
rule argument
string /
date /
numeric_value
end
Saturday, February 9, 13
26. # pharmmd_dsl.treetop (cont.)
rule numeric_value
function_call /
number /
"(" spaces? numeric_value spaces? ")"
end
rule number
float /
integer
end
rule integer
"-"? digits
end
rule float
"-"? (digits)? "." digits
end
rule digits
[0-9]+
end
Saturday, February 9, 13
27. # pharmmd_dsl.treetop (cont.)
rule spaces
[sn]+
end
rule string
['"] [^'"]* ['"]
end
rule date
[0-9]+ "." time_unit "s"? ".ago"
end
rule time_unit
"day" /
"month" /
"year"
end
end
Saturday, February 9, 13
28. Por cierto, el lenguaje de gramáticas de
treetop es un DSL “externo”
Saturday, February 9, 13
29. Treetop hace el parsing extremadamente natural.
¡Sigamos el proceso a mano!
(si es que tenemos pizarra a mano)
Saturday, February 9, 13
30. age
>=
18
and
(drug_cat(“XYZ”)
or
drug_cat(“ABC”))
and
dosage(“PARACETAMOL”)
>
1000
Saturday, February 9, 13
34. ¡Rara vez la validación sintáctica es suficiente!
“Saltarina casa llovió perros perrunos”
(¡Español sintácticamente válido!)
Saturday, February 9, 13
35. rule function_call
function_name:([a-zA-Z_] [a-zA-Z_0-9]*)
arguments:("(" argument ("," spaces? argument)* ")")?
<FunctionNode>
end
Saturday, February 9, 13
36. require 'treetop'; require 'pharmmd_dsl'
class FunctionNode < Treetop::Runtime::SyntaxNode; end
class PharmmdDslValidator
attr_accessor :dsl, :errors
def initialize(dsl)
@dsl = dsl; @errors = []
end
def valid_dsl?
parser = PharmmdDslParser.new
parse_tree = parser.parse(@dsl)
if parse_tree.nil?
errors << "You have a syntax error: #{parser.failure_reason}"
else
validate_functions(parse_tree)
end
errors.empty?
end
def valid_functions
@valid_functions ||=
(PatientDSL.instance_methods - Object.instance_methods)
end
Saturday, February 9, 13
37. # (cont.)
def validate_functions(parse_tree)
element = parse_tree
if element.is_a? FunctionNode
name = element.function_name.text_value
unless valid_functions.include? name
errors << ("Function name #{element.text_value} is not a
valid function call")
end
end
if element.elements
parse_tree.elements.each do |element|
validate_functions(element)
end
end
end
end
Saturday, February 9, 13
38. age
>=
18
and
patient.destroy
#
invalido
Patient.destroy_all
#
invalido
system(“rm
-‐rf
/”)
#
invalido!
Saturday, February 9, 13
39. Errores amigables:
“Se esperaba ‘(‘ en linea X, columna Y”
“La función ‘system’ no es válida”
Saturday, February 9, 13
40. Y mucho más: ¡Solucion v3!
(Sólo una mirada rápida, que se nos acaba el tiempo)
Saturday, February 9, 13
42. quantity("lipitor") > 10 or drug("vicodin")
treetop, parse trees
(PharmdDSLValidator)
External
DSL
quantity("lipitor") > 10 or drug("vicodin")
(PharmdDSLPreProcessor)
(quantity("lipitor") > 10).or(drug("vicodin"))
ruby objs/metodos
(PharmdDSL)
Internal
DSL
(NumericExpr(20, ["Lipitor 50mg"]) > 10).or(
BooleanExpr(true, ["Vicodin 20mg"]))
Saturday, February 9, 13
43. quantity("lipitor") > 10 or drug("vicodin")
treetop, parse trees
(PharmdDSLValidator)
External
DSL
quantity("lipitor") > 10 or drug("vicodin")
(PharmdDSLPreProcessor)
(quantity("lipitor") > 10).or(drug("vicodin"))
ruby objs/metodos
(DenominatorQuery)
Internal
DSL
(OrCondition(
Condition('lipitor', {'$gt' => '10'}),
Condition('vicodin', {'$exists' => true}))
Saturday, February 9, 13
44. ...y mas
MongoDB no tenía OR en esa época,
por lo que optimizabamos el árbol de expresiones para
dejar los ORs lo mas “arriba” posible.
Ejemplo:
((X
or
Y)
and
(Z)
(Condition#optimize)
((X
and
Z)
or
(Y
and
Z))
Saturday, February 9, 13
45. Conclusión
• Parsing, árboles de expresiones,
compiladores, etc no fue tiempo perdido en
la U :)
• Pero siempre hay tradeoffs
• Probar un DSL interno primero. La solución
más simple que podría funcionar
• Luego un DSL externo, treetop lo hace fácil
• Finalmente un híbrido, si no queda otra
Saturday, February 9, 13