I present a variety of ideas on how the new async support in C# can be used to build better apps. I try to go beyond "waiting for IO" and present crazier things such as interactive help and automatic Console App to Web App conversion.
The document provides an introduction to Java concurrency, explaining how to create threads in Java by extending the Thread class or implementing Runnable, how to handle race conditions through synchronization, and some basic concurrency tools like wait, notify, sleep, join, and volatile variables. It discusses advantages and drawbacks of concurrency as well as examples of where it is commonly used.
The document provides code examples comparing Java and Kotlin implementations of common programming concepts and patterns. It shows how Kotlin simplifies concepts like listeners, constructors, properties, and null safety checks compared to Java.
This document contains the code for a program that evaluates mathematical expressions. It defines methods to:
- Read expressions from a file or user input and split them into operands and operators
- Calculate the results of valid expressions and store statistics like highest/lowest values
- Handle invalid expressions and output error messages
- Output the results of calculations and expression statistics after processing is complete
This document contains a collection of code snippets and questions related to Android development puzzles and concepts. It discusses topics like the Android application lifecycle when finishing an activity, how fragment and activity handle returning results from started activities, and default behavior of progress bars and Toasts. The snippets are accompanied by multiple choice questions testing understanding of how the code would execute or appear.
The document discusses Swing components in Java, including how to create windows, add components to windows, handle events, and work with text components. Key topics covered include the component hierarchy for common Swing widgets like JFrame, JLabel, JButton, and JTextField. It also discusses how to register listeners, manipulate document content, and build a basic browser component.
Carol McDonald gave a presentation on Java concurrency utilities introduced in J2SE 5.0. She discussed motivation for improved concurrency tools, common concurrency issues, and key utilities like Executor framework, locks, synchronizers, and concurrent collections. The utilities make concurrent programming easier and improve performance of multithreaded Java applications.
This document summarizes an introductory presentation on RxJava. It begins with definitions of reactive programming and RxJava, noting that RxJava allows for composing asynchronous and event-based programs using observable sequences. It then discusses some common problems with concurrency in Android and how RxJava provides solutions through concepts like Observables, operators, and schedulers. It provides examples of using RxJava for common tasks like network requests and timers. It concludes with some common mistakes to avoid like improper use of schedulers and failing to unsubscribe.
The document provides an introduction to Java concurrency, explaining how to create threads in Java by extending the Thread class or implementing Runnable, how to handle race conditions through synchronization, and some basic concurrency tools like wait, notify, sleep, join, and volatile variables. It discusses advantages and drawbacks of concurrency as well as examples of where it is commonly used.
The document provides code examples comparing Java and Kotlin implementations of common programming concepts and patterns. It shows how Kotlin simplifies concepts like listeners, constructors, properties, and null safety checks compared to Java.
This document contains the code for a program that evaluates mathematical expressions. It defines methods to:
- Read expressions from a file or user input and split them into operands and operators
- Calculate the results of valid expressions and store statistics like highest/lowest values
- Handle invalid expressions and output error messages
- Output the results of calculations and expression statistics after processing is complete
This document contains a collection of code snippets and questions related to Android development puzzles and concepts. It discusses topics like the Android application lifecycle when finishing an activity, how fragment and activity handle returning results from started activities, and default behavior of progress bars and Toasts. The snippets are accompanied by multiple choice questions testing understanding of how the code would execute or appear.
The document discusses Swing components in Java, including how to create windows, add components to windows, handle events, and work with text components. Key topics covered include the component hierarchy for common Swing widgets like JFrame, JLabel, JButton, and JTextField. It also discusses how to register listeners, manipulate document content, and build a basic browser component.
Carol McDonald gave a presentation on Java concurrency utilities introduced in J2SE 5.0. She discussed motivation for improved concurrency tools, common concurrency issues, and key utilities like Executor framework, locks, synchronizers, and concurrent collections. The utilities make concurrent programming easier and improve performance of multithreaded Java applications.
This document summarizes an introductory presentation on RxJava. It begins with definitions of reactive programming and RxJava, noting that RxJava allows for composing asynchronous and event-based programs using observable sequences. It then discusses some common problems with concurrency in Android and how RxJava provides solutions through concepts like Observables, operators, and schedulers. It provides examples of using RxJava for common tasks like network requests and timers. It concludes with some common mistakes to avoid like improper use of schedulers and failing to unsubscribe.
Category theory, Monads, and Duality in the world of (BIG) Datagreenwop
This document discusses democratizing data access and processing through LINQ, Rx, and CoSQL. It introduces LINQ for querying objects and LINQ to SQL for querying tables relationally. It discusses the object-relational impedance mismatch and how Rx makes events first-class. CoSQL is proposed to bring SQL-style querying to NoSQL databases by treating them relationally while keeping their flexibility. Duality principles from category theory are discussed as enabling asynchronous and reactive programming models.
The document discusses Twitter's @Anywhere integration platform. It provides a 3 step process to easily integrate Twitter features like hovercards and follow buttons. @Anywhere aims to be easy, fast and self-contained. It includes tools like linkifying usernames, follow buttons, tweet boxes and hovercards. Developers can access Twitter's API through @Anywhere and target features to specific windows. The platform is supported across major browsers and Twitter provides documentation, forums and bug reporting to help with development.
Actors provide a model for building concurrent and distributed applications using message passing between isolated computing entities called actors. Akka is an implementation of the actor model that allows building scalable and fault-tolerant applications on the JVM. Akka provides features like remote deployment of actors, asynchronous message passing, supervision strategies, and dispatchers for configuring how messages are processed.
1) The document discusses the process of adding Ethernet functionality to an Android device using the MangoBoard. It describes initializing the Ethernet service during boot up and registering it with the ConnectivityService.
2) When an Ethernet connection is detected, the EthernetMonitor thread notifies the EthernetStateTracker which triggers DHCP configuration of the interface.
3) The DHCPHandler is then sent a message to start the DHCP process and obtain an IP address for the connected Ethernet interface.
The document describes how to build a cross-domain API called @anywhere that allows Twitter functionality to be embedded on third-party sites. It discusses using postMessage to enable cross-domain communication and implementing an RPC layer to wrap Twitter's REST API. It also covers how to handle authentication and authorization using OAuth, passing the access token back to the embedding page securely using the window.name polling technique. The goal is to provide a secure, frictionless, and unobtrusive way to access Twitter APIs from any domain.
The document discusses using asynchronous SQL queries in Flex applications to avoid freezing the user interface. It proposes using a StatementList class to encapsulate executing multiple SQL statements as a transaction in an asynchronous manner. The key points are:
1) Synchronous SQL queries can freeze the UI, so asynchronous queries are preferable.
2) A StatementList class is created to execute multiple SQL statements as a transaction asynchronously without locking the UI.
3) An ExecutionQueue class is introduced to schedule StatementList objects to ensure proper execution order without locking.
A lecture about type expressiveness using the Either monad in C#. It's a discussion about the problem that arises from a lack of a built-in mechanism that allows you to express that a function is likely to fail. We implement a solution to this problem and see how it allows us to write production-ready code.
The document discusses the Leap Motion Controller and Myo gesture control devices. It provides an overview of their technical specifications including tracking accuracy, supported languages, data models, and examples of applications. It also shares some of the author's insights on designing gesture-based applications.
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
This talk takes a deep dive into asynchronous programming patterns and practices, with an emphasis on the promise pattern.
We go through the basics of the event loop, highlighting the drawbacks of asynchronous programming in a naive callback style. Fortunately, we can use the magic of promises to escape from callback hell with a powerful and unified interface for async APIs. Finally, we take a quick look at the possibilities for using coroutines both in current and future (ECMAScript Harmony) JavaScript.
Learning Rx does not have to be boring like working your way through theoretical sermons about esoteric concepts like category theory and duality. Life is too short for that kind of abstract nonsense.
So what is a better way to spend a hot summer day with an ice-cold drink, or a cold winter night with a piping hot drink, than to learn Rx by writing an awesome platform game? In this talk, Erik will walk you through many of the features of Rx through programming a friendly bug to run across a lushy grassy meadow and jump for the stars.
Presentation given at SoCal .NET Architecture group in March 2015. We introduced the async/await keywords and discussed architectural considerations: like why async may be superior to Parallel.ForEach and other parallel options, especially for server-side scaling
The document discusses Android threading and how to handle long running tasks to avoid blocking the UI thread. It covers the main UI thread, how to run tasks on a background thread using Thread and Runnable, and how to update the UI from the background thread using runOnUiThread(), post(), postDelayed() and AsyncTask. AsyncTask is recommended as it handles threading for you by running background tasks on a worker thread and calling publishProgress() to update the UI on the main thread.
Resiliency & Security_Ballerina Day CMB 2018 Ballerina
Resilience is the ability to recover to a working condition after being affected by a serious incident. Integration programmers have to be aware of such failures and also make their programs robust ro deal with and recover from such failures. In this session, we will look at how Ballerina helps integration developers to write resilient programs and how it helps eliminate or reduce failures due to oversight. Also we will demonstrate core resiliency techniques, such as timeout, retry, circuit breaker, distributed transactions.
Security has become a top priority in cloud native, integration, and microservices programing. In this session, we will look at how to secure microservices and how Ballerina helps developers to write secure programs by providing inherent protection against threats. This will will also include details on the Ballerina compiler's security awareness features and how it prevents mistakes that could result in major security breaches.
The document describes a program for creating a multi-client chatting application using Java Swing. It involves creating a chat server class with methods for accepting client connections, handling message passing between clients, and maintaining a list of connected clients. It also involves creating a chat client class with methods for connecting to the server, sending and receiving messages, and displaying messages and a list of connected clients. The program listing includes the code for the ChatServer and ChatClient classes to implement the client-server architecture for a graphical multi-user chat application.
The document contains code for an image processing program that:
1) Loads a series of images from a file into memory and analyzes frame differences to determine scene changes.
2) Applies frame transformations to adjust for motion between images.
3) Generates a reduced set of frames to display by selecting key frames around detected scene changes.
The program analyzes histograms, motion vectors, and color differences between frames to evaluate scene changes and filter out unnecessary frames.
1. The document discusses the evolution of the C# programming language from versions 1.0 through 4.0, highlighting new features introduced in each version such as generics, LINQ, dynamic programming, and covariance/contravariance.
2. It provides code examples to illustrate key concepts like generics, LINQ queries, dynamic binding, and how covariance/contravariance enables safer usage of generics.
3. The last section summarizes some of the main features introduced in each C# version from managed code to generics to dynamic programming.
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...DroidConTLV
SurfaceViews allow drawing to a separate thread to achieve realtime performance. Key aspects include:
- Driving the SurfaceView with a thread that locks and draws to the canvas in a loop.
- Using input buffering and object pooling to efficiently process touch/key events from the main thread.
- Employing various timing and drawing techniques like fixed scaling to optimize for performance. Managing the SurfaceView lifecycle to ensure the drawing thread starts and stops appropriately.
This presentation walks through the history of open source CLRs. From Rotor, to Mono, to .NET Core we've had our share of implementations and this presentation tries to organize all of that.
Category theory, Monads, and Duality in the world of (BIG) Datagreenwop
This document discusses democratizing data access and processing through LINQ, Rx, and CoSQL. It introduces LINQ for querying objects and LINQ to SQL for querying tables relationally. It discusses the object-relational impedance mismatch and how Rx makes events first-class. CoSQL is proposed to bring SQL-style querying to NoSQL databases by treating them relationally while keeping their flexibility. Duality principles from category theory are discussed as enabling asynchronous and reactive programming models.
The document discusses Twitter's @Anywhere integration platform. It provides a 3 step process to easily integrate Twitter features like hovercards and follow buttons. @Anywhere aims to be easy, fast and self-contained. It includes tools like linkifying usernames, follow buttons, tweet boxes and hovercards. Developers can access Twitter's API through @Anywhere and target features to specific windows. The platform is supported across major browsers and Twitter provides documentation, forums and bug reporting to help with development.
Actors provide a model for building concurrent and distributed applications using message passing between isolated computing entities called actors. Akka is an implementation of the actor model that allows building scalable and fault-tolerant applications on the JVM. Akka provides features like remote deployment of actors, asynchronous message passing, supervision strategies, and dispatchers for configuring how messages are processed.
1) The document discusses the process of adding Ethernet functionality to an Android device using the MangoBoard. It describes initializing the Ethernet service during boot up and registering it with the ConnectivityService.
2) When an Ethernet connection is detected, the EthernetMonitor thread notifies the EthernetStateTracker which triggers DHCP configuration of the interface.
3) The DHCPHandler is then sent a message to start the DHCP process and obtain an IP address for the connected Ethernet interface.
The document describes how to build a cross-domain API called @anywhere that allows Twitter functionality to be embedded on third-party sites. It discusses using postMessage to enable cross-domain communication and implementing an RPC layer to wrap Twitter's REST API. It also covers how to handle authentication and authorization using OAuth, passing the access token back to the embedding page securely using the window.name polling technique. The goal is to provide a secure, frictionless, and unobtrusive way to access Twitter APIs from any domain.
The document discusses using asynchronous SQL queries in Flex applications to avoid freezing the user interface. It proposes using a StatementList class to encapsulate executing multiple SQL statements as a transaction in an asynchronous manner. The key points are:
1) Synchronous SQL queries can freeze the UI, so asynchronous queries are preferable.
2) A StatementList class is created to execute multiple SQL statements as a transaction asynchronously without locking the UI.
3) An ExecutionQueue class is introduced to schedule StatementList objects to ensure proper execution order without locking.
A lecture about type expressiveness using the Either monad in C#. It's a discussion about the problem that arises from a lack of a built-in mechanism that allows you to express that a function is likely to fail. We implement a solution to this problem and see how it allows us to write production-ready code.
The document discusses the Leap Motion Controller and Myo gesture control devices. It provides an overview of their technical specifications including tracking accuracy, supported languages, data models, and examples of applications. It also shares some of the author's insights on designing gesture-based applications.
Callbacks, Promises, and Coroutines (oh my!): Asynchronous Programming Patter...Domenic Denicola
This talk takes a deep dive into asynchronous programming patterns and practices, with an emphasis on the promise pattern.
We go through the basics of the event loop, highlighting the drawbacks of asynchronous programming in a naive callback style. Fortunately, we can use the magic of promises to escape from callback hell with a powerful and unified interface for async APIs. Finally, we take a quick look at the possibilities for using coroutines both in current and future (ECMAScript Harmony) JavaScript.
Learning Rx does not have to be boring like working your way through theoretical sermons about esoteric concepts like category theory and duality. Life is too short for that kind of abstract nonsense.
So what is a better way to spend a hot summer day with an ice-cold drink, or a cold winter night with a piping hot drink, than to learn Rx by writing an awesome platform game? In this talk, Erik will walk you through many of the features of Rx through programming a friendly bug to run across a lushy grassy meadow and jump for the stars.
Presentation given at SoCal .NET Architecture group in March 2015. We introduced the async/await keywords and discussed architectural considerations: like why async may be superior to Parallel.ForEach and other parallel options, especially for server-side scaling
The document discusses Android threading and how to handle long running tasks to avoid blocking the UI thread. It covers the main UI thread, how to run tasks on a background thread using Thread and Runnable, and how to update the UI from the background thread using runOnUiThread(), post(), postDelayed() and AsyncTask. AsyncTask is recommended as it handles threading for you by running background tasks on a worker thread and calling publishProgress() to update the UI on the main thread.
Resiliency & Security_Ballerina Day CMB 2018 Ballerina
Resilience is the ability to recover to a working condition after being affected by a serious incident. Integration programmers have to be aware of such failures and also make their programs robust ro deal with and recover from such failures. In this session, we will look at how Ballerina helps integration developers to write resilient programs and how it helps eliminate or reduce failures due to oversight. Also we will demonstrate core resiliency techniques, such as timeout, retry, circuit breaker, distributed transactions.
Security has become a top priority in cloud native, integration, and microservices programing. In this session, we will look at how to secure microservices and how Ballerina helps developers to write secure programs by providing inherent protection against threats. This will will also include details on the Ballerina compiler's security awareness features and how it prevents mistakes that could result in major security breaches.
The document describes a program for creating a multi-client chatting application using Java Swing. It involves creating a chat server class with methods for accepting client connections, handling message passing between clients, and maintaining a list of connected clients. It also involves creating a chat client class with methods for connecting to the server, sending and receiving messages, and displaying messages and a list of connected clients. The program listing includes the code for the ChatServer and ChatClient classes to implement the client-server architecture for a graphical multi-user chat application.
The document contains code for an image processing program that:
1) Loads a series of images from a file into memory and analyzes frame differences to determine scene changes.
2) Applies frame transformations to adjust for motion between images.
3) Generates a reduced set of frames to display by selecting key frames around detected scene changes.
The program analyzes histograms, motion vectors, and color differences between frames to evaluate scene changes and filter out unnecessary frames.
1. The document discusses the evolution of the C# programming language from versions 1.0 through 4.0, highlighting new features introduced in each version such as generics, LINQ, dynamic programming, and covariance/contravariance.
2. It provides code examples to illustrate key concepts like generics, LINQ queries, dynamic binding, and how covariance/contravariance enables safer usage of generics.
3. The last section summarizes some of the main features introduced in each C# version from managed code to generics to dynamic programming.
Tricks to Making a Realtime SurfaceView Actually Perform in Realtime - Maarte...DroidConTLV
SurfaceViews allow drawing to a separate thread to achieve realtime performance. Key aspects include:
- Driving the SurfaceView with a thread that locks and draws to the canvas in a loop.
- Using input buffering and object pooling to efficiently process touch/key events from the main thread.
- Employing various timing and drawing techniques like fixed scaling to optimize for performance. Managing the SurfaceView lifecycle to ensure the drawing thread starts and stops appropriately.
Similar to Asynchronous Application Patterns in C# - MonkeySpace (20)
This presentation walks through the history of open source CLRs. From Rotor, to Mono, to .NET Core we've had our share of implementations and this presentation tries to organize all of that.
The three problems discussed are:
1. "Disconnected" networking apps - how do you handle bad connections.
2. Multiple UIs - how do you adapt to different UI idioms.
3. After release - marketing, customer support, etc.
How I Made Zoom In and Enhance - Seattle Mobile .NETFrank Krueger
This document discusses convolutional neural networks (CNNs) and how they can be used for image zoom and enhancement. It provides an overview of CNN theory, including layers, training, and generalization. It then describes using a pix2pix CNN model to generate training examples for zooming faces, training the model, and testing it on new images. Future work discussed includes porting CNN libraries and models to mobile.
Overview of iOS 11 - Seattle Mobile .NETFrank Krueger
* Extending the Files App to Share Files
* Implementing Drag and Drop
* BIG DATA with CoreML
* Awesomer Reality with ARKit
* Depth Maps (time permitted)
How do you write a GUI app in a functional programming language that prefers immutability? From Visual Basic on we have been taught how to compose interactive UIs using events and mutable properties. Is there any other way? The answer is, yes, indeed there is. Not only can you build UIs using functional concepts, but I will argue that the architecture of such an app is more modular and more robust than the standard architecture resulting from objects sending messages to each other. This talk is an introduction to the fringe world of functional programming using F# and will have information useful to both beginners and practitioners.
This is a presentation I gave at Seattle Mobile Developers meetup describing what went right and what went wrong in the development of Mocast - a new iPhone podcast listening app: http://mocast.io
You can see purchase Mocast at: https://itunes.apple.com/us/app/mocast/id897185985?mt=8
Video here: http://youtu.be/eeGvMkicAv4
Xamarin.iOS enables us to write native applications that take full advantage of iOS's large number of libraries - from the user interface to motion processing, graphics, audio, cameras, sensors, networking... This incredibly rich software platform runs all day long in the pockets of hundreds of millions of people. When you couple it to .NET, you have a programmer's dream environment.
So let's learn to program iOS! In a little over an hour we will:
• Browse through iOS's APIs to find interesting bits of functionality
• Explore the architecture of UIKit - the user interface framework for iOS
• Use Xamarin Studio to write and debug applications
With this introduction you will have enough knowledge to write your first application that can use all the richness of iOS and all your favorite code written in .NET. Oh, and it will run on beautiful devices too.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
Takashi Kobayashi and Hironori Washizaki, "SWEBOK Guide and Future of SE Education," First International Symposium on the Future of Software Engineering (FUSE), June 3-6, 2024, Okinawa, Japan
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeAftab Hussain
Understanding variable roles in code has been found to be helpful by students
in learning programming -- could variable roles help deep neural models in
performing coding tasks? We do an exploratory study.
- These are slides of the talk given at InteNSE'23: The 1st International Workshop on Interpretability and Robustness in Neural Software Engineering, co-located with the 45th International Conference on Software Engineering, ICSE 2023, Melbourne Australia
What is Augmented Reality Image Trackingpavan998932
Augmented Reality (AR) Image Tracking is a technology that enables AR applications to recognize and track images in the real world, overlaying digital content onto them. This enhances the user's interaction with their environment by providing additional information and interactive elements directly tied to physical images.
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
SOCRadar's Aviation Industry Q1 Incident Report is out now!
The aviation industry has always been a prime target for cybercriminals due to its critical infrastructure and high stakes. In the first quarter of 2024, the sector faced an alarming surge in cybersecurity threats, revealing its vulnerabilities and the relentless sophistication of cyber attackers.
SOCRadar’s Aviation Industry, Quarterly Incident Report, provides an in-depth analysis of these threats, detected and examined through our extensive monitoring of hacker forums, Telegram channels, and dark web platforms.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
2. Async
How C# Makes Every Other Language Look Stupid
Frank A. Krueger
@praeclarum
3. Why Async?
Why Await?
Tour of System.Threading.Tasks
with Real-world Uses of Await
Fak-world Uses of Await
4. Why Async?
Why Await?
Tour of System.Threading.Tasks
with Real-world Uses of Await
Fak-world Uses of Await
5. Apps are Async
• Interacting with the user
• Performing computations
• Downloading resources from the web
• Uploading actions and messages to services
• Reading and writing local storage
• Watching for motion changes, camera or
microphone events, network connectivity,
etc.
20. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
var tweets = twitterClient.GetMentions ();
// Computation
var q = from t tweets
where t.IsMean
select t;
// Lots of Network IO
foreach (var enemy in q) {
twitterClient.Reply (enemy, “Here’s a hug”);
}
// UI
statusLabel.Text =
string.Join (“, “, q.Select (x => x.Name)) +
“ have been hugged”;
};
Slow
Slow x N
Slow?
21. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
Continuation Passing Style
(CPS)
22. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
2 Functions?
23. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
StateVariables?
24. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
Subtle but Critical
Assignments?
25. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
Recursion?
26. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
Tail End of Process in a
Strange Function?
27. hugMeanPeopleButton.TouchUpInside += delegate {
// Network IO
twitterClient.GetMentions (
(tweets, tweetsError) => {
if (tweetsError != null)
Umm (tweetsError);
// Computation
var q = from t in tweets
where t.IsMean
select t;
// This is a loop, believe it or not
tweetsToHug = q.ToList ();
nextTweetToHug = 0;
HugTweet ();
});
}
List<Tweet> tweetsToHug = null;
int nextTweetToHug = 0;
void HugTweet ()
{
if (tweetsToHug == null) return;
// Lots of Network IO
if (nextTweetToHug < tweetsToHug.Count) {
var t = tweetsToHug [nextTweetToHug++];
twitterClient.Reply (
t,
“Here’s a hug”,
replyError => {
if (replyError != null)
Umm (replyError);
HugTweet ();
});
return;
}
// UI
statusLabel.Text =
string.Join (“, “,tweetsToHug.Select(x=>x.Name))
+ “ have been hugged”;
tweetsToHug = null;
}
Umm...
74. Awaiting Generic Events
// Wait for the user to change the name of the
// model to “Frank”
var propEvent = await model.Event (
“PropertyChanged”,
x => x.Name == “Name” && model.Name == “Frank”);
75. Awaiting Generic Events
public static Task<EventArgs> Event (
this object eventSource,
string eventName,
Predicate<EventArgs> predicate = null)
{
var tcs = new TaskCompletionSource<EventArgs>();
var type = eventSource.GetType ();
var ev = type.GetEvent (eventName);
EventHandler handler;
handler = delegate (object sender, EventArgs e) {
if (predicate == null || predicate (e)) {
ev.RemoveEventHandler (eventSource, handler);
tcs.SetResult (e);
}
};
ev.AddEventHandler (eventSource, handler);
return tcs.Task;
}
76. Awaiting Generic Events
public static Task<EventArgs> Event (
this object eventSource,
string eventName,
Predicate<EventArgs> predicate = null)
{
var tcs = new TaskCompletionSource<EventArgs>();
var type = eventSource.GetType ();
var ev = type.GetEvent (eventName);
EventHandler handler;
handler = delegate (object sender, EventArgs e) {
if (predicate == null || predicate (e)) {
ev.RemoveEventHandler (eventSource, handler);
tcs.SetResult (e);
}
};
ev.AddEventHandler (eventSource, handler);
return tcs.Task;
}
77. Awaiting Generic Events
public static Task<EventArgs> Event (
this object eventSource,
string eventName,
Predicate<EventArgs> predicate = null)
{
var tcs = new TaskCompletionSource<EventArgs>();
var type = eventSource.GetType ();
var ev = type.GetEvent (eventName);
EventHandler handler;
handler = delegate (object sender, EventArgs e) {
if (predicate == null || predicate (e)) {
ev.RemoveEventHandler (eventSource, handler);
tcs.SetResult (e);
}
};
ev.AddEventHandler (eventSource, handler);
return tcs.Task;
}
78. Awaiting Generic Events
public static Task<EventArgs> Event (
this object eventSource,
string eventName,
Predicate<EventArgs> predicate = null)
{
var tcs = new TaskCompletionSource<EventArgs>();
var type = eventSource.GetType ();
var ev = type.GetEvent (eventName);
EventHandler handler;
handler = delegate (object sender, EventArgs e) {
if (predicate == null || predicate (e)) {
ev.RemoveEventHandler (eventSource, handler);
tcs.SetResult (e);
}
};
ev.AddEventHandler (eventSource, handler);
return tcs.Task;
}
79. Awaiting Generic Events
public static Task<EventArgs> Event (
this object eventSource,
string eventName,
Predicate<EventArgs> predicate = null)
{
var tcs = new TaskCompletionSource<EventArgs>();
var type = eventSource.GetType ();
var ev = type.GetEvent (eventName);
EventHandler handler;
handler = delegate (object sender, EventArgs e) {
if (predicate == null || predicate (e)) {
ev.RemoveEventHandler (eventSource, handler);
tcs.SetResult (e);
}
};
ev.AddEventHandler (eventSource, handler);
return tcs.Task;
}
100. client.GetTweetsAsync ().ContinueWith (
t => {
if (t.IsFaulted)
throw new AggregateException (t.Exception);
countLabel.Text = tweets.Count;
});
var tweets = await client.GetTweetsAsync ().
ConfigureAwait (false);
countLabel.Text = tweets.Count;
Does not synchronize with the UI
109. Adventure
public static void Main (string[] args)
{
var console = new ConsoleConsole ();
var map = Map.GenerateRandom ();
var player = new Player(
map.StartingLocation,
console);
player.Play ().Wait ();
}
110. Adventurepublic async Task Play ()
{
while (true) {
// Print the status
await console.Out.WriteLineAsync (Location.Description);
await console.Out.WriteLineAsync (Status);
// Read the command from the user
var command = await console.In.ReadLineAsync ();
if (!string.IsNullOrWhiteSpace (command)) {
// Execute it
var result = Execute (command);
// Print the result
await console.Out.WriteLineAsync (result);
}
}
}
111. Why Async?
Why Await?
Tour of System.Threading.Tasks
with Real-world Uses of Await
Fak-world Uses of Await
124. public class GameServer : WebServer
{
Map map;
public GameServer (Map map)
{
this.map = map;
}
protected override async Task RunSession (WebSession session)
{
var console = new WebConsole (session);
var player = new Player (map.StartingLocation, console);
await player.Play ();
}
}
125. public class GameServer : WebServer
{
Map map;
public GameServer (Map map)
{
this.map = map;
}
protected override async Task RunSession (WebSession session)
{
var console = new WebConsole (session);
var player = new Player (map.StartingLocation, console);
await player.Play ();
}
}
126. public class GameServer : WebServer
{
Map map;
public GameServer (Map map)
{
this.map = map;
}
protected override async Task RunSession (WebSession session)
{
var console = new WebConsole (session);
var player = new Player (map.StartingLocation, console);
await player.Play ();
}
}