Let's make a contract: the art of designing a Java APIMario Fusco
An API is what developers use to achieve some task. More precisely it establishes a contract between them and the designers of the software exposing its services through that API. In this sense we're all API designers: our software doesn't work in isolation, but becomes useful only when it interacts with other software written by other developers. When writing software we're not only consumers, but also providers of one or more API and that's why every developer should know the features of a good API. During this presentation we will go through real-world examples, also taken from the standard Java API, of good and bad API and comment them in order to show the dos and don'ts of API design. More in general we will discuss the characteristics of an easy and pleasant to use API, like consistency, discoverability and understandability, together with some basic concepts like the principle of least astonishment, and find out how to achieve them.
Object Oriented programming in Python.
Originally part 3 of a 4 lectures seminar for the Networking class of the Computer Science course at the University of Parma
Let's make a contract: the art of designing a Java APIMario Fusco
An API is what developers use to achieve some task. More precisely it establishes a contract between them and the designers of the software exposing its services through that API. In this sense we're all API designers: our software doesn't work in isolation, but becomes useful only when it interacts with other software written by other developers. When writing software we're not only consumers, but also providers of one or more API and that's why every developer should know the features of a good API. During this presentation we will go through real-world examples, also taken from the standard Java API, of good and bad API and comment them in order to show the dos and don'ts of API design. More in general we will discuss the characteristics of an easy and pleasant to use API, like consistency, discoverability and understandability, together with some basic concepts like the principle of least astonishment, and find out how to achieve them.
Object Oriented programming in Python.
Originally part 3 of a 4 lectures seminar for the Networking class of the Computer Science course at the University of Parma
A brief look at the new features coming in Javascript ES6:
- Scope and control
- Iterators and Generators
- Collections
- Typed objects
- Direct proxies
- Template strings
- API improvements
- Modularity
In this talk, Adrian Kashivskyy, Netguru iOS Developer, digs into rarely discussed Swift features, such as literal convertibles, interpolation convertibles, pattern matching, reflection and advanced Objective-C bridging.
Introduction to ad-3.4, an automatic differentiation library in Haskellnebuta
Haskellの自動微分ライブラリ Ad-3.4 の紹介(の試み) If you don't see 21 slides in this presentation, try this one (re-uploaded): http://www.slideshare.net/nebuta/130329-ad-by-ekmett
OOP and FP - Become a Better ProgrammerMario Fusco
The story of Simon, an experienced OOP Java developer, exposed to the new lambda features of JDK 8. His friend Mario, a long-bearded FP geek, will try to convince him that FP can help him develop more readable and maintainable code. A journey into the discovery of the main new feature - lambda expressions - of JDK 8
A brief look at the new features coming in Javascript ES6:
- Scope and control
- Iterators and Generators
- Collections
- Typed objects
- Direct proxies
- Template strings
- API improvements
- Modularity
In this talk, Adrian Kashivskyy, Netguru iOS Developer, digs into rarely discussed Swift features, such as literal convertibles, interpolation convertibles, pattern matching, reflection and advanced Objective-C bridging.
Introduction to ad-3.4, an automatic differentiation library in Haskellnebuta
Haskellの自動微分ライブラリ Ad-3.4 の紹介(の試み) If you don't see 21 slides in this presentation, try this one (re-uploaded): http://www.slideshare.net/nebuta/130329-ad-by-ekmett
OOP and FP - Become a Better ProgrammerMario Fusco
The story of Simon, an experienced OOP Java developer, exposed to the new lambda features of JDK 8. His friend Mario, a long-bearded FP geek, will try to convince him that FP can help him develop more readable and maintainable code. A journey into the discovery of the main new feature - lambda expressions - of JDK 8
Game Design and Development Workshop Day 1Troy Miles
This course teaches you how to build awesome video games using Cocos2Dx. Cocos2Dx is a feature packed, free game development engine. It is cross platform, high performance, and supports three languages: C++, Lua and JavaScript. With it, you can write games for iOS, Android, Windows, Mac, and the Web. It is nothing short of amazing and this course teaches you how to use it. We will program Cocos2Dx in JavaScript, but this is not a programming class. If you don't know how to write code in JavaScript or some other curly brace language, this is not the course for you. For those whose JavaScript is rusty, we will do quick language overview. Don't let the JavaScript part fool you. Cocos2Dx is built from highly optimized C++ and OpenGL, JavaScript is used for game logic, not graphics. Our games will run at a super fast, 60 frames a second.
Sperasoft talks about several important aspects of ECMAScript6 - language widely used for client-side scripting on the web, in the form of several well-known implementations such as JavaScript, JScript and ActionScript.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/254wkpw.
Aaron Bedra focuses on describing a system as a series of models that can be used to systematically and automatically generate input data and ensure that a code is behaving as expected. Bedra discusses property based testing and how it can help one build more resilient systems and even reduce the time needed to maintain a test suite. Filmed at qconlondon.com.
Aaron Bedra is Chief Security Officer at eligible.com. He is the creator of Repsheet, an open source threat intelligence framework. Bedra is the co-author of Programming Clojure, 2nd Edition and a frequent contributor to open source software.
JavaScript - An Introduction is a beginner's guide to JavaScript. It starts with very basic level and goes to intermediate level. You'll be introduced with every language constructs, Event handling, Form handling and AJAX which is supported by JavaScript with XMLHttpRequest object. This XHR object is discussed in enough detail so that you can understand how the underlying AJAX functionality works in jQuery. At the end it discusses advance concepts and library build on/around JavaScript.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
2. ⚬ What is ECMAScript 6?
⚬ Brief history
⚬ A lot of new features
⚬ Conclusions
We will talk about
3. ECMAScript 6 is new standard of ECMA International.
Scheduled to be released on June 2015.
The project name is Harmony.
What is ES6?
4. ECMAScript is a standard of scripting languages.
Actually, it is the syntax.
JavaScript is an implementation of standard by specific
browsers.
There are many others implementations:
JScript, ActionScript, Ejscript, Objective-J, Nashorn…
All those very similar and depend on the application
that executes them.
Differences between ES & JS
5. ⚬ 1995 - LiveScript was born by Brendan Eich of Netscape (in 10
days!).
In the end of year, the name changed to JavaScript in order to
attract Java developers.
⚬ 1996 - Microsoft came and copied JavaScript for supporting of IE.
It was called JScript. Meanwhile, JavaScript was delivered to ECMA
International in purpose to be a standard of scripting languages.
⚬ 1997 - JavaScript was adopted by ECMA as ECMA-262 standard.
⚬ 1999 - Main version was ECMAScript 3.
Until this version, everything was fine...
Brief History
6. ⚬ 2000 ~ 2007 - ECMAScript 4 planned to provide a lot of complex
features. Microsoft, Yahoo & Google refused and started to develop
ECMAScript 3.1.
⚬ 2008 - Brendan Eich was back and announced that Ecma TC39
would focus work on the ECMAScript 3.1.
It was decided:
1. ECMAScript 3.1 will rename to ECMAScript 5.
2. ECMAScript 4 will rename to ECMAScript 6.
⚬ 2009 - ECMAScript 5 was published.
⚬ 2015 - ECMAScript 6 will be published.
Brief History
8. A new and short way to create an anonymous function.
Arrow function created to be more semantic and readable.
Example of using:
Important issues:
⚬ It is not newable (will throw an error when you try..)
⚬ It can be used in expressions and in statements.
⚬ Fixed ‘this’ issue!
Arrows
var square = x => x * x;
9. The following code will not work (‘this’ will be the Window object):
Arrows - The meaning of ‘this’ issue
var timer = function () {
this.seconds = 0;
this.printSeconds = function () {
console.log(this.seconds);
};
setInterval(function () {
this.seconds++; // We cannot call to seconds field here
this.printSeconds(); // We cannot call to printSeconds here
}, 1000);
};
var myTimerInstance = new timer();
10. The solution based on arrow function:
Arrows - The meaning of ‘this’ issue
var fixedTimer = function () {
this.seconds = 0;
this.printSeconds = () => console.log(this.seconds);
setInterval(() => {
this.seconds++;
this.printSeconds();
}, 1000);
};
var myFixedTimerInstance = new fixedTimer();
11. Block-level Scope
Until now, all the variables was global. Blame the hoisting.
function getMyValueByCondition(condition) {
// myValue will be declared here and will set to be undefined.
if (condition) {
var myValue = "My Value";
return myValue;
} else {
// myValue will be undefined here.
}
// myValue will be undefined here.
}
12. Block-level Scope - let
Now, we can create a local variable by ‘let’ keyword!
let enables to block scoping.
Important issues:
⚬ Only one declaration in each scope (or you will get a syntax error).
⚬ Therefore, It is unusual to use let in the global scope.
⚬ Very useful for loops!
Example of using:
let x = 100;
var x = 'String'; // A syntax error will appear
13. Block-level Scope - const
Similar to ‘let’ keyword, we can declare now on a constants!
The keyword is ‘const’.
Important to note that:
⚬ Constant must be initialized once, and it cannot be changed.
⚬ Constant is a valid only for the current scope! (just like ‘let’).
Example of using:
const PI = 3.1415926536;
PI = 0; // A syntax error will appear
14. Default parameters allow parameters to be initialized with default values.
That is - the value will be defaulted in a case of:
⚬ No value was passed.
⚬ Undefined was passed.
Default Parameters
function getRoot(number, root = 2) {
return Math.pow(number, 1 / root);
}
// getRoot(49) will be 7.
// getRoot(8,3) will be 2.
15. Template Strings is a new syntax for the old strings.
It deals with the following problems:
⚬ Supporting in multiline strings has never been before.
⚬ Ability to separate parts of the string for values in variables.
⚬ Transformation of a string into html is not really safe.
Template Strings solve all those issues.
The syntax is very simple, and marked by backticks ( ` ).
Template Strings
let templateString = `Hello
World!`;
16. We can use substitutions on Template Strings:
Also, we can use tags on Template Strings:
Template Strings - Substitutions & Tags
let degrees = 90;
let templateString = `Conversion of 90 degrees into radians is: ${(degrees * Math.PI) / 180}`;
let printOfResultOnly = function (str, degrees, result) {
// str will be ["Conversion of ", " degrees into radians is:", ""]
return result;
};
templateString = printOfResultOnly`Conversion: ${degrees} degrees into radians is: ${(degrees
* Math.PI) / 180}`;
17. Classes are a better syntax over the prototype object.
What we will get in the bundle?
⚬ Creation of instances via ‘new’ keyword.
⚬ Encapsulating fields and functions that relevant the class.
⚬ Intuitive constructor is exist.
⚬ Even extend and override a methods!
⚬ Defining of static members.
⚬ Note that we cannot define private members.
Classes
class Animal {
constructor(age = 0) {
this.age = age;
}
eat() {}
}
18. Example of inheritance:
Classes
class Cat extends Animal {
constructor(age, name) {
super(age);
this.name = name;
}
eat() {
return `I am ${this.name}, and i love milk!`;
}
}
let kitty = new Cat(5, 'Kitty');
19. Until now, were two main approaches for modules:
⚬ CommonJS - Compact API that designed for synchronized loading.
It focuses in the server side.
Motivation: Simple and clear syntax.
Main Implementations: Node.js, RingoJS.
⚬ Asynchronous Module Definition - More complex API that designed for
asynchronous loading.
It focuses in the client side.
Motivation: Dependency management.
Main Implementation: RequireJS.
Modules
20. Modules are even more simple than CommonJS together with the
supporting in asynchronous loading of AMD!
There are two new keywords: export and import.
Example of using:
Modules
// math.js
export const PI = Math.PI;
export function square(x) {
return x*x;
}
// app.js
import {PI, square} from 'math'; // Alternatively, could be: import * as math from ‘math’
console.log(square(PI)); // Will be PI^2
21. Rest parameters is a better alternative to arguments.
The rest parameter is an array that marked by ‘...’ (three points).
All parameters that will be delivered from this location, will be in this array.
Example of using:
Rest Parameters
let myFunction = function(x, ...parametersThatIDontCare) {
// parametersThatIDontCare = [true, 'Cool String']
return x * parametersThatIDontCare.length;
};
myFunction(10, true, 'Cool String'); // Will be 20
22. Spread operator allows to deliver an array, and separate it to multiple
parameters in the declaration of function.
It should be inverse of rest parameters.
Example of using:
Spread Operator
let myFunction = function(str, x, y, z) {
return str + (x+y+z);
};
myFunction('The sum is:', ...[1, 10, 100]);
23. Destructuring is way to select a specific arguments from array or object
into variables. Actually, destructuring is matching between two collections
by different patterns.
Example of using:
Destructuring
let [a, , , b] = [1, 3, 5, 9];
console.log('a + b is: ' + (a + b)); // Will be 10
let { one, two, three: [, threeValue] } = {
one: 1,
two: 2,
three: [4, 3]
};
console.log('one + two + three is: ' + (one + two + threeValue)); // Will be 6
let [d, c] = [c, d]; // Swap the values without temp!
24. Symbol is new primitive type that used as private reference to property.
Symbols are unique!
The file must hold this symbol to access the property of object.
Example of using:
Symbols
var privateProperty = Symbol('Description: Private property');
var object = {};
object[privateProperty] = 'My Private';
console.log(privateProperty); // Is a symbol
console.log(object[privateProperty]); // Will print 'My Private'
25. Map is dictionary data structure that stores pairs of key and value.
Difference from object, now the key can be an object!
Map provides an API with: set, get, clear, forEach, size, and more!
Example of using:
Maps
let objectKey = {value: 100};
let map = new Map();
map.set('stringKey', 'The value is ');
map.set(objectKey, objectKey.value);
console.log(map.get('stringKey') + map.get(objectKey)); // Will be 'The value is 100'
console.log('Map size: ' + map.size); // Will be 2
26. Set is data structure of collection of values.
It wraps the old object with better API.
It provides an API with: add, has, clear, forEach, size, and more!
Example of using:
Sets
let mySetList = new Set();
mySetList.add('First').add('Second');
mySetList.add(true);
console.log(mySetList); // Will be {"First", "Second", true}
console.log(mySetList.has('Second')); // Will be true
27. Along all main features, little changes in numbers were made.
Until now, the methods isFinite and isNaN could get numbers as string:
Now, we have those methods in part of Number,
which will accept only numbers values:
Little changes of Numbers
console.log(isFinite("1")); // Will be true
console.log(isNaN("NaN")); // Will be true
console.log(Number.isFinite("1")); // Will be false
console.log(Number.isNaN("NaN")); // Will be false
28. Added function to identify if it is an integer!
Added a lot of new Math methods!
For example:
⚬ Math.acosh(x), Math.asinh(x), Math.atanh(x)
⚬ Math.log1p(x), Math.log10(x), Math.log2(x)
⚬ Math.trunc(x)
Little changes of Numbers
console.log(Number.isInteger(25.5)); // Will be false
29. ⚬ Object.observe - Allows to register to changes of data model by
callback (Feature of ES7).
⚬ Promises - Asynchronous operations.
⚬ Generators - Special functions that creates a type of iterators.
⚬ Proxies - Creating a proxy on a particular object allows a predefined
handler to get notified when something happens.
⚬ Array comprehensions - Syntax that allows you to quickly assemble a
new array based on an existing one (Feature of ES7).
⚬ Tail call optimization - Instead of create new stack frames, It reuses old
stack frames.
Unspoken features
30. ⚬ ECMAScript 6 standard of scripting languages.
⚬ ECMAScript 6 will be published on June 2015.
⚬ ECMAScript 6 will bring a lot of changes:
○ Arrows
○ let & const
○ Default parameters, Rest Parameters
○ Spread Operator
○ Template Strings
○ Classes & Modules
○ Destructuring
○ Symbols
○ Maps & Sets
○ Minor changes of Numbers
Conclusions