https://www.youtube.com/watch?v=VNmtmz3mJN4&
Deep dive into InjectionTDD - how to perform iOS unit tests realtime, without rebuilding entire Xcode project.
Mastering Java Bytecode With ASM - 33rd degree, 2012Anton Arhipov
The document discusses bytecode and the ASM library for manipulating Java bytecode. It provides an overview of bytecode structure and instructions. ASM is introduced as a low-level API for working with bytecode using visitors and nodes. Examples are given for generating bytecode using ASM, such as creating a ClassWriter, visiting classes, fields and methods, and generating instructions.
Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembler helps the C or C++ programmer. Java bytecode is the form of instructions that Java virtual machine executes. This knowledge is crucial when debugging and doing performance and memory usage tuning. The presenter will share his knowledge on what bytecode means for your platform and how to create compiler while using some awesome tools.
While most bugs reveal their cause within their stack trace, Java’s OutOfMemoryError is less talkative and therefore regarded as being difficult to debug by a majority of developers. With the right techniques and tools, memory leaks in Java programs can however be tackled like any other programming error. This talks discusses how a JVM stores data, categorizes different types of memory leaks that can occur in a Java program and presents techniques for fixing such errors. Furthermore, we will have a closer look at lambda expressions and their considerable potential of introducing memory leaks when they are used incautiously.
sizeof(Object): how much memory objects take on JVMs and when this may matterDawid Weiss
The object header contains metadata such as the identity hash, mark, and klass. Hexdumping the memory of a simple object before and after getting the identity hash shows the hash being written to the header. On 64-bit JVMs, the header is 8 bytes, containing unused space, hash, and mark fields. On 32-bit JVMs, the header is 4 bytes, with the hash overwriting unused space after being set.
This document discusses building a Java tracer using bytecode, JNI, JVMTI and ASM. It covers Java bytecode format, using JNI and JVMTI to build C extensions that interface with the JVM, ASM for bytecode analysis and manipulation, and a demo of using these technologies to trace a "Hello, World" program. It also outlines areas for further work on the tracer and takes questions.
The document describes a Java program that implements a chat server and client. It includes classes for the server and client frames, with methods for network connections and message handling. The server is capable of accepting multiple simultaneous client connections and running them in separate threads. Methods are provided for tasks like initializing GUI components, sending and receiving messages, and disconnecting clients.
Twisted is an event-driven networking engine written in Python. It provides tools for developing asynchronous network applications and services. Some key features of Twisted include an asynchronous reactor framework, support for deferreds/promises, common network protocols and services implemented, and application framework for building services.
Mastering Java Bytecode With ASM - 33rd degree, 2012Anton Arhipov
The document discusses bytecode and the ASM library for manipulating Java bytecode. It provides an overview of bytecode structure and instructions. ASM is introduced as a low-level API for working with bytecode using visitors and nodes. Examples are given for generating bytecode using ASM, such as creating a ClassWriter, visiting classes, fields and methods, and generating instructions.
Understanding bytecode and what bytecode is likely to be generated by a Java compiler helps the Java programmer in the same way that knowledge of assembler helps the C or C++ programmer. Java bytecode is the form of instructions that Java virtual machine executes. This knowledge is crucial when debugging and doing performance and memory usage tuning. The presenter will share his knowledge on what bytecode means for your platform and how to create compiler while using some awesome tools.
While most bugs reveal their cause within their stack trace, Java’s OutOfMemoryError is less talkative and therefore regarded as being difficult to debug by a majority of developers. With the right techniques and tools, memory leaks in Java programs can however be tackled like any other programming error. This talks discusses how a JVM stores data, categorizes different types of memory leaks that can occur in a Java program and presents techniques for fixing such errors. Furthermore, we will have a closer look at lambda expressions and their considerable potential of introducing memory leaks when they are used incautiously.
sizeof(Object): how much memory objects take on JVMs and when this may matterDawid Weiss
The object header contains metadata such as the identity hash, mark, and klass. Hexdumping the memory of a simple object before and after getting the identity hash shows the hash being written to the header. On 64-bit JVMs, the header is 8 bytes, containing unused space, hash, and mark fields. On 32-bit JVMs, the header is 4 bytes, with the hash overwriting unused space after being set.
This document discusses building a Java tracer using bytecode, JNI, JVMTI and ASM. It covers Java bytecode format, using JNI and JVMTI to build C extensions that interface with the JVM, ASM for bytecode analysis and manipulation, and a demo of using these technologies to trace a "Hello, World" program. It also outlines areas for further work on the tracer and takes questions.
The document describes a Java program that implements a chat server and client. It includes classes for the server and client frames, with methods for network connections and message handling. The server is capable of accepting multiple simultaneous client connections and running them in separate threads. Methods are provided for tasks like initializing GUI components, sending and receiving messages, and disconnecting clients.
Twisted is an event-driven networking engine written in Python. It provides tools for developing asynchronous network applications and services. Some key features of Twisted include an asynchronous reactor framework, support for deferreds/promises, common network protocols and services implemented, and application framework for building services.
Writing software for a virtual machine enables developers to forget about machine code assembly, interrupts, and processor caches. This makes Java a convenient language, but all too many developers see the JVM as a black box and are often unsure of how to optimize their code for performance. This unfortunately adds credence to the myth that Java is always outperformed by native languages. This session takes a peek at the inner workings of Oracle’s HotSpot virtual machine, its just-in-time compiler, and the interplay with a computer’s hardware. From this, you will understand the more common optimizations a virtual machine applies, to be better equipped to improve and reason about a Java program’s performance and how to correctly measure runtime!
This document discusses using native code in Android applications. It covers compiling C/C++ code into native shared libraries (.so files) using the Android NDK, mapping native functions to Java using the Java Native Interface (JNI), and some performance and security considerations for using native code. Specifically, it addresses loading native libraries from Java, calling Java methods from native code, and accessing Java strings from native code using JNI functions.
Down to Stack Traces, up from Heap DumpsAndrei Pangin
Глубже стек-трейсов, шире хип-дампов
Stack trace и heap dump - не просто инструменты отладки; это потайные дверцы к самым недрам виртуальной Java машины. Доклад будет посвящён малоизвестным особенностям JDK, так или иначе связанным с обоходом хипа и стеками потоков.
Мы разберём:
- как снимать дампы в продакшне без побочных эффектов;
- как работают утилиты jmap и jstack изнутри, и в чём хитрость forced режима;
- почему все профилировщики врут, и как с этим бороться;
- познакомимся с новым Stack-Walking API в Java 9;
- научимся сканировать Heap средствами JVMTI;
- узнаем о недокументированных функциях Хотспота и других интересных штуках.
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerabilityCanSecWest
The document discusses exploiting an out-of-bounds (OOB) access vulnerability in Chrome's V8 JavaScript engine to install unauthorized apps. It describes triggering OOB memory reads during JSON serialization by modifying the length of an array being serialized. This allows controlling memory and leaking data, enabling arbitrary reads/writes and potentially code execution. It also demonstrates abusing inline hooking and injected scripts to install apps by simulating user interactions despite sandbox protections.
micro(-service) components. While this approach to building software - if done correctly - can improve a system's maintainability and scalability, distributed applications also introduce challanges for operations. Where monolithic applications typically offered direct access to extensive monitoring dashbords, such easy overview is no longer available when multitude services are loosly connected over a network. But how to keep track of a system of such dynamic state?
Distributed tracing is a method of connecting interaction of different services on a network. Collecting and processing such tracing information again allows for the observation of a distributed system in its entirety. This talk shares the presenter's insights gained by working on the JVM-support of distributed tracing for the APM tool Instana. Doing so, it introduces the landscape of distributed tracing on the JVM, discussing popular approaches such as Dapper, Zipkin or Brave/OpenTracing. In the process, it is discussed how byte code instrumentation can be used to capture systems without requiring a user to set up the software under observation. The presentation finishes with a discussion of typical problems of distributed tracing solutions and carefully examines the performance penalties APM tools entail.
There is hardly a Senior Java developer who has never heard of sun.misc.Unsafe. Though it has always been a private API intended for JDK internal use only, the popularity of Unsafe has grown too fast, and now it is used in many open-source projects. OK.RU is not an exception: its software also heavily relies on Unsafe APIs.
During this session we'll try to understand what is so attractive about Unsafe. Why do people keep using it regardless the warnings of removal from future JDK releases? Are there any safe alternatives to private API or is it absolutely vital? We will review the typical cases when Java developers prefer to go unsafe and discuss major benefits and the drawbacks of it. The report will be supported by the real examples from OK.RU experience.
The document discusses the Apache Commons project, which develops reusable Java components. It notes that Commons components allow for faster and smaller development by avoiding reinventing common functions. The document outlines several active Commons components like Collections, IO, Lang, and Logging, as well as sandbox and dormant components. It emphasizes that 80% of Commons components have no dependencies on each other, promoting flexibility and reuse.
Voxxed Days Vilnius 2015 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, a Java bytecode engineering library, to dynamically generate Java proxies at runtime. It provides examples of using Javassist with a Java agent to transform class files and generate proxies within a ClassFileTransformer. It also summarizes how Javassist is used within the JRebel application reload agent to refresh configurations and notify plugins of class reloading.
Presentation I gave at a Rust Austin meetup in November 2018 about exploring different approaches for interpreting custom DSLs in Rust with varying speed characteristics and associated safety issues.
Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes at runtime, record execution flow, etc.
I’d like to give an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
The document discusses Java class and method data structures stored in the permanent generation area of memory. It describes the fields within the Klass, instanceKlass, and methodOopDesc structures that represent classes and methods. It also discusses full garbage collection and minor garbage collection stack traces.
Everything you wanted to know about Stack Traces and Heap DumpsAndrei Pangin
Stack traces and heap dumps are not just debugging tools; they open a doorway to the very heart of the Java Virtual Machine. This session is focused on peculiarities of JDK somehow related to heap walking and thread stacks.
• How to create dump in production without side effects?
• What is the performance impact of stack traces?
• How do jmap and jstack work under the hood, and what is special about 'forced' mode?
• Why do all profilers lie, and how to deal with it?
• How to scan heap using JVMTI?
The presentation supported by the live demos will address all these questions. It will also introduce new Java 9 Stack-Walking API (JEP 259) and reveal some useful but little known features of HotSpot JVM.
Riga Dev Day 2016 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, an open-source bytecode engineering library, for bytecode instrumentation and generation of Java proxies. It provides examples of using Javassist's ClassPool and CtClass APIs to dynamically generate and modify classes, such as adding a print statement before a method or generating a class from metadata. The key uses of Javassist mentioned are generating proxies, bytecode instrumentation, and dynamic class generation.
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Susan Potter
This document discusses patterns in object-oriented programming versus abstractions in functional programming. It provides code examples of using functional abstractions like the IO monad and type classes in Scala. The examples demonstrate how to construct programs by composing functions, handle errors, and test programs using the IO monad. Known applications of functional abstractions include using monoids for accumulating values, functors for mapping over data types, and monads for modeling effects. The document advocates thinking algebraically by focusing on properties, extending closed data types, and building applications from small, composable abstractions.
This document provides an overview of how to create plugins for the Walkmod static analysis tool that define new Sonar rules. It discusses both syntactic and semantic rules, and how to write visitors that analyze the AST to detect issues. It also covers testing rules semantically using Walkmod's semantic analysis APIs, managing external references when refactoring code, and the general process for contributing new rules by forking an existing plugin project.
The document discusses using Rust and Emscripten to compile Rust code to JavaScript and WebAssembly. It covers how to export Rust functions, call JavaScript from Rust, and handle types through Embind to integrate Rust and JavaScript. Embind uses C++ templates to register Rust classes and implement bindings, allowing Rust code to interoperate with JavaScript through Emscripten.
The document summarizes the key new features introduced in each version of Java from JDK 1.0 to Java SE 8. Some major enhancements included strings in switch statements in Java 7, binary and underscore literals, multi-catch exceptions, try-with-resources for automatic resource management, and lambda expressions in Java 8.
This document provides an overview of new features in NIO 2 and asynchronous I/O in Java. It discusses buffers, channels, selectors, file system APIs, file change notification, and asynchronous operations using futures and completion handlers. The key aspects covered include non-blocking I/O, readiness selection, file locking, memory mapping, and file attributes.
This document discusses Fork/Join framework in Java 7. It explains that Fork/Join is designed to maximize usage of multiple processors by recursively splitting large tasks into smaller subtasks. It uses work-stealing algorithm where idle workers can steal tasks from busy workers' queues to balance load. An example of calculating Fibonacci numbers using Fork/Join is provided where the task is split recursively until the subproblem size is smaller than threshold, at which point it is computed directly.
The document describes the development of a C++ wrapper class for the C libcurl library. It defines a curl::easy class that encapsulates a CURL handle and provides methods like set_url() and perform() to set options and execute requests. Over time, the class is refined to add functionality, handle different string types more generically, and improve exception safety. Template classes are introduced to represent C strings in a more object-oriented way.
This document discusses how different Ruby implementations like MRI, Rubinius, and JRuby handle method dispatch and execution. It explains how MRI searches for and executes methods, and how Rubinius and JRuby optimize this using techniques like inline caches, just-in-time compilation, and invokedynamic. It provides code examples and compares the bytecode generated by each implementation.
Greg Tierney of Avid presented on their experiences using SystemC for design verification. SystemC provides hardware constructs and simulation capabilities in C++. Avid chose SystemC to enhance their existing C++ verification code and take advantage of its industry acceptance and built-in verification features. SystemC helped Avid solve issues like crossing language boundaries between HDL modules and testbenches, connecting ports and channels, implementing randomization, using multi-threaded processes, and defining module hierarchies. However, Avid also encountered issues with SystemC like slow compile/link times and limitations in its foreign language interface.
Writing software for a virtual machine enables developers to forget about machine code assembly, interrupts, and processor caches. This makes Java a convenient language, but all too many developers see the JVM as a black box and are often unsure of how to optimize their code for performance. This unfortunately adds credence to the myth that Java is always outperformed by native languages. This session takes a peek at the inner workings of Oracle’s HotSpot virtual machine, its just-in-time compiler, and the interplay with a computer’s hardware. From this, you will understand the more common optimizations a virtual machine applies, to be better equipped to improve and reason about a Java program’s performance and how to correctly measure runtime!
This document discusses using native code in Android applications. It covers compiling C/C++ code into native shared libraries (.so files) using the Android NDK, mapping native functions to Java using the Java Native Interface (JNI), and some performance and security considerations for using native code. Specifically, it addresses loading native libraries from Java, calling Java methods from native code, and accessing Java strings from native code using JNI functions.
Down to Stack Traces, up from Heap DumpsAndrei Pangin
Глубже стек-трейсов, шире хип-дампов
Stack trace и heap dump - не просто инструменты отладки; это потайные дверцы к самым недрам виртуальной Java машины. Доклад будет посвящён малоизвестным особенностям JDK, так или иначе связанным с обоходом хипа и стеками потоков.
Мы разберём:
- как снимать дампы в продакшне без побочных эффектов;
- как работают утилиты jmap и jstack изнутри, и в чём хитрость forced режима;
- почему все профилировщики врут, и как с этим бороться;
- познакомимся с новым Stack-Walking API в Java 9;
- научимся сканировать Heap средствами JVMTI;
- узнаем о недокументированных функциях Хотспота и других интересных штуках.
Csw2016 gong pwn_a_nexus_device_with_a_single_vulnerabilityCanSecWest
The document discusses exploiting an out-of-bounds (OOB) access vulnerability in Chrome's V8 JavaScript engine to install unauthorized apps. It describes triggering OOB memory reads during JSON serialization by modifying the length of an array being serialized. This allows controlling memory and leaking data, enabling arbitrary reads/writes and potentially code execution. It also demonstrates abusing inline hooking and injected scripts to install apps by simulating user interactions despite sandbox protections.
micro(-service) components. While this approach to building software - if done correctly - can improve a system's maintainability and scalability, distributed applications also introduce challanges for operations. Where monolithic applications typically offered direct access to extensive monitoring dashbords, such easy overview is no longer available when multitude services are loosly connected over a network. But how to keep track of a system of such dynamic state?
Distributed tracing is a method of connecting interaction of different services on a network. Collecting and processing such tracing information again allows for the observation of a distributed system in its entirety. This talk shares the presenter's insights gained by working on the JVM-support of distributed tracing for the APM tool Instana. Doing so, it introduces the landscape of distributed tracing on the JVM, discussing popular approaches such as Dapper, Zipkin or Brave/OpenTracing. In the process, it is discussed how byte code instrumentation can be used to capture systems without requiring a user to set up the software under observation. The presentation finishes with a discussion of typical problems of distributed tracing solutions and carefully examines the performance penalties APM tools entail.
There is hardly a Senior Java developer who has never heard of sun.misc.Unsafe. Though it has always been a private API intended for JDK internal use only, the popularity of Unsafe has grown too fast, and now it is used in many open-source projects. OK.RU is not an exception: its software also heavily relies on Unsafe APIs.
During this session we'll try to understand what is so attractive about Unsafe. Why do people keep using it regardless the warnings of removal from future JDK releases? Are there any safe alternatives to private API or is it absolutely vital? We will review the typical cases when Java developers prefer to go unsafe and discuss major benefits and the drawbacks of it. The report will be supported by the real examples from OK.RU experience.
The document discusses the Apache Commons project, which develops reusable Java components. It notes that Commons components allow for faster and smaller development by avoiding reinventing common functions. The document outlines several active Commons components like Collections, IO, Lang, and Logging, as well as sandbox and dormant components. It emphasizes that 80% of Commons components have no dependencies on each other, promoting flexibility and reuse.
Voxxed Days Vilnius 2015 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, a Java bytecode engineering library, to dynamically generate Java proxies at runtime. It provides examples of using Javassist with a Java agent to transform class files and generate proxies within a ClassFileTransformer. It also summarizes how Javassist is used within the JRebel application reload agent to refresh configurations and notify plugins of class reloading.
Presentation I gave at a Rust Austin meetup in November 2018 about exploring different approaches for interpreting custom DSLs in Rust with varying speed characteristics and associated safety issues.
Java agents are pluggable self contained components that run embedded in a JVM and intercept the classloading process. They were introduced in Java 5 along with the powerful java.lang.instrument package. Java agents can be loaded statically at startup or dynamically (programmatically) at runtime to attach to a running process.
Java agents were an awesome addition to the JVM as it opened a lot of opportunities for tool designers and changed Java tooling landscape quite drastically. In conjunction with Java bytecode manipulation libraries it is now possible to do amazing things to Java classes: we can experiment with programming models, redefine classes at runtime, record execution flow, etc.
I’d like to give an overview of Java agents’ functionality along with the usage examples and real world experiences. You will learn, how to implement an agent and apply Instrumentation API in combination with bytecode manipulation libraries to solve interesting tasks.
The document discusses Java class and method data structures stored in the permanent generation area of memory. It describes the fields within the Klass, instanceKlass, and methodOopDesc structures that represent classes and methods. It also discusses full garbage collection and minor garbage collection stack traces.
Everything you wanted to know about Stack Traces and Heap DumpsAndrei Pangin
Stack traces and heap dumps are not just debugging tools; they open a doorway to the very heart of the Java Virtual Machine. This session is focused on peculiarities of JDK somehow related to heap walking and thread stacks.
• How to create dump in production without side effects?
• What is the performance impact of stack traces?
• How do jmap and jstack work under the hood, and what is special about 'forced' mode?
• Why do all profilers lie, and how to deal with it?
• How to scan heap using JVMTI?
The presentation supported by the live demos will address all these questions. It will also introduce new Java 9 Stack-Walking API (JEP 259) and reveal some useful but little known features of HotSpot JVM.
Riga Dev Day 2016 - Having fun with JavassistAnton Arhipov
The document discusses using Javassist, an open-source bytecode engineering library, for bytecode instrumentation and generation of Java proxies. It provides examples of using Javassist's ClassPool and CtClass APIs to dynamically generate and modify classes, such as adding a print statement before a method or generating a class from metadata. The key uses of Javassist mentioned are generating proxies, bytecode instrumentation, and dynamic class generation.
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Susan Potter
This document discusses patterns in object-oriented programming versus abstractions in functional programming. It provides code examples of using functional abstractions like the IO monad and type classes in Scala. The examples demonstrate how to construct programs by composing functions, handle errors, and test programs using the IO monad. Known applications of functional abstractions include using monoids for accumulating values, functors for mapping over data types, and monads for modeling effects. The document advocates thinking algebraically by focusing on properties, extending closed data types, and building applications from small, composable abstractions.
This document provides an overview of how to create plugins for the Walkmod static analysis tool that define new Sonar rules. It discusses both syntactic and semantic rules, and how to write visitors that analyze the AST to detect issues. It also covers testing rules semantically using Walkmod's semantic analysis APIs, managing external references when refactoring code, and the general process for contributing new rules by forking an existing plugin project.
The document discusses using Rust and Emscripten to compile Rust code to JavaScript and WebAssembly. It covers how to export Rust functions, call JavaScript from Rust, and handle types through Embind to integrate Rust and JavaScript. Embind uses C++ templates to register Rust classes and implement bindings, allowing Rust code to interoperate with JavaScript through Emscripten.
The document summarizes the key new features introduced in each version of Java from JDK 1.0 to Java SE 8. Some major enhancements included strings in switch statements in Java 7, binary and underscore literals, multi-catch exceptions, try-with-resources for automatic resource management, and lambda expressions in Java 8.
This document provides an overview of new features in NIO 2 and asynchronous I/O in Java. It discusses buffers, channels, selectors, file system APIs, file change notification, and asynchronous operations using futures and completion handlers. The key aspects covered include non-blocking I/O, readiness selection, file locking, memory mapping, and file attributes.
This document discusses Fork/Join framework in Java 7. It explains that Fork/Join is designed to maximize usage of multiple processors by recursively splitting large tasks into smaller subtasks. It uses work-stealing algorithm where idle workers can steal tasks from busy workers' queues to balance load. An example of calculating Fibonacci numbers using Fork/Join is provided where the task is split recursively until the subproblem size is smaller than threshold, at which point it is computed directly.
The document describes the development of a C++ wrapper class for the C libcurl library. It defines a curl::easy class that encapsulates a CURL handle and provides methods like set_url() and perform() to set options and execute requests. Over time, the class is refined to add functionality, handle different string types more generically, and improve exception safety. Template classes are introduced to represent C strings in a more object-oriented way.
This document discusses how different Ruby implementations like MRI, Rubinius, and JRuby handle method dispatch and execution. It explains how MRI searches for and executes methods, and how Rubinius and JRuby optimize this using techniques like inline caches, just-in-time compilation, and invokedynamic. It provides code examples and compares the bytecode generated by each implementation.
Greg Tierney of Avid presented on their experiences using SystemC for design verification. SystemC provides hardware constructs and simulation capabilities in C++. Avid chose SystemC to enhance their existing C++ verification code and take advantage of its industry acceptance and built-in verification features. SystemC helped Avid solve issues like crossing language boundaries between HDL modules and testbenches, connecting ports and channels, implementing randomization, using multi-threaded processes, and defining module hierarchies. However, Avid also encountered issues with SystemC like slow compile/link times and limitations in its foreign language interface.
The document discusses how to work with Cocoa and Objective-C from Swift. It covers importing Objective-C frameworks, interacting with Objective-C APIs such as initializers, properties, and methods, type remapping between Objective-C and Swift types, working with AnyObject and optionals, blocks, and integrating Swift code with Interface Builder using outlets and actions.
The "n" in the PrintCompilation output indicates that the method was not compiled, but is on deck to be compiled. So in this case, java.lang.Object::hashCode was not yet compiled, but is a candidate for compilation if/when it is called more.
This document discusses advanced Java debugging using bytecode. It explains that bytecode is the low-level representation of Java programs that is executed by the Java Virtual Machine (JVM). It shows examples of decompiling Java source code to bytecode instructions and evaluating bytecode on a stack. Various bytecode visualization and debugging tools are demonstrated. Key topics like object-oriented aspects of bytecode and the ".class" file format are also covered at a high-level.
The document discusses the Objective-C runtime and how it enables dynamic features of the Objective-C language. It covers how self is initialized by calling [super init], how messages are sent via objc_msgSend, and the basic structure of the Objective-C runtime including classes, objects, messaging and introspection. Examples of using the runtime API are provided, such as method swizzling and implementing a JSON model. The document provides references for further reading on the Objective-C runtime.
JavaFX 8 est disponible depuis mars 2014 et apporte son lot de nouveautés. Gradle est en version 2 depuis juillet 2014. Deux technologies plus que prometteuses: JavaFX donne un coup de jeune au développement d’applications desktop en Java en apportant un navigateur web intégré, le support des WebSockets, de la 3D, et bien d’autres. Gradle est l’outil de d’automatisation de build à la mode, apportant de superbes possibilités par rapport rapport à maven, outil vieillissant, grâce à l’engouement de la communauté vis à vis de cet outil mais aussi par le fait de la technologie utilisée en son sein: groovy. Venez découvrir comment il est possible de réaliser rapidement une application à la mode en JavaFX avec un outil à la mode également. Bref venez à une session trendy.
Making Java more dynamic: runtime code generation for the JVMRafael Winterhalter
While Java’s strict type system is a great help for avoiding programming errors, it also takes away some of the flexibility that developers appreciate when using dynamic languages. By using runtime code generation, it is possible to bring some of this flexibility back to the Java virtual machine. For this reason, runtime code generation is widely used by many state-of-the-art Java frameworks for implementing POJO-centric APIs but it also opens the door to assembling more modular applications. This presentation offers an introduction to the complex of runtime code generation and its use on the Java platform. Furthermore, it discusses the up- and downsides of several code generation libraries such as ASM, Javassist, cglib and Byte Buddy.
Using Smalltalk for controlling robotics systemsSerge Stinckwich
This document discusses using Smalltalk for controlling robotics systems. It provides an introduction to developing embedded systems in Smalltalk and highlights some past projects that have used Smalltalk for robotics and embedded applications. It outlines advantages of Smalltalk such as its simple syntax, portability, uniformity, and dynamism. Examples are given of generating code from Smalltalk for other robotics platforms and simulating robotics applications in Smalltalk.
JVM Mechanics: When Does the JVM JIT & Deoptimize?Doug Hawkins
HotSpot promises to do the "right" thing for us by identifying our hot code and compiling "just-in-time", but how does HotSpot make those decisions?
This presentation aims to detail how HotSpot makes those decisions and how it corrects its mistakes through a series of demos that you run yourself.
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.
No dark magic - Byte code engineering in the real worldtcurdt
The document discusses how Java bytecode is executed on a Java Virtual Machine (JVM) and compares the steps of compiling and running a "Hello World" Java program across different platforms and tools. It also summarizes several bytecode manipulation libraries and frameworks and provides examples of how they can be used for tasks like analysis, modification, and runtime weaving of aspects.
2013 syscan360 yuki_chen_syscan360_exploit your java native vulnerabilities o...chen yuki
This document describes three methods for exploiting a Java native vulnerability on Windows 7 with JRE 7 to bypass data execution prevention and address space layout randomization. The first method uses information leakage to conduct return-oriented programming. The second overwrites the length of a Java array and the access control context of a statement object. The third method sprays Java just-in-time compiled functions to control the instruction pointer and execute shellcode. Examples and limitations of each method are provided. In conclusion, the document recommends choosing an exploitation method based on the vulnerability and system configuration.
Aiming at complete code coverage by unit tests tends to be cumbersome, especially for cases where external API calls a part of the code base. For these reasons, Python comes with the unittest.mock library, appearing to be a powerful companion in replacing parts of the system under test.
Java agents and their instrumentation API offer developers the most powerful toolset to interact with a Java application. Using this API, it becomes possible to alter the code of running applications, for example to add monitoring or to inject security checks as it is done by many enterprise products for the Java ecosystem.
In this session, developers will learn how to program Java agents of their own that make use of the instrumentation API. Doing so, developers learn how the majority of tooling for the JVM is implemented and will learn about Byte Buddy, a high level code generation library that does not require any knowledge of Java byte code that is normally required for writing agents. In the process, developers will see how Java classes can be used as templates for implementing highly performant code changes that avoid the boilerplate of alternative solutions such as AspectJ or Javassist while still performing better than agents implemented in low-level libraries such as ASM.
This document discusses migrating from Objective-C to Swift and some of the benefits and challenges of doing so. It notes that Swift will provide gains like types, generics, and simplicity while some Objective-C features like .h/.m files will be lost. It provides recommendations for how to start migrating an existing Objective-C project to Swift like adding imports to a bridging header and optimizing Objective-C for Swift. Specific examples are given of how Swift can make code easier to read and maintain.
Supercharging reflective libraries with InvokeDynamicIan Robertson
This document discusses using invokeDynamic to generate bytecode at runtime in order to bypass access restrictions when using reflection. It describes how invokeDynamic works, including how bootstrap methods are used to create method handles which are then wrapped in call sites. Examples are provided of bootstrap methods for accessing fields and calling methods via reflection while avoiding the performance penalties of traditional reflection. Overall, invokeDynamic allows generating bytecode that performs equivalently to handwritten code.
Eric Lafortune - The Jack and Jill build systemGuardSquare
Jack and Jill are new build tools introduced by Google that optimize the Android build process. Jack compiles Java code to an intermediate format called Jayce bytecode. Jill then compiles Jayce to optimized Dalvik bytecode. This results in faster build times, smaller app sizes, and support for Java 8 language features on older Android versions. It also allows for new optimizations from tools like ProGuard and DexGuard during the build. The changes improve performance for developers and applications.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
For the full video of this presentation, please visit: https://www.edge-ai-vision.com/2024/06/building-and-scaling-ai-applications-with-the-nx-ai-manager-a-presentation-from-network-optix/
Robin van Emden, Senior Director of Data Science at Network Optix, presents the “Building and Scaling AI Applications with the Nx AI Manager,” tutorial at the May 2024 Embedded Vision Summit.
In this presentation, van Emden covers the basics of scaling edge AI solutions using the Nx tool kit. He emphasizes the process of developing AI models and deploying them globally. He also showcases the conversion of AI models and the creation of effective edge AI pipelines, with a focus on pre-processing, model conversion, selecting the appropriate inference engine for the target hardware and post-processing.
van Emden shows how Nx can simplify the developer’s life and facilitate a rapid transition from concept to production-ready applications.He provides valuable insights into developing scalable and efficient edge AI solutions, with a strong focus on practical implementation.
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
OpenID AuthZEN Interop Read Out - AuthorizationDavid Brossard
During Identiverse 2024 and EIC 2024, members of the OpenID AuthZEN WG got together and demoed their authorization endpoints conforming to the AuthZEN API
Removing Uninteresting Bytes in Software FuzzingAftab Hussain
Imagine a world where software fuzzing, the process of mutating bytes in test seeds to uncover hidden and erroneous program behaviors, becomes faster and more effective. A lot depends on the initial seeds, which can significantly dictate the trajectory of a fuzzing campaign, particularly in terms of how long it takes to uncover interesting behaviour in your code. We introduce DIAR, a technique designed to speedup fuzzing campaigns by pinpointing and eliminating those uninteresting bytes in the seeds. Picture this: instead of wasting valuable resources on meaningless mutations in large, bloated seeds, DIAR removes the unnecessary bytes, streamlining the entire process.
In this work, we equipped AFL, a popular fuzzer, with DIAR and examined two critical Linux libraries -- Libxml's xmllint, a tool for parsing xml documents, and Binutil's readelf, an essential debugging and security analysis command-line tool used to display detailed information about ELF (Executable and Linkable Format). Our preliminary results show that AFL+DIAR does not only discover new paths more quickly but also achieves higher coverage overall. This work thus showcases how starting with lean and optimized seeds can lead to faster, more comprehensive fuzzing campaigns -- and DIAR helps you find such seeds.
- These are slides of the talk given at IEEE International Conference on Software Testing Verification and Validation Workshop, ICSTW 2022.
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
Best 20 SEO Techniques To Improve Website Visibility In SERPPixlogix Infotech
Boost your website's visibility with proven SEO techniques! Our latest blog dives into essential strategies to enhance your online presence, increase traffic, and rank higher on search engines. From keyword optimization to quality content creation, learn how to make your site stand out in the crowded digital landscape. Discover actionable tips and expert insights to elevate your SEO game.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Speck&Tech
ABSTRACT: A prima vista, un mattoncino Lego e la backdoor XZ potrebbero avere in comune il fatto di essere entrambi blocchi di costruzione, o dipendenze di progetti creativi e software. La realtà è che un mattoncino Lego e il caso della backdoor XZ hanno molto di più di tutto ciò in comune.
Partecipate alla presentazione per immergervi in una storia di interoperabilità, standard e formati aperti, per poi discutere del ruolo importante che i contributori hanno in una comunità open source sostenibile.
BIO: Sostenitrice del software libero e dei formati standard e aperti. È stata un membro attivo dei progetti Fedora e openSUSE e ha co-fondato l'Associazione LibreItalia dove è stata coinvolta in diversi eventi, migrazioni e formazione relativi a LibreOffice. In precedenza ha lavorato a migrazioni e corsi di formazione su LibreOffice per diverse amministrazioni pubbliche e privati. Da gennaio 2020 lavora in SUSE come Software Release Engineer per Uyuni e SUSE Manager e quando non segue la sua passione per i computer e per Geeko coltiva la sua curiosità per l'astronomia (da cui deriva il suo nickname deneb_alpha).
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Taking AI to the Next Level in Manufacturing.pdfssuserfac0301
Read Taking AI to the Next Level in Manufacturing to gain insights on AI adoption in the manufacturing industry, such as:
1. How quickly AI is being implemented in manufacturing.
2. Which barriers stand in the way of AI adoption.
3. How data quality and governance form the backbone of AI.
4. Organizational processes and structures that may inhibit effective AI adoption.
6. Ideas and approaches to help build your organization's AI strategy.
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
30. InjectionForXcode Swift
limitations
• classes inherit from NSObject
• non-final classes
• non-final methods
• no structs/enums, no extensions
• no global functions
• no methods/properties added
64. Installation
• Download Injection For Xcode with TDD
• correct xcode-select -p
• Integrate InjectionTDD to your project
• e.g. pod 'InjectionTDD', '~> 0.4’
• ⌘+U