Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)anistar sung
This session I explained about how to build shareable library and what we did for AppDeKit that is open source app developing tool for app development. If you're looking for a good mechanism for developing your own app, please read this deck to know AppDevKit more.
https://github.com/yahoo/AppDevKit
Ever since we broke apart the front and back-end of our systems, we’ve longed to partially reunite them with a shared language. The benefits of code reuse and shared tooling are compelling but is this nirvana possible? In this session we will explore building both the front (mobile and web) and back-end of an application with a shared Kotlin codebase. You will learn how to setup the build, share code, and deploy the back-end as a serverless app.
Yahoo Open Source - The Tour & Mystery of AppDevKit (MOPCON 2016)anistar sung
This session I explained about how to build shareable library and what we did for AppDeKit that is open source app developing tool for app development. If you're looking for a good mechanism for developing your own app, please read this deck to know AppDevKit more.
https://github.com/yahoo/AppDevKit
Ever since we broke apart the front and back-end of our systems, we’ve longed to partially reunite them with a shared language. The benefits of code reuse and shared tooling are compelling but is this nirvana possible? In this session we will explore building both the front (mobile and web) and back-end of an application with a shared Kotlin codebase. You will learn how to setup the build, share code, and deploy the back-end as a serverless app.
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.
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
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.
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.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
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
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
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
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
PHP Frameworks: I want to break free (IPC Berlin 2024)
Creating an Uber Clone - Part XXII - Transcript.pdf
1. Creating an Uber Clone - Part XXII
With that out of the way search should work but how does it display the result?
For that we need to add additional features to the MapForm that address these capabilities. Before we go into that lets check out what that means
3. private Component createNavigationTag(String location, int durationMinutes) {
Label locationLabel = new Label(location, "NavigationLabel");
if(durationMinutes > 0) {
Label duration = new Label("" + durationMinutes,
"NavigationMinuteLabel");
Label min = new Label("MIN", "NavigationMinuteDescLabel");
Container west = BoxLayout.encloseY(duration, min);
Container result = BorderLayout.centerEastWest(locationLabel,
null, west);
result.getUnselectedStyle().setBorder(BlackAndWhiteBorder.create().
blackLinePosition(west.getPreferredW()));
return result;
}
locationLabel.getUnselectedStyle().setBorder(
BlackAndWhiteBorder.create());
return locationLabel;
}
addMapListener
Lets start with creating these tags. The tag code itself is trivial it's just a Label or a Container with some details. Nothing special.
Except for one important detail, the BlackAndWhiteBorder. In order to implement the unique shape of the tag I created a new Border class. Notice I used the preferred
width of the west component to determine the black section. This is done in the blackLinePosition method.
Before we go any further I’d just like to make one point clear: I Would have Used a 9-piece Border. If this were a real application I would have just cut a 9-piece border
and moved on. However, since the point is teaching I chose to do this the "hard way"
15. public class BlackAndWhiteBorder extends Border {
private static final String CACHE_KEY = "cn1$$-bwcache";
private final float shadowBlur = 10;
private final float shadowSpread;
private final int shadowOpacity = 110;
private final float cornerRadius = 1f;
private int blackLinePosition = -1;
BlackAndWhiteBorder() {
shadowSpread = Display.getInstance().convertToPixels(0.2f);
}
public static BlackAndWhiteBorder create() {
return new BlackAndWhiteBorder();
}
public BlackAndWhiteBorder blackLinePosition(int blackLinePosition) {
this.blackLinePosition = blackLinePosition;
return this;
}
private Image createTargetImage(Component c, int w, int h, boolean fast) {
Image target = Image.createImage(w, h, 0);
int shapeX = 0;
int shapeY = 0;
int shapeW = w;
int shapeH = h;
BlackAndWhiteBorder
Now that these are out of the way let's take a look at the border. Notice we can just subclass the Border class just like we can implement painters etc. This provides a
similar path for customization but is sometimes more flexible. Most of this code is based on the builtin RoundRectBorder class.
Drawing this type of border is pretty expensive so we draw onto an image and place that image in cache within the component using putClientProperty we use this value
as the key
16. public class BlackAndWhiteBorder extends Border {
private static final String CACHE_KEY = "cn1$$-bwcache";
private final float shadowBlur = 10;
private final float shadowSpread;
private final int shadowOpacity = 110;
private final float cornerRadius = 1f;
private int blackLinePosition = -1;
BlackAndWhiteBorder() {
shadowSpread = Display.getInstance().convertToPixels(0.2f);
}
public static BlackAndWhiteBorder create() {
return new BlackAndWhiteBorder();
}
public BlackAndWhiteBorder blackLinePosition(int blackLinePosition) {
this.blackLinePosition = blackLinePosition;
return this;
}
private Image createTargetImage(Component c, int w, int h, boolean fast) {
Image target = Image.createImage(w, h, 0);
int shapeX = 0;
int shapeY = 0;
int shapeW = w;
int shapeH = h;
BlackAndWhiteBorder
The blackLinePosition is used in the version of this border that's partially black
17. private Image createTargetImage(Component c, int w, int h, boolean fast) {
Image target = Image.createImage(w, h, 0);
int shapeX = 0;
int shapeY = 0;
int shapeW = w;
int shapeH = h;
Graphics tg = target.getGraphics();
tg.setAntiAliased(true);
int shadowSpreadL = Display.getInstance().convertToPixels(shadowSpread);
shapeW -= shadowSpreadL;
shapeH -= shadowSpreadL;
shapeX += Math.round(((float)shadowSpreadL) * 0.9);
shapeY += Math.round(((float)shadowSpreadL) * 0.9);
for(int iter = shadowSpreadL - 1 ; iter >= 0 ; iter--) {
tg.translate(iter, iter);
fillShape(tg, 0, shadowOpacity / shadowSpreadL, w-(iter*2),h - (iter * 2));
tg.translate(-iter, -iter);
}
if(Display.getInstance().isGaussianBlurSupported() && !fast) {
Image blured = Display.getInstance().gaussianBlurImage(target,shadowBlur/2);
target = Image.createImage(w, h, 0);
tg = target.getGraphics();
tg.drawImage(blured, 0, 0);
BlackAndWhiteBorder
Here we create the border image that we will cache for the given component. Since a shadow is set on the border and that can take some processing power. To speed
this up we have two versions of the method fast and slow. We call the fast one and invoke the slow one asynchronously to update the border
18. private Image createTargetImage(Component c, int w, int h, boolean fast) {
Image target = Image.createImage(w, h, 0);
int shapeX = 0;
int shapeY = 0;
int shapeW = w;
int shapeH = h;
Graphics tg = target.getGraphics();
tg.setAntiAliased(true);
int shadowSpreadL = Display.getInstance().convertToPixels(shadowSpread);
shapeW -= shadowSpreadL;
shapeH -= shadowSpreadL;
shapeX += Math.round(((float)shadowSpreadL) * 0.9);
shapeY += Math.round(((float)shadowSpreadL) * 0.9);
for(int iter = shadowSpreadL - 1 ; iter >= 0 ; iter--) {
tg.translate(iter, iter);
fillShape(tg, 0, shadowOpacity / shadowSpreadL, w-(iter*2),h - (iter * 2));
tg.translate(-iter, -iter);
}
if(Display.getInstance().isGaussianBlurSupported() && !fast) {
Image blured = Display.getInstance().gaussianBlurImage(target,shadowBlur/2);
target = Image.createImage(w, h, 0);
tg = target.getGraphics();
tg.drawImage(blured, 0, 0);
BlackAndWhiteBorder
We do a shadow effect by drawing a gradient with varying alpha degrees then blurring that out
19. tg.drawImage(blured, 0, 0);
tg.setAntiAliased(true);
}
tg.translate(shapeX, shapeY);
c.getStyle().setBorder(Border.createEmpty());
GeneralPath gp = createShape(shapeW, shapeH);
tg.setClip(gp);
c.getStyle().getBgPainter().paint(tg, new Rectangle(0, 0, w, h));
c.getStyle().setBorder(this);
return target;
}
public void paintBorderBackground(Graphics g, final Component c) {
final int w = c.getWidth();
final int h = c.getHeight();
int x = c.getX();
int y = c.getY();
if(w > 0 && h > 0) {
Image background = (Image)c.getClientProperty(CACHE_KEY);
if(background!=null && background.getWidth()==w && background.getHeight()==h){
g.drawImage(background, x, y);
return;
}
BlackAndWhiteBorder
If we have a cached version of the border image we will just use that as the background of the component assuming the size of the component didn't change
20. int y = c.getY();
if(w > 0 && h > 0) {
Image background = (Image)c.getClientProperty(CACHE_KEY);
if(background!=null && background.getWidth()==w && background.getHeight()==h){
g.drawImage(background, x, y);
return;
}
} else {
return;
}
Image target = createTargetImage(c, w, h, true);
g.drawImage(target, x, y);
c.putClientProperty(CACHE_KEY, target);
Display.getInstance().callSeriallyOnIdle(new Runnable() {
public void run() {
if(w == c.getWidth() && h == c.getHeight()) {
Image target = createTargetImage(c, w, h, false);
c.putClientProperty(CACHE_KEY, target);
c.repaint();
}
}
BlackAndWhiteBorder
Otherwise we create that image and update it later with the slower version that includes the gradient shadow effect
21. c.putClientProperty(CACHE_KEY, target);
c.repaint();
}
}
});
}
private GeneralPath createShape(int shapeW, int shapeH) {
GeneralPath gp = new GeneralPath();
float radius = Display.getInstance().convertToPixels(cornerRadius);
float x = 0;
float y = 0;
float widthF = shapeW;
float heightF = shapeH;
gp.moveTo(x + radius, y);
if(blackLinePosition > -1) {
gp.lineTo(x + widthF, y);
} else {
gp.lineTo(x + widthF - radius, y);
gp.quadTo(x + widthF, y, x + widthF, y + radius);
}
gp.lineTo(x + widthF, y + heightF - radius);
gp.quadTo(x + widthF, y + heightF, x + widthF - radius, y + heightF);
if(blackLinePosition > -1) {
BlackAndWhiteBorder
We create the shape of the component. If it's the one with the black line we place the corner in the top right otherwise we place it in the bottom left
22. gp.quadTo(x + widthF, y + heightF, x + widthF - radius, y + heightF);
if(blackLinePosition > -1) {
gp.lineTo(x + radius, y + heightF);
gp.quadTo(x, y + heightF, x, y + heightF - radius);
} else {
gp.lineTo(x, y + heightF);
}
gp.lineTo(x, y + radius);
gp.quadTo(x, y, x + radius, y);
gp.closePath();
return gp;
}
public int getMinimumHeight() {
return convertToPixels(shadowSpread) + convertToPixels(cornerRadius) * 2;
}
public int getMinimumWidth() {
return convertToPixels(shadowSpread) + convertToPixels(cornerRadius) * 2;
}
private void fillShape(Graphics g, int color, int opacity, int width, int height) {
g.setColor(0xffffff);
g.setAlpha(255);
GeneralPath gp = createShape(width, height);
if(blackLinePosition > -1) {
BlackAndWhiteBorder
We can now fill out the shape as part of the image creation code if we have a black line we do the fill operation twice with different clip sizes to create that effect