AngularJS, together with Node.js, is an extremely powerful combination for building single page applications. Unfortunately, its development requires writing HTML and Javascript, which is tedious and error prone. By using vibe.d, HTML is no longer necessary, and the developers can use the full power of a static-typed language for the development of the backend. Substituting Javascript with Typescript in addition to a little bit of CTFE D magic then removes the need for redundant data type declarations, and makes everything statically typed. At the end of the talk, the attendee will have witnessed the creation of a statically typed, asynchronous single page application that required little extra typing than its dynamically typed equivalent. Additionally, the attendees will be motivated to explore the presented combination of frameworks as a viable desktop application UI framework.
Skiron - Experiments in CPU Design in DMithun Hunsur
This document discusses Skiron, an experimental CPU design project implemented in the D programming language. It provides an overview of Skiron, which simulates a RISC-inspired instruction set architecture. It describes the idioms and patterns used in D to define the instruction set and encoding in a way that is self-documenting and allows different parts of the software to stay in sync. It also discusses lessons learned, such as issues with delegates, as well as potential improvements to D's metaprogramming capabilities and standard library support for @nogc code. Realizing Skiron in hardware with an FPGA and making it self-hosting are presented as future goals.
clWrap: Nonsense free control of your GPUJohn Colvin
The document discusses OpenCL and GPU programming. It provides an overview of OpenCL concepts like platforms, devices, contexts, kernels, command queues, buffers and images. It describes the OpenCL C API and some limitations. It then introduces clWrap, a D library that aims to provide a more type-safe and high-level wrapper for OpenCL. clWrap sits on top of the OpenCL C API and allows dropping down to it when needed. It also provides examples of mapping kernels and data to GPUs using clWrap.
DaNode is a simple and small web server written in D that allows running websites using any programming language as CGI scripts. It has fewer than 2000 lines of code, runs on Windows, Linux, and ARM, and allows serving multiple secure domains from a single server using SSL and SNI. While simple and useful for quick tasks, it does not fully implement web standards and its security has limitations, but it serves as a basis for further development and adding features from other frameworks like vibe.d.
The document summarizes the D programming language compiler, including its organization with one front end and three back ends, major changes including converting the front end to D and using Dwarf exception handling. It describes the source code organization, types of compiles, memory allocation, strings, arrays, parsing, semantic analysis, lowering, constant folding, templates, inlining, and challenges in improving encapsulation, reducing complexity and memory usage.
Golang Performance : microbenchmarks, profilers, and a war storyAerospike
Slides for Brian Bulkowski's talk about Golang performance:
microbenchmarks, profilers, and a war story about optimizing the Aerospike Database Go client.
http://www.meetup.com/Go-lang-Developers-NYC/events/216650022/
Despite being a slow interpreter, Python is a key component in high-performance computing (HPC). Python is easy to use. C++ is fast. Together they are a beautiful blend. A new tool, pybind11, makes this approach even more attractive to HPC code. It focuses on the niceties C++11 brings in. Beyond the syntactic sugar around the Python C API, it is interesting to see how pybind11 handles the vast difference between the two languages, and what matters to HPC.
The document discusses C++ and its evolution over time. Some key points include:
- C++ has been active for over 30 years and remains relevant due to its performance and use in applications like mobile.
- The new C++11 standard adds many new features that make the language more powerful yet easier to use, such as rvalue references, lambdas, and type inference.
- Examples are provided showing how new C++11 features like futures, lambdas and static assertions can be used concisely to solve common programming problems in a more modern style.
The document discusses using Go language to build a distributed computing architecture with multiple machines. It covers using RabbitMQ and NSQ for queues, building a simple queue mechanism for single machine versions, and rewriting the architecture to address concurrency limits. It also discusses setting up a server-agent system with RPC communication and context cancellation to enable job cancellation.
Skiron - Experiments in CPU Design in DMithun Hunsur
This document discusses Skiron, an experimental CPU design project implemented in the D programming language. It provides an overview of Skiron, which simulates a RISC-inspired instruction set architecture. It describes the idioms and patterns used in D to define the instruction set and encoding in a way that is self-documenting and allows different parts of the software to stay in sync. It also discusses lessons learned, such as issues with delegates, as well as potential improvements to D's metaprogramming capabilities and standard library support for @nogc code. Realizing Skiron in hardware with an FPGA and making it self-hosting are presented as future goals.
clWrap: Nonsense free control of your GPUJohn Colvin
The document discusses OpenCL and GPU programming. It provides an overview of OpenCL concepts like platforms, devices, contexts, kernels, command queues, buffers and images. It describes the OpenCL C API and some limitations. It then introduces clWrap, a D library that aims to provide a more type-safe and high-level wrapper for OpenCL. clWrap sits on top of the OpenCL C API and allows dropping down to it when needed. It also provides examples of mapping kernels and data to GPUs using clWrap.
DaNode is a simple and small web server written in D that allows running websites using any programming language as CGI scripts. It has fewer than 2000 lines of code, runs on Windows, Linux, and ARM, and allows serving multiple secure domains from a single server using SSL and SNI. While simple and useful for quick tasks, it does not fully implement web standards and its security has limitations, but it serves as a basis for further development and adding features from other frameworks like vibe.d.
The document summarizes the D programming language compiler, including its organization with one front end and three back ends, major changes including converting the front end to D and using Dwarf exception handling. It describes the source code organization, types of compiles, memory allocation, strings, arrays, parsing, semantic analysis, lowering, constant folding, templates, inlining, and challenges in improving encapsulation, reducing complexity and memory usage.
Golang Performance : microbenchmarks, profilers, and a war storyAerospike
Slides for Brian Bulkowski's talk about Golang performance:
microbenchmarks, profilers, and a war story about optimizing the Aerospike Database Go client.
http://www.meetup.com/Go-lang-Developers-NYC/events/216650022/
Despite being a slow interpreter, Python is a key component in high-performance computing (HPC). Python is easy to use. C++ is fast. Together they are a beautiful blend. A new tool, pybind11, makes this approach even more attractive to HPC code. It focuses on the niceties C++11 brings in. Beyond the syntactic sugar around the Python C API, it is interesting to see how pybind11 handles the vast difference between the two languages, and what matters to HPC.
The document discusses C++ and its evolution over time. Some key points include:
- C++ has been active for over 30 years and remains relevant due to its performance and use in applications like mobile.
- The new C++11 standard adds many new features that make the language more powerful yet easier to use, such as rvalue references, lambdas, and type inference.
- Examples are provided showing how new C++11 features like futures, lambdas and static assertions can be used concisely to solve common programming problems in a more modern style.
The document discusses using Go language to build a distributed computing architecture with multiple machines. It covers using RabbitMQ and NSQ for queues, building a simple queue mechanism for single machine versions, and rewriting the architecture to address concurrency limits. It also discusses setting up a server-agent system with RPC communication and context cancellation to enable job cancellation.
This document discusses implementing a job queue in Golang. It begins by explaining buffered and unbuffered channels, and shows examples of using channels to coordinate goroutines. It then demonstrates how to build a job queue that uses a channel to enqueue jobs and have worker goroutines process jobs from the channel concurrently. It also discusses ways to gracefully shutdown workers using contexts and wait groups. Finally, it covers topics like auto-scaling agents, communicating between servers and agents, and handling job cancellation.
Rust is a systems programming language focused on three goals: safety, speed, and concurrency. It is open source and provides top-tier performance like C/C++ while ensuring memory safety and preventing issues like memory leaks through its ownership and borrowing model that is checked at compile time. Rust also supports features like enums, pattern matching, generics, traits, and has a built-in test system to help ensure correctness.
Optimizing Communicating Event-Loop Languages with TruffleStefan Marr
Communicating Event-Loop Languages similar to E and AmbientTalk are recently gaining more traction as a subset of actor languages. With the rise of JavaScript, E’s notion of vats and non-blocking communication based on promises entered the mainstream. For implementations, the combination of dynamic typing, asynchronous message sending, and promise resolution pose new optimization challenges.
This paper discusses these challenges and presents initial experiments for a Newspeak implementation based on the Truffle framework. Our implementation is on average 1.65x slower than Java on a set of 14 benchmarks. Initial optimizations improve the performance of asynchronous messages and reduce the cost of encapsulation on microbenchmarks by about 2x. Parallel actor benchmarks further show that the system scales based on the workload characteristics. Thus, we conclude that Truffle is a promising platform also for communicating event-loop languages.
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)Ontico
The HipHop Virtual Machine (HHVM) is the PHP and Hack execution engine developed at Facebook. HHVM is the fastest existing PHP/Hack engine, and it powers not only Facebook's servers, but also Wikipedia, Baidu, and many other sites across the web. In this talk, we'll give an overview of the design of HHVM, with particular focus on its JIT compiler. I'll share some of our experiences building this high performance system, as well as some of the key challenges that we've faced to improve PHP performance.
Klee and Angr are tools for symbolic execution. Klee is a symbolic virtual machine that executes programs symbolically and generates test cases by solving constraints. It works on LLVM bitcode. Angr is a Python framework for analyzing binaries using static and dynamic symbolic analysis. It lifts binaries into an intermediate representation called VEX to analyze machine code across architectures. Both tools explore all paths in a program and solve path constraints to generate inputs that execute each path.
This document discusses best practices for handling errors and callbacks in Node.js applications. It covers techniques like error delegation, exception handling, error-first callbacks, avoiding nested callbacks, and using control flow libraries. It also discusses deployment strategies like using screen, restarting crashed processes, and innovating with platforms like Joyent, Nodejitsu and Heroku.
Rust is a system programming language focused on safety, speed, and concurrency. It's standard library provides API for dealing with I/O, but for now in a synchronous way. In this talk we'll dive into the ecosystem of asynchronous libraries published so far on crates.io and how to use them in order to build robust, scalable, and production ready network clients and servers.
Kenneth Geisshirt gave a presentation on extending Node.js using C++. He covered why to write extensions in C++, demo C++ classes, building extensions, wrapping classes, methods, callbacks, exceptions, and more. The goal was to learn the basics of V8 internals, wrapping C++ classes, and writing an extension.
Go is an exciting new programming language developed at Google that focuses on high performance and easing the developer experience. It has many advantages over other languages like C++ such as having a simple, quick to learn syntax, extremely fast compiler and execution speeds, powerful standard library, easy concurrency with goroutines and channels, and implicit interfaces. While still missing some features like a full IDE, Go shows great promise for building scalable server side applications and performing data processing.
This document provides an overview and agenda for a presentation on polyglot programming and asynchronous programming using C++ features like futures, coroutines, and generators. The presentation introduces DDS-RPC, which allows for remote procedure calls over a data distribution service middleware. It discusses how C++ futures and coroutines can be used to write asynchronous and non-blocking I/O code in a synchronous-looking way. Examples are provided to demonstrate features like serial and parallel composition of futures, using await with coroutines, and using generators to lazily iterate over data.
Basic c++ 11/14 for python programmersJen Yee Hong
A short list of some common python programming patterns and their C++ equivalents. This can help programmers learn C++ in a more efficient way if he or she already knows Python.
Part of this material is used for internal training of Appier Inc, one of the leading artificial intelligence company in Asia.
Thank Appier Inc. for allowing me to share this.
2018 cosup-delete unused python code safely - englishJen Yee Hong
The talk is about doing cleanup and refactor for legacy Python code base in a safer way. I introduced several existing tools for this task and demonstrated how (surprisingly) Python ast module can also help in this case.
中文摘要:
不管是 open source 專案還是工作上,經過長時間開發累積,source code 內可能會殘留許多不再需要的 code,造成維護以及 refactor 的困難,也造成新手 trace code 時的障礙。
對 C/C++ 這類編譯式語言來說,開啟編譯器最佳化能自動清除 dead code,但對於 Python 這類動態語言,則沒有公認完美的方法。
本議程分享一些相關經驗,佐以利用 Python AST 的簡易自製工具,討論如何從較複雜的 python source tree 中,安全的清除不再需要的 code。
Code: https://github.com/PCMan/python-find-unused-func
The document discusses techniques for optimizing memory usage through bit packing and value type polymorphism. It describes:
1. Bit packing techniques like storing multiple values in a single integer using bitwise operations to reduce memory usage. This includes examples of packing booleans and enums.
2. Using a "tagged union" approach to represent different value types polymorphically by storing a type tag and common data in a single value.
3. The concept of "value type polymorphism" where subtypes all fit within a size budget by using a tag to differentiate them while presenting a common API. This allows efficiently representing types in a compiler.
Eitaro Fukamachi presents CL21, a redesign of Common Lisp for the 21st century. CL21 aims to improve Common Lisp's consistency, expressiveness, compatibility, and efficiency. It focuses on simplifying naming conventions, removing unnecessary symbols, and making the language more suitable for modern use while maintaining 100% compatibility with Common Lisp code and libraries. The project is still in development with discussions ongoing about final syntax and standard library decisions. CL21 hopes to make Lisp a premier language for prototyping by building on Common Lisp's strengths.
This document discusses symbolic execution and the Triton framework. It begins with an introduction to symbolic execution and why it is useful for tasks like static and dynamic analysis. Triton is then introduced as a dynamic binary analysis framework that uses symbolic execution. Key components of Triton like the symbolic execution engine and AST representations are described. Finally, SymGDB is presented as a way to combine Triton with GDB to simplify symbolic execution debugging workflows. Examples analyzing crackme programs are provided to demonstrate SymGDB.
The document discusses extending Node.js using C++. It covers wrapping C++ classes for use in JavaScript, including setters, getters, exceptions, and instantiating objects. Examples are provided for wrapping Book and Person classes to be accessible from JavaScript. Building the extension using waf or gyp build systems is also covered. The presenter's background and the agenda are outlined initially.
This document presents an agenda for becoming a "console cowboy" by learning to be more productive using the terminal and bash shell. It covers the basic terminal tools, bash usage and configuration, utilities like grep, sed and awk, scripting with variables, conditionals and loops, and tools for developers like Homebrew, Git, Xcode and xcpretty. The goal is to stop using the mouse and automate work by writing scripts to harness the power of the Unix command line.
El documento describe los conceptos básicos de informática, incluyendo la definición de informática y computación, así como los componentes fundamentales de un sistema computacional como hardware, software, arquitectura del computador, memoria, unidad central de procesamiento y dispositivos de entrada y salida. También explica brevemente periféricos comunes como monitores, teclados, ratones, impresoras y discos duros.
This document discusses implementing a job queue in Golang. It begins by explaining buffered and unbuffered channels, and shows examples of using channels to coordinate goroutines. It then demonstrates how to build a job queue that uses a channel to enqueue jobs and have worker goroutines process jobs from the channel concurrently. It also discusses ways to gracefully shutdown workers using contexts and wait groups. Finally, it covers topics like auto-scaling agents, communicating between servers and agents, and handling job cancellation.
Rust is a systems programming language focused on three goals: safety, speed, and concurrency. It is open source and provides top-tier performance like C/C++ while ensuring memory safety and preventing issues like memory leaks through its ownership and borrowing model that is checked at compile time. Rust also supports features like enums, pattern matching, generics, traits, and has a built-in test system to help ensure correctness.
Optimizing Communicating Event-Loop Languages with TruffleStefan Marr
Communicating Event-Loop Languages similar to E and AmbientTalk are recently gaining more traction as a subset of actor languages. With the rise of JavaScript, E’s notion of vats and non-blocking communication based on promises entered the mainstream. For implementations, the combination of dynamic typing, asynchronous message sending, and promise resolution pose new optimization challenges.
This paper discusses these challenges and presents initial experiments for a Newspeak implementation based on the Truffle framework. Our implementation is on average 1.65x slower than Java on a set of 14 benchmarks. Initial optimizations improve the performance of asynchronous messages and reduce the cost of encapsulation on microbenchmarks by about 2x. Parallel actor benchmarks further show that the system scales based on the workload characteristics. Thus, we conclude that Truffle is a promising platform also for communicating event-loop languages.
HHVM: Efficient and Scalable PHP/Hack Execution / Guilherme Ottoni (Facebook)Ontico
The HipHop Virtual Machine (HHVM) is the PHP and Hack execution engine developed at Facebook. HHVM is the fastest existing PHP/Hack engine, and it powers not only Facebook's servers, but also Wikipedia, Baidu, and many other sites across the web. In this talk, we'll give an overview of the design of HHVM, with particular focus on its JIT compiler. I'll share some of our experiences building this high performance system, as well as some of the key challenges that we've faced to improve PHP performance.
Klee and Angr are tools for symbolic execution. Klee is a symbolic virtual machine that executes programs symbolically and generates test cases by solving constraints. It works on LLVM bitcode. Angr is a Python framework for analyzing binaries using static and dynamic symbolic analysis. It lifts binaries into an intermediate representation called VEX to analyze machine code across architectures. Both tools explore all paths in a program and solve path constraints to generate inputs that execute each path.
This document discusses best practices for handling errors and callbacks in Node.js applications. It covers techniques like error delegation, exception handling, error-first callbacks, avoiding nested callbacks, and using control flow libraries. It also discusses deployment strategies like using screen, restarting crashed processes, and innovating with platforms like Joyent, Nodejitsu and Heroku.
Rust is a system programming language focused on safety, speed, and concurrency. It's standard library provides API for dealing with I/O, but for now in a synchronous way. In this talk we'll dive into the ecosystem of asynchronous libraries published so far on crates.io and how to use them in order to build robust, scalable, and production ready network clients and servers.
Kenneth Geisshirt gave a presentation on extending Node.js using C++. He covered why to write extensions in C++, demo C++ classes, building extensions, wrapping classes, methods, callbacks, exceptions, and more. The goal was to learn the basics of V8 internals, wrapping C++ classes, and writing an extension.
Go is an exciting new programming language developed at Google that focuses on high performance and easing the developer experience. It has many advantages over other languages like C++ such as having a simple, quick to learn syntax, extremely fast compiler and execution speeds, powerful standard library, easy concurrency with goroutines and channels, and implicit interfaces. While still missing some features like a full IDE, Go shows great promise for building scalable server side applications and performing data processing.
This document provides an overview and agenda for a presentation on polyglot programming and asynchronous programming using C++ features like futures, coroutines, and generators. The presentation introduces DDS-RPC, which allows for remote procedure calls over a data distribution service middleware. It discusses how C++ futures and coroutines can be used to write asynchronous and non-blocking I/O code in a synchronous-looking way. Examples are provided to demonstrate features like serial and parallel composition of futures, using await with coroutines, and using generators to lazily iterate over data.
Basic c++ 11/14 for python programmersJen Yee Hong
A short list of some common python programming patterns and their C++ equivalents. This can help programmers learn C++ in a more efficient way if he or she already knows Python.
Part of this material is used for internal training of Appier Inc, one of the leading artificial intelligence company in Asia.
Thank Appier Inc. for allowing me to share this.
2018 cosup-delete unused python code safely - englishJen Yee Hong
The talk is about doing cleanup and refactor for legacy Python code base in a safer way. I introduced several existing tools for this task and demonstrated how (surprisingly) Python ast module can also help in this case.
中文摘要:
不管是 open source 專案還是工作上,經過長時間開發累積,source code 內可能會殘留許多不再需要的 code,造成維護以及 refactor 的困難,也造成新手 trace code 時的障礙。
對 C/C++ 這類編譯式語言來說,開啟編譯器最佳化能自動清除 dead code,但對於 Python 這類動態語言,則沒有公認完美的方法。
本議程分享一些相關經驗,佐以利用 Python AST 的簡易自製工具,討論如何從較複雜的 python source tree 中,安全的清除不再需要的 code。
Code: https://github.com/PCMan/python-find-unused-func
The document discusses techniques for optimizing memory usage through bit packing and value type polymorphism. It describes:
1. Bit packing techniques like storing multiple values in a single integer using bitwise operations to reduce memory usage. This includes examples of packing booleans and enums.
2. Using a "tagged union" approach to represent different value types polymorphically by storing a type tag and common data in a single value.
3. The concept of "value type polymorphism" where subtypes all fit within a size budget by using a tag to differentiate them while presenting a common API. This allows efficiently representing types in a compiler.
Eitaro Fukamachi presents CL21, a redesign of Common Lisp for the 21st century. CL21 aims to improve Common Lisp's consistency, expressiveness, compatibility, and efficiency. It focuses on simplifying naming conventions, removing unnecessary symbols, and making the language more suitable for modern use while maintaining 100% compatibility with Common Lisp code and libraries. The project is still in development with discussions ongoing about final syntax and standard library decisions. CL21 hopes to make Lisp a premier language for prototyping by building on Common Lisp's strengths.
This document discusses symbolic execution and the Triton framework. It begins with an introduction to symbolic execution and why it is useful for tasks like static and dynamic analysis. Triton is then introduced as a dynamic binary analysis framework that uses symbolic execution. Key components of Triton like the symbolic execution engine and AST representations are described. Finally, SymGDB is presented as a way to combine Triton with GDB to simplify symbolic execution debugging workflows. Examples analyzing crackme programs are provided to demonstrate SymGDB.
The document discusses extending Node.js using C++. It covers wrapping C++ classes for use in JavaScript, including setters, getters, exceptions, and instantiating objects. Examples are provided for wrapping Book and Person classes to be accessible from JavaScript. Building the extension using waf or gyp build systems is also covered. The presenter's background and the agenda are outlined initially.
This document presents an agenda for becoming a "console cowboy" by learning to be more productive using the terminal and bash shell. It covers the basic terminal tools, bash usage and configuration, utilities like grep, sed and awk, scripting with variables, conditionals and loops, and tools for developers like Homebrew, Git, Xcode and xcpretty. The goal is to stop using the mouse and automate work by writing scripts to harness the power of the Unix command line.
El documento describe los conceptos básicos de informática, incluyendo la definición de informática y computación, así como los componentes fundamentales de un sistema computacional como hardware, software, arquitectura del computador, memoria, unidad central de procesamiento y dispositivos de entrada y salida. También explica brevemente periféricos comunes como monitores, teclados, ratones, impresoras y discos duros.
Este documento resume el Plan Vive Digital de Colombia, una iniciativa para impulsar la masificación del uso de Internet. El plan se centra en cuatro ejes: infraestructura, usuarios, servicios y aplicaciones. Analiza las barreras para la masificación de Internet en Colombia y los objetivos del plan, como triplicar los municipios conectados y llegar al 50% de hogares y pymes conectados en 2014. Concluye que el plan y el tratamiento de las barreras ha ayudado a reducir la brecha tecnológica en el país.
The document calls for stronger integration between efforts to address climate change and conserve biodiversity and wilderness areas for three reasons:
1) Conserving natural ecosystems and wilderness areas is essential to efforts to stabilize carbon levels and avoid dangerous climate change impacts.
2) Climate change and biodiversity conservation are closely interconnected issues that emerged together from the 1992 Rio Conference but have become separated in implementation.
3) Reuniting climate change mitigation and adaptation with biodiversity conservation and wilderness protection is urgently needed for the health of the planet.
Este documento presenta un resumen de los 7 capítulos de un libro. Cada capítulo se enfoca en un tema diferente relacionado con mejorar la educación. Los temas incluyen: reconocer las limitaciones del conocimiento humano, desarrollar un conocimiento más integral, enseñar sobre la condición humana compleja, enfocarse en la identidad planetaria compartida, afrontar las incertidumbres, enseñar la comprensión mutua y desarrollar una ética global. El objetivo general es promover una educación más completa que prepare
Este documento presenta análisis técnicos diarios de varios índices y bonos europeos, incluyendo recomendaciones de posiciones largas y cortas, así como niveles de soporte y resistencia clave. Proporciona detalles sobre posibles operaciones en EuroStoxx50, DAX, IBEX 35, CAC 40 y bonos alemanes, con el objetivo de aprovechar movimientos esperados en los precios de estos activos.
Luis Antonio Robles nació el 24 de octubre de 1849 y fue un afrocolombiano que hizo grandes contribuciones a la historia de Colombia a través de los cargos públicos que ocupó. Luis Antonio Robles es considerado un símbolo de coraje, superación y amor por su raza.
El documento advierte sobre los riesgos de compartir demasiada información personal en redes sociales como Facebook, ya que esto puede poner en peligro la integridad y seguridad de uno mismo y de sus seres queridos. También recomienda manejar estas redes de forma precavida, aceptando solo a personas conocidas para evitar problemas futuros. Si bien las redes ofrecen oportunidades para conectarse con otros, a veces se presiona a la gente a unirse de manera inadecuada.
Este documento resume información sobre diferentes medicamentos antidepresivos e ISRS, incluyendo sus indicaciones, dosis y efectos secundarios. Se proporcionan detalles sobre fármacos como la fluvoxamina, fluoxetina, paroxetina, sertalina, citalopram y escitalopram para trastornos como la depresión, TOC, trastornos de ansiedad y más. También se mencionan IRNA como la reboxetina, IRSNA como la venlafaxina y duloxetina, y tricíclicos como la amit
Este documento proporciona instrucciones para usar Microsoft PowerPoint. Explica cómo crear una presentación nueva, insertar diferentes tipos de medios como imágenes, sonido, audio y videos. También describe cómo agregar cuadros de texto y cómo embeber videos desde YouTube u otras fuentes. El objetivo es servir como guía para principiantes sobre las funciones básicas de PowerPoint.
Responding in Times of Crisis: Providing Psychological First AidBernie McCann
A professional development presentation for credit union/bank branch managers to assist them in responding to employees and other victims of bank robberies.
TIRADS is a practical system for stratifying thyroid nodule malignancy risk in clinical practice. A study of 346 nodules found substantial inter-observer agreement for TIRADS categorization. TIRADS categories 5 and 4c had high positive predictive value for malignancy, while reassigning some 4a nodules to category 3 improved specificity. Thus, TIRADS provides a simple method for ultrasound assessment and risk stratification of thyroid nodules.
Here is the new syllabus for CCNA which can be usefull in major projects and synopsis please use these notes only for education purpose only
The Technical Zone
I just made a change to the database schema, but now the team needs it for my feature to work. How can I keep track of my database changes and communicate them to the rest of the team? Migrations give a structured way to structurally alter your database structure as your application evolves . . . structurally. They also provide a way for everyone on the team: developers, testers, CI admins, DBAs, etc, to apply the latest changes wherever they are needed - with uniformity and low friction. Fluent Migrations for .NET provide a discoverable, human readable API that supports dozens of different databases (including SQL Server, PostgreSQL, Oracle). Topics covered in this session:
* Why you should use migrations
* How to write fluent migrations
* A look behind the scenes of how fluent migrations work
* Drawbacks/downsides to using migrations
* Other migration options for EF and NoSQL (Couchbase)
Ad hoc SQL scripts make you want to flip a desk? Keep your team on the same page with fluent migrations.
(This session will briefly mention EF Migrations, but is not primarily about EF).
PyCascading for Intuitive Flow Processing with Hadoop (gabor szabo)PyData
PyCascading provides a Python API for the Cascading framework to process data flows on Hadoop. It allows defining data flows as Python functions and operations instead of Java code. The document discusses Hadoop concepts, shows how to define a WordCount workflow in PyCascading with fewer lines of code than Java, and walks through a full example of finding friends' most common interests. Key advantages are using Python instead of Java and leveraging any Python libraries, though performance-critical parts require Java.
The document discusses 10 ways to improve code quality based on a presentation by Martin Cronje. It provides examples of refactoring code to remove switch/if statements, use polymorphism instead of switch statements, extract methods to improve readability, add comments appropriately, use frameworks instead of building your own, and avoid premature optimization. It also emphasizes fundamentals over cool technologies and understanding quality and purpose.
Ten practical ways to improve front-end performanceAndrew Rota
Conference talk presented at PHP South Coast 2017. Ten concrete ways to improve web performance, split between quick tactical wins and longer-term overarching strategies.
Active Record 4.0 includes all sorts of exciting support for PostgreSQL! In this presentation, I show many of these improvements, and discuss why these are important for Web developers. If you haven't yet adopted PostgreSQL, now might be a great time and chance to do so.
This document discusses monitoring MySQL performance using StatsD and Graphite. It provides an overview of the tools and how they are used. StatsD collects metrics from applications and services and sends them to Graphite for storage and visualization. The document describes how a custom MySQL StatsD daemon was created to gather MySQL metrics and send them to StatsD in real-time for high granularity monitoring and graphing in Graphite.
The document discusses high performance websites, introducing xDebug profiling, Kcachegrind, and JMeter. It provides instructions for installing necessary software on a virtual machine, including Apache, xDebug, JMeter, and Kcachegrind. The document then demonstrates how to use these tools to optimize website performance, including profiling a sample extension in TYPO3, identifying optimization opportunities, and implementing caching. Finally, it shows how to test website performance using JMeter, including building test plans, recording tests, distributed testing on Amazon EC2, and analyzing results.
4-year chronicles of ALLSTOCKER (a trading platform for used construction equipment and machinery). We describe how the system has evolved incrementally using Pharo smalltalk.
This document discusses building a social analytics tool using MongoDB from a developer's perspective. It covers using MongoDB for its schema-less data and ability to handle fast read-write operations. Key topics include using aggregation queries to gain insights from data by chaining queries together and filtering/manipulating results at each stage. JavaScript capabilities in MongoDB allow applying business logic directly to data. Examples demonstrate removing garbage data and stopwords. Indexes, current progress, and tips/tricks learned around cloning collections and removing vs dropping are also covered, with a demo planned.
This document summarizes Cassandra drivers and tools. It discusses the Java driver architecture including connection pooling, load balancing policies, and automatic paging. It also demonstrates Cassandra Unit for testing, the Java driver object mapper module, and Achilles object mapper with features like dirty checking. Live coding examples are provided for these tools.
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)Ontico
This document discusses how PostgreSQL helped Zalando, one of Europe's largest online fashion retailers, scale their operations. Some key points:
- Zalando uses PostgreSQL to store data for over 13.7 million customers, 150,000+ products, and handles 640+ million visits annually.
- They access data through stored procedures to maintain consistency and independence from schema changes. Stored procedures also allow easy data modeling and schema changes without downtimes.
- Zalando shards their database without limits through their Java stored procedure wrapper which directs calls to the appropriate shard transparently.
- They closely monitor PostgreSQL using custom tools like PGObserver and have a dedicated team to ensure high performance and availability.
This presentation introduces the key innovations that Play 2 brings to web application development in Java and Scala. The Play framework has brought high-productivity web development to Java with three innovations that changed the rules on Java EE: Java class and template save-and-reload that just works, a simplified stateless architecture that enables cloud deployment, and superior ease-of-use. Following Play's rapidly-growing popularity, Play 2.0 was released in March 2012 with innovations that are not just new in the Java world: type-safe view templates and HTTP routing, compile-time checking for static resources, and native support for both Java and Scala. Type safety matters. After dynamically-typed programming languages such as PHP and Ruby set the standard for high-productivity web development, Play built on their advantages and has created a type-safe web development framework with extensive compile-time checking. This is essential for applications that will scale to tens of thousands of lines of code, with hundreds of view templates. Meanwhile, Play avoids the architectural-complexity that is promoted by Java EE-based approaches. The result is that Play 2 first enables rapid initial application development and then Play 2 helps you build big, serious and scalable web applications.
This document discusses using PHP for both web and desktop applications. It introduces PHP-GTK, which allows PHP to create graphical desktop applications with a native look and feel across platforms. It provides examples of creating windows, containers, working with signals and the main loop. The document also discusses installing PHP-GTK, some key considerations for desktop applications, and examples of creating widgets like trees and working with models.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/2lGNybu.
Stefan Krawczyk discusses how his team at StitchFix use the cloud to enable over 80 data scientists to be productive. He also talks about prototyping ideas, algorithms and analyses, how they set up & keep schemas in sync between Hive, Presto, Redshift & Spark and make access easy for their data scientists, etc. Filmed at qconsf.com..
Stefan Krawczyk is Algo Dev Platform Lead at StitchFix, where he’s leading development of the algorithm development platform. He spent formative years at Stanford, LinkedIn, Nextdoor & Idibon, working on everything from growth engineering, product engineering, data engineering, to recommendation systems, NLP, data science and business intelligence.
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"DataStax Academy
The ColumnFamily data model and wide-row support provides the ability to store and access data efficiently in a de-normalized state. Recent enhancements for CQL's spare tables and built-in indexing provide the capability to store data in a manner similar to that of relational databases. For many use cases hybrid approaches are needed, because complete de-normalization is appropriate for some access patterns whereas more structured data is appropriate for others. At times a single logical event becomes multiple insertions across multiple column families. Likewise a user request might require a several reads across different column families. This talk describes some of these scenarios and demonstrates how advanced operations such multiple step procedures, filtering, intersection, and paging can be implemented client side or server side with the help of the IntraVert plugin.
Intravert Server side processing for CassandraEdward Capriolo
The document provides examples of using CQL (Cassandra Query Language) to create and query tables in Cassandra. It shows how to create tables to store user and video data, insert sample records, and perform queries. It then discusses using the IntraVert library to execute more complex queries directly against Cassandra, such as joins, filters, and multi-table operations, in order to reduce network traffic and processing compared to doing everything on the client side.
The presentation which I was using during my talk at EPAM Lviv JS community about offline-first applications. Contains high-level review of tools and web platform to submerge folks in a world of offline-first thinking.
Beyond unit tests: Deployment and testing for Hadoop/Spark workflowsDataWorks Summit
As a Hadoop developer, do you want to quickly develop your Hadoop workflows? Do you want to test your workflows in a sandboxed environment similar to production? Do you want to write unit tests for your workflows and add assertions on top of it?
In just a few years, the number of users writing Hadoop/Spark jobs at LinkedIn have grown from tens to hundreds and the number of jobs running every day has grown from hundreds to thousands. With the ever increasing number of users and jobs, it becomes crucial to reduce the development time for these jobs. It is also important to test these jobs thoroughly before they go to production.
We’ve tried to address these issues by creating a testing framework for Hadoop/Spark jobs. The testing framework enables the users to run their jobs in an environment similar to the production environment and on the data which is sampled from the original data. The testing framework consists of a test deployment system, a data generation pipeline to generate the sampled data, a data management system to help users manage and search the sampled data and an assertion engine to validate the test output.
In this talk, we will discuss the motivation behind the testing framework before deep diving into its design. We will further discuss how the testing framework is helping the Hadoop users at LinkedIn to be more productive.
This document provides an overview of JavaScript and jQuery. It covers JavaScript syntax, values, operators, expressions, keywords, comments, objects, functions, conditions, arrays, and the Date object. It also discusses using JavaScript for dynamic web pages, DOM manipulation, and DHTML. Additionally, it provides examples of simple JavaScript programs for adding numbers and using prompt boxes. jQuery is also listed as a topic covered but not described.
Esta charla comprende las lecciones aprendidas convirtiendo la app de Android de Teambox (una app repleta de deuda técnica y con un alto nivel de acoplamiento entre clases), en la versión actual de Redbooth, que intenta cumplir la arquitectura Hexagonal y los principios SOLID. Durante la exposición explicaremos como fuimos desenredando el código paso a paso; como aplicamos por partes los conceptos de la arquitectura hexagonal; como dejamos de lado componentes del framework de Android que dificultaban el mantenimiento de la app; y que errores cometimos, como los solucionamos y como se podrían haber evitado.
Similar to Asynchronous single page applications without a line of HTML or Javascript, or why D is just awesome (20)
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...The Third Creative Media
"Navigating Invideo: A Comprehensive Guide" is an essential resource for anyone looking to master Invideo, an AI-powered video creation tool. This guide provides step-by-step instructions, helpful tips, and comparisons with other AI video creators. Whether you're a beginner or an experienced video editor, you'll find valuable insights to enhance your video projects and bring your creative ideas to life.
The Rising Future of CPaaS in the Middle East 2024Yara Milbes
Explore "The Rising Future of CPaaS in the Middle East in 2024" with this comprehensive PPT presentation. Discover how Communication Platforms as a Service (CPaaS) is transforming communication across various sectors in the Middle East.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
Enhanced Screen Flows UI/UX using SLDS with Tom KittPeter Caitens
Join us for an engaging session led by Flow Champion, Tom Kitt. This session will dive into a technique of enhancing the user interfaces and user experiences within Screen Flows using the Salesforce Lightning Design System (SLDS). This technique uses Native functionality, with No Apex Code, No Custom Components and No Managed Packages required.
Why Apache Kafka Clusters Are Like Galaxies (And Other Cosmic Kafka Quandarie...Paul Brebner
Closing talk for the Performance Engineering track at Community Over Code EU (Bratislava, Slovakia, June 5 2024) https://eu.communityovercode.org/sessions/2024/why-apache-kafka-clusters-are-like-galaxies-and-other-cosmic-kafka-quandaries-explored/ Instaclustr (now part of NetApp) manages 100s of Apache Kafka clusters of many different sizes, for a variety of use cases and customers. For the last 7 years I’ve been focused outwardly on exploring Kafka application development challenges, but recently I decided to look inward and see what I could discover about the performance, scalability and resource characteristics of the Kafka clusters themselves. Using a suite of Performance Engineering techniques, I will reveal some surprising discoveries about cosmic Kafka mysteries in our data centres, related to: cluster sizes and distribution (using Zipf’s Law), horizontal vs. vertical scalability, and predicting Kafka performance using metrics, modelling and regression techniques. These insights are relevant to Kafka developers and operators.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...kalichargn70th171
In today's business landscape, digital integration is ubiquitous, demanding swift innovation as a necessity rather than a luxury. In a fiercely competitive market with heightened customer expectations, the timely launch of flawless digital products is crucial for both acquisition and retention—any delay risks ceding market share to competitors.
A neural network is a machine learning program, or model, that makes decisions in a manner similar to the human brain, by using processes that mimic the way biological neurons work together to identify phenomena, weigh options and arrive at conclusions.
Malibou Pitch Deck For Its €3M Seed Roundsjcobrien
French start-up Malibou raised a €3 million Seed Round to develop its payroll and human resources
management platform for VSEs and SMEs. The financing round was led by investors Breega, Y Combinator, and FCVC.
Consistent toolbox talks are critical for maintaining workplace safety, as they provide regular opportunities to address specific hazards and reinforce safe practices.
These brief, focused sessions ensure that safety is a continual conversation rather than a one-time event, which helps keep safety protocols fresh in employees' minds. Studies have shown that shorter, more frequent training sessions are more effective for retention and behavior change compared to longer, infrequent sessions.
Engaging workers regularly, toolbox talks promote a culture of safety, empower employees to voice concerns, and ultimately reduce the likelihood of accidents and injuries on site.
The traditional method of conducting safety talks with paper documents and lengthy meetings is not only time-consuming but also less effective. Manual tracking of attendance and compliance is prone to errors and inconsistencies, leading to gaps in safety communication and potential non-compliance with OSHA regulations. Switching to a digital solution like Safelyio offers significant advantages.
Safelyio automates the delivery and documentation of safety talks, ensuring consistency and accessibility. The microlearning approach breaks down complex safety protocols into manageable, bite-sized pieces, making it easier for employees to absorb and retain information.
This method minimizes disruptions to work schedules, eliminates the hassle of paperwork, and ensures that all safety communications are tracked and recorded accurately. Ultimately, using a digital platform like Safelyio enhances engagement, compliance, and overall safety performance on site. https://safelyio.com/
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfVALiNTRY360
Salesforce Healthcare CRM, implemented by VALiNTRY360, revolutionizes patient management by enhancing patient engagement, streamlining administrative processes, and improving care coordination. Its advanced analytics, robust security, and seamless integration with telehealth services ensure that healthcare providers can deliver personalized, efficient, and secure patient care. By automating routine tasks and providing actionable insights, Salesforce Healthcare CRM enables healthcare providers to focus on delivering high-quality care, leading to better patient outcomes and higher satisfaction. VALiNTRY360's expertise ensures a tailored solution that meets the unique needs of any healthcare practice, from small clinics to large hospital systems.
For more info visit us https://valintry360.com/solutions/health-life-sciences
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Asynchronous single page applications without a line of HTML or Javascript, or why D is just awesome
1. Asynchronous Single Page Applications
without a Line of HTML or Javascript.
Or why D is just awesome
Robert ”burner” Schadek
May 5, 2016
DConf
2. Javascript and HTML are awesome
• No explicit types
• Variables may be undefined
• Repetition repetition repetition
• No templates
• No compile time function execution
• No compile time
1
10. Vibe.d
• Powerful asynchronous I/O and web toolkit for D
• Uses Fibers and Threads
• n → m mapping
• yield()
• async IO
4
11. Vibe.d
• Powerful asynchronous I/O and web toolkit for D
• Uses Fibers and Threads
• n → m mapping
• yield()
• async IO
• async DB connectivity for MongoDB, Redis, MySQL
• You don’t need to care about async
• Web interface generator
• REST interface generator
4
12. REST Interface Generator
i n t e r f a c e MyAPI {
// GET /weather −> responds {” text ”: ” . . . ” , ”
→ temperature ”: . . . }
Weather getWeather () ;
}
5
13. REST Interface Generator
i n t e r f a c e MyAPI {
// GET /weather −> responds {” text ”: ” . . . ” , ”
→ temperature ”: . . . }
Weather getWeather () ;
}
c l a s s MyAPIImplementation : MyAPI {
auto weather = [ ”sunny” , ” rainy ” , ” cats and dogs ”
→ , ”snow” ] ;
Weather getWeather () {
return Weather (
weather [ uniform (0 , weather . length ) ] ,
uniform ( −10 ,30)
) ;
}
} 5
14. REST Interface Generator
auto router = new URLRouter ;
router . get ( ”/” , staticTemplate ! ” index . dt” ) ;
router . get ( ”/main . html” , staticTemplate ! ”main . dt” ) ;
router . r e g i s t e r R e s t I n t e r f a c e !MyAPI(new
→ MyAPIImplementation , r e s t s e t t i n g s ) ;
6
15. REST Interface Generator
auto router = new URLRouter ;
router . get ( ”/” , staticTemplate ! ” index . dt” ) ;
router . get ( ”/main . html” , staticTemplate ! ”main . dt” ) ;
router . r e g i s t e r R e s t I n t e r f a c e !MyAPI(new
→ MyAPIImplementation , r e s t s e t t i n g s ) ;
struct Weather {
s t r i n g text ;
double temperature ;
}
6
17. AngularJS Typescript
i n t e r f a c e Weather {
text : string ,
temperature : number
}
i n t e r f a c e MainScope extends ng . IScope {
weather : Weather
}
7
18. AngularJS Typescript
i n t e r f a c e Weather {
text : string ,
temperature : number
}
i n t e r f a c e MainScope extends ng . IScope {
weather : Weather
}
c l a s s MainCtrl {
public s t a t i c $ i n j e c t = [ ’ $scope ’ , ’ $http ’ ] ;
constructor ( private $scope : MainScope ,
private $http : ng . IHttpService )
{
t h i s . weather () ;
}
7
19. AngularJS Typescript
weather () : void {
var s = ’ /weather ’ ;
t h i s . $http . get ( s ) . success (( data : Weather ) => {
t h i s . $scope . weather = data ;
}) ;
}
8
20. Diet
doctype html
html (ng−app=”myapp”)
head
t i t l e DConf 2016 Weather
− j a v a s c r i p t ( ” . / angular . j s ”) ;
− j a v a s c r i p t ( ” . / angular−route . j s ”) ;
− j a v a s c r i p t ( ” . / myapp . j s ”) ;
body
div (ng−view )
9
21. Diet
doctype html
html (ng−app=”myapp”)
head
t i t l e DConf 2016 Weather
− j a v a s c r i p t ( ” . / angular . j s ”) ;
− j a v a s c r i p t ( ” . / angular−route . j s ”) ;
− j a v a s c r i p t ( ” . / myapp . j s ”) ;
body
div (ng−view )
− void j a v a s c r i p t ( s t r i n g name)
s c r i p t ( src=”#{name}”)
9
22. Diet
. container
p {{ weather . text }}
p {{ weather . temperature }}
button ( type=”submit ” ,ng−c l i c k =” c t r l . weather () ; ” )
→ Get Weather
10
25. Dataflow from the Server to the Frontend and back again
struct Weather {
s t r i n g text ;
double temperature ;
}
Dlang
11
26. Dataflow from the Server to the Frontend and back again
struct Weather {
s t r i n g text ;
double temperature ;
}
Dlang
i n t e r f a c e Weather {
text : string ,
tempereture : number
}
Typescript
11
33. Everything is wrong
• All we solved was a tiny specific problem
• What about server to database
• What if we would use Dart instead of Typescript
• How do we communicate the overall architecture
• How do we keep the architecture in sync with the code
• How do we communicate with non-developer
• ...
14
34. Everything is wrong
• All we solved was a tiny specific problem
• What about server to database
• What if we would use Dart instead of Typescript
• How do we communicate the overall architecture
• How do we keep the architecture in sync with the code
• How do we communicate with non-developer
• ...
• How do we deal with change?
14
38. Everything is still wrong
• Waterfall Model ← no change, never
• Hacking ← no plan to speak of, just change
15
39. Everything is still wrong
• Waterfall Model ← no change, never
• Agile Methods
• Hacking ← no plan to speak of, just change
15
40. Everything is still wrong
• Waterfall Model ← no change, never
• Agile Methods ← just hacking, with fancy names
• Hacking ← no plan to speak of, just change
15
41. Everything is still wrong
• Waterfall Model ← no change, never
• UML
• Agile Methods ← just hacking, with fancy names
• Hacking ← no plan to speak of, just change
15
42. Everything is still wrong
• Waterfall Model ← no change, never
• UML ← just kill me already
• Agile Methods ← just hacking, with fancy names
• Hacking ← no plan to speak of, just change
15
43. Everything is still wrong
• Waterfall Model ← no change, never
• UML ← just kill me already
• Agile Methods ← just hacking, with fancy names
• Hacking ← no plan to speak of, just change
15
44. Everything is still wrong
• Waterfall Model ← no change, never
• UML ← just kill me already
• Agile Methods ← just hacking, with fancy names
• Hacking ← no plan to speak of, just change
15
45. What do we want
• Speak about the system at different levels of detail
with different people
• Quickly introduce people to the system
• Keep data classes (Model) synchronized across
• Frontend
• Server
• Database
• Write only one model for everything, to keep stuff in sync
• Have description line based, because git
• Generate everything possible from the model
16
52. Structurizr
• Implements C4 Architecture Model
• Java library to build the model
• Its code, its fits into git
21
53. Structurizr
• Implements C4 Architecture Model
• Java library to build the model
• Its code, its fits into git
• Structurizr generates code
21
54. Structurizr
• Implements C4 Architecture Model
• Java library to build the model
• Its code, its fits into git
• Structurizr generates code
• Only Java and .net
21
57. How do we approach the development
• We’re not gonne create a new language
23
58. How do we approach the development
• We’re not gonne create a new language, at first
23
59. How do we approach the development
• We’re not gonne create a new language, at first, most likely
23
60. How do we approach the development
• We’re not gonne create a new language, at first, most likely
• The model (ast) is pretty simple
23
61. How do we approach the development
• We’re not gonne create a new language, at first, most likely
• The model (ast) is pretty simple
• The world
• The world has
• Actors, software/hardware systems
• A software systems has
• Containers (everything with a unique pid)
• A container has
• Components (think module) and classes
• A component has
• Components and classes
• Classes have members
• Connections between the above
• UML Association, Aggregation, Composition, Dependency,
. . .
• Additional informations, names, descriptions
23
62. Using Degenerator 1/2
auto world = new TheWorld( ”TheWorld” ) ;
Actor users = world . getOrNewActor ( ”The Users ” ) ;
users . d e s c r i p t i o n = ” This i s a way to long
→ de s c r i p t i o n fo r something ”
~ ” that should be obvious . ” ;
auto system = world . getOrNewSoftwareSystem ( ”
→ AwesomeSoftware” ) ;
24
63. Using Degenerator 1/2
auto world = new TheWorld( ”TheWorld” ) ;
Actor users = world . getOrNewActor ( ”The Users ” ) ;
users . d e s c r i p t i o n = ” This i s a way to long
→ de s c r i p t i o n fo r something ”
~ ” that should be obvious . ” ;
auto system = world . getOrNewSoftwareSystem ( ”
→ AwesomeSoftware” ) ;
Container frontend = system . getOrNewContainer ( ”
→ Frontend” ) ;
frontend . technology = ”Angular” ;
auto frontendUserCtrl = frontend . getOrNewComponent(
→ ” frontUserCtrl ” ) ;
24
64. Using Degenerator 2/4
auto database = system . getOrNewContainer ( ”Database”
→ ) ;
database . technology = ”MySQL” ;
world . getOrNew ! Dependency ( ” serverDatabase ” ,
server , database
) . d e s c r i p t i o n = ”CRUD” ;
25
65. Using Degenerator 2/4
auto database = system . getOrNewContainer ( ”Database”
→ ) ;
database . technology = ”MySQL” ;
world . getOrNew ! Dependency ( ” serverDatabase ” ,
server , database
) . d e s c r i p t i o n = ”CRUD” ;
Class user = getOrNewClass ( ”User” ,
frontendUserCtrl , serverUserCtrl , database
) ;
25
66. Using Degenerator 3/4
Class user = getOrNewClass ( ”User” ,
frontendUserCtrl , serverUserCtrl , database
) ;
26
67. Using Degenerator 3/4
Class user = getOrNewClass ( ”User” ,
frontendUserCtrl , serverUserCtrl , database
) ;
MemberVariable userId = user . getOrNew !
→ MemberVariable ( ” id ” ) ;
userId . type = in teger ;
userId . addLandSpecificAttribute ( ”MySQL” , ”PRIMARY
→ KEY” ) ;
userId . addLandSpecificAttribute ( ”MySQL” , ”AUTO
→ INCREMENT” ) ;
26
72. Types in Degenerator
• Types e.g. strings are not always strings
• D string
• MySQL text
• C++ std::string
28
73. Types in Degenerator
• Types e.g. strings are not always strings
• D string
• MySQL text
• C++ std::string
struct Type {
s t r i n g name ;
s t r i n g [ s t r i n g ] typeMapping ;
}
auto pwdHash = Type( ” PasswordString ” ) ;
28
74. Types in Degenerator
• Types e.g. strings are not always strings
• D string
• MySQL text
• C++ std::string
struct Type {
s t r i n g name ;
s t r i n g [ s t r i n g ] typeMapping ;
}
auto pwdHash = Type( ” PasswordString ” ) ;
pwdHash . typeMappings [ ”D” ] = ” s t r i n g ” ;
pwdHash . typeMappings [ ”MySQL” ] = ”VARCHAR(128) ” ;
28
75. Generating
Graphvic gv = new Graphvic ( world , ”GraphvizOutput” ) ;
gv . generate () ;
MySQL mysql = new MySQL( world , ”MySQL” ) ;
mysql . generate ( database ) ;
29
79. Generating the Database CREATE TABLE Statements
CREATE TABLE Address {
id LONG PRIMARY KEY
};
CREATE TABLE Address_User {
User_id LONG
FOREIGN KEY(User_id)
→ REFERENCES User ( id ) ON
→ UPDATE CASCADE ON
→ DELETE CASCADE,
Address_id LONG
FOREIGN KEY(Address_id)
→ REFERENCES Address ( id )
→ ON UPDATE CASCADE ON
→ DELETE CASCADE
}
CREATE TABLE User {
id LONG PRIMARY KEY AUTO
→ INCREMENT,
lastname TEXT,
firstname TEXT
};
CREATE TABLE PostelCode {
id LONG PRIMARY KEY AUTO
→ INCREMENT,
code LONG,
Address_id LONG
FOREIGN KEY(Address_id )
→ REFERENCES Address ( id )
→ ON UPDATE CASCADE ON
→ DELETE CASCADE
};
33
80. What can we generate
• Diagrams describing the project at different levels of detail
• Database schema
• phpmyadmin clones
• Database access code
• Data objects (D struct/class, Typescript interface/class, . . .
• Server skeletons
• Frontend skeletons
34
81. What can we generate
• Diagrams describing the project at different levels of detail
• Database schema
• phpmyadmin clones
• Database access code
• Data objects (D struct/class, Typescript interface/class, . . .
• Server skeletons
• Frontend skeletons
• Graphviz mostly done, MySQL is getting there, Vibe.d and
Angular2 next
34