The document provides an introduction to the Java Virtual Machine (JVM) bytecode and JIT compiler. It discusses how bytecode works, including inspection, generation and the bytecode instructions. It also covers how the JIT compiler works and is monitored. Examples of viewing bytecode with javap and generating bytecode with BiteScript are provided.
The document discusses strategies for improving the startup performance of JRuby. It describes how the JRuby team optimized startup by using a Java-heavy JDK instead of native code, tweaking JVM flags, and implementing Drip - a technique that pre-boots the JVM and caches runtime configurations between runs. Drip reduced JRuby startup times from over 10 seconds to under 1 second for many common tasks. Later, it discusses challenges with JNI and how the Java Native Runtime (JNR) provides a better alternative for interfacing Java with native code and libraries.
The document discusses an NES emulator written in Ruby called Optcarrot. It aims to achieve 60 fps in Ruby 3.0 to drive optimization of the Ruby interpreter. The emulator currently runs at 20 fps in Ruby 2.0. It then details how the emulator achieves 20 fps through techniques like emulating the CPU and GPU in parallel and pre-rendering screens. Benchmark results are shown for different Ruby implementations, with JRuby 9k the fastest. Various "ProTips" are discussed to further optimize the emulator towards 60 fps through techniques like method inlining and replacing instance variables with locals.
This document provides an overview of upcoming technologies related to the Java Virtual Machine (JVM). It begins with introductions and goals of the talk. It then discusses what the JVM is and lists many open-source JVMs. Next it explores reasons for and against using the JVM. A timeline of the OpenJDK project is presented. Features of Java 7 and 8 are highlighted. Alternative languages that run on the JVM are listed. Native interoperability via JNI and the Java Native Runtime (JNR) are described. Performance of JNR compared to JNA is shown.
Large-scaled Deploy Over 100 Servers in 3 MinutesHiroshi SHIBATA
Large-scaled Deploy Over 100 Servers in 3 Minutes
Deployment strategy for next generation involves creating OS images using Packer and cloud-init that allow deploying over 100 servers within 3 minutes through automation. The strategy uses Puppet for configuration management and builds minimal and application-specific images to reduce bootstrap time. All deployment operations are implemented through a CLI tool for rapid and automated scaling.
This document discusses using the mruby programming language as middleware code. Some key points:
- mruby allows embedding Ruby code into middleware applications like web servers. This provides a powerful programming environment for Rubyists to write middleware code.
- ngx_mruby is an example of using mruby with the nginx web server. It allows placing Ruby code handlers and variables in the nginx configuration file.
- Advantages of mruby include producing a single binary without separate Ruby files, and ability to embed Ruby runtime and code directly into middleware applications like web servers.
- The document demonstrates sample ngx_mruby code for content handlers, variables, and initialization/worker scripts. It
This document provides an overview of upcoming technologies beyond the Java Virtual Machine (JVM). It begins with introductions and then discusses several topics:
- There are many open-source JVMs beyond Oracle's HotSpot such as JamVM, Maxine, and JikesRVM.
- Reasons for using the JVM include its large standard library and ease of portability compared to alternative virtual machines. However, startup time can be slow.
- Techniques for improving JVM startup time are discussed, such as saving JIT-compiled code and using the Drip tool to pre-initialize JVMs.
- Native interoperability is explored through the Java Native Interface (JNI
The winning entry titled "Most competitive" leverages complex Ruby tricks to obfuscate a program that evaluates itself. It uses techniques like dynamically generating code strings, manipulating character encodings, and exploiting edge cases in Ruby's parsing and evaluation rules. The goal is to demonstrate both the robustness of Ruby interpreters in running such esoteric code, as well as uncover subtle aspects of Ruby's specification and implementation. The judges awarded it high honors for achieving the contest's goals of producing transcendental, imbroglio code.
This document provides an introduction to JVM bytecode, including how to inspect, generate, and understand bytecode. It discusses two main parts - JVM bytecode itself such as basic instructions and stack operations, and the JVM JIT compiler which compiles bytecode to machine code. Various tools for working with bytecode like javap and ASM are also introduced. The document is intended to help readers gain a better understanding of how the Java platform works from the lowest level.
The State of Managed Runtimes 2013, by Attila SzegediZeroTurnaround
There’s JVM, and that’s it, right? Well, not exactly. Even within JVM, there’s an increasing support for running all kinds of non-Java languages: we have invokedynamic, but it’s being improved, and new layers of functionality are emerging on top of it, making JVM a better home for all kinds of programming languages. There’s life outside of JVM too. JavaScript seems to be a new assembler-lever compilation target even for C programs (I’ll show some amusing examples of what exactly you can run these days in a browser) , and there are some independent efforts at managed runtimes in various stages of completion that seem promising – PyPy, Topaz, Rubinius, Parrot VM (it’s alive again!). This talk is admittedly a language-runtime-enthusiast’s walk-through the things he finds interesting happening this year. Recorded at GeekOut 2013.
The document discusses building programming languages for the Java Virtual Machine (JVM). It begins by introducing the speaker, Charles Oliver Nutter, and his background working with JRuby and the JVM. It then explores reasons for creating and implementing languages, focusing on the benefits of the JVM like cross-platform support, libraries, and memory management. A case study of JRuby is presented, showing how it allows Ruby programming on the JVM with full interoperability with Java. In the conclusion, the document emphasizes benefits of the JVM like tools, open source culture, and how it influenced language implementation.
This document summarizes a presentation about the future of the Rake gem and domain-specific languages (DSLs) in Ruby.
The presentation discusses:
1. How Rake works as a Make-like program implemented in Ruby syntax with tasks and dependencies. Rake files use standard Ruby syntax.
2. Examples of common patterns for building internal DSLs in Ruby using class/module methods, method definition, implicit/explicit code blocks, and instance evaluation.
3. How popular Ruby gems like Rake, Bundler, and Thor use DSL techniques and inherit from each other to provide domain-specific interfaces.
This document discusses testing code written for mruby, a lightweight Ruby implementation. It proposes using the mruby runtime itself to test code, rather than Ruby, by using the mruby-mtest library. This allows testing mruby code directly using the same binaries and libraries as production. Sample code shows how to structure tests and set up a test runner to execute tests against the mruby binary. Testing code with mruby provides faster, more direct testing compared to using Ruby.
The document discusses the strategy for building and testing the programming language Hiroshi. It covers:
1. The Ruby Core team which maintains the language and includes over 80 volunteers.
2. The testing strategy for Ruby which involves testing at different levels from the interpreter to libraries. Extensive tests are run on Linux, Windows and macOS.
3. The CI environments used for Ruby development including GitHub Actions, Travis CI and AppVeyor, as well as internal VM clusters. Test results are collected on Ruby CI and discussed on Slack.
JRuby is an implementation of the Ruby language that runs on the Java Virtual Machine. It allows Ruby code to access Java libraries and APIs and Java code to call Ruby methods. Some benefits of JRuby include access to mature and stable Java platforms, libraries, and tools as well as improved performance from features like garbage collection. JRuby also allows Java shops to introduce scripting and Ruby skills.
The document discusses invokedynamic, a new bytecode introduced in Java 7 that allows for user-definable bytecode behavior. It provides more flexibility compared to the traditional bytecode instructions like invokevirtual. invokedynamic calls a bootstrap method that prepares a CallSite object and MethodHandle to invoke the target method. This allows dynamic dispatch, fast method pointers, and optimizable behavior like normal Java code. The document includes examples of using invokedynamic to implement dynamic language features and define new domain-specific languages.
The document discusses testing Ruby code used in ngx_mruby, an open source project that embeds the mruby scripting language into the nginx web server. It proposes a testing approach using a dummy implementation of the ngx_mruby API to test the Ruby code in isolation without needing nginx. Sample code shows how to set up dummy request and connection classes to mimic the ngx_mruby environment, as well as a memcached class to test code that interacts with memcached. A skeleton test case demonstrates how to write tests using this approach with the Test::Unit framework to test specific behaviors like restricting requests based on cookie sessions.
This document provides code samples and explanations for building a simple web application server and serving dynamic content using Ruby and the WEBrick library. It shows how to:
1) Serve static files and code blocks with WEBrick;
2) Define request context and servlet classes to wrap requests and responses;
3) Register pages and methods on an ApplicationServer to route requests and responses.
The summary highlights the key aspects of using WEBrick to build a basic Ruby web application server for serving dynamic content in a simple and straightforward way.
Future of Ruby standard libraries will focus on gemification. Standard libraries will be extracted out of the Ruby core repository and maintained as default gems or bundled gems in GitHub repositories. This allows libraries to be updated independently of Ruby releases and more easily accept contributions. While this approach has benefits, it also has challenges around maintaining compatibility and complex dependencies. The process of gemification will be gradual to reduce the size of changes.
Ruby developers need to stop using EventMachine. It's the wrong direction.
Lost in the "Threads vs Event Driven vs Process Spawning" debate is that you can combine them! Learn how Celluloid is improving thread programming by abstracting them using a higher level framework called Celluloid, how you can use Celluloid::IO to throw a reactor pattern into a thread. Using this approach, you can take advantage of threading and use all CPU power on a machine with JRuby or Rubinius. I also discuss the future of distributed objects and computing, and where I think things are going.
This document summarizes a presentation about using Ruby in an office setting. It discusses four case studies: [1] Applying the issue tracker Redmine to various projects beyond software development, [2] Using GitLab to allow every team member to easily create repositories for Redmine projects, [3] Using the Axlsx gem to generate Excel files for communicating project data with clients, and [4] Using the Sinatra web framework to easily create scripts for tasks like generating screenshots from a web repository. The document concludes by asking about what makes Ruby programming enjoyable.
How to develop Jenkins plugin using to ruby and Jenkins.rbHiroshi SHIBATA
- The document discusses developing Jenkins plugins using Ruby and the jpi tool. It covers generating a sample wrapper plugin, configuring the plugin, and building and releasing the plugin through jpi commands.
- The speaker demonstrates creating a sample "rbenv" plugin with jpi to configure Ruby versions and gems for builds.
- Commands like jpi new, generate, build, server and release are used to generate the plugin scaffolding, configure the wrapper, build the plugin file, host it locally for testing, and prepare it for release.
An introduction and future of Ruby coverage librarymametter
Ruby's current test coverage feature, coverage.so, only measures line coverage. The speaker proposes expanding it to support function and branch coverage in Ruby 2.5. This would involve updating the coverage.so API to return additional coverage data types and structure the output data in a more extensible way. A preliminary demo applying the new coverage.so to Ruby code showed it can integrate with C code coverage from GCOV and display results in LCOV format. The speaker seeks feedback on the proposed API design to finalize it for Ruby 2.5.
The document compares and contrasts several JavaScript testing frameworks for node.js applications including Nodeunit, Vows, Mocha, Jasmine-node, and BusterJS. It outlines the pros and cons of each framework, such as their syntax, support for asynchronous code, browser testing capabilities, and extensibility with other libraries. Additional tools mentioned include assertion libraries, spies, utilities for running client-side tests from the terminal, and links to documentation.
How to implement a simple dalvik virtual machineChun-Yu Wang
This slide is an introduction to Android Dalvik Virtual Machine on a short course.
We use two hand-made JVM and DVM which called Simple JVM and Simple DVM respectively, to tell student how they work. A Foo Class was provided as a target for verifying the execution results of those VM. We hope it will help student to understand JVM and DVM quickly.
The secret of programming language development and futureHiroshi SHIBATA
Ruby 2.4 introduced several improvements including optimizing hash tables, adding binding.irb to allow dropping into the IRB console from any point in code, unifying Fixnum and Bignum into a single Integer class, and improving support for Unicode case mappings.
The document provides an outline for a lecture on GPGPU performance and tools, discussing threads, physical and logical memory, efficient GPU programming, examples of GPU programming, and CUDA programming tools including the CUDA debugger and visual profiler. It emphasizes reading documentation, using profilers and debuggers to optimize code, and challenges common assumptions about GPU programming.
This document discusses the motivation and goals for JavaScript 2.0 (also known as ECMAScript Edition 4), which aims to improve support for programming in large and evolving systems. Some key areas of focus include adding support for classes, packages, versioning, and optional static types to improve robustness when integrating independently developed modules. The revisions also aim to address some permissiveness issues in JavaScript 1.5 that can lead to errors. The overall goal is to enable better management of change and evolution of complex, long-lived programs built from various components.
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemFITC
This document provides a history of JavaScript development from 1995 to the present. It describes how JavaScript evolved from a scripting language created in 10 days for Netscape (Mocha/LiveScript) to an industry standard (ECMAScript). It outlines major developments like Node.js, npm, and the rise of JavaScript modules/tooling. It recommends choosing technologies based on your specific needs rather than trends, investing in great tooling, and continuing to learn as the ecosystem rapidly changes.
This document provides an introduction to JVM bytecode, including how to inspect, generate, and understand bytecode. It discusses two main parts - JVM bytecode itself such as basic instructions and stack operations, and the JVM JIT compiler which compiles bytecode to machine code. Various tools for working with bytecode like javap and ASM are also introduced. The document is intended to help readers gain a better understanding of how the Java platform works from the lowest level.
The State of Managed Runtimes 2013, by Attila SzegediZeroTurnaround
There’s JVM, and that’s it, right? Well, not exactly. Even within JVM, there’s an increasing support for running all kinds of non-Java languages: we have invokedynamic, but it’s being improved, and new layers of functionality are emerging on top of it, making JVM a better home for all kinds of programming languages. There’s life outside of JVM too. JavaScript seems to be a new assembler-lever compilation target even for C programs (I’ll show some amusing examples of what exactly you can run these days in a browser) , and there are some independent efforts at managed runtimes in various stages of completion that seem promising – PyPy, Topaz, Rubinius, Parrot VM (it’s alive again!). This talk is admittedly a language-runtime-enthusiast’s walk-through the things he finds interesting happening this year. Recorded at GeekOut 2013.
The document discusses building programming languages for the Java Virtual Machine (JVM). It begins by introducing the speaker, Charles Oliver Nutter, and his background working with JRuby and the JVM. It then explores reasons for creating and implementing languages, focusing on the benefits of the JVM like cross-platform support, libraries, and memory management. A case study of JRuby is presented, showing how it allows Ruby programming on the JVM with full interoperability with Java. In the conclusion, the document emphasizes benefits of the JVM like tools, open source culture, and how it influenced language implementation.
This document summarizes a presentation about the future of the Rake gem and domain-specific languages (DSLs) in Ruby.
The presentation discusses:
1. How Rake works as a Make-like program implemented in Ruby syntax with tasks and dependencies. Rake files use standard Ruby syntax.
2. Examples of common patterns for building internal DSLs in Ruby using class/module methods, method definition, implicit/explicit code blocks, and instance evaluation.
3. How popular Ruby gems like Rake, Bundler, and Thor use DSL techniques and inherit from each other to provide domain-specific interfaces.
This document discusses testing code written for mruby, a lightweight Ruby implementation. It proposes using the mruby runtime itself to test code, rather than Ruby, by using the mruby-mtest library. This allows testing mruby code directly using the same binaries and libraries as production. Sample code shows how to structure tests and set up a test runner to execute tests against the mruby binary. Testing code with mruby provides faster, more direct testing compared to using Ruby.
The document discusses the strategy for building and testing the programming language Hiroshi. It covers:
1. The Ruby Core team which maintains the language and includes over 80 volunteers.
2. The testing strategy for Ruby which involves testing at different levels from the interpreter to libraries. Extensive tests are run on Linux, Windows and macOS.
3. The CI environments used for Ruby development including GitHub Actions, Travis CI and AppVeyor, as well as internal VM clusters. Test results are collected on Ruby CI and discussed on Slack.
JRuby is an implementation of the Ruby language that runs on the Java Virtual Machine. It allows Ruby code to access Java libraries and APIs and Java code to call Ruby methods. Some benefits of JRuby include access to mature and stable Java platforms, libraries, and tools as well as improved performance from features like garbage collection. JRuby also allows Java shops to introduce scripting and Ruby skills.
The document discusses invokedynamic, a new bytecode introduced in Java 7 that allows for user-definable bytecode behavior. It provides more flexibility compared to the traditional bytecode instructions like invokevirtual. invokedynamic calls a bootstrap method that prepares a CallSite object and MethodHandle to invoke the target method. This allows dynamic dispatch, fast method pointers, and optimizable behavior like normal Java code. The document includes examples of using invokedynamic to implement dynamic language features and define new domain-specific languages.
The document discusses testing Ruby code used in ngx_mruby, an open source project that embeds the mruby scripting language into the nginx web server. It proposes a testing approach using a dummy implementation of the ngx_mruby API to test the Ruby code in isolation without needing nginx. Sample code shows how to set up dummy request and connection classes to mimic the ngx_mruby environment, as well as a memcached class to test code that interacts with memcached. A skeleton test case demonstrates how to write tests using this approach with the Test::Unit framework to test specific behaviors like restricting requests based on cookie sessions.
This document provides code samples and explanations for building a simple web application server and serving dynamic content using Ruby and the WEBrick library. It shows how to:
1) Serve static files and code blocks with WEBrick;
2) Define request context and servlet classes to wrap requests and responses;
3) Register pages and methods on an ApplicationServer to route requests and responses.
The summary highlights the key aspects of using WEBrick to build a basic Ruby web application server for serving dynamic content in a simple and straightforward way.
Future of Ruby standard libraries will focus on gemification. Standard libraries will be extracted out of the Ruby core repository and maintained as default gems or bundled gems in GitHub repositories. This allows libraries to be updated independently of Ruby releases and more easily accept contributions. While this approach has benefits, it also has challenges around maintaining compatibility and complex dependencies. The process of gemification will be gradual to reduce the size of changes.
Ruby developers need to stop using EventMachine. It's the wrong direction.
Lost in the "Threads vs Event Driven vs Process Spawning" debate is that you can combine them! Learn how Celluloid is improving thread programming by abstracting them using a higher level framework called Celluloid, how you can use Celluloid::IO to throw a reactor pattern into a thread. Using this approach, you can take advantage of threading and use all CPU power on a machine with JRuby or Rubinius. I also discuss the future of distributed objects and computing, and where I think things are going.
This document summarizes a presentation about using Ruby in an office setting. It discusses four case studies: [1] Applying the issue tracker Redmine to various projects beyond software development, [2] Using GitLab to allow every team member to easily create repositories for Redmine projects, [3] Using the Axlsx gem to generate Excel files for communicating project data with clients, and [4] Using the Sinatra web framework to easily create scripts for tasks like generating screenshots from a web repository. The document concludes by asking about what makes Ruby programming enjoyable.
How to develop Jenkins plugin using to ruby and Jenkins.rbHiroshi SHIBATA
- The document discusses developing Jenkins plugins using Ruby and the jpi tool. It covers generating a sample wrapper plugin, configuring the plugin, and building and releasing the plugin through jpi commands.
- The speaker demonstrates creating a sample "rbenv" plugin with jpi to configure Ruby versions and gems for builds.
- Commands like jpi new, generate, build, server and release are used to generate the plugin scaffolding, configure the wrapper, build the plugin file, host it locally for testing, and prepare it for release.
An introduction and future of Ruby coverage librarymametter
Ruby's current test coverage feature, coverage.so, only measures line coverage. The speaker proposes expanding it to support function and branch coverage in Ruby 2.5. This would involve updating the coverage.so API to return additional coverage data types and structure the output data in a more extensible way. A preliminary demo applying the new coverage.so to Ruby code showed it can integrate with C code coverage from GCOV and display results in LCOV format. The speaker seeks feedback on the proposed API design to finalize it for Ruby 2.5.
The document compares and contrasts several JavaScript testing frameworks for node.js applications including Nodeunit, Vows, Mocha, Jasmine-node, and BusterJS. It outlines the pros and cons of each framework, such as their syntax, support for asynchronous code, browser testing capabilities, and extensibility with other libraries. Additional tools mentioned include assertion libraries, spies, utilities for running client-side tests from the terminal, and links to documentation.
How to implement a simple dalvik virtual machineChun-Yu Wang
This slide is an introduction to Android Dalvik Virtual Machine on a short course.
We use two hand-made JVM and DVM which called Simple JVM and Simple DVM respectively, to tell student how they work. A Foo Class was provided as a target for verifying the execution results of those VM. We hope it will help student to understand JVM and DVM quickly.
The secret of programming language development and futureHiroshi SHIBATA
Ruby 2.4 introduced several improvements including optimizing hash tables, adding binding.irb to allow dropping into the IRB console from any point in code, unifying Fixnum and Bignum into a single Integer class, and improving support for Unicode case mappings.
The document provides an outline for a lecture on GPGPU performance and tools, discussing threads, physical and logical memory, efficient GPU programming, examples of GPU programming, and CUDA programming tools including the CUDA debugger and visual profiler. It emphasizes reading documentation, using profilers and debuggers to optimize code, and challenges common assumptions about GPU programming.
This document discusses the motivation and goals for JavaScript 2.0 (also known as ECMAScript Edition 4), which aims to improve support for programming in large and evolving systems. Some key areas of focus include adding support for classes, packages, versioning, and optional static types to improve robustness when integrating independently developed modules. The revisions also aim to address some permissiveness issues in JavaScript 1.5 that can lead to errors. The overall goal is to enable better management of change and evolution of complex, long-lived programs built from various components.
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemFITC
This document provides a history of JavaScript development from 1995 to the present. It describes how JavaScript evolved from a scripting language created in 10 days for Netscape (Mocha/LiveScript) to an industry standard (ECMAScript). It outlines major developments like Node.js, npm, and the rise of JavaScript modules/tooling. It recommends choosing technologies based on your specific needs rather than trends, investing in great tooling, and continuing to learn as the ecosystem rapidly changes.
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemFITC
Presented at FITC's Web Unleashed 2016 in Toronto
by Branden Hall, Automata Studios
FITC produces events for digital creators in Toronto, Amsterdam, NYC and beyond
Save 10% off any of our events with discount code 'slideshare'
Check out our events at http://fitc.ca
or follow us at https://twitter.com/fitc
Overview
Today it feels like Javascript tools and libraries are popping like up mushrooms. And just like fungi, if you pick the wrong one, it could lead to some real suffering. From Angular to Zepto, this talk will help you map out the ecosystem and find the good stuff so you can avoid having a bad trip.
Objective
The audience will learn how to map out and evaluate tools and libraries in the JS ecosystem
Target Audience
The target audience is JS developers who want to feel a little more sane
Assumed Audience Knowledge
A working understanding Javascript
Five Things Audience Members Will Learn
A mental map of the current state of JS development
How to evaluate JS tools & libraries
Alternatives to the big libraries (jQuery, Angular, React, etc)
Awesome lesser known JS tools & libraries
Avoiding JS entirely through alternate languages (TypeScript, ClojureScript, Elm, etc)
Choosing Javascript Libraries to Adopt for DevelopmentEdward Apostol
"Sorting out the JS Mess" was the title of my sample presentation I led at @Red Academy, talking about how the history of the development workflow with Javascript and how it influences what tools, libraries and steps we take to develop web and mobile apps. I featured a demo using React, and discussed Angular 2, JQuery, Meteor, and other Javascript libraries and frameworks from the context of my development experience.
This document summarizes Jonathan Fine's presentation on JavaScript Miller Columns. The presentation covers what Miller Columns are, a demonstration of them, how to specify the user interface and author content, using delegation in frameworks, running tests, sample test data, defining classes in JavaScript, and ways to make JavaScript more Pythonic. The goal is to develop a production version of Miller Columns that relies on library modules and is supported by documentation.
The document provides an overview of Node.js, a JavaScript runtime environment that allows JavaScript to be used for server-side scripting. Some key points:
- Node.js uses Google's V8 JavaScript engine and allows JavaScript code to be run on the server side, providing a single language for both client-side and server-side development.
- This avoids duplicating code across different programming languages and platforms and reduces maintenance.
- Node.js is well-suited for real-time applications with many concurrent connections due to its asynchronous and event-driven model.
- However, using JavaScript for all development has drawbacks like lack of specialization and debugging challenges. The future of Node.js depends on
Node.js is a JavaScript runtime environment built on Chrome's V8 JavaScript engine. It allows JavaScript to be used for server-side scripting and is primarily used for real-time web applications and extensive I/O applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient for data-intensive real-time applications that run across distributed devices.
Why you should be excited about ClojureScriptelliando dias
ClojureScript allows Clojure code to compile to JavaScript. Created by Rich Hickey and friends, it provides optimizations for performance while maintaining readability and abstraction. As a Lisp for JavaScript, ClojureScript controls complexity on the web and benefits from JavaScript's status as a compilation target for many languages.
The document provides an overview of JavaScript including its history and influences, present uses, ubiquity, syntax, and debugging environments. It describes JavaScript's origins in 1995 and C-like syntax, discusses how it is used in browsers, engines, servers and toolkits. The summary explores JavaScript's object model and prototypal inheritance, and provides resources to learn more.
Node.js is an asynchronous JavaScript runtime built on Chrome's V8 JavaScript engine. It allows JavaScript to be run on the server-side and is used for real-time web applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. The document discusses how to install Node.js and manage different versions using the nave package manager.
All too often front-end JavaScript code has been considered a second class citizen, and when treated without due care and attention it can be buggy and hard to maintain. This attitude is changing though, and thanks to the rapid growth in popularity of JavaScript as a first-class language, there is a large and expanding ecosystem of tools that a developer should know to make their client-side code as “clean” as the rest of their stack.
This talk aims to introduce and discuss how to implement modularisation, functional idioms and testing in JavaScript in an idiomatic way, to allow you to code JavaScript to a higher quality and, ultimately, more sustainably.
An Introduction to the world of Javascript and NodeJS. The presentation captures Javascript's history, its evolution and its progression towards a language for an end-to-end development.
Selecting the appropriate programming language when initiating a new project is usually one of the most challenging decisions business owners and programmers need to make. Both Node.js and Python are well-recognized programming languages, but you must contact a Python or node.js app development company based on the requirements of your project.
NodeJS vs Python 2024: Which is better for backend development?Agile Infoways LLC
Explore our Node.js vs. Python blog now to discover the best backend technology. Clear your confusion between real-time functionality and data science excellence.
Lecture for CRIA-WT about JavaScript on the server. Explains why we prefer Node.js over PHP and shows the architecture, modules and a small demo application on https://github.com/rodmidde/cria-wt-demo/tree/master/NODE/SimpleMVC.
Meetup. Technologies Intro for Non-Tech PeopleIT Arena
This document provides an introduction to programming terminology, concepts, and technologies for non-technical people. It outlines a training on software development lifecycles, engagement models, business domains, major programming languages, frameworks, and technologies. Key terms from front-end and back-end development, databases, DevOps, data science, and mobile apps are defined. Popular languages, frameworks, and platforms are compared, along with ratings of language popularity. Quality control techniques are briefly introduced.
Introduction to mean and mern || Event by DSC UNIDEBMuhammad Raza
The document provides an introduction to various web development technologies including MongoDB, Express, React, Node.js, and TypeScript. It discusses what each technology is used for and its benefits. MongoDB is introduced as a NoSQL database for storing data. Express is described as a web application framework built on Node.js that adds functionality like middleware and routing. React is summarized as a JavaScript library that uses a component-based approach. Node.js is a runtime environment for building server-side applications using JavaScript. TypeScript adds static typing to JavaScript to catch errors earlier.
The document summarizes the current state of JavaScript and its ecosystem. It covers JavaScript's history and evolution, an overview of the language, browser APIs and programming model, popular libraries like jQuery, MVC frameworks like Backbone, Node.js for backend development, variations like CoffeeScript, and emerging technologies on the cutting edge like ES6 and asm.js. It emphasizes that JavaScript has become the dominant language for both front-end and back-end web development.
Among the other backend frameworks, NodeJS and Python are the popular ones for web app development. It may not be easy for business owners to choose between nodejs vs python both these backend frameworks are gaining immense popularity. So, let us head towards a precise comparison between Nodejs vs Python so that you can choose the right framework for your business.
This document summarizes Yoshiki Shibukawa's presentation on building multi-platform GUI applications with Go. Shibukawa explored several approaches: wrapping existing toolkits, creating a new toolkit in Go, and a hybrid C++/Go approach. While wrapping toolkits is intuitive, maintaining wrappers is difficult. Creating a new toolkit in Go allows perfect integration but supporting multiple platforms is challenging. The hybrid approach uses C++ for GUI with Go handling logic, which provides better integration but requires managing inter-process communication. Shibukawa concluded more work is needed to find the best solution and that GUI programming remains difficult, potentially requiring C++ involvement.
- Yoshiki Shibukawa presented on search engines and his new Python module Oktavia at PyConJP.
- Oktavia uses the FM-index algorithm as a backend which is better for eastern Asian languages compared to traditional inverted indexes.
- It provides APIs for creating search features in applications and includes metadata support to enrich search results.
- The module was recently published on PyPI and the speaker plans to continue adding features.
This document discusses JavaScript and game development. It covers topics like building games for Android and iOS, using APIs, and building games with HTML5. It also mentions building games with JavaScript and deploying them using a build server running Node.js.
This document discusses the Pomodoro Technique time management method. It begins with an introduction of the speaker and then:
1. Explains that the Pomodoro Technique uses short intervals (typically 25 minutes) of work followed by short breaks, and that a Pomodoro refers to each interval.
2. Describes the characteristics of the technique, including that it aims to train sustainability through intervals similar to interval training, and that it strictly prohibits interruptions during the work period.
3. Outlines the cycle of the technique, which involves 25 minutes of work followed by a 5 minute break, and a longer break every 4 intervals.
This document discusses BitBucket and Mercurial. It provides an overview of BitBucket's features like social networking integration, wikis, and issue tracking. Mercurial is introduced as a distributed version control system that BitBucket supports for source code hosting. The document explains how to use BitBucket and Mercurial together through actions like cloning repositories, committing changes, and pushing/pulling updates.
Adtran’s SDG 9000 Series brings high-performance, cloud-managed Wi-Fi 7 to homes, businesses and public spaces. Built on a unified SmartOS platform, the portfolio includes outdoor access points, ceiling-mount APs and a 10G PoE router. Intellifi and Mosaic One simplify deployment, deliver AI-driven insights and unlock powerful new revenue streams for service providers.
Microsoft Build 2025 takeaways in one presentationDigitalmara
Microsoft Build 2025 introduced significant updates. Everything revolves around AI. DigitalMara analyzed these announcements:
• AI enhancements for Windows 11
By embedding AI capabilities directly into the OS, Microsoft is lowering the barrier for users to benefit from intelligent automation without requiring third-party tools. It's a practical step toward improving user experience, such as streamlining workflows and enhancing productivity. However, attention should be paid to data privacy, user control, and transparency of AI behavior. The implementation policy should be clear and ethical.
• GitHub Copilot coding agent
The introduction of coding agents is a meaningful step in everyday AI assistance. However, it still brings challenges. Some people compare agents with junior developers. They noted that while the agent can handle certain tasks, it often requires supervision and can introduce new issues. This innovation holds both potential and limitations. Balancing automation with human oversight is crucial to ensure quality and reliability.
• Introduction of Natural Language Web
NLWeb is a significant step toward a more natural and intuitive web experience. It can help users access content more easily and reduce reliance on traditional navigation. The open-source foundation provides developers with the flexibility to implement AI-driven interactions without rebuilding their existing platforms. NLWeb is a promising level of web interaction that complements, rather than replaces, well-designed UI.
• Introduction of Model Context Protocol
MCP provides a standardized method for connecting AI models with diverse tools and data sources. This approach simplifies the development of AI-driven applications, enhancing efficiency and scalability. Its open-source nature encourages broader adoption and collaboration within the developer community. Nevertheless, MCP can face challenges in compatibility across vendors and security in context sharing. Clear guidelines are crucial.
• Windows Subsystem for Linux is open-sourced
It's a positive step toward greater transparency and collaboration in the developer ecosystem. The community can now contribute to its evolution, helping identify issues and expand functionality faster. However, open-source software in a core system also introduces concerns around security, code quality management, and long-term maintenance. Microsoft’s continued involvement will be key to ensuring WSL remains stable and secure.
• Azure AI Foundry platform hosts Grok 3 AI models
Adding new models is a valuable expansion of AI development resources available at Azure. This provides developers with more flexibility in choosing language models that suit a range of application sizes and needs. Hosting on Azure makes access and integration easier when using Microsoft infrastructure.
As data privacy regulations become more pervasive across the globe and organizations increasingly handle and transfer (including across borders) meaningful volumes of personal and confidential information, the need for robust contracts to be in place is more important than ever.
This webinar will provide a deep dive into privacy contracting, covering essential terms and concepts, negotiation strategies, and key practices for managing data privacy risks.
Whether you're in legal, privacy, security, compliance, GRC, procurement, or otherwise, this session will include actionable insights and practical strategies to help you enhance your agreements, reduce risk, and enable your business to move fast while protecting itself.
This webinar will review key aspects and considerations in privacy contracting, including:
- Data processing addenda, cross-border transfer terms including EU Model Clauses/Standard Contractual Clauses, etc.
- Certain legally-required provisions (as well as how to ensure compliance with those provisions)
- Negotiation tactics and common issues
- Recent lessons from recent regulatory actions and disputes
Measuring Microsoft 365 Copilot and Gen AI SuccessNikki Chapple
Session | Measuring Microsoft 365 Copilot and Gen AI Success with Viva Insights and Purview
Presenter | Nikki Chapple 2 x MVP and Principal Cloud Architect at CloudWay
Event | European Collaboration Conference 2025
Format | In person Germany
Date | 28 May 2025
📊 Measuring Copilot and Gen AI Success with Viva Insights and Purview
Presented by Nikki Chapple – Microsoft 365 MVP & Principal Cloud Architect, CloudWay
How do you measure the success—and manage the risks—of Microsoft 365 Copilot and Generative AI (Gen AI)? In this ECS 2025 session, Microsoft MVP and Principal Cloud Architect Nikki Chapple explores how to go beyond basic usage metrics to gain full-spectrum visibility into AI adoption, business impact, user sentiment, and data security.
🎯 Key Topics Covered:
Microsoft 365 Copilot usage and adoption metrics
Viva Insights Copilot Analytics and Dashboard
Microsoft Purview Data Security Posture Management (DSPM) for AI
Measuring AI readiness, impact, and sentiment
Identifying and mitigating risks from third-party Gen AI tools
Shadow IT, oversharing, and compliance risks
Microsoft 365 Admin Center reports and Copilot Readiness
Power BI-based Copilot Business Impact Report (Preview)
📊 Why AI Measurement Matters: Without meaningful measurement, organizations risk operating in the dark—unable to prove ROI, identify friction points, or detect compliance violations. Nikki presents a unified framework combining quantitative metrics, qualitative insights, and risk monitoring to help organizations:
Prove ROI on AI investments
Drive responsible adoption
Protect sensitive data
Ensure compliance and governance
🔍 Tools and Reports Highlighted:
Microsoft 365 Admin Center: Copilot Overview, Usage, Readiness, Agents, Chat, and Adoption Score
Viva Insights Copilot Dashboard: Readiness, Adoption, Impact, Sentiment
Copilot Business Impact Report: Power BI integration for business outcome mapping
Microsoft Purview DSPM for AI: Discover and govern Copilot and third-party Gen AI usage
🔐 Security and Compliance Insights: Learn how to detect unsanctioned Gen AI tools like ChatGPT, Gemini, and Claude, track oversharing, and apply eDLP and Insider Risk Management (IRM) policies. Understand how to use Microsoft Purview—even without E5 Compliance—to monitor Copilot usage and protect sensitive data.
📈 Who Should Watch: This session is ideal for IT leaders, security professionals, compliance officers, and Microsoft 365 admins looking to:
Maximize the value of Microsoft Copilot
Build a secure, measurable AI strategy
Align AI usage with business goals and compliance requirements
🔗 Read the blog https://nikkichapple.com/measuring-copilot-gen-ai/
Dev Dives: System-to-system integration with UiPath API WorkflowsUiPathCommunity
Join the next Dev Dives webinar on May 29 for a first contact with UiPath API Workflows, a powerful tool purpose-fit for API integration and data manipulation!
This session will guide you through the technical aspects of automating communication between applications, systems and data sources using API workflows.
📕 We'll delve into:
- How this feature delivers API integration as a first-party concept of the UiPath Platform.
- How to design, implement, and debug API workflows to integrate with your existing systems seamlessly and securely.
- How to optimize your API integrations with runtime built for speed and scalability.
This session is ideal for developers looking to solve API integration use cases with the power of the UiPath Platform.
👨🏫 Speakers:
Gunter De Souter, Sr. Director, Product Manager @UiPath
Ramsay Grove, Product Manager @UiPath
This session streamed live on May 29, 2025, 16:00 CET.
Check out all our upcoming UiPath Dev Dives sessions:
👉 https://community.uipath.com/dev-dives-automation-developer-2025/
ELNL2025 - Unlocking the Power of Sensitivity Labels - A Comprehensive Guide....Jasper Oosterveld
Sensitivity labels, powered by Microsoft Purview Information Protection, serve as the foundation for classifying and protecting your sensitive data within Microsoft 365. Their importance extends beyond classification and play a crucial role in enforcing governance policies across your Microsoft 365 environment. Join me, a Data Security Consultant and Microsoft MVP, as I share practical tips and tricks to get the full potential of sensitivity labels. I discuss sensitive information types, automatic labeling, and seamless integration with Data Loss Prevention, Teams Premium, and Microsoft 365 Copilot.
New Ways to Reduce Database Costs with ScyllaDBScyllaDB
How ScyllaDB’s latest capabilities can reduce your infrastructure costs
ScyllaDB has been obsessed with price-performance from day 1. Our core database is architected with low-level engineering optimizations that squeeze every ounce of power from the underlying infrastructure. And we just completed a multi-year effort to introduce a set of new capabilities for additional savings.
Join this webinar to learn about these new capabilities: the underlying challenges we wanted to address, the workloads that will benefit most from each, and how to get started. We’ll cover ways to:
- Avoid overprovisioning with “just-in-time” scaling
- Safely operate at up to ~90% storage utilization
- Cut network costs with new compression strategies and file-based streaming
We’ll also highlight a “hidden gem” capability that lets you safely balance multiple workloads in a single cluster. To conclude, we will share the efficiency-focused capabilities on our short-term and long-term roadmaps.
Exploring the advantages of on-premises Dell PowerEdge servers with AMD EPYC processors vs. the cloud for small to medium businesses’ AI workloads
AI initiatives can bring tremendous value to your business, but you need to support your new AI workloads effectively. That means choosing the best possible infrastructure for your needs—and many companies are finding that the cloud isn’t right for them. According to a recent Rackspace survey of IT executives, 69 percent of companies have moved some of their applications on-premises from the cloud, with half of those citing security and compliance as the reason and 44 percent citing cost.
On-premises solutions provide a number of advantages. With full control over your security infrastructure, you can be certain that all compliance requirements remain firmly in the hands of your IT team. Opting for on-premises also gives you the ability to design your infrastructure to the precise needs of that team and your new AI workloads. Depending on the workload, you may also see performance benefits, along with more predictable costs. As you start to build your next AI initiative, consider an on-premises solution utilizing AMD EPYC processor-powered Dell PowerEdge servers.
Evaluation Challenges in Using Generative AI for Science & Technical ContentPaul Groth
Evaluation Challenges in Using Generative AI for Science & Technical Content.
Foundation Models show impressive results in a wide-range of tasks on scientific and legal content from information extraction to question answering and even literature synthesis. However, standard evaluation approaches (e.g. comparing to ground truth) often don't seem to work. Qualitatively the results look great but quantitive scores do not align with these observations. In this talk, I discuss the challenges we've face in our lab in evaluation. I then outline potential routes forward.
Cyber Security Legal Framework in Nepal.pptxGhimire B.R.
The presentation is about the review of existing legal framework on Cyber Security in Nepal. The strength and weakness highlights of the major acts and policies so far. Further it highlights the needs of data protection act .
6th Power Grid Model Meetup
Join the Power Grid Model community for an exciting day of sharing experiences, learning from each other, planning, and collaborating.
This hybrid in-person/online event will include a full day agenda, with the opportunity to socialize afterwards for in-person attendees.
If you have a hackathon proposal, tell us when you register!
About Power Grid Model
The global energy transition is placing new and unprecedented demands on Distribution System Operators (DSOs). Alongside upgrades to grid capacity, processes such as digitization, capacity optimization, and congestion management are becoming vital for delivering reliable services.
Power Grid Model is an open source project from Linux Foundation Energy and provides a calculation engine that is increasingly essential for DSOs. It offers a standards-based foundation enabling real-time power systems analysis, simulations of electrical power grids, and sophisticated what-if analysis. In addition, it enables in-depth studies and analysis of the electrical power grid’s behavior and performance. This comprehensive model incorporates essential factors such as power generation capacity, electrical losses, voltage levels, power flows, and system stability.
Power Grid Model is currently being applied in a wide variety of use cases, including grid planning, expansion, reliability, and congestion studies. It can also help in analyzing the impact of renewable energy integration, assessing the effects of disturbances or faults, and developing strategies for grid control and optimization.
UiPath Community Berlin: Studio Tips & Tricks and UiPath InsightsUiPathCommunity
Join the UiPath Community Berlin (Virtual) meetup on May 27 to discover handy Studio Tips & Tricks and get introduced to UiPath Insights. Learn how to boost your development workflow, improve efficiency, and gain visibility into your automation performance.
📕 Agenda:
- Welcome & Introductions
- UiPath Studio Tips & Tricks for Efficient Development
- Best Practices for Workflow Design
- Introduction to UiPath Insights
- Creating Dashboards & Tracking KPIs (Demo)
- Q&A and Open Discussion
Perfect for developers, analysts, and automation enthusiasts!
This session streamed live on May 27, 18:00 CET.
Check out all our upcoming UiPath Community sessions at:
👉 https://community.uipath.com/events/
Join our UiPath Community Berlin chapter:
👉 https://community.uipath.com/berlin/
Introducing FME Realize: A New Era of Spatial Computing and ARSafe Software
A new era for the FME Platform has arrived – and it’s taking data into the real world.
Meet FME Realize: marking a new chapter in how organizations connect digital information with the physical environment around them. With the addition of FME Realize, FME has evolved into an All-data, Any-AI Spatial Computing Platform.
FME Realize brings spatial computing, augmented reality (AR), and the full power of FME to mobile teams: making it easy to visualize, interact with, and update data right in the field. From infrastructure management to asset inspections, you can put any data into real-world context, instantly.
Join us to discover how spatial computing, powered by FME, enables digital twins, AI-driven insights, and real-time field interactions: all through an intuitive no-code experience.
In this one-hour webinar, you’ll:
-Explore what FME Realize includes and how it fits into the FME Platform
-Learn how to deliver real-time AR experiences, fast
-See how FME enables live, contextual interactions with enterprise data across systems
-See demos, including ones you can try yourself
-Get tutorials and downloadable resources to help you start right away
Whether you’re exploring spatial computing for the first time or looking to scale AR across your organization, this session will give you the tools and insights to get started with confidence.
Co-Constructing Explanations for AI Systems using ProvenancePaul Groth
Explanation is not a one off - it's a process where people and systems work together to gain understanding. This idea of co-constructing explanations or explanation by exploration is powerful way to frame the problem of explanation. In this talk, I discuss our first experiments with this approach for explaining complex AI systems by using provenance. Importantly, I discuss the difficulty of evaluation and discuss some of our first approaches to evaluating these systems at scale. Finally, I touch on the importance of explanation to the comprehensive evaluation of AI systems.
Grannie’s Journey to Using Healthcare AI ExperiencesLauren Parr
AI offers transformative potential to enhance our long-time persona Grannie’s life, from healthcare to social connection. This session explores how UX designers can address unmet needs through AI-driven solutions, ensuring intuitive interfaces that improve safety, well-being, and meaningful interactions without overwhelming users.
GDG Cloud Southlake #43: Tommy Todd: The Quantum Apocalypse: A Looming Threat...James Anderson
The Quantum Apocalypse: A Looming Threat & The Need for Post-Quantum Encryption
We explore the imminent risks posed by quantum computing to modern encryption standards and the urgent need for post-quantum cryptography (PQC).
Bio: With 30 years in cybersecurity, including as a CISO, Tommy is a strategic leader driving security transformation, risk management, and program maturity. He has led high-performing teams, shaped industry policies, and advised organizations on complex cyber, compliance, and data protection challenges.
Nix(OS) for Python Developers - PyCon 25 (Bologna, Italia)Peter Bittner
How do you onboard new colleagues in 2025? How long does it take? Would you love a standardized setup under version control that everyone can customize for themselves? A stable desktop setup, reinstalled in just minutes. It can be done.
This talk was given in Italian, 29 May 2025, at PyCon 25, Bologna, Italy. All slides are provided in English.
Original slides at https://slides.com/bittner/pycon25-nixos-for-python-developers
2. • Expert
Python
Programming
is
a
super
cool
book!
– It
provides
very
pragma?c
knowledge
for
Python
programmers.
– It
provides
very
acute
insight
for
Other
language
programmer!
3. PyConJP
LT
(2011/08/27)
DeNA
Co.Ltd.,
Smartphone
SG
system
group.
Sphinx-‐Users.jp
/
eXtreme
Programming
Users
Group
Japan
Shibukawa
Yoshiki
4. Twicer:
@shibukawa
• Job
– Honda
R&D
→
DeNA
– I’m
playing
Smartphone
everyday!
• Community
– Sphinx-‐Users.jp
Organizer
– XPJUG
– PySpa
• Books
– Simple
and
Steady
Way
of
Learning
for
So`ware
Engineers(Gihyo)
– Expert
Python
Programming
(ASCII-‐MW)
– Pomodoro
Technique
illustrated
(ASCII-‐MW)
– The
Art
of
Community
(O’reilly
Japan)
:
web
13. • node.js
(hcp://nodejs.org)
– Good
interac?ve
shell
for
JavaScript
• Windows
– Use
binary
package
• Linux
– Use
apt-‐get
or
emerge
or
anything
• MacOSX
– Use
MacPorts
or
Homebrew
• npm
(hcp://npmjs.org)
– easy_install
for
nodejs
node.js
14. • I’m
using
Emacs.
Sorry
Tarek.
– js2-‐mode
is
good!
• hcp://code.google.com/p/js2-‐mode
• Download
source
and
M-‐x
byte-‐compile-‐file
• Add
following
line
following
lines:
(autoload 'js2-mode "js2" nil t)
(add-to-list 'auto-mode-alist '(".js$" . js2-mode))
• Other
DeNA
guys
are
using
Emacs,
Vim,
Eclipse,
WebStorm.
Emacs js2-‐mode
16. • Global
namespace
is
important
than
Python
– JavaScript
has
only
one
global
area.
• 1.
Self-‐invoke
func?on
(function() {
// This area is private!
})();
• 2.
Export
only
accessor
methods
var getter;
(function() {
var privateVar = 100;
getter = function() {return privateVar;};
})();
17. • This
is
good
technique
for:
– Inser?on
ini?alize
code.
– Bridging
incompa?bility
between
browsers.
– Crea?ng
unit
test
for
browser
on
node.js.
function a() {
// initialize code or check compatibility
a = function() {
// function logic it is used always
};
};
23. • Original
JavaScript
doesn’t
have
“import”
mechanism.
– It
is
important
for
crea?ng
large
so`ware.
– CommonJS
proposes
good
design.
• It
is
used
by
node.js
and
ngcore.
• jQuery
builder,
closure
compiler…
many
libraries
are
created
with
many
source
files.
– Combine
all
needed
sources.
24. • It
supports
require
and
exports.
• ngCore
build
tool
treats
source
code
like
this:
var Button = require(‘./UI/Button’).Button;
exports.MyWindow = function() {
this.title = “hello world”;
this.size = [100, 100, 400, 200];
};
25. • It
supports
require
and
exports.
• ngCore
build
tool
treats
source
code
like
this:
MODULES[“modulename”] = (function() {
var exports = {};
var require = function(file){ return MODULES[file]; };
var Button = require(‘./UI/Button’).Button;
exports.MyWindow = function() {
this.title = “hello world”;
this.size = [100, 100, 400, 200];
};
return exports;})();
27. • I
don’t
know
what
you
want
to
create.
• There
are
many
different
environment
today.
– My
recommend
environment
is
ngCore.
You
can
create
Android
and
iOS
games
from
same
source.
Future,
ngCore
will
support
HTML5.
ngCore
29. Of
course!!
• SCM
is
important
for
JavaScript
too!
• I
love
mercurial.
During
using
git,
I
some?mes
got
error
because
I
type
hg
instead
of
git.
JavaScript
33. • Famous
tool
in
JS
community
is
JSDoc
series.
– JSDoc-‐toolkit
2.4
is
the
latest
stable
version.
– JSDoc
3
is
now
crea?ng.
– node-‐jsdoc-‐toolkit
is
easy
to
use
and
fast!
• hcps://github.com/p120ph37/node-‐jsdoc-‐toolkit
• Do
you
like
auto
generated
document?
I
don’t
like.
It
is
hard
to
write
good
document.
node-‐jsdoc-‐toolkit
34. • Sphinx
is
good
tool
for
almost
all
programmers!
– You
can
create
becer
document!
– Easy
to
learn,
easy
to
write.
hard
to
write
Plugin…
• I’m
crea?ng
CommonJS-‐domain
and
CommonJS-‐
autodoc
plugin
now.
Please
wait!
Sphinx CommonJS
36. • I’m
using
Jasmine.
• If
your
code
run
in
browser
or
mobile
device,
you
can
run
logic
test
on
node.js.
– Fast
feedback!
Fast
development
cycle.
– You
can
install
node-jasmine
via
npm.
– “Func?ons
that
rewrites
thyself”
technique
is
useful!
38. Of
course!!
• Python’s
strategy
of
op?miza?on
is
as
same
as
JavaScript
too!
Python JS
39. • Each
JavaScript
engines
have
different
character:
– V8
– V8
for
Android
– Safari
– Safari
for
iOS
– WebView
for
iOS
– Firefox
– Internet
Explorer…
• You
have
to
profile
on
the
environments
you
use.
JS
41. • Asynchronous
is
the
most
important
part
of
JS
– It
is
a
pit
fall
Java
programmer
fall
– Callback
hell!
– Sequen?al
source
code
is
more
readable
and
easy
to
understand.
42. • jsDeffered
– hcp://cho45.stuawsc.com/jsdeferred/
next(function() { /* task 1 */ }).
next(function() { /* task 2 */ });
chain(
function() { /* task 1 */ },
function() { /* task 2 */ }
);
– Sorry
I
have
never
used
it…
– Maybe
twisted
programmers
familiar
with
this.
43. • Try
to
write
following
“Counter”
class.
var counter = new Counter();
fs.writeFile(“METADATA”, data1, counter.newTask());
fs.writeFile(“REQUEST”, data2, counter.newTask());
counter.wait(function() {
// All task is finished.
});
• It
works
similar
to
sleep
sort.
Run
all
tasks
at
the
same
?me
and
check
only
the
task
end.
44. • All
func?ons
which
uses
Async
call
must
receive
callback
func?on.
– If
not,
caller
can’t
know
whether
all
tasks
are
finished
or
not
Func?on
caller
Callback
func?on
Pass
Async
46. • Expert
Python
Programming
is
super
cool
book!
– It
provides
very
pragma?c
knowledge
for
Python
programmers.
– It
provides
very
acute
insight
for
Other
language
programmer!