Slides for the inaugural address of Eelco Visser on the occasion of his appointment as Antoni van Leeuwenhoek Professor at Delft University of Technology on Friday, January 17, 2014.
http://eelcovisser.org/wiki/future-of-programming/eelco-visser
Social and Cloud Marketing Impact on BusinessesSaumya Verma
This project report gives a brief analysis of social media management and cloud marketing, what are the strategies to use them, benefits derived out of them, how to measure them. This report also covers both B2B and B2C strategies for using social media marketing.
Consumer Goods Companies’ IT Investments
Build a Foundation for Emerging Priorities
TOPICS:
• Data and Analytics
• Consumer Engagement
• Digital Marketing
• Retail Execution
• Manufacturer/Retailer Collaboration
• Internet of Things
Social and Cloud Marketing Impact on BusinessesSaumya Verma
This project report gives a brief analysis of social media management and cloud marketing, what are the strategies to use them, benefits derived out of them, how to measure them. This report also covers both B2B and B2C strategies for using social media marketing.
Consumer Goods Companies’ IT Investments
Build a Foundation for Emerging Priorities
TOPICS:
• Data and Analytics
• Consumer Engagement
• Digital Marketing
• Retail Execution
• Manufacturer/Retailer Collaboration
• Internet of Things
Natural Language Processing (NLP) practitioners often have to deal with analyzing large corpora of unstructured documents and this is often a tedious process. Python tools like NLTK do not scale to large production data sets and cannot be plugged into a distributed scalable framework like Apache Spark or Apache Flink.
The Apache OpenNLP library is a popular machine learning based toolkit for processing unstructured text. Combining a permissive licence, a easy-to-use API and set of components which are highly customize and trainable to achieve a very high accuracy on a particular dataset. Built-in evaluation allows to measure and tune OpenNLP’s performance for the documents that need to be processed.
From sentence detection and tokenization to parsing and named entity finder, Apache OpenNLP has the tools to address all tasks in a natural language processing workflow. It applies Machine Learning algorithms such as Perceptron and Maxent, combined with tools such as word2vec to achieve state of the art results. In this talk, we’ll be seeing a demo of large scale Name Entity extraction and Text classification using the various Apache OpenNLP components wrapped into Apache Flink stream processing pipeline and as an Apache NiFI processor.
NLP practitioners will come away from this talk with a better understanding of how the various Apache OpenNLP components can help in processing large reams of unstructured data using a highly scalable and distributed framework like Apache Spark/Apache Flink/Apache NiFi.
Better problem solving through scripting: How to think through your #eprdctn ...BookNet Canada
This is a resource part of Kris Coppieters' Tech Forum presentation: https://youtu.be/3OW96zE6N2I
Do you find yourself repeating the same task over and over? Or feeling certain there is a way to automate a task but it's just outside of your skill set? Kris Coppieters from Rorohiko has built a career solving just those kinds of problems. Whether it's scripting a solution from within InDesign, or using AppleScript to finish off some markup, Kris can show you how to bring high-level thinking to quick and dirty tasks.
techforum.booknetcanada.ca
#TechForum #ebookcraft
In Opera Software we use Perl extensively.
From internal systems to high traffic web sites and browser-integration services like Opera Link and Opera Unite.
Most of them are mission-critical systems, up and running 24x7.
A very short tour through the Julia community and how key features of the language interact to produce an expressive syntax that users like without sacrificing performance
Big Data Spain 2017 - Deriving Actionable Insights from High Volume Media St...Apache OpenNLP
Media analysts have to deal with with analyzing high volumes of real-time news feeds and social media streams which is often a tedious process because they need to write search profiles for entities. Python tools like NLTK do not scale to large production data sets and cannot be plugged into a distributed scalable frameworks like Apache Flink. Apache Flink being a streaming first engine is ideally suited for ingesting multiple streams of news feeds, social media, blogs etc.. and for being able to do streaming analytics on the various feeds. Natural Language Processing tools like Apache OpenNLP can be plugged into Flink streaming pipelines so as to be able to perform common NLP tasks like Named Entity Recognition (NER), Chunking, and text classification. In this talk, we’ll be building a real-time media analyzer which does Named Entity Recognition (NER) on the individual incoming streams, calculates the co-occurrences of the named entities and aggregates them across multiple streams; index the results into a search engine and being able to query the results for actionable insights. We’ll also be showing as to how to handle multilingual documents for calculating co-occurrences. NLP practitioners will come away from this talk with a better understanding of how the various Apache OpenNLP components can help in processing large streams of data feeds and can easily be plugged into a highly scalable and distributed framework like Apache Flink.
Evaluation of morden computer & system attributes in ACAPankaj Kumar Jain
Elements of Modern Computers, Architectural
Evolution in computer architecture ,System Attributes to Performance,Clock Rate and CPI,MIPS Rate,Throughput Rate,Implicit Parallelism,Explicit Parallelism, State of computing,
Introduction, Developing a Program, Algorithm, Flowchart, and Pseudo code (P Code). Introduction, Evolution of Programming Languages, Classification of Programming Languages, Generations of Programming Languages, Features of a Good Programming Language, Selection of a Programming Language. Introduction Software: Definition, Relationship between Software and Hardware, Software Categories, System Software, Application Software, Software Terminology. Introduction, Operating System, Evolution of Operating System, Types of Operating System, Functions of an Operating System, Modern Operating Systems.
Natural Language Processing (NLP) practitioners often have to deal with analyzing large corpora of unstructured documents and this is often a tedious process. Python tools like NLTK do not scale to large production data sets and cannot be plugged into a distributed scalable framework like Apache Spark or Apache Flink.
The Apache OpenNLP library is a popular machine learning based toolkit for processing unstructured text. Combining a permissive licence, a easy-to-use API and set of components which are highly customize and trainable to achieve a very high accuracy on a particular dataset. Built-in evaluation allows to measure and tune OpenNLP’s performance for the documents that need to be processed.
From sentence detection and tokenization to parsing and named entity finder, Apache OpenNLP has the tools to address all tasks in a natural language processing workflow. It applies Machine Learning algorithms such as Perceptron and Maxent, combined with tools such as word2vec to achieve state of the art results. In this talk, we’ll be seeing a demo of large scale Name Entity extraction and Text classification using the various Apache OpenNLP components wrapped into Apache Flink stream processing pipeline and as an Apache NiFI processor.
NLP practitioners will come away from this talk with a better understanding of how the various Apache OpenNLP components can help in processing large reams of unstructured data using a highly scalable and distributed framework like Apache Spark/Apache Flink/Apache NiFi.
Better problem solving through scripting: How to think through your #eprdctn ...BookNet Canada
This is a resource part of Kris Coppieters' Tech Forum presentation: https://youtu.be/3OW96zE6N2I
Do you find yourself repeating the same task over and over? Or feeling certain there is a way to automate a task but it's just outside of your skill set? Kris Coppieters from Rorohiko has built a career solving just those kinds of problems. Whether it's scripting a solution from within InDesign, or using AppleScript to finish off some markup, Kris can show you how to bring high-level thinking to quick and dirty tasks.
techforum.booknetcanada.ca
#TechForum #ebookcraft
In Opera Software we use Perl extensively.
From internal systems to high traffic web sites and browser-integration services like Opera Link and Opera Unite.
Most of them are mission-critical systems, up and running 24x7.
A very short tour through the Julia community and how key features of the language interact to produce an expressive syntax that users like without sacrificing performance
Big Data Spain 2017 - Deriving Actionable Insights from High Volume Media St...Apache OpenNLP
Media analysts have to deal with with analyzing high volumes of real-time news feeds and social media streams which is often a tedious process because they need to write search profiles for entities. Python tools like NLTK do not scale to large production data sets and cannot be plugged into a distributed scalable frameworks like Apache Flink. Apache Flink being a streaming first engine is ideally suited for ingesting multiple streams of news feeds, social media, blogs etc.. and for being able to do streaming analytics on the various feeds. Natural Language Processing tools like Apache OpenNLP can be plugged into Flink streaming pipelines so as to be able to perform common NLP tasks like Named Entity Recognition (NER), Chunking, and text classification. In this talk, we’ll be building a real-time media analyzer which does Named Entity Recognition (NER) on the individual incoming streams, calculates the co-occurrences of the named entities and aggregates them across multiple streams; index the results into a search engine and being able to query the results for actionable insights. We’ll also be showing as to how to handle multilingual documents for calculating co-occurrences. NLP practitioners will come away from this talk with a better understanding of how the various Apache OpenNLP components can help in processing large streams of data feeds and can easily be plugged into a highly scalable and distributed framework like Apache Flink.
Evaluation of morden computer & system attributes in ACAPankaj Kumar Jain
Elements of Modern Computers, Architectural
Evolution in computer architecture ,System Attributes to Performance,Clock Rate and CPI,MIPS Rate,Throughput Rate,Implicit Parallelism,Explicit Parallelism, State of computing,
Introduction, Developing a Program, Algorithm, Flowchart, and Pseudo code (P Code). Introduction, Evolution of Programming Languages, Classification of Programming Languages, Generations of Programming Languages, Features of a Good Programming Language, Selection of a Programming Language. Introduction Software: Definition, Relationship between Software and Hardware, Software Categories, System Software, Application Software, Software Terminology. Introduction, Operating System, Evolution of Operating System, Types of Operating System, Functions of an Operating System, Modern Operating Systems.
Declarative Type System Specification with StatixEelco Visser
In this talk I present the design of Statix, a new constraint-based language for the executable specification of type systems. Statix specifications consist of predicates that define the well-formedness of language constructs in terms of built-in and user-defined constraints. Statix has a declarative semantics that defines whether a model satisfies a constraint. The operational semantics of Statix is defined as a sound constraint solving algorithm that searches for a solution for a constraint. The aim of the design is that Statix users can ignore the execution order of constraint solving and think in terms of the declarative semantics.
A distinctive feature of Statix is its use of scope graphs, a language parametric framework for the representation and querying of the name binding facts in programs. Since types depend on name resolution and name resolution may depend on types, it is typically not possible to construct the entire scope graph of a program before type constraint resolution. In (algorithmic) type system specifications this leads to explicit staging of the construction and querying of the type environment (class table, symbol table). Statix automatically stages the construction of the scope graph of a program such that queries are never executed when their answers may be affected by future scope graph extension. In the talk, I will explain the design of Statix by means of examples.
https://eelcovisser.org/post/309/declarative-type-system-specification-with-statix
Compiler Construction | Lecture 6 | Introduction to Static AnalysisEelco Visser
Lecture introducing the need for static analysis in addition to parsing, the complications caused by names, and an introduction to name resolution with scope graphs
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.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
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.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
2. This Lecture
repeat n times
variation-of(same-argument)
for(p in important-people)
thank-you(p)
for(p in audience)
individual-quiz(p)
def same-argument =
“Programming Languages shape Computational Thinking”
3. Automatisering beperkt wachttijd rijexamen
Automatisering landbouw
teveel zaak van koplopers
Ondernemingsraden
in
banksector
willen
automatisering
onder
controle
krijgen
Automatisering
mislukt
bij
helft
bedrijven
Grote behoefte aan personeel automatisering
De PC, een algemeen gebruikt, maar toch ingewikkeld gereedschap
Artsen bekijken nut computer
Mensen zijn geen verlengstuk van de computer
Kosten automatisering overheid stijgen snel
Vrouw en computer
Automatisering politie is verkapte bezuiniging
Werknemers onvoldoende bij automatisering betrokken
Source: http://kranten.kb.nl
19. Turing
Machine
current
tape
state
$ 0 0 1 0 $ 0 0 1 1
2
$ 0 0 0 0 $ 0 1 0 1
3
1 $ $ R 2
2 0 0 R 2
Alan Turing
1936
2 1 1 L 3
2 $ $ R H
current
state
Church-Turing
Thesis: Any effective
computation can be
expressed with a
Turing Machine
current
symbol
3 0 0 L 3
3 1 1 L 3
3 $ $ R 4
new
symbol
next
state
move
tape
20. Turing
Machine
1
$ 0 0 0 0 $ 0 1 0 1
Add two
binary
numbers
$ 0 0 1 0 $ 0 0 1 1
H
1 $ $ R 2
41 0 R 4
8 1 1 R 8
2 1 1 L 3
4$ $ L 5
8 $ $ L 9
2 $ $ R H
5 1 0 L 5
9 1 0 L 9
3 0 0 L 3
5 0 1 L 6
9 0 1 L 10
3 1 1 L 3
6 0 0 L 6
10 0 0 L 10
3 $ $ R 4
Church-Turing
Thesis: Any effective
computation can be
expressed with a
Turing Machine
8 0 0 R 8
2 0 0 R 2
is zero?
40 1 R 4
6 1 1 L 6
10 1 1 L 10
6 $ $ R 7
10 $ $ L 11
7 0 1 R 7
11 0 0 L 11
7 1 0 R 7
11 1 1 L 11
7 $ $ R 8
12 $ $ R 2
subtract
one
add
one
back
repeat
Alan Turing
1936
31. Procedural Abstraction
Should return int not string
int fib(int n) {
if(n <= 1)
return “1”;
else
return fib(n, 2) + fob(n - 1);
}
Expecting 1 argument, not 2
Automatic consistency checks!
There is no procedure ‘fob’
33. Procedural Abstraction
Is this a correct implementation of Fibonacci?
design patterns
best practices
coding standards
code reviews
pair programming
(unit) testing
bug finders
program annotations
debugging
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
Yes, but it is not a very responsive implementation of Fibonacci; its complexity is O(2^n)
Reasoning about behaviour!
35. Problem
Domain
Intermediate
Language
Solution
Domain
linguistic abstraction | liNGˈgwistik abˈstrakSHən |
noun
1. a programming language construct that captures a programming
design pattern
the linguistic abstraction saved a lot of programming effort
he introduced a linguistic abstraction for page navigation in web programming
2. the process of introducing linguistic abstractions
linguistic abstraction for name binding removed the algorithmic encoding of name resolution
38. “A programming language is low level when its programs
require attention to the irrelevant”. -- Alan Perlis, 1982
39.
40. “The enormous growth in data leads to large underlying graphs which require huge amounts of
computational power to analyze. While modern commodity computer systems provide a significant
amount of computational power measured in the tera-flops, efficient execution of graph analysis
algorithms on large datasets remains difficult on these systems [26]. ... it is often challenging
to implement a graph analysis algorithm in an efficient way.”
Sungpack Hong et al. (2012)
41. Late Failure Detection in Web Applications
browser
server
database
HTML,
JS, CSS
Java
SQL
Data Persistence
Routing
Search
Injection Attacks
Access Control
Zef Hemel, Danny M. Groenewegen, Lennart C. L. Kats, Eelco Visser.
Static consistency checking of web applications with
WebDSL. Journal of Symbolic Computation, 46(2):150-182, 2011.
Data Binding
XSS
Data Validation
...
...
42. parallel programming (multi-core machines)
distributed systems (web, mobile)
data persistence / services / invariants
security / authentication / authorization / access control
embedded software (resource constraints)
big data analytics (scalability)
programming quantum computers
46. Green-Marl: A DSL for Easy and Efficient Graph Analysis
Sungpack Hong, Hassan Chafi, Eric Sedlar, Kunle Olukotun (ASPLOS 2012)
47. WebDSL: tier-less web programming
Separation of Concerns & Linguistic Integration
entity Status {
text
: WikiText
author : Person
validate(text.length() <= 140, "Message can only be 140 characters")
}
extend entity Person {
following : Set<Person>
}
template output(p: Person) {
navigate profile(p) { output(p.name) }
}
page profile(p: Person) {
// page body
}
statically checked navigation
data model with invariants (automatic data persistence)
function searchPerson(name: String, lim: Int) : List<Person> {
return select p from Person as p
where p.name like ~("%" + name + "%")
limit ~lim;
}
integrated queries (prevent injection attacks)
template update() {
var status := Status{ author := principal() }
form{
input(status.text)
submit action{} { "Share" }
}
}
model-view pattern (no controllers)
61. Definition.Function
Type ID ( Param* ) { Statement* }
Understanding Syntax =
Understanding Tree Structure
Statement.If
if ( Exp ) Statement else Statement
Statement.Return
return
Exp
parse(prettyprint(t)) = t
;
Exp.Add
Exp
+
Exp
Exp.Var
ID
No need to understand
how parse works!
70. Name Binding & Scope Rules
Needed for
what does this variable refer to?
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
which function is being called here?
- checking correct use of names and types
- lookup in interpretation and compilation
- navigation in IDE
- code completion
State-of-the-art
- programmatic encoding of name resolution algorithms
Our contribution
- declarative language for name binding & scope rules
- generation of incremental name resolution algorithm
- Konat, Kats, Wachsmuth, Visser (SLE 2012)
- Wachsmuth, Konat, Vergu, Groenewegen, Visser (SLE 2013)
71. Definitions and References
binding rules
Param(IntType(), “n”)
Param(t, name) :
defines Variable name
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
Var(“n”)
Var(name) :
refers to Variable name
72. Definitions and References
binding rules
Function(IntType(), “fib”, […], If(…))
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
Call(“fib”, […])
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Function(t, name, param*, s) :
defines Function name
Call(name, exp*) :
refers to Function name
73. Scope
binding rules
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
int power(int x, int n) {
if(x <= 0)
return 1;
else
return x * power(x, n - 1);
}
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Function(t, name, param*, s) :
defines Function name
Call(name, exp*) :
refers to Function name
74. Scope
binding rules
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Same name!
int power(int x, int n) {
if(x <= 0)
return 1;
else
return x * power(x, n - 1);
}
Function(t, name, param*, s) :
defines Function name
Call(name, exp*) :
refers to Function name
75. Scope
binding rules
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Wrong!
int power(int x, int n) {
if(x <= 0)
return 1;
else
return x * power(x, n - 1);
}
Function(t, name, param*, s) :
defines Function name
Call(name, exp*) :
refers to Function name
76. Scope
binding rules
int fib(int n) {
if(n <= 1)
return 1;
else
return fib(n - 2) + fib(n - 1);
}
int power(int x, int n) {
if(x <= 0)
return 1;
else
return x * power(x, n - 1);
}
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Function(t, name, param*, s) :
defines Function name
scopes Variable
Call(name, exp*) :
refers to Function name
77. Scope
binding rules
int power(int x, int n) {
int power(int n) {
if(n <= 0)
return 1;
else
return power(n - 1) * x;
}
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Function(t, name, param*, s) :
defines Function name
scopes Variable, Function
return power(n);
}
Call(name, exp*) :
refers to Function name
79. Declarative Name Binding and Scope Rules
binding rules
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Function(t, name, param*, s) :
defines Function name
scopes Variable, Function
Call(name, exp*) :
refers to Function name
Incremental name resolution algorithm
Name checks
Reference resolution
Semantic code completion
80. Semantics of Name Binding?
binding rules
Research: how to characterize correctness of the result of
name resolution without appealing to the algorithm itself?
Param(t, name) :
defines Variable name
Var(name) :
refers to Variable name
Function(t, name, param*, s) :
defines Function name
scopes Variable, Function
Call(name, exp*) :
refers to Function name
Analogy: declarative semantics of syntax definition
83. Spoofax 2.0: Prototype the Language Designer’s Workbench
capturing understanding of language definition
templates // statements
Statement.Return =
<return <Exp>;>
Statement.If = <
if(<Exp>)
<Statement>
else
<Statement>
>
binding rules
type rules
Param(t, name) :
defines Variable name
of type t
Var(name) :
refers to Variable name
Incremental
Compiler
rules
Call(name, exp*) : t
where definition of
name : (t*, t)
and exp* : t_exp*
and t_exp* == t*
Responsive
Editor (IDE)
rules
e --> True(), s1 --> v
---------------------If(e, s1, s2) --> v
e --> False(), s2 --> v
----------------------If(e, s1, s2) --> v
Consistency
Proof
Tests
translate :
Call(f, e*) -> [
<translate> e*,
Callq(f),
Movl(Reg("r"), Reg("t"))
]
86. Software languages are the instruments that allow us to
turn computational thinking into computation
A computer science education should prepare its
students to co-evolve with the changing language
landscape, learn new technologies as they emerge,
contribute to their development, and apply them in new
contexts
That requires students to develop an understanding of
the fundamentals of computing, rather than just
acquire a set of specific skills
87. Modernizing Programming Education
Concepts of Programming Languages
- Study modern programming languages
- Functional + OO (Scala)
- Prototype based inheritance (JavaScript)
- Connections with other disciplines
Model-Driven Software Development
- Language design project
Compiler Construction
- Using language workbench
- Complete compiler + IDE in one semester
- Connection with research
Extending Curriculum
- program analysis, formal semantics, verification, ...
88. ‘ICT in Education’
EvaTool: automate the course evaluation workflow
researchr: bibliography management for literature surveys
WebLab: learning management system for programming education
Improving efficiency and effectiveness of organization
89. WebLab
Programming education
in the browser
Program in browser
Compile on server
Automatic grading
with unit testing
Instructor uses
same environment
92. Employers
Board TU Delft
Paul Klint (UvA)
EEMCS Faculty
Andrew Tolmach (OGI)
AvL Committee
Doaitse Swierstra (UU)
Arie van Deursen
Henk Sips
Rob Fastenau
Karel Luyben
93. Research Group
(1998-2006)
Anya Bagge
Martin Bravenboer
Eelco Dolstra
Merijn de Jonge
Karl Kalleberg
Karina Olmos
Rob Vermaas
Sander Mak
Roy van den Broek
Armijn Hemel
Jory van Zessen
Bogdan Dumitriu
Remko van Beusekom
Rene de Groot
Niels Janssen
Arthur van Dam
Spoofax
WebDSL
DisNix
Hydra
Sander van der Burg
Eelco Dolstra
Danny Groenewegen
Maartje de Jonge
Zef Hemel
Lennart Kats
Rob Vermaas
Sander Vermolen
Guido Wachsmuth
Richard Vogelij
Oskar van Rest
Chris Gersen
Elmer van Chastelet
Nathan Bruning
Ricky Lindeman
André Miguel Simões
Dias Vieira
Tobi Vollebregt
Vlad Vergu
Luís Amorim
Elmer van Chastelet
Danny Groenewegen
Gabriël Konat
Pierre Neron
Augusto Passalaqua
Vlad Vergu
Guido Wachsmuth
Stratego/XT
Nix
(2006-2013)
Language
Designer’s
Workbench
(2013-2018)
Mircea Voda
Daco Harkes
Jozef Kruger
Jonne van Wijngaarden
Alan van Dam
Robert Anisko
Lennart Swart
Hedzer Westra
Arne de Bruijn
Gabriël Konat
Sverre Rabbelier
Nami Nasserazad
Ruben Verhaaf
Wouter Mouw
Michel Weststrate
Jippe Holwerda
Nicolas Pierron
Jonathan Joubert
95. The Future of Programming
Arie van Deursen
Brandon Hill
Daan Leijen
Erik Meijer
Guido Wachsmuth
Harry Buhrman
Herman Geuvers
John Hughes
Manuel Serrano
Markus Püschel
Markus Völter
Sebastian Erdweg
Stefan Hanenberg
Tiark Rompf