A Programming Language for Distributed Systems

Total Page:16

File Type:pdf, Size:1020Kb

A Programming Language for Distributed Systems A Programming Language for Distributed Systems Pascal Weisenburger A Programming Language for Distributed Systems vom Fachbereich Informatik der Technischen Universität Darmstadt zur Erlangung des akademischen Grades eines Doktor-Ingenieurs (Dr.-Ing.) genehmigte Dissertation von Pascal Weisenburger Referent Prof. Dr. Guido Salvaneschi Korreferent Prof. Dr. Philipp Haller Darmstadt, 2020 Pascal Weisenburger: A Programming Language for Distributed Systems Technische Universität Darmstadt Jahr der Veröffentlichung der Dissertation auf TUprints: 2020 URN: urn:nbn:de:tuda-tuprints-135006 Tag der Prüfung: 21.08.2020 Darmstadt – D 17 Veröffentlicht unter CC BY-SA 4.0 International https://creativecommons.org/licenses/by-sa/4.0/ Acknowledgements My thanks especially go to my advisor, Guido Salvaneschi, for providing me with the opportunity to work on the language presented in this thesis, giving me the freedom to explore its design and helping in shaping its ideas. I thank Mira Mezini for her support and for inspiring my interest in programming languages. I also thank Philipp Haller for being the second examiner of my thesis and his time and effort of carefully reviewing it. Furthermore, I would like to thank the remaining members of my PhD committee: Sebastian Faust, Matthias Hollick and Kirstin Peters. My special thanks go to Gudrun Harris for managing the group so smoothly, for keeping us from having to be concerned about our contracts and for saving us from most of the paperwork. I also thank my long-time office colleagues Matthias Eichholz, Mirko Köhler and Ragnar Mogk for the fruitful collaboration and the nice office atmosphere and the members Nafise Eskandani, Aditya Oak, Simon Schönwälder and Daniel Sokolowski of the RP group and the members of the STG group. I gratefully thank my family for their encouragement and continued support in every imaginable way. To everyone who accompanied me in the last years on this academic journey: Thank you! That was fun. i Abstract Today’s software, including many everyday services, such as online streaming, search engines and social networks, is widely distributed, running on top of a network of interconnected computers. Such distributed applications are tradition- ally developed as separate modules for each component in the distributed system. These modules react to events, like user input or messages from the network, and in turn produce new events for the other modules. Separation into different mod- ules is problematic because combining modules is notoriously hard and requires extensive and time-consuming integration and manual implementation of com- munication forces programmers to program complex event-based communication schemes among hosts – an activity which is often low-level and error-prone. The combination of the two results in obscure distributed data flows scattered among multiple modules, hindering reasoning about the system as a whole. For these reasons, despite most software today is distributed, the design and development of distributed systems remains surprisingly challenging. We present the ScalaLoci distributed programming language, our approach for taming the complexity of developing distributed applications via specialized pro- gramming language support. ScalaLoci addresses the issues above with a coherent model based on placement types that enables reasoning about distributed data flows otherwise scattered across multiple modules, supporting multiple software architectures via dedicated language features and abstracting over low-level com- munication details and data conversions. ScalaLoci does not force developers to modularize software along network bound- aries as is traditionally the case when developing distributed systems. Instead, we propose a module system that supports encapsulating each (cross-host) func- tionality and defining it over abstract peer types. As a result, we disentangle modularization and distribution and we enable the definition of a distributed system as a composition of ScalaLoci modules, each representing a subsystem. Our case studies on distributed algorithms, distributed data structures, as well as on real-world distributed streaming engines show that ScalaLoci simplifies devel- oping distributed systems, reduces error-prone communication code and favors early detection of bugs. As we demonstrate, the ScalaLoci module system allows the definition of reusable patterns of interaction in distributed software and en- ables separating the modularization and distribution concerns, properly separating functionalities in distributed systems. iii Zusammenfassung Heutige Software, einschließlich vieler alltäglicher Dienste wie Online-Streaming, Suchmaschinen und soziale Netzwerke, wird auf einem Netzwerk miteinander verbundener Computer verteilt ausgeführt. Solche verteilten Anwendungen wer- den traditionell mit separaten Modulen für jede Komponente im verteilten System entwickelt. Module reagieren auf Ereignisse wie Benutzereingaben oder Netzwerk- nachrichten und produzieren wiederum neue Ereignisse für die anderen Module. Die Trennung in verschiedene Module ist problematisch, weil das Kombinieren von Modulen notorisch schwierig ist und umfangreiche und zeitraubende Integration erfordert und die manuelle Implementierung der Kommunikation die Programmie- rer dazu zwingt, komplexe ereignisbasierte Kommunikationsschemata zwischen Hostrechnern zu implementieren – was oft auf niedriger Abstraktionsebene stattfin- det und fehleranfällig ist. Die Kombination von beidem führt zu unübersichtlichen verteilten Datenströmen, die über mehrere Module hinweg aufgesplittet sind und das Verständnis über das System als Ganzes erschweren. Aus diesen Gründen bleibt der Entwurf und die Entwicklung verteilter Systeme trotz der Tatsache, dass die meiste Software heutzutage verteilt ist, überraschend schwierig. Diese Dissertation präsentiert die Programmiersprache ScalaLoci für die Entwick- lung verteilter Anwendungen. Der vorgestellte Ansatz basiert auf spezialisierter Programmiersprachenunterstützung, um die Komplexität bei der Entwicklung verteilter Anwendungen zu bewältigen. ScalaLoci geht die oben genannten Pro- bleme mit einem kohärenten Modell basierend auf Platzierungstypen an, das die Betrachtung verteilter Datenflüsse ermöglicht, die ansonsten über mehrere Modu- le aufgesplittet sind. ScalaLoci unterstützt dabei mehrere Softwarearchitekturen durch dedizierte Sprachmerkmale und abstrahiert über Kommunikationsdetails und Datenkonvertierungen. ScalaLoci zwingt Entwickler nicht dazu, Software entlang von Netzwerkgrenzen zu modularisieren, wie es traditionell bei der Entwicklung verteilter Systeme der Fall ist. Stattdessen stellt ScalaLoci ein Modulsystem bereit, das die Kapselung jeder (Host-übergreifenden) Funktionalität und deren Definition über abstrakte Peer- Typen unterstützt. Als Ergebnis werden Modularisierung- und Verteilungsbelange entflochten und die Definition eines verteilten Systems als eine Zusammensetzung von ScalaLoci-Modulen, die jeweils ein Subsystem repräsentieren, ermöglicht. Fallstudien zu verteilten Algorithmen, verteilten Datenstrukturen sowie zu ver- teilten Streaming-Engines aus der Praxis zeigen, dass ScalaLoci die Entwicklung v verteilter Systeme vereinfacht, fehleranfälligen Kommunikations-Code reduziert und das frühzeitige Erkennen von Fehlern unterstützt. Die Evaluation zeigt weiter- hin, dass das ScalaLoci-Modulsystem die Definition wiederverwendbarer Interakti- onsmuster in verteilter Software erlaubt und die Trennung von Modularisierung und Verteilung ermöglicht, indem Funktionalitäten in verteilten Systemen sauber voneinander getrennt werden. vi Contents 1 Introduction 1 1.1 Problem...................................2 1.2 ScalaLoci in Essence............................4 1.3 ScalaLoci at Work..............................5 1.3.1 Design Overview..........................6 1.4 Contributions................................8 1.5 Publications................................. 10 1.6 Overview................................... 12 2 A Survey of Multitier Programming 13 2.1 Background................................. 13 2.2 Multitier Programming........................... 14 2.3 Benefits.................................... 15 2.4 Overview................................... 17 2.5 A Glimpse of Multitier Languages.................... 20 2.5.1 Hop.................................. 20 2.5.2 Links................................. 22 2.5.3 Ur/Web............................... 23 2.5.4 Eliom................................. 25 2.5.5 Google Web Toolkit (GWT).................... 26 2.5.6 ScalaLoci............................... 28 2.6 Analysis................................... 29 2.6.1 Degrees of Multitier Programming................ 29 2.6.2 Placement Strategy......................... 32 2.6.3 Placement Specification and Granularity............ 35 2.6.4 Communication Abstractions................... 38 2.6.5 Formalization of Multitier Languages.............. 41 2.6.6 Distribution Topologies...................... 44 2.7 Related Approaches............................. 45 3 A Multitier Language Design: ScalaLoci 53 3.1 Design Considerations........................... 53 3.2 Programming Abstractions of ScalaLoci ................. 55 3.2.1 In-Language Architecture Definition............... 55 3.2.2 Placement Types.......................... 56 vii 3.2.3 Remote Access........................... 57 3.2.4 Multitier Reactives......................... 58 3.2.5 Peer Instances............................ 59 3.2.6 Aggregation............................. 60 3.2.7 Subjective
Recommended publications
  • A Methodology for Assessing Javascript Software Protections
    A methodology for Assessing JavaScript Software Protections Pedro Fortuna A methodology for Assessing JavaScript Software Protections Pedro Fortuna About me Pedro Fortuna Co-Founder & CTO @ JSCRAMBLER OWASP Member SECURITY, JAVASCRIPT @pedrofortuna 2 A methodology for Assessing JavaScript Software Protections Pedro Fortuna Agenda 1 4 7 What is Code Protection? Testing Resilience 2 5 Code Obfuscation Metrics Conclusions 3 6 JS Software Protections Q & A Checklist 3 What is Code Protection Part 1 A methodology for Assessing JavaScript Software Protections Pedro Fortuna Intellectual Property Protection Legal or Technical Protection? Alice Bob Software Developer Reverse Engineer Sells her software over the Internet Wants algorithms and data structures Does not need to revert back to original source code 5 A methodology for Assessing JavaScript Software Protections Pedro Fortuna Intellectual Property IP Protection Protection Legal Technical Encryption ? Trusted Computing Server-Side Execution Obfuscation 6 A methodology for Assessing JavaScript Software Protections Pedro Fortuna Code Obfuscation Obfuscation “transforms a program into a form that is more difficult for an adversary to understand or change than the original code” [1] More Difficult “requires more human time, more money, or more computing power to analyze than the original program.” [1] in Collberg, C., and Nagra, J., “Surreptitious software: obfuscation, watermarking, and tamperproofing for software protection.”, Addison- Wesley Professional, 2010. 7 A methodology for Assessing
    [Show full text]
  • Haxe Game Development Essentials
    F re e S a m p le Community Experience Distilled Haxe Game Development Essentials Create games on multiple platforms from a single codebase using Haxe and the HaxeFlixel engine Jeremy McCurdy In this package, you will find: The author biography A preview chapter from the book, Chapter 1 'Getting Started' A synopsis of the book’s content More information on Haxe Game Development Essentials About the Author Jeremy McCurdy is a game developer who has been making games using ActionScript, C#, and Haxe for over four years. He has developed games targeted at iOS, Android, Windows, OS X, Flash, and HTML5. He has worked on games that have had millions of gameplay sessions, and has built games for many major North American television networks. He is the games technical lead at REDspace, an award-winning interactive studio that has worked for some of the world's largest brands. They are located in Nova Scotia, Canada, and have been building awesome experiences for 15 years. Preface Developing games that can reach a wide audience can often be a serious challenge. A big part of the problem is fi guring out how to make a game that will work on a wide range of hardware and operating systems. This is where Haxe comes in. Over the course of this book, we'll look at getting started with Haxe and the HaxeFlixel game engine, build a side-scrolling shooter game that covers the core features you need to know, and prepare the game for deployment to multiple platforms. After completing this book, you will have the skills you need to start producing your own cross-platform Haxe-driven games! What this book covers Chapter 1, Getting Started, explains setting up the Haxe and HaxeFlixel development environment and doing a quick Hello World example to ensure that everything is working.
    [Show full text]
  • Attacking Client-Side JIT Compilers.Key
    Attacking Client-Side JIT Compilers Samuel Groß (@5aelo) !1 A JavaScript Engine Parser JIT Compiler Interpreter Runtime Garbage Collector !2 A JavaScript Engine • Parser: entrypoint for script execution, usually emits custom Parser bytecode JIT Compiler • Bytecode then consumed by interpreter or JIT compiler • Executing code interacts with the Interpreter runtime which defines the Runtime representation of various data structures, provides builtin functions and objects, etc. Garbage • Garbage collector required to Collector deallocate memory !3 A JavaScript Engine • Parser: entrypoint for script execution, usually emits custom Parser bytecode JIT Compiler • Bytecode then consumed by interpreter or JIT compiler • Executing code interacts with the Interpreter runtime which defines the Runtime representation of various data structures, provides builtin functions and objects, etc. Garbage • Garbage collector required to Collector deallocate memory !4 A JavaScript Engine • Parser: entrypoint for script execution, usually emits custom Parser bytecode JIT Compiler • Bytecode then consumed by interpreter or JIT compiler • Executing code interacts with the Interpreter runtime which defines the Runtime representation of various data structures, provides builtin functions and objects, etc. Garbage • Garbage collector required to Collector deallocate memory !5 A JavaScript Engine • Parser: entrypoint for script execution, usually emits custom Parser bytecode JIT Compiler • Bytecode then consumed by interpreter or JIT compiler • Executing code interacts with the Interpreter runtime which defines the Runtime representation of various data structures, provides builtin functions and objects, etc. Garbage • Garbage collector required to Collector deallocate memory !6 Agenda 1. Background: Runtime Parser • Object representation and Builtins JIT Compiler 2. JIT Compiler Internals • Problem: missing type information • Solution: "speculative" JIT Interpreter 3.
    [Show full text]
  • CS153: Compilers Lecture 19: Optimization
    CS153: Compilers Lecture 19: Optimization Stephen Chong https://www.seas.harvard.edu/courses/cs153 Contains content from lecture notes by Steve Zdancewic and Greg Morrisett Announcements •HW5: Oat v.2 out •Due in 2 weeks •HW6 will be released next week •Implementing optimizations! (and more) Stephen Chong, Harvard University 2 Today •Optimizations •Safety •Constant folding •Algebraic simplification • Strength reduction •Constant propagation •Copy propagation •Dead code elimination •Inlining and specialization • Recursive function inlining •Tail call elimination •Common subexpression elimination Stephen Chong, Harvard University 3 Optimizations •The code generated by our OAT compiler so far is pretty inefficient. •Lots of redundant moves. •Lots of unnecessary arithmetic instructions. •Consider this OAT program: int foo(int w) { var x = 3 + 5; var y = x * w; var z = y - 0; return z * 4; } Stephen Chong, Harvard University 4 Unoptimized vs. Optimized Output .globl _foo _foo: •Hand optimized code: pushl %ebp movl %esp, %ebp _foo: subl $64, %esp shlq $5, %rdi __fresh2: movq %rdi, %rax leal -64(%ebp), %eax ret movl %eax, -48(%ebp) movl 8(%ebp), %eax •Function foo may be movl %eax, %ecx movl -48(%ebp), %eax inlined by the compiler, movl %ecx, (%eax) movl $3, %eax so it can be implemented movl %eax, -44(%ebp) movl $5, %eax by just one instruction! movl %eax, %ecx addl %ecx, -44(%ebp) leal -60(%ebp), %eax movl %eax, -40(%ebp) movl -44(%ebp), %eax Stephen Chong,movl Harvard %eax,University %ecx 5 Why do we need optimizations? •To help programmers… •They write modular, clean, high-level programs •Compiler generates efficient, high-performance assembly •Programmers don’t write optimal code •High-level languages make avoiding redundant computation inconvenient or impossible •e.g.
    [Show full text]
  • Quaxe, Infinity and Beyond
    Quaxe, infinity and beyond Daniel Glazman — WWX 2015 /usr/bin/whoami Primary architect and developer of the leading Web and Ebook editors Nvu and BlueGriffon Former member of the Netscape CSS and Editor engineering teams Involved in Internet and Web Standards since 1990 Currently co-chair of CSS Working Group at W3C New-comer in the Haxe ecosystem Desktop Frameworks Visual Studio (Windows only) Xcode (OS X only) Qt wxWidgets XUL Adobe Air Mobile Frameworks Adobe PhoneGap/Air Xcode (iOS only) Qt Mobile AppCelerator Visual Studio Two solutions but many issues Fragmentation desktop/mobile Heavy runtimes Can’t easily reuse existing c++ libraries Complex to have native-like UI Qt/QtMobile still require c++ Qt’s QML is a weak and convoluted UI language Haxe 9 years success of Multiplatform OSS language Strong affinity to gaming Wide and vibrant community Some press recognition Dead code elimination Compiles to native on all But no native GUI… platforms through c++ and java Best of all worlds Haxe + Qt/QtMobile Multiplatform Native apps, native performance through c++/Java C++/Java lib reusability Introducing Quaxe Native apps w/o c++ complexity Highly dynamic applications on desktop and mobile Native-like UI through Qt HTML5-based UI, CSS-based styling Benefits from Haxe and Qt communities Going from HTML5 to native GUI completeness DOM dynamism in native UI var b: Element = document.getElementById("thirdButton"); var t: Element = document.createElement("input"); t.setAttribute("type", "text"); t.setAttribute("value", "a text field"); b.parentNode.insertBefore(t,
    [Show full text]
  • Full Stack Developer, Javascript Hacker
    Full Stack Developer, Javascript Hacker Our vision We believe in ad supported content. But digital advertising has gone too far and users are reacting to legitimate threats around privacy, data usage, and at times, the unreasonably high exposure to ads. Secret Media provides publishers and advertisers with a sustainable solution to monetize and reach ad-blocked traffic, in respect with users privacy and browsing experience. By helping premium publishers manage the rise of adblocking, we help 3 billion internet users to access free information and we help journalists maintain their independence. We have been funded by the best French serial entrepreneurs and our headquarters are in ​ NYC, with an office for the tech team in Paris. We are open to remote (in French or English), our tools and development process are ready for this as we already have one developer working remotely and coming to Paris offices twice a month. We’re looking for a well-rounded and passionate full stack developer with a capacity to hack the ad tech industry. If you’re interested in working on all layers of a complex system from developing systems to intercept and encrypt calls on the client side to creating flexible and scalable proxy architectures transforming the JS scripts on the fly then Secret Media is for you! You will contribute to an environment that enables you to do your best engineering work, and you’ll do it with new web standards and frameworks like Haxe, Javascript (all flavors), Node.js, ​ ​ ElasticSearch and many CI tools. We encourage automation of tests, builds, deploys and analytics for feedback to continuously improve the product.
    [Show full text]
  • Dead Code Elimination for Web Applications Written in Dynamic Languages
    Dead code elimination for web applications written in dynamic languages Master’s Thesis Hidde Boomsma Dead code elimination for web applications written in dynamic languages THESIS submitted in partial fulfillment of the requirements for the degree of MASTER OF SCIENCE in COMPUTER ENGINEERING by Hidde Boomsma born in Naarden 1984, the Netherlands Software Engineering Research Group Department of Software Technology Department of Software Engineering Faculty EEMCS, Delft University of Technology Hostnet B.V. Delft, the Netherlands Amsterdam, the Netherlands www.ewi.tudelft.nl www.hostnet.nl © 2012 Hidde Boomsma. All rights reserved Cover picture: Hoster the Hostnet mascot Dead code elimination for web applications written in dynamic languages Author: Hidde Boomsma Student id: 1174371 Email: [email protected] Abstract Dead code is source code that is not necessary for the correct execution of an application. Dead code is a result of software ageing. It is a threat for maintainability and should therefore be removed. Many organizations in the web domain have the problem that their software grows and de- mands increasingly more effort to maintain, test, check out and deploy. Old features often remain in the software, because their dependencies are not obvious from the software documentation. Dead code can be found by collecting the set of code that is used and subtract this set from the set of all code. Collecting the set can be done statically or dynamically. Web applications are often written in dynamic languages. For dynamic languages dynamic analysis suits best. From the maintainability perspective a dynamic analysis is preferred over static analysis because it is able to detect reachable but unused code.
    [Show full text]
  • BATIK DIGITAL” (The “Initiative”)
    1. Title. This initiative is known as “Digital Content Technology Infrastructure Support Programme “BATIK DIGITAL” (the “Initiative”). 2. Objectives. Key objectives of the Initiative are as follows: a) To ensure Digital Creative Content companies business continuity by leveraging latest technology in operating business and seize economic opportunities; b) To encourage Digital Creative Content companies investing additional resources in maintaining effectiveness and credibility in securing jobs and maintaining the current workforces; c) To support Digital Creative Content companies in maintaining content production quality, data security and consistency of deliverables despite working away from their studio; and d) To establish sustainability of creative technology ecosystem and might minimise the gap among industry player for them to move forward in the economy value chain. 3. Scope of Incentive The Incentive is to reimburse the cost incurred by the approved Applicant (“Recipient”) for purchasing one or more of the software or technology solution listed in Paragraph 7.0 below for the following purposes: a) Financial support for active digital creative content studios based on company size; and/or b) New / additional / renewal design / development / communication software subscription related to digital creative content activities. 4. Incentive Amount. Incentive amount based on number of employee category limit: a) Category A: 5 – 30 employees; Up to RM 10,000 b) Category B: 31 – 100 employees; Up to RM 20,000 c) Category C: 101 and above employees; Up to RM 40,000 5. Closing Date. The closing date of the Program for ALL categories are as follows: Batch 1 Batch 2 Batch 3 15 April 202 @ 6.00pm 30 April 2021 @ 6.00pm 25 May 2021 @ 6.00pm 6.
    [Show full text]
  • Lecture Notes on Peephole Optimizations and Common Subexpression Elimination
    Lecture Notes on Peephole Optimizations and Common Subexpression Elimination 15-411: Compiler Design Frank Pfenning and Jan Hoffmann Lecture 18 October 31, 2017 1 Introduction In this lecture, we discuss common subexpression elimination and a class of optimiza- tions that is called peephole optimizations. The idea of common subexpression elimination is to avoid to perform the same operation twice by replacing (binary) operations with variables. To ensure that these substitutions are sound we intro- duce dominance, which ensures that substituted variables are always defined. Peephole optimizations are optimizations that are performed locally on a small number of instructions. The name is inspired from the picture that we look at the code through a peephole and make optimization that only involve the small amount code we can see and that are indented of the rest of the program. There is a large number of possible peephole optimizations. The LLVM com- piler implements for example more than 1000 peephole optimizations [LMNR15]. In this lecture, we discuss three important and representative peephole optimiza- tions: constant folding, strength reduction, and null sequences. 2 Constant Folding Optimizations have two components: (1) a condition under which they can be ap- plied and the (2) code transformation itself. The optimization of constant folding is a straightforward example of this. The code transformation itself replaces a binary operation with a single constant, and applies whenever c1 c2 is defined. l : x c1 c2 −! l : x c (where c =
    [Show full text]
  • Poster: Proofs of Space
    Poster: Proofs of Space Stefan Dziembowski∗, Sebastian Fausty, Vladimir Kolmogorovz, Krzysztof Pietrzakz ∗University of Warsaw and Sapienza University of Rome, faculty yEPFL Lausanne, post-doc zIST Austria, faculty Abstract—Proofs of work (PoW) have been suggested by is secure even against an adversary equipped with special- Dwork and Naor (Crypto’92) as protection to a shared resource. purpose hardware. This may, in some cases, mean that the The basic idea is to ask the service requestor to dedicate some computing effort spent by the honest (software-based) users non-trivial amount of computational work to every request. The becomes high. original applications included prevention of spam and protection against denial of service attacks. More recently, PoWs have been used to prevent double spending in the Bitcoin digital currency II. PROOFS OF SPACE (POS). system. From a more abstract point of view, a proof of work is In this work, we put forward an alternative concept for simply a means of showing that one invested a non-trivial PoWs – so-called proofs of space (PoS), where a service requestor amount of effort related to some statement. This general must dedicate a significant amount of disk space as opposed to principle also works with resources other than computation computation. We construct secure PoS schemes in the random like real money in micropayment systems or human attention oracle model, using graphs with high ”pebbling complexity” and in CAPTCHAs. In this paper we put forward the concept Merkle hash-trees. of proofs of space where the resource in question is the disk space. Some computational work is needed only in the I.
    [Show full text]
  • Puremvc Actionscript 3 Framework User Guide
    FoxR PureMVC ActionScript 3 Framework User Guide Version 0.2.1 Copyright 2009 Jeff Fox. Last Updated 12/9/2009 Outline Basic Info • Requirements • License Agreement • Change Log • Credits Installation • Downloading FoxR • Installation Instructions • Upgrading from an Previous Version • Troubleshooting Introduction • Getting Started • At a Glance • Supported Features • Application Flow Chart • Model-View-Controller • Architectural Goals • Roadmap General Topics • Code vs. Visual Architecture • Configuring FoxR (Global, Local and FlashVars) • Element and CompoundElement • Global Variables and Constants • Using CSS • Setting Fonts and copy • Visual Configuration • Analytics • Logging • Adapters • Utilities • Component Library • Media Library • Images • Working with XML Building Flash Web Sites with FoxR Building RIAs with FoxR I. Basic Info Requirements • Knowledge or proficiency with ActionScript 3 programming • Flash Compiler o Flex SDK (version 4 recommended for all users) o Eclipse w Flex Builder Plug-in o Flex Builder 2 or 3 OR Flash Builder 4 o HaXe compiler (www.haxe.org) • Knowledge or proficiency with MVC design and programming and the PureMVC Framework. (STRONGLY RECOMMENDED) • ActionScript IDE (RECOMMENDED) o Flash Develop (Win) o Eclipse with Flex Plug-in OR Flex/Flash Builder (Mac/Unix) o Flash CS3 or higher License Agreement The MIT License Copyright (c) 2009 Jeff Fox Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
    [Show full text]
  • Krzysztof Pietrzak Last Updated November 22, 2018 Professor [email protected] IST Austria
    Krzysztof Pietrzak last updated November 22, 2018 Professor [email protected] IST Austria http://pub.ist.ac.at/crypto/ Personal Details Full Name: Krzysztof Pietrzak Citizenship: Swiss & Polish. Languages: German & Swiss-German, English, Polish (fluent), French, Dutch (speak/read), Norwegian (read) Research Interests I have a broad interest in foundational and practical aspects of cryptography. Current Employment Institute of Science and Technology (IST) Austria Vienna, Austria • Professor (Assistant Professor before Aug 2016) Aug 2011-current Previous Employment CWI (Centrum Wiskunde & Informatica) Amsterdam, Netherlands • Scientific staff member in the Crypto Group (Head Ronald Cramer) Jan 2007-Jul 2011 Ecole´ Normale Sup´erieure Paris, France • Postdoc in the Crypto Group (Head David Pointcheval) Jan-Dec 2006 Selected Distinctions ERC Starting Grant (1.12mio e) • Provable Security for Physical Cryptography (PSPC) 2010-2015 ERC Consolidator Grant (1.8mio e) • Teaching Old Crypto New Tricks (TOCNeT) 2016-2021 Best Paper Awards at • Eurocrypt 2011, 2017 and 2018 Education ETH Z¨urich,Switzerland • PhD in Cryptography 2001 - 2005 { Adviser: Prof. Ueli Maurer. { Title: Indistinguishability and Composition of Random Systems. ETH Z¨urich,Switzerland • Dipl.Inf.Ing.ETH (Master Degree in Computer Science) 1996 - 2001 { Minor subject: Quantum Physics. { Diploma thesis done at McGill (see below.) McGill University Montr´eal,Canada • Diploma Thesis autumn 2001 { Advisers: Prof. Michael Hallett (McGill) and Prof. Gaston Gonnet (ETH). { Title: On the
    [Show full text]