This document discusses code recommenders in the Eclipse IDE. It describes how the recommenders work by extracting patterns from code examples, building models of framework usage, and generating recommendations for code completion and call chains based on these models and other developers' common usage. Examples are provided of intelligent code completion and call chain completion recommendations. The goal is to leverage the wisdom of the software engineering crowds to help developers be more productive.
This document discusses Eclipse code recommenders, which leverage the wisdom of software engineering crowds to provide intelligent code completion, call-chain completion, and other features in the Eclipse IDE. It explains how recommenders are built by extracting patterns from example code applications using a framework and generating recommendations for new code based on these patterns. The document outlines several tools enabled by code recommenders, including intelligent code completion, smart bug detection, and extended documentation.
The document discusses various tips, tricks, and tools that every Eclipse user should know. It covers new features in Eclipse Kepler like installation remediation support, improvements to EGit and Mylyn Reviews, and performance enhancements. Various code editing tips are provided like smart semicolons and braces, as well as debugging techniques like step filtering and heap walking. Advanced code completion options from plugins like Codetrails are demonstrated.
The document discusses various code recommender tools that could be integrated into IDEs to improve the developer experience. These include intelligent code completion that only suggests the most relevant methods, a stacktrace search engine to help debug errors by matching stacktraces to previous examples, and recommending code examples based on how other developers have solved similar problems. It notes that these tools would help transition development from IDE 1.0 to IDE 2.0 by leveraging collective intelligence and the wisdom of crowds. The document promotes the Eclipse Code Recommenders project and provides a list of student contributors.
This document discusses Eclipse code recommenders, which leverage collective intelligence in software development. Eclipse code recommenders observe how frameworks are commonly used and extended to provide intelligent code completion, usage-driven Javadocs, code example recommendations, and smart bug detection. They work by mining development data to extract patterns on how frameworks are reused and then surface those recommendations to developers. The system aims to help developers by recommending what others frequently do based on past usage. It analyzes collected data on framework usage to build recommender models and provide suggestions to developers.
The document discusses potential new features for code recommenders in the Eclipse IDE. It describes how current recommenders provide code completions and suggestions based on common usage. Future recommenders being considered for the next Eclipse release may intelligently suggest arguments, annotate code, integrate code snippets from repositories, and help debug errors by searching similar stack traces. The document advocates that these new recommenders could help developers by leveraging patterns found in large code bases.
The document discusses extending the PHP Development Toolkit (PDT) in Eclipse. It provides examples of how to extend PDT by registering build participants and AST visitors to integrate validation rules. Quick fixes can also be added to automatically fix problems. The document recommends using Eclipse's JavaScript support to dynamically extend PDT through scripting instead of Java for PHP developers. This allows customizing PDT distributions and potentially writing PHP plugins in PHP.
How to really obfuscate your pdf malwarezynamics GmbH
This document discusses techniques for obfuscating PDF malware to make analysis more difficult. It begins by explaining common obfuscation methods like malformed PDF structure, JavaScript splitting across objects, and eval chains. It then provides more advanced techniques like exploiting idiosyncrasies of the Adobe JavaScript engine, using difficult to emulate API functions, and cooperative multi-threading with message passing. The document aims to help malware authors create more stealthy and resistant obfuscation.
Eric Lafortune - The Jack and Jill build systemGuardSquare
The document discusses the Jack and Jill build system introduced by Google to improve the Android build process. Jack and Jill compile Java code to an intermediate bytecode format called Jayce, allowing for faster builds and optimization. Key points:
- Jack and Jill have replaced the traditional Java compiler and Dalvik dexifier in the Android build tools, speeding up the build process.
- Jill can further optimize the Jayce bytecode, allowing for functionality like bytecode processing that was not possible with just Jack.
- Results have shown that Jack and Jill can reduce build times significantly and produce smaller, faster apps compared to the traditional build system.
This document discusses Eclipse code recommenders, which leverage the wisdom of software engineering crowds to provide intelligent code completion, call-chain completion, and other features in the Eclipse IDE. It explains how recommenders are built by extracting patterns from example code applications using a framework and generating recommendations for new code based on these patterns. The document outlines several tools enabled by code recommenders, including intelligent code completion, smart bug detection, and extended documentation.
The document discusses various tips, tricks, and tools that every Eclipse user should know. It covers new features in Eclipse Kepler like installation remediation support, improvements to EGit and Mylyn Reviews, and performance enhancements. Various code editing tips are provided like smart semicolons and braces, as well as debugging techniques like step filtering and heap walking. Advanced code completion options from plugins like Codetrails are demonstrated.
The document discusses various code recommender tools that could be integrated into IDEs to improve the developer experience. These include intelligent code completion that only suggests the most relevant methods, a stacktrace search engine to help debug errors by matching stacktraces to previous examples, and recommending code examples based on how other developers have solved similar problems. It notes that these tools would help transition development from IDE 1.0 to IDE 2.0 by leveraging collective intelligence and the wisdom of crowds. The document promotes the Eclipse Code Recommenders project and provides a list of student contributors.
This document discusses Eclipse code recommenders, which leverage collective intelligence in software development. Eclipse code recommenders observe how frameworks are commonly used and extended to provide intelligent code completion, usage-driven Javadocs, code example recommendations, and smart bug detection. They work by mining development data to extract patterns on how frameworks are reused and then surface those recommendations to developers. The system aims to help developers by recommending what others frequently do based on past usage. It analyzes collected data on framework usage to build recommender models and provide suggestions to developers.
The document discusses potential new features for code recommenders in the Eclipse IDE. It describes how current recommenders provide code completions and suggestions based on common usage. Future recommenders being considered for the next Eclipse release may intelligently suggest arguments, annotate code, integrate code snippets from repositories, and help debug errors by searching similar stack traces. The document advocates that these new recommenders could help developers by leveraging patterns found in large code bases.
The document discusses extending the PHP Development Toolkit (PDT) in Eclipse. It provides examples of how to extend PDT by registering build participants and AST visitors to integrate validation rules. Quick fixes can also be added to automatically fix problems. The document recommends using Eclipse's JavaScript support to dynamically extend PDT through scripting instead of Java for PHP developers. This allows customizing PDT distributions and potentially writing PHP plugins in PHP.
How to really obfuscate your pdf malwarezynamics GmbH
This document discusses techniques for obfuscating PDF malware to make analysis more difficult. It begins by explaining common obfuscation methods like malformed PDF structure, JavaScript splitting across objects, and eval chains. It then provides more advanced techniques like exploiting idiosyncrasies of the Adobe JavaScript engine, using difficult to emulate API functions, and cooperative multi-threading with message passing. The document aims to help malware authors create more stealthy and resistant obfuscation.
Eric Lafortune - The Jack and Jill build systemGuardSquare
The document discusses the Jack and Jill build system introduced by Google to improve the Android build process. Jack and Jill compile Java code to an intermediate bytecode format called Jayce, allowing for faster builds and optimization. Key points:
- Jack and Jill have replaced the traditional Java compiler and Dalvik dexifier in the Android build tools, speeding up the build process.
- Jill can further optimize the Jayce bytecode, allowing for functionality like bytecode processing that was not possible with just Jack.
- Results have shown that Jack and Jill can reduce build times significantly and produce smaller, faster apps compared to the traditional build system.
Let's turn the table. Suppose your goal is to deliberately create buggy programs in C and C++ with serious security vulnerabilities that can be "easily" exploited. Then you need to know about things like stack smashing, shellcode, arc injection, return-oriented programming. You also need to know about annoying protection mechanisms such as address space layout randomization, stack canaries, data execution prevention, and more. These slides will teach you the basics of how to deliberately write insecure programs in C and C++.
A PDF version of the slides can be downloaded from my homepage: http://olvemaudal.com/talks
Here is a video recording of me presenting these slides at NDC 2014: http://vimeo.com/channels/ndc2014/97505677
Enjoy!
Eric Lafortune - ProGuard: Optimizer and obfuscator in the Android SDKGuardSquare
ProGuard is an open source tool that optimizes and obfuscates Java bytecode. It can shrink code size by removing unused classes, fields, and methods. It optimizes code through optimizations like constant propagation and method inlining. It obfuscates code by renaming classes, fields, and methods to obscure their purpose. ProGuard is included in the Android SDK and can help protect Android apps from reverse engineering.
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.
Eric Lafortune - ProGuard: Optimizer and obfuscator in the Android SDKGuardSquare
ProGuard is an open source tool that can optimize and obfuscate Android apps. It shrinks code size by removing unused code and optimizes code through techniques like constant propagation and inlining. It also obfuscates code by renaming classes, fields and methods to hide intellectual property and prevent reverse engineering. ProGuard is part of the Android SDK and can help reduce app size, improve performance, and protect code from decompilation.
TensorFlow Lite (r1.5) & Android 8.1 Neural Network APIMr. Vengineer
This document discusses TensorFlow Lite 1.5 and the Android 8.1 Neural Networks API. It provides an overview of converting TensorFlow models to the TensorFlow Lite format using conversion tools, and running those models on Android using the TensorFlow Lite and Neural Networks APIs. The key steps are converting TensorFlow models to TensorFlow Lite format, creating an interpreter to run the model, and using the interpreter and Neural Networks API to execute the model on Android hardware like the CPU.
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.
The document discusses robot simulation software called maXbox Starter 45. It provides instructions on using maXbox to simulate robot movement and programming using scripts. maXbox allows controlling a simulated robot and tracking a blue line by recording mouse movements. It also discusses handling exceptions, capturing output from DOS commands, and includes references and external links about robot software.
Eskişehir Osmangazi Üniversitesi, Mühendislik-Mimarlık Fakültesi, Bilgisayar Mühendisliği, Advanced Programming. Face Detection In Java by Using OpenCV Lİb.
Threads and Callbacks for Embedded PythonYi-Lung Tsai
Python is a great choice to be customized plug-ins for existing applications. Extending existing applications with Python program is also practical. For large systems, multi-thread programming is ubiquitous along with asynchronous programming, such as event routing. This presentation focuses on dealing with threads and callbacks while embedding Python in other applications.
For the full video of this presentation, please visit:
http://www.embedded-vision.com/platinum-members/embedded-vision-alliance/embedded-vision-training/videos/pages/may-2015-embedded-vision-summit-opencv
For more information about embedded vision, please visit:
http://www.embedded-vision.com
Gary Bradski, President and CEO of the OpenCV Foundation, presents the "OpenCV Open Source Computer Vision Library: Latest Developments" tutorial at the May 2015 Embedded Vision Summit.
OpenCV is an enormously popular open source computer vision library, with over 9 million downloads. Originally used mainly for research and prototyping, in recent years OpenCV has increasingly been used in deployed products on a wide range of platforms from cloud to mobile.
The latest version, OpenCV 3.0 is currently in beta, and is a major overhaul, bringing OpenCV up to modern C++ standards and incorporating expanded support for 3D vision. The new release also introduces a modular “contrib” facility that enables independently developed modules to be quickly integrated with OpenCV as needed, providing a flexible mechanism to allow developers to experiment with new techniques before they are officially integrated into the library.
In this talk, Gary Bradski, head of the OpenCV Foundation, provides an insider’s perspective on the new version of OpenCV and how developers can utilize it to maximum advantage for vision research, prototyping, and product development.
Club of anonimous developers "Refactoring: Legacy code"Victor_Cr
The document discusses various approaches to refactoring legacy code, including:
1. Migrating from an older build system (TOM) to a newer one (POM) by updating XML configuration files.
2. Introducing inversion of control (IoC) and dependency injection (DI) to reduce tight coupling in the code.
3. Implementing aspect-oriented programming (AOP) to separate cross-cutting concerns like transaction management and exception handling.
4. Updating older libraries to newer versions for performance improvements and richer APIs.
5. Cleaning up messy and difficult to read code through techniques like extracting methods and using regular expressions.
Eric Lafortune - Fighting application size with ProGuard and beyondGuardSquare
The document discusses various techniques for reducing Android application size, including compressing resources and assets, trimming unused resources and assets, splitting APK files, shrinking libraries, shrinking the application bytecode, and splitting dex files. It provides examples of using tools like ProGuard, DexGuard, and the Android Gradle plugin to apply these techniques at build time in order to reduce the overall size of the packaged Android application.
The Android Native Development Kit (NDK) allows developers to write and embed native code like C/C++ in Android applications. It provides toolchains and headers to allow compilation of native code into libraries that can be called from Java code using the Java Native Interface. The NDK benefits applications requiring intensive CPU operations, games, or porting existing C/C++ code to Android. However, native code also increases complexity, so the NDK should only be used when truly needed rather than for preference of language. Sample projects demonstrate using the NDK to incorporate native code for tasks like threading and improving performance of algorithms.
SWIG (Simplified Wrapper and Interface Generator) is a tool that connects programs written in C/C++ with scripting languages like Perl, Python, Ruby and Tcl. It works by reading interface definition files that describe functions and variables in a C/C++ library and generating wrapper code that allows these functions and variables to be accessed from a scripting language. SWIG handles much of the complexity of interfacing C/C++ code with other languages. It allows prototyping and debugging integration between different systems and simplifies building extension modules for languages like Perl.
The document summarizes the analysis of the Chromium web browser source code using the PVS-Studio static analysis tool. PVS-Studio found few errors in the 460 MB of Chromium code, demonstrating its high quality. Some errors that were found include incorrect array size calculations, meaningless checks, and potential security issues. While some errors were also found in Chromium's libraries and tests, the overall low error density shows the quality of Chromium's code.
Let's turn the table. Suppose your goal is to deliberately create buggy programs in C and C++ with serious security vulnerabilities that can be "easily" exploited. Then you need to know about things like stack smashing, shellcode, arc injection, return-oriented programming. You also need to know about annoying protection mechanisms such as address space layout randomization, stack canaries, data execution prevention, and more. These slides will teach you the basics of how to deliberately write insecure programs in C and C++.
A PDF version of the slides can be downloaded from my homepage: http://olvemaudal.com/talks
Here is a video recording of me presenting these slides at NDC 2014: http://vimeo.com/channels/ndc2014/97505677
Enjoy!
Eric Lafortune - ProGuard: Optimizer and obfuscator in the Android SDKGuardSquare
ProGuard is an open source tool that optimizes and obfuscates Java bytecode. It can shrink code size by removing unused classes, fields, and methods. It optimizes code through optimizations like constant propagation and method inlining. It obfuscates code by renaming classes, fields, and methods to obscure their purpose. ProGuard is included in the Android SDK and can help protect Android apps from reverse engineering.
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.
Eric Lafortune - ProGuard: Optimizer and obfuscator in the Android SDKGuardSquare
ProGuard is an open source tool that can optimize and obfuscate Android apps. It shrinks code size by removing unused code and optimizes code through techniques like constant propagation and inlining. It also obfuscates code by renaming classes, fields and methods to hide intellectual property and prevent reverse engineering. ProGuard is part of the Android SDK and can help reduce app size, improve performance, and protect code from decompilation.
TensorFlow Lite (r1.5) & Android 8.1 Neural Network APIMr. Vengineer
This document discusses TensorFlow Lite 1.5 and the Android 8.1 Neural Networks API. It provides an overview of converting TensorFlow models to the TensorFlow Lite format using conversion tools, and running those models on Android using the TensorFlow Lite and Neural Networks APIs. The key steps are converting TensorFlow models to TensorFlow Lite format, creating an interpreter to run the model, and using the interpreter and Neural Networks API to execute the model on Android hardware like the CPU.
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.
The document discusses robot simulation software called maXbox Starter 45. It provides instructions on using maXbox to simulate robot movement and programming using scripts. maXbox allows controlling a simulated robot and tracking a blue line by recording mouse movements. It also discusses handling exceptions, capturing output from DOS commands, and includes references and external links about robot software.
Eskişehir Osmangazi Üniversitesi, Mühendislik-Mimarlık Fakültesi, Bilgisayar Mühendisliği, Advanced Programming. Face Detection In Java by Using OpenCV Lİb.
Threads and Callbacks for Embedded PythonYi-Lung Tsai
Python is a great choice to be customized plug-ins for existing applications. Extending existing applications with Python program is also practical. For large systems, multi-thread programming is ubiquitous along with asynchronous programming, such as event routing. This presentation focuses on dealing with threads and callbacks while embedding Python in other applications.
For the full video of this presentation, please visit:
http://www.embedded-vision.com/platinum-members/embedded-vision-alliance/embedded-vision-training/videos/pages/may-2015-embedded-vision-summit-opencv
For more information about embedded vision, please visit:
http://www.embedded-vision.com
Gary Bradski, President and CEO of the OpenCV Foundation, presents the "OpenCV Open Source Computer Vision Library: Latest Developments" tutorial at the May 2015 Embedded Vision Summit.
OpenCV is an enormously popular open source computer vision library, with over 9 million downloads. Originally used mainly for research and prototyping, in recent years OpenCV has increasingly been used in deployed products on a wide range of platforms from cloud to mobile.
The latest version, OpenCV 3.0 is currently in beta, and is a major overhaul, bringing OpenCV up to modern C++ standards and incorporating expanded support for 3D vision. The new release also introduces a modular “contrib” facility that enables independently developed modules to be quickly integrated with OpenCV as needed, providing a flexible mechanism to allow developers to experiment with new techniques before they are officially integrated into the library.
In this talk, Gary Bradski, head of the OpenCV Foundation, provides an insider’s perspective on the new version of OpenCV and how developers can utilize it to maximum advantage for vision research, prototyping, and product development.
Club of anonimous developers "Refactoring: Legacy code"Victor_Cr
The document discusses various approaches to refactoring legacy code, including:
1. Migrating from an older build system (TOM) to a newer one (POM) by updating XML configuration files.
2. Introducing inversion of control (IoC) and dependency injection (DI) to reduce tight coupling in the code.
3. Implementing aspect-oriented programming (AOP) to separate cross-cutting concerns like transaction management and exception handling.
4. Updating older libraries to newer versions for performance improvements and richer APIs.
5. Cleaning up messy and difficult to read code through techniques like extracting methods and using regular expressions.
Eric Lafortune - Fighting application size with ProGuard and beyondGuardSquare
The document discusses various techniques for reducing Android application size, including compressing resources and assets, trimming unused resources and assets, splitting APK files, shrinking libraries, shrinking the application bytecode, and splitting dex files. It provides examples of using tools like ProGuard, DexGuard, and the Android Gradle plugin to apply these techniques at build time in order to reduce the overall size of the packaged Android application.
The Android Native Development Kit (NDK) allows developers to write and embed native code like C/C++ in Android applications. It provides toolchains and headers to allow compilation of native code into libraries that can be called from Java code using the Java Native Interface. The NDK benefits applications requiring intensive CPU operations, games, or porting existing C/C++ code to Android. However, native code also increases complexity, so the NDK should only be used when truly needed rather than for preference of language. Sample projects demonstrate using the NDK to incorporate native code for tasks like threading and improving performance of algorithms.
SWIG (Simplified Wrapper and Interface Generator) is a tool that connects programs written in C/C++ with scripting languages like Perl, Python, Ruby and Tcl. It works by reading interface definition files that describe functions and variables in a C/C++ library and generating wrapper code that allows these functions and variables to be accessed from a scripting language. SWIG handles much of the complexity of interfacing C/C++ code with other languages. It allows prototyping and debugging integration between different systems and simplifies building extension modules for languages like Perl.
The document summarizes the analysis of the Chromium web browser source code using the PVS-Studio static analysis tool. PVS-Studio found few errors in the 460 MB of Chromium code, demonstrating its high quality. Some errors that were found include incorrect array size calculations, meaningless checks, and potential security issues. While some errors were also found in Chromium's libraries and tests, the overall low error density shows the quality of Chromium's code.
Good has won this time. To be more exact, source codes of the Chromium project have won. Chromium is one of the best projects we have checked with PVS-Studio.
Every now and then, we have to write articles about how we've checked another fresh version of some compiler. That's not really much fun. However, as practice shows, if we stop doing that for a while, folks start doubting whether PVS-Studio is worth its title of a good catcher of bugs and vulnerabilities. What if the new compiler can do that too? Sure, compilers evolve, but so does PVS-Studio – and it proves, again and again, its ability to catch bugs even in high-quality projects such as compilers.
The document discusses the present and future of metaprogramming in Scala. It describes scala.reflect, the current metaprogramming API, and its limitations. The future scala.meta API aims to have an independent language model, use hygienic quasiquotes for syntax trees, and make compiler syntax trees persistent. The new API design is being validated and will likely be available as a compiler plugin next year.
The document provides an overview of Microsoft Visual C# and C# basics. It covers topics like getting started with a first C# program, data types, operators, control statements, namespaces, objects and types, methods, classes, structs, inheritance, interfaces, polymorphism, arrays, generics, collections, memory management, attributes, exceptions and more. It also discusses C# compiler options, console I/O formatting, comments, and directives.
Oh Crap, I Forgot (Or Never Learned) C! [CodeMash 2010]Chris Adamson
The document provides an overview of the C programming language. It begins by explaining that Objective-C extends standard ANSI C with object-oriented capabilities. It then discusses why C remains important today due to its use in libraries, operating systems, and as the base for many other popular languages. The document proceeds to cover basic C concepts like variables, data types, functions, flow control, pointers, memory allocation, and I/O parameters. It emphasizes that C provides high performance with a minimal footprint while abstracting away the CPU and memory.
Source code of WPF samples by Microsoft was checkedPVS-Studio
To let people know about PVS-Studio, which is now able to check not only C++ projects, but C# as well, we decided to check the source code of WPF examples, offered by Microsoft.
Framework design involves balancing many considerations, such as:
- Managing dependencies between components to allow for flexibility and evolution over time. Techniques like dependency injection and layering help achieve this.
- Designing APIs by first writing code samples for key scenarios and defining object models to support these samples to ensure usability.
- Treating simplicity as a feature by removing unnecessary requirements and reusing existing concepts where possible.
This document discusses machine learning projects in Go. It begins by explaining what machine learning is and provides an example of linear regression. It then outlines the typical steps for a machine learning project, including gathering data, defining models, training and testing models, and deploying models. The document discusses options for developing machine learning models in Go, including using TensorFlow bindings, Gorgonia for building graphs, and Gonum libraries. It provides examples of implementing convolutional neural networks and recurrent neural networks in these Go frameworks. While developing neural networks from scratch in Go is challenging, the document concludes that Go is suitable for machine learning if using existing TensorFlow models or libraries like Gorgonia and Gonum for other model types.
The PVS-Studio team is now actively developing a static analyzer for C# code. The first version is expected by the end of 2015. And for now my task is to write a few articles to attract C# programmers' attention to our tool in advance. I've got an updated installer today, so we can now install PVS-Studio with C#-support enabled and even analyze some source code. Without further hesitation, I decided to scan whichever program I had at hand. This happened to be the Umbraco project. Of course we can't expect too much of the current version of the analyzer, but its functionality has been enough to allow me to write this small article.
Objective-C was invented by Brad Cox and Tom Love. It adds object-oriented programming to the C programming language and is used for Apple's operating systems. Objective-C source files have a .m extension and interface files have a .h extension. Objective-C derives its object syntax from Smalltalk and messages are enclosed in square brackets. It allows dynamic typing using the "id" keyword.
A glimpse at some of the new features for the C++ programming languages that will be introduced by the upcoming C++17 Standard.
This talk was given at the Munich C++ User Group Meetup.
Of complicacy of programming, or won't C# save us?PVS-Studio
Programming is hard. I hope no one would argue that. But the topic of new programming languages, or more exactly, search of a "silver bullet" is always highly popular with software developers. The most "trendy" topic currently is superiority of one programming language over the other. For instance, C# is "cooler" than C++. Although holy wars are not the reason why I'm writing this post, still it is a "sore subject" for me. Oh, come on, C#/lisp/F#/Haskell/... won't let you write a smart application that would interact with the outer world and that's all. All the elegance will disappear as soon as you decide to write some real soft and not a sample "in itself".
The document provides an overview of key concepts in C++, including:
1) C++ adds object-oriented programming capabilities to C while maintaining C's power and flexibility. It was created in 1979 to provide object-oriented programming features to C.
2) Object-oriented programming encourages breaking problems into constituent parts called objects that contain related instructions and data. The three main traits of OOP are encapsulation, polymorphism, and inheritance.
3) C++ supports both traditional and modern styles, with newer headers placed in the std namespace. Keywords like class, public, and virtual allow defining classes and controlling access to members. Functions can be overloaded if their signatures differ.
The preprocessor is a program that runs before compilation to modify the source code according to preprocessor directives. It reads include files and source code, replaces macros and constants with their definitions, and modifies code based on conditional preprocessor directives. The preprocessed output is then passed to the compiler.
The document discusses software design patterns and how they can help address common problems that arise during design. It describes three main categories of patterns - creational, structural, and behavioral - and provides examples of specific patterns like Singleton, Factory, Adapter, and Bridge. The key benefits of design patterns are that they provide proven, reusable solutions to general problems and help create flexible, modular designs that can more easily adapt to changes.
Templates and Exception Handling in C++Nimrita Koul
This document discusses templates and exception handling in C++. It provides an overview of templates, including why they are used for generic programming and how to define function and class templates. Exception handling in C++ uses try, catch, and throw blocks. The try block contains code that may throw exceptions, catch blocks handle specific exceptions, and throw explicitly throws an exception. The document contains examples of templates, exception handling, and derived class exceptions. It also discusses opportunities available at the School of CIT at Reva University.
Similar to Eclipse Code Recommenders @ MAJUG 2011 (20)
Setting up Automated Error Reporting for your Eclipse RCP App and Eclipse IDE...Marcel Bruch
Democamp slides show-casing how to set up automated error reporting for Eclipse and OSGI-based products. Check out the webinar [1] for details steps.
[1] https://www.youtube.com/watch?v=TDSv9Tm7hGA
This webinar discusses how to set up automated error reporting (AERI) for Eclipse plug-ins and RCP applications using Eclipse Neon. It provides an overview of how AERI worked in previous Eclipse releases and then demonstrates how to implement AERI either declaratively using plugin.xml or programmatically using Java code. It also explains how to set up a free error reporting service with Ctrlflow to receive and filter error reports from applications.
Because you can’t fix what you don’t know is broken...Marcel Bruch
This document provides an overview of automated error reporting. It discusses how errors are collected from users and analyzed before being sent to developers. Key steps include filtering duplicate and invalid errors, anonymizing sensitive data, and notifying committers through a web interface. Charts show the types of errors reported and projects most affected. The goal is to improve developer awareness of issues and speed up the bug fixing process.
This document discusses how crowdsourcing ideas and feedback within an integrated development environment (IDE) can speed up the software development process. It proposes collecting data on code usage patterns from developers and using that data to provide automated code completions, documentation, and help for common tasks. Error reports could also be crowdsourced and linked to existing solutions to help developers quickly resolve issues. The goal is to leverage collective intelligence and experience within the development community to reduce individual learning curves and speeds.
My talk about automated error reporting, code cities and other problems on various Eclipse Democamps in Winter 2014. Many images have been removed for legal reasons.
- Codetrails is a company that develops intelligent code completion tools for the Eclipse IDE using data mining techniques on large datasets of software engineering data.
- They developed Eclipse Code Recommenders which provides smarter code completion recommendations based on patterns found in existing code repositories rather than just the local project.
- Codetrails is working on crowdsourcing recommendations by having developers share anonymous usage data to further improve recommendations over time based on a large and diverse set of real-world code examples.
Being Amazon for Software Developers - IDE 2.0: Crowdsourcing mal anders #Jav...Marcel Bruch
This document discusses crowdsourcing knowledge from software developers to improve integrated development environments (IDEs). It notes that developers currently spend over half their time searching for information to complete tasks. The approach involves connecting IDEs to extract usage data like code completions and navigation to identify patterns and create recommendation models. This crowdsourced knowledge is then delivered back to developers through their IDE to help improve productivity. Examples discussed include smarter code completion, quick fixes, and enriched documentation by learning from millions of developer interactions.
Marcel Bruch is the project lead of Eclipse Code Recommenders and CEO of Codetrails. His passion is improving developers' work through intelligent tools that use data mining on software engineering data. The document discusses Code Recommenders 1.0 which analyzes source code and mines data to deliver recommendations to Eclipse users. It proposes moving to a crowd-sourced model in 2.0 where developers can share clicks, completions, and snippets to help the tool learn. Codetrails Connect and code snippets are also discussed as ways to help developers work more efficiently.
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxSitimaJohn
Ocean Lotus cyber threat actors represent a sophisticated, persistent, and politically motivated group that poses a significant risk to organizations and individuals in the Southeast Asian region. Their continuous evolution and adaptability underscore the need for robust cybersecurity measures and international cooperation to identify and mitigate the threats posed by such advanced persistent threat groups.
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.
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...alexjohnson7307
Predictive maintenance is a proactive approach that anticipates equipment failures before they happen. At the forefront of this innovative strategy is Artificial Intelligence (AI), which brings unprecedented precision and efficiency. AI in predictive maintenance is transforming industries by reducing downtime, minimizing costs, and enhancing productivity.
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.
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Tatiana Kojar
Skybuffer AI, built on the robust SAP Business Technology Platform (SAP BTP), is the latest and most advanced version of our AI development, reaffirming our commitment to delivering top-tier AI solutions. Skybuffer AI harnesses all the innovative capabilities of the SAP BTP in the AI domain, from Conversational AI to cutting-edge Generative AI and Retrieval-Augmented Generation (RAG). It also helps SAP customers safeguard their investments into SAP Conversational AI and ensure a seamless, one-click transition to SAP Business AI.
With Skybuffer AI, various AI models can be integrated into a single communication channel such as Microsoft Teams. This integration empowers business users with insights drawn from SAP backend systems, enterprise documents, and the expansive knowledge of Generative AI. And the best part of it is that it is all managed through our intuitive no-code Action Server interface, requiring no extensive coding knowledge and making the advanced AI accessible to more users.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
Digital Marketing Trends in 2024 | Guide for Staying AheadWask
https://www.wask.co/ebooks/digital-marketing-trends-in-2024
Feeling lost in the digital marketing whirlwind of 2024? Technology is changing, consumer habits are evolving, and staying ahead of the curve feels like a never-ending pursuit. This e-book is your compass. Dive into actionable insights to handle the complexities of modern marketing. From hyper-personalization to the power of user-generated content, learn how to build long-term relationships with your audience and unlock the secrets to success in the ever-shifting digital landscape.
A Comprehensive Guide to DeFi Development Services in 2024Intelisync
DeFi represents a paradigm shift in the financial industry. Instead of relying on traditional, centralized institutions like banks, DeFi leverages blockchain technology to create a decentralized network of financial services. This means that financial transactions can occur directly between parties, without intermediaries, using smart contracts on platforms like Ethereum.
In 2024, we are witnessing an explosion of new DeFi projects and protocols, each pushing the boundaries of what’s possible in finance.
In summary, DeFi in 2024 is not just a trend; it’s a revolution that democratizes finance, enhances security and transparency, and fosters continuous innovation. As we proceed through this presentation, we'll explore the various components and services of DeFi in detail, shedding light on how they are transforming the financial landscape.
At Intelisync, we specialize in providing comprehensive DeFi development services tailored to meet the unique needs of our clients. From smart contract development to dApp creation and security audits, we ensure that your DeFi project is built with innovation, security, and scalability in mind. Trust Intelisync to guide you through the intricate landscape of decentralized finance and unlock the full potential of blockchain technology.
Ready to take your DeFi project to the next level? Partner with Intelisync for expert DeFi development services today!
Nunit vs XUnit vs MSTest Differences Between These Unit Testing Frameworks.pdfflufftailshop
When it comes to unit testing in the .NET ecosystem, developers have a wide range of options available. Among the most popular choices are NUnit, XUnit, and MSTest. These unit testing frameworks provide essential tools and features to help ensure the quality and reliability of code. However, understanding the differences between these frameworks is crucial for selecting the most suitable one for your projects.
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.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
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.
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.
Deep Dive: Getting Funded with Jason Jason Lemkin Founder & CEO @ SaaStr
Eclipse Code Recommenders @ MAJUG 2011
1. Eclipse Code
Recommenders
IDE
2.0:
Leveraging
the
Wisdom
of
the
So:ware
Engineering
Crowds eim
nh
tw:
@MarcelBruch an
g+:
+Marcel
Bruch up
M
ro
r
G
se
a
U
Jav
5. Code
Comple+on…
@Override
protected Control createDialogArea(final Composite parent) {
Composite container = (Composite) super.createDialogArea(parent);
swtTextWidget = new Text(container, SWT.BORDER);
swtTextWidget.|
return container;
}
What
does
the
developer
need,
i.e.,
which
methods
should
the
code
compleKon
present
to
the
user?
5
9. Code
Comple+on…
@Override
protected Control createDialogArea(final Composite parent) {
final Composite container = (Composite) super.createDialogArea(parent);
swtTextWidget = new Text(container, SWT.BORDER);
swtTextWidget.|
return container;
}
What
does
the
developer
need,
i.e.,
which
methods
should
the
code
compleKon
present
to
the
user?
8
13. How
it
works
-‐
in
a
nutshell
Framework
Example
Example
...
ApplicaKon
1 ApplicaKon
n
10
14. How
it
works
-‐
in
a
nutshell
Framework
Example
Example
...
ApplicaKon
1 ApplicaKon
n
extract
facts
about
how
the
framework
is
reused
«extends:A» «extends:A»
«overrides:A.b» ... «overrides:A.d»
«calls:B.c» «calls:B.c»
… …
10
15. How
it
works
-‐
in
a
nutshell
Framework
Example
Example
...
ApplicaKon
1 ApplicaKon
n
extract
facts
about
how
the
framework
is
reused
«extends:A» «extends:A»
«overrides:A.b» ... «overrides:A.d»
«calls:B.c» «calls:B.c»
… …
10
16. How
it
works
-‐
in
a
nutshell
Framework
If
you
extend
A,
Example
Example
you
should
... call
B.c
ApplicaKon
1 ApplicaKon
n
extract
facts
about
how
the
framework
is
reused
«extends:A» «extends:A»
«overrides:A.b» ... «overrides:A.d»
«calls:B.c» «calls:B.c»
… …
10
17. From
code
to
models...
()
ts
en ()
nt Ok
Co rm
te fo () t() t() t()
ea er t> ex on ex
cr .p ni tT tF tT
e. ge <i se se ge
ag Pa t. t. t. t.
class Example extends Page { :P n: ex ex ex ex ..
Text t; in i T T T T .
@Override 1 0 1 1 0 0 …
void createContents() {
t = new Text();
t.setText(..);
..
} 0 1 0 0 0 1 …
} … … … … … … …
11
18. From
code
to
models...
()
ts
en ()
nt Ok
Co rm
te fo () t() t() t()
ea er t> ex on ex
cr .p ni tT tF tT
e. ge <i se se ge
ag Pa t. t. t. t.
class Example extends Page { :P n: ex ex ex ex ..
Text t; in i T T T T .
@Override 1 0 1 1 0 0 …
void performOk() {
t.getText();
..
} 0 1 0 0 0 1 …
} … … … … … … …
12
19. From
models
to
recommenda+ons...
()
ts
en ()
nt Ok
Co rm
class MyPage extends Page { te fo () t() t() t()
ea er t> ex on ex
Text t; cr .p ni tT tF tT
@Override e. ge <i se se ge
ag Pa t. t. t. t.
void createContents() { :P n: ex ex ex ex ..
t = new Text(); in i T T T T .
t.|<^space> 1 0 1 ? ? ? …
}
}
13
20. From
models
to
recommenda+ons...
()
ts
en ()
nt Ok
Co rm
te fo () t() t() t()
ea er t> ex on ex
cr .p ni tT tF tT
e. ge <i se se ge
ag Pa t. t. t. t.
:P n: ex ex ex ex ..
in i T T T T .
1 0 1 1 1 0 …
1 0 1 0 0 0 …
1 0 1 1 0 0 …
0 1 0 0 0 1 …
… … … … … … …
1 0 1 ? ? ? …
14
21. From
models
to
recommenda+ons...
()
ts
en ()
nt Ok
Co rm
te fo () t() t() t()
ea er t> ex on ex
cr .p ni tT tF tT
e. ge <i se se ge
ag Pa t. t. t. t.
:P n: ex ex ex ex ..
in i T T T T .
1 0 1 1 1 0 …
1 0 1 0 0 0 …
1 0 1 1 0 0 …
0 1 0 0 0 1 …
… … … … … … …
1 0 1 ⅔
? ? ? …
14
22. From
models
to
recommenda+ons...
()
ts
en ()
nt Ok
Co rm
te fo () t() t() t()
ea er t> ex on ex
cr .p ni tT tF tT
e. ge <i se se ge
ag Pa t. t. t. t.
:P n: ex ex ex ex ..
in i T T T T .
1 0 1 1 1 0 …
1 0 1 0 0 0 …
1 0 1 1 0 0 …
0 1 0 0 0 1 …
… … … … … … …
1 0 1 ⅔
? ⅓
? ? …
14
23. From
models
to
recommenda+ons...
()
ts
en ()
nt Ok
Co rm
te fo () t() t() t()
ea er t> ex on ex
cr .p ni tT tF tT
e. ge <i se se ge
ag Pa t. t. t. t.
:P n: ex ex ex ex ..
in i T T T T .
1 0 1 1 1 0 …
1 0 1 0 0 0 …
1 0 1 1 0 0 …
0 1 0 0 0 1 …
… … … … … … …
1 0 1 ⅔
? ⅓
? 0
? …
14
25. How
to
obtain
an
instance
of...
public class MyView extends ViewPart {
public void updateMessage(final String newMessage) {
// How do I get an instance of IStatusLineManager?
final IStatusLineManager manager = |
manager.setMessage(newMessage);
}
There is no trivial solution anymore.
Again, what should code completion return?
26. What
we
need...
!"#$%&'(
5#(!"#$*"(#67
public void updateMessage(final String newMessage) {
// How do I get an instance of
)!"#$*"(#
final IStatusLineManager manager =
this
.getViewSite() 5#(+,-./8&'167
.getActionBars()
.getStatusLineManager();
manager.setMessage(newMessage); )+,-./0&'1
}
5#(*(&(213"/#4&/&5#'67
)*(&(213"/#4&/&5#'
17
28. However,
someEmes
you
get...
Here,
implicit
user
feedbacks
(“clicks”)
will
help
to
find
the
nt...
right
(read
“the
most
commonly
used”)
paths. me
e lop
ev
In
d
33. Tools
Outline
Intelligent
Code
CompleEon Smart
Bug
DetecEon
What
have
I
missed?
Extended
DocumentaEon Code
Example
Recommender
How
do
I
get
an
instance
of…?
20
34. Tools
Outline
Intelligent
Code
CompleEon Smart
Bug
DetecEon
What
have
I
missed?
Stacktrace
Search
Engine
Extended
DocumentaEon Code
Example
Recommender
What
caused
that
stacktrace?
How
do
I
get
an
instance
of…?
20
35. Tools
Outline
Intelligent
Code
CompleEon Smart
Bug
DetecEon
What
have
I
missed?
Stacktrace
Search
Engine
Extended
DocumentaEon Code
Example
Recommender
What
caused
that
stacktrace?
How
do
I
get
an
instance
of…?
20
36. Tools
Outline
Intelligent
Code
CompleEon Smart
Bug
DetecEon
What
have
I
missed?
Stacktrace
Search
Engine
Extended
DocumentaEon Code
Example
Recommender
x=
What
caused
that
stacktrace?
How
do
I
get
an
instance
of…?
20
37. “The
good
ones
in
the
crock,
the
bad
ones
in…
the
problem
view.”
SMART
BUG
DETECTION
–
DRIVEN
BY
REAL
USAGES
40. ...and
a
lengthy
stacktrace
org.eclipse.core.runEme.AsserEonFailedExcepEon:
null
argument:
at
org.eclipse.core.runEme.Assert.isNotNull(Assert.java:85)
at
org.eclipse.core.runEme.Assert.isNotNull(Assert.java:73)
at
org.eclipse.jface.wizard.Wizard.createPageControls(Wizard.java:174)
at
org.eclipse.jface.wizard.WizardDialog.createPageControls(WizardDialog.java:734)
at
org.eclipse.jface.wizard.WizardDialog.setWizard(WizardDialog.java:1162)
at
org.eclipse.jface.wizard.WizardDialog.updateForPage(WizardDialog.java:1221)
at
org.eclipse.jface.wizard.WizardDialog.access$4(WizardDialog.java:1218)
at
org.eclipse.jface.wizard.WizardDialog$6.run(WizardDialog.java:1207)
at
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at
org.eclipse.jface.wizard.WizardDialog.showPage(WizardDialog.java:1205)
at
org.eclipse.ui.internal.dialogs.ImportExportPage.treeDoubleClicked(ImportExportPage.java)
at
org.eclipse.ui.internal.dialogs.ImportPage$2.doubleClick(ImportPage.java:72)
at
org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:824)
at
org.eclipse.core.runEme.SafeRunner.run(SafeRunner.java:42)
at
org.eclipse.ui.internal.JFaceUEl$1.run(JFaceUEl.java:49)
at
org.eclipse.jface.uEl.SafeRunnable.run(SafeRunnable.java:175)
at
org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:822)
at
org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java)
at
org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java)
... 24
50. Just
one
formula…
0 .5 .9 1
x = {observed method calls on a variable}
E(x) = {exact similar usages for variables of type x in the code base}
A(x) = {almost similar usages, i.e., x+1 method call}
29
53. “Developers
who
bought
overwrote
this
method
typically
also
overwrote...”
USAGE-‐DRIVEN
JAVADOC
54. In
good
documenta+on
we
trust...
/**
* Rollsback the transaction if any and clears different lists to
* start with an empty resource again.
* Note that the super.doUnload is not called because that clears
* the list resulting in all kinds of undesirable inverseremoves.
*/
@Override
protected void doUnload() {
super.doUnload();
}
33
55. In
good
documenta+on
we
trust...
/**
* Rollsback the transaction if any and clears different lists to
* start with an empty resource again.
* Note that the super.doUnload is not called because that clears
* the list resulting in all kinds of undesirable inverseremoves.
*/
@Override
protected void doUnload() {
super.doUnload();
}
33
56. In
good
documenta+on
we
trust...
/**
* Rollsback the transaction if any and clears different lists to
* start with an empty resource again.
* Note that the super.doUnload is not called because that clears
* the list resulting in all kinds of undesirable inverseremoves.
*/
@Override
protected void doUnload() {
super.doUnload();
}
No?
Are
you
sure?
33
57. In
good documenta+on
we
trust...
good
/**
* Rollsback the transaction if any and clears different lists to
* start with an empty resource again.
* Note that the super.doUnload is not called because that clears
* the list resulting in all kinds of undesirable inverseremoves.
*/
@Override
protected void doUnload() {
super.doUnload();
}
No?
Are
you
sure?
33
59. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
60. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
61. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
62. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
63. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
64. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
65. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
34
66. Genera+ng
high-‐quality API
documenta+on
high-‐quality
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
35
67. Genera+ng
high-‐quality
API
documenta+on
/**
* The number of questions.
*/
private int numberOfQuestions;
/**
* Sets the number of questions.
*
* @param numberOfQuestions the number of questions
* @throws IllegalArgumentException the illegal argument exception
*/
public void setNumberOfQuestions(int numberOfQuestions)
throws IllegalArgumentException {
if (numberOfQuestions < 0) {
throw new IllegalArgumentException("numberOfQuestions < 0");
}
this.numberOfQuestions = numberOfQuestions;
}
35
69. What
people
say
about
JAutodoc...
User: Anonymous Rating: 9 2009-08-02 11:32:37
Wow exactly what I needed!
36
70. What
people
say
about
JAutodoc...
User: Anonymous Rating: 9 2009-08-02 11:32:37
Wow exactly what I needed!
User: Anonymous Rating: 9 2009-02-13 19:58:32
Thank you... this plugin rocks!
36
71. What
people
say
about
JAutodoc...
User: Anonymous Rating: 9 2009-08-02 11:32:37
Wow exactly what I needed!
User: Anonymous Rating: 9 2009-02-13 19:58:32
Thank you... this plugin rocks!
User: Anonymous Rating: 9 2009-02-13 19:58:32
Works perfectly. Smarter than I expected!
36
72. What
people
say
about
JAutodoc...
User: Anonymous Rating: 9 2009-08-02 11:32:37
Wow exactly what I needed!
User: Anonymous Rating: 9 2009-02-13 19:58:32
Thank you... this plugin rocks!
User: Anonymous Rating: 9 2009-02-13 19:58:32
Works perfectly. Smarter than I expected!
WTH?
What
did
you
expect?!
36
74. Some
facts
about
the
documentaEon
of
overridable
methods
Overridable 2.074
Overridden 623
0 700 1400 2100
38
75. What
clients
do
with
your
API...
Overridden 623
Documented * 155
0 325 650
*
documented
as
overridable
by
using
phrases
like
“clients
may/should/must
override/extend
this
method” 39
76. What
clients
do
with
your
API...
Overridden 623
Documented * 155 468
0 325 650
*
documented
as
overridable
by
using
phrases
like
“clients
may/should/must
override/extend
this
method” 39
77. What
documenta+on
would
you
expect
when
subclassing
Dialog?
package org.eclipse.recommenders.examples.demo;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.window.IShellProvider;
public class MyDialog extends Dialog {
protected MyDialog(final IShellProvider parentShell) {
super(parentShell);
}
}
40
79. What
Javadoc
gives
you...
org.eclipse.jface.dialogs.Dialog
A
dialog
is
a
specialized
window
used
for
narrow-‐focused
communicaEon
with
the
user.
41
80. What
Javadoc
gives
you...
org.eclipse.jface.dialogs.Dialog
A
dialog
is
a
specialized
window
used
for
narrow-‐focused
communicaEon
with
the
user.
Dialogs
are
usually
modal.
Consequently,
it
is
generally
bad
pracEce
to
open
a
dialog
without
a
parent.
A
modal
dialog
without
a
parent
is
not
prevented
from
disappearing
behind
the
applicaEon's
other
windows,
making
it
very
confusing
for
the
user.
If
there
is
more
than
one
modal
dialog
is
open
the
second
one
should
be
parented
off
of
the
shell
of
the
first
one
otherwise
it
is
possible
that
the
OS
will
cus
to
the
first
dialog
potenEally
blocking
the
UI.
41
81. What
Javadoc
gives
you...
org.eclipse.jface.dialogs.Dialog
A
dialog
is
a
specialized
window
used
for
narrow-‐focused
communicaEon
with
the
user.
Dialogs
are
usually
modal.
Consequently,
it
is
generally
bad
pracEce
to
open
a
dialog
without
a
parent.
A
modal
dialog
without
a
parent
is
not
prevented
from
But what are the
disappearing
behind
the
applicaEon's
other
windows,
making
it
very
confusing
for
the
user.
hot-spots of Dialog?
If
there
is
more
than
one
modal
dialog
is
open
the
second
one
should
be
parented
off
of
the
shell
of
the
first
one
otherwise
it
is
possible
that
the
OS
will
cus
to
the
first
dialog
potenEally
blocking
the
UI.
41
95. 20
Number
for
koders.com
in
2009
according
to
“Analyzing
and
mining
a
code
search
engine
usage
log”
h`p://dx.doi.org/10.1007/s10664-‐010-‐9144-‐6 53
96. Naviga+ng
the
API
jungle…
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
54
97. Naviga+ng
the
API
jungle…
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
How
to
solve
String
-‐>
ASTParser
-‐>
CompilaKonUnit?
54
106. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
107. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
108. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
Query
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
109. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
Query
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
110. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
Query
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
111. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
Query
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
112. Example
code
search
engine
public class MyJavaEditor extends EditorPart {
private CompilationUnit createCompilationUnit(String source) {
// how can I create and configure an ASTParser?
ASTParser parser = null;
parser.setSource(source.toCharArray());
Query
// ASTParser --> CompilationUnit: how?
CompilationUnit cu = null;
return cu;
}
57
113. Sample
search
query
Extracted from MyJavaEditor.createCompilationUnit():
--- data ---
extends: org.eclipse.ui.EditorPart
uses: org.eclipse.jdt.core.CompilationUnit
uses: org.eclipse.jdt.core.ASTParser
calls: org.eclipse.jdt.core.ASTParser.setSource(char[])
--- requested ---
def: org.eclipse.jdt.core.CompilationUnit (def=null)
def: org.eclipse.jdt.core.ASTParser (def=null)
.
t..
m en
elop
dev
In
58
114. “Why
is
Google
Codesearch
not
‘google
for
code
search’?
”
LEVERAGING
USER
FEEDBACK
TO
IMPROVE
CODE
SEARCH
ENGINES
137. So
far
we
have…
Intelligent
Code
CompleEon
69
138. So
far
we
have…
Intelligent
Code
CompleEon Extended
DocumentaEon
69
139. So
far
we
have…
Intelligent
Code
CompleEon Extended
DocumentaEon
Code
Example
Recommender
How
do
I
get
an
instance
of…?
69
140. So
far
we
have…
Intelligent
Code
CompleEon Extended
DocumentaEon
Smart
Bug
DetecEon Code
Example
Recommender
What
have
I
missed? How
do
I
get
an
instance
of…?
69
146. How
can
we
fix
that?
Don’t
stacktraces
share
some
commonali+es?
74
147. How
can
we
fix
that?
Don’t
stacktraces
share
some
commonali+es?
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3884)
at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.SWT.error(SWT.java:3770)
at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355)
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317)
at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
74
148. How
can
we
fix
that?
Don’t
stacktraces
share
some
commonali+es?
excepEon
type
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3884)
at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.SWT.error(SWT.java:3770)
at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355)
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317)
at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
74
149. How
can
we
fix
that?
Don’t
stacktraces
share
some
commonali+es?
excepEon
type message
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3884)
at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.SWT.error(SWT.java:3770)
at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355)
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317)
at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
74
150. How
can
we
fix
that?
Don’t
stacktraces
share
some
commonali+es?
excepEon
type message
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3884)
at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.SWT.error(SWT.java:3770)
at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355)
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317)
at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
stackframes
74
151. How
can
we
fix
that?
Don’t
stacktraces
share
some
commonali+es?
excepEon
type message
org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:3884)
at org.eclipse.swt.SWT.error(SWT.java:3799)
at org.eclipse.swt.SWT.error(SWT.java:3770)
at org.eclipse.swt.widgets.Widget.error(Widget.java:463)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:355)
at org.eclipse.swt.widgets.ProgressBar.setSelection(ProgressBar.java:317)
at org.eclipselabs.cr.stacktraces.demo.ThreadDemo$1.run(Unknown Source)
at java.lang.Thread.run(Thread.java:619)
stackframes other
informaEon
74
185. Summary
Intelligent
Code
CompleEon Usage-‐Driven
Javadocs
Stacktrace
Search
Engine
Smart
Bug
DetecEon Code
Example
Recommender
x=
What
caused
that
stacktrace?
What
have
I
missed? How
do
I
get
an
instance
of…?
96
187. Where
does
IDE
2.0
improve
the
process?
Edit Code
Testing
Comprehend Task
Handling
Interruptions
…
98
188. Contributors
so
far…
Jan
Kassens,
Peter
Schroeder,
Daniel
Glöckner,
Maik
Görtz,
Johannes
Lerch,
Johannes
Born,
Mohsen
Parisay,
Andreas
Sewe,
SebasKan
Ahlfeld,
SebasKan
Kasten,
Daniel
Staesche,
David
Kalnischkies,
SebasKan
Wörner,
Boyan
Yurukov,
Jan
Stolzenburg,
Nico
Wombacher,
Dirk
Kröhan,
Florianrian
Jakob,
Julius
Rückert,
Steffen
Remus,
Christopher
Mann,
Stefan
Henss,
Andreas
Kaluza,
Nikolay
Shindov,
Michael
Novotny,
KrisKn
Arand,
Sinem
Emeröz,
Michael
Kutschke,
SebasKan
Proksch,
Tomasz
Kalbarczyk,
Marko
MarKn,
Sheip
Dargutev,
David
Schuld,
Jens
Krause,
KrisKjan
Madunic,
Daniel
Brandtner,
Roman
GeSo,
ChrisKan
Kilb,
Johannes
Kastl,
Dennis
Sänger,
Annie
Liu,
Markus
Migenda,
Tjark
Vandommele,
SebasKan
Denel,
Florian
Nöll,
Gary
Fritz,
Dennis
Siebert,
Peter
Sinzig,
Laura
Altmüller,
Paul
Schatygin,
Jan-‐Michael
Heller,
Minh
Hoang
Nguyen,
Sascha
Nordquist,
Paul
Emmanuel
Faidherbe,
...
99
190. Q
&
A
Intelligent
Code
CompleEon Usage-‐Driven
Javadocs
Stacktrace
Search
Engine
Smart
Bug
DetecEon Code
Example
Recommender
What
caused
that
stacktrace?
What
have
I
missed? How
do
I
get
an
instance
of…?
101