PiterPy #3 talk (Video: https://youtu.be/bCwSyyygSmM). Some points on RAML, general overview and takeaways based on a real project.
Presented with Dmitry Nazarov https://ru.linkedin.com/in/aspectmkn8rd/en (Part 2, as mentioned in contents)
Solid Principles Of Design (Design Series 01)Heartin Jacob
Learn about the solid principles of design along with some additional useful principles and practices and also few important considerations to avoid in your design. Introduction is also provided to the Design Patterns. This is usually taken as a hands on session with design and refactoring exercises.
Slides of my Perl 6 DBDI (database interface) talk at YAPC::EU in August 2010. Please also see the fun screencast that includes a live demo of perl6 using a perl5 DBI driver: http://timbunce.blip.tv/file/3973550/
PiterPy #3 talk (Video: https://youtu.be/bCwSyyygSmM). Some points on RAML, general overview and takeaways based on a real project.
Presented with Dmitry Nazarov https://ru.linkedin.com/in/aspectmkn8rd/en (Part 2, as mentioned in contents)
Solid Principles Of Design (Design Series 01)Heartin Jacob
Learn about the solid principles of design along with some additional useful principles and practices and also few important considerations to avoid in your design. Introduction is also provided to the Design Patterns. This is usually taken as a hands on session with design and refactoring exercises.
Slides of my Perl 6 DBDI (database interface) talk at YAPC::EU in August 2010. Please also see the fun screencast that includes a live demo of perl6 using a perl5 DBI driver: http://timbunce.blip.tv/file/3973550/
Intro To React Native
with Varun Vachhar
OVERVIEW
React Native introduces a new way to write native mobile apps. You can take everything that you know and love about React and apply it to native apps. Unlike hybrid apps, it gives you access to both native APIs and UI components. The application logic uses JavaScript whereas, the UI is fully native! It also brings the best of the web to native, things like – flexbox layout model, XMLHttpRequest, requestAnimationFrame, etc.
OBJECTIVE
To introduce the audience to React Native. Show how they can leverage their knowledge of web development to build native apps.
TARGET AUDIENCE
Developers familiar with React who are interested in building native mobile apps.
ASSUMED AUDIENCE KNOWLEDGE
Basic knowledge of React, ES6 and CSS.
FIVE THINGS AUDIENCE MEMBERS WILL LEARN
What is React Native
How it is an extension of hybrid
How to use polyfills to leverage the best of the web while getting native performance
How to debug React Native apps
How to use Flexbox and CSS for styling a React Native app
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)Joshua Warren
PHPSpec and Behat are two amazing PHP tools that empower specification-driven development and behavior-driven development. These two tools combined can help you build test coverage, but many people don't realize they can also write much of your code for you. In this talk, we'll see what PHPSpec and Behat can do, through a series of examples and use cases. In other words, I heard you like to code, so I wrote code that writes code while you code.
Presented at #phptek - http://tek.phparch.com
This is a presentation of the Perl module Workflow available on CPAN. All examples mentioned are available as part of the workflow distribution.
http://search.cpan.org/~jonasbn/Workflow/lib/Workflow.pm
http://sourceforge.net/apps/mediawiki/perl-workflow/index.php?title=Main_Page
Today’s web and mobile app localization industry relies on numerous standards, libraries and file formats to facilitate the exchange between developers and translators. While some formats are somewhat sophisticated, others lack even the most basic features, like pluralization and contextualization. And most can’t offer support for more advanced localization features, like language cases.
The most common localization formats include Gettext PO, PHP Arrays, Android XML, YAML, .Net RESX, iOS Strings and many others. A typical developer today works with many frameworks - for instance a Laravel backend app (PHP Arrays) with Ember front end (i18n JS) and iOS mobile app (Strings). Since all standards have distinct syntax, in many cases translations cannot be shared across applications.
Translation Markup Language (TML) aims to solve both these problems by introducing a powerful extensible cross-platform syntax that offers support for pluralization, language contextualization, language cases, reusable decorators and much more. TML libraries are available for all major web and mobile platforms. TML allows translators to do in-context translations - where they can translate right from within the apps. TML libraries also eliminate the need for developers to ever deal with the resource files, as all extractions and translation substitution is done realtime and the resource files are only used as a transport between the apps and the Translation Exchange platform.
Translation Exchange stores all translations in Universal Translation Memory (UTM), a graph database which stores all translations with their context, tone, rank and other attributes for accurate matching. This allows translations to be shared across all apps in the Translation Exchange Network. The translation memories of each app are extracted from the UTM graph and are managed by their individual localization teams. During this presentation we will look at some of the features of TML and how it can be used to quickly translate a Ruby on Rails application into any number of languages using in-context translation tools. We will also look at how the data is stored and shared across applications using UTM.
The curious Life of JavaScript - Talk at SI-SE 2015jbandi
My talk about the life of JavaScript, from birth to today.
I went trough the demos and code examples very quickly, rather as a teaser to show how modern JavaScript development might look.
If you are interested in a deep dive into the topic of modern JavaScript development, HTML5, ES6, AngularJS, React, Gulp, Grunt etc, please consider my courses: http://www.ivorycode.com/#schulung
API Documentation Workshop tcworld India 2015Tom Johnson
This is a workshop I gave on API documentation at tcworld India 2015. The workshop covers 3 main areas:
- General overview of API documentation
- Deep dive into REST API documentation
- Deep dive into Javadoc documentation
Writer APIs in Java faster with Swagger InflectorTony Tam
Swagger provides a clean contract for your REST API. Swagger Inflector is a project which uses Swagger as the language of the API, automatically wiring REST endpoints directly to controllers in the Jersey 2.x framework. By doing so, the specification and code are always up to date, removing potentially error-prone redundant code and bringing development on the JDK up to speed with typeless languages.
Php[tek] 2016 - BDD with Behat for BeginnersAdam Englander
Learn the basics of Behavioral Driven Development (BDD) with Behat to build quality applications. Behat utilizes natural language syntax to define feature test scenarios. In this tutorial you will learn how to write integration tests for web applications. This will include utilizing Selenium WebDriver for real world multi-browser testing including introductions to Selenium Grid and Sauce Labs. Learn a better way to perform integration testing today!
Intro To React Native
with Varun Vachhar
OVERVIEW
React Native introduces a new way to write native mobile apps. You can take everything that you know and love about React and apply it to native apps. Unlike hybrid apps, it gives you access to both native APIs and UI components. The application logic uses JavaScript whereas, the UI is fully native! It also brings the best of the web to native, things like – flexbox layout model, XMLHttpRequest, requestAnimationFrame, etc.
OBJECTIVE
To introduce the audience to React Native. Show how they can leverage their knowledge of web development to build native apps.
TARGET AUDIENCE
Developers familiar with React who are interested in building native mobile apps.
ASSUMED AUDIENCE KNOWLEDGE
Basic knowledge of React, ES6 and CSS.
FIVE THINGS AUDIENCE MEMBERS WILL LEARN
What is React Native
How it is an extension of hybrid
How to use polyfills to leverage the best of the web while getting native performance
How to debug React Native apps
How to use Flexbox and CSS for styling a React Native app
PHPSpec & Behat: Two Testing Tools That Write Code For You (#phptek edition)Joshua Warren
PHPSpec and Behat are two amazing PHP tools that empower specification-driven development and behavior-driven development. These two tools combined can help you build test coverage, but many people don't realize they can also write much of your code for you. In this talk, we'll see what PHPSpec and Behat can do, through a series of examples and use cases. In other words, I heard you like to code, so I wrote code that writes code while you code.
Presented at #phptek - http://tek.phparch.com
This is a presentation of the Perl module Workflow available on CPAN. All examples mentioned are available as part of the workflow distribution.
http://search.cpan.org/~jonasbn/Workflow/lib/Workflow.pm
http://sourceforge.net/apps/mediawiki/perl-workflow/index.php?title=Main_Page
Today’s web and mobile app localization industry relies on numerous standards, libraries and file formats to facilitate the exchange between developers and translators. While some formats are somewhat sophisticated, others lack even the most basic features, like pluralization and contextualization. And most can’t offer support for more advanced localization features, like language cases.
The most common localization formats include Gettext PO, PHP Arrays, Android XML, YAML, .Net RESX, iOS Strings and many others. A typical developer today works with many frameworks - for instance a Laravel backend app (PHP Arrays) with Ember front end (i18n JS) and iOS mobile app (Strings). Since all standards have distinct syntax, in many cases translations cannot be shared across applications.
Translation Markup Language (TML) aims to solve both these problems by introducing a powerful extensible cross-platform syntax that offers support for pluralization, language contextualization, language cases, reusable decorators and much more. TML libraries are available for all major web and mobile platforms. TML allows translators to do in-context translations - where they can translate right from within the apps. TML libraries also eliminate the need for developers to ever deal with the resource files, as all extractions and translation substitution is done realtime and the resource files are only used as a transport between the apps and the Translation Exchange platform.
Translation Exchange stores all translations in Universal Translation Memory (UTM), a graph database which stores all translations with their context, tone, rank and other attributes for accurate matching. This allows translations to be shared across all apps in the Translation Exchange Network. The translation memories of each app are extracted from the UTM graph and are managed by their individual localization teams. During this presentation we will look at some of the features of TML and how it can be used to quickly translate a Ruby on Rails application into any number of languages using in-context translation tools. We will also look at how the data is stored and shared across applications using UTM.
The curious Life of JavaScript - Talk at SI-SE 2015jbandi
My talk about the life of JavaScript, from birth to today.
I went trough the demos and code examples very quickly, rather as a teaser to show how modern JavaScript development might look.
If you are interested in a deep dive into the topic of modern JavaScript development, HTML5, ES6, AngularJS, React, Gulp, Grunt etc, please consider my courses: http://www.ivorycode.com/#schulung
API Documentation Workshop tcworld India 2015Tom Johnson
This is a workshop I gave on API documentation at tcworld India 2015. The workshop covers 3 main areas:
- General overview of API documentation
- Deep dive into REST API documentation
- Deep dive into Javadoc documentation
Writer APIs in Java faster with Swagger InflectorTony Tam
Swagger provides a clean contract for your REST API. Swagger Inflector is a project which uses Swagger as the language of the API, automatically wiring REST endpoints directly to controllers in the Jersey 2.x framework. By doing so, the specification and code are always up to date, removing potentially error-prone redundant code and bringing development on the JDK up to speed with typeless languages.
Php[tek] 2016 - BDD with Behat for BeginnersAdam Englander
Learn the basics of Behavioral Driven Development (BDD) with Behat to build quality applications. Behat utilizes natural language syntax to define feature test scenarios. In this tutorial you will learn how to write integration tests for web applications. This will include utilizing Selenium WebDriver for real world multi-browser testing including introductions to Selenium Grid and Sauce Labs. Learn a better way to perform integration testing today!
Welcome To
Ruby Rails Web Development
Ruby on Rails Development Benefits and Pitfalls
Understanding how the many components of digital design and development are connected is crucial for web developers. Each pillar supports the span, much like a bridge, and if any one of them fails, the entire structure falls. Both poor design and poorly written code can obliterate even the most complex design solutions. Every component contributes to the final result, a user-friendly product.
We have provided you with some background information on the terms, procedures, and tools used in web development in previous posts. This article will carry on that theme. We're going to discuss one of the widely used web development tools, Ruby on Rails, and share some of its advantages and disadvantages with you.
brief history
A brief history will be presented first. Ruby is an open source, dynamic, object-oriented programming language with an emphasis on efficiency and productivity. The original version of the language, Ruby, which was created by Yukihiro "Matz" Matsumoto, was initially made available in the 1990s. Today, it provides power to popular services like Basecamp, Hulu, the original Twitter, and Living Social. Because Ruby offers a framework that supports a high level of developer flexibility, many businesses, including BBW, Cisco, CNET, IBM, JP Morgan, NASA, and Yahoo, employ it in some capacity.
The open-source Ruby on Rails web application framework is designed to increase programmers' long-term productivity. From his work on the project management tool Basecamp at the web application firm also known as Basecamp, David Heinemeier Hansson extracted Ruby on Rails. In July 2004, Hansson first made Rails available as open source. Even well-known companies like Amazon and eBay have Rails projects.
From my work on Basecamp, a project collaboration tool from 37signals, Rails (Ruby on Rails) was extracted. It was therefore driven by needs rather than predictions. And I think a large reason why we're doing so well right now is because of it. I didn't make an effort to consider what certain programmers could require for a dream job. I merely constructed what I required to complete my work cheerfully. David Heinemeier Hansson, the author of Ruby on Rails, is a different interviewee.
What is Ruby on Rails?
Model-view-controller (MVC) is how Rails apps work. This technique is utilized by numerous other web frameworks, including AngularJS (JavaScript), Django (Python), and CakePHP (PHP).Models, Views, and Controllers are the three components that make up the apps, according to this. These parts perform the following functions:
They include the functionality needed to modify and get the many types of data the app uses. A model is represented as a class in Rails. They are not low-level data types like strings or arrays.
Create the logic that connects views and models (and the data they are linked with). They perform input processing, make method calls, and send data to
En esta oportunidad, Gustavo Andres Brey, Co-Founder de Ingenia y ArqConf realizará una introducción a la metodología de Lean Startup y las consideraciones Arquitecturales que debemos tener a la hora de llevarla adelante para la creación de Startups Tecnológicos. Aportará su experiencia en la utilización de la metodologías no solo en startups sino también en su experiencia como Gerente de Sistemas en corporaciones creando productos digitales en la industria de la salud.
Docker es una de las tecnologías que más revolucionó el manejo de ambientes y despliegue de aplicaciones a gran escala. Veremos por qué es tan importante conocer esta tecnología para desarrolladores y administradores de infraestructura y cómo facilita aplicar prácticas de devops.
Durante la charla introduciremos la tecnología, como así tambien los casos prácticos sobre clustering, repositorios privados de imágenes y arquitectura productivas.
Gustavo Brey
Gustavo Andres Brey es Ingeniero en Sistemas de Información con más de 15 años de experiencia en la Industria IT. Actualmente es el CIO del Instituto Nacional de Servicios Sociales para Jubilados y Pensionados (INSSJP/PAMI), donde está impulsando un cambio de paradigma innovador en IT para la gestión de la salud pública Argentina. Desde 2004 es fundador y profesor de la materia Arquitectura de Proyectos de IT en la UTN- FRBA. A su vez es Co-Fundador de CONF4IT, una organización sin fines de lucro, que desarrolla conferencias agnósticas para distintas comunidades IT como ARQCONF y KIDSCONF. Participó en importantes conferencias de Tecnologías de la Información, Salud , Innovación, Open Source, Big Data, Arquitectura de Software, Gobierno y Datos Abiertos, así como de Hackathones.
Andrés Calabrese
Ingeniero en Sistema de Información con más de 11 años de experiencia tanto en puestos de liderazgo técnico en grandes empresas, como así también como CTO en varios emprendiendo tecnologicos como socio. Andrés comenzó su carrera en IBM, liderando proyectos complejos en diferentes tecnologías, a su vez promovió encuentros de colaboración técnica. Como CTO definió, planificó e implementó prácticas de Devops que permitieron guiar tecnologicamente a la compañía en términos metodológicos, de desarrollo e infraestructura.
Presentación de Ruby, destacando las características más interesantes del lenguaje desde un punto de vista cualitativo. Poco código en la presentación ya que va a ser usado con live coding con el IRB.
Work para explicar la creación de una App Rails:
* Creando la aplicación Rails
* Utilizando el Scaffold
* Migrando la base de datos
* Agregando validaciones
* Agregando relaciones entre los modelos
* Utilizando Nested Routes
* Utilizando View Helpers
* Agregando AJAX
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
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
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.
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.
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.
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
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
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.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
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/
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
2. “Building good software is not always easy,
but implementing agile practices with the
Ruby language and the Rails
framework can greatly simplify the
process.”
5. Iterative
Development
Working software is delivered to the client at regular,
short intervals. Client feedback is used to
make changes to the software specifications at any stage
in the development.
The client is asked to be fully engaged throughout the
development process.
6. Unrestricted communication between programmers and
clients.
Face to face communication is preferred over
specification documents.
The client can makes changes at anytime, and the
website can even be tested in production mode to get
user feedback.
Open
Collaboration
7. Changes to the software specifications
are welcome even in late stages of development.
Adaptability
14. 10.times do
puts "hola"
end
an_array.group_by {|a| a.type }
objects.each do |obj|
e.save!
end
[1,2,3,4,5,6,7].select{|x| x % 2 == 0}
File.open("config.txt") do |in|
in.each_line do |line|
process_config_line(line)
end
end
Making programming trulyMaking programming truly fun......
15. 10.times do
puts "hola"
end
an_array.group_by {|a| a.type }
objects.each do |obj|
e.save!
end
[1,2,3,4,5,6,7].select{|x| x % 2 == 0}
File.open("config.txt") do |in|
in.each_line do |line|
process_config_line(line)
end
end
Making programming trulyMaking programming truly fun......
class Product < ActiveRecord::Base
belogns_to :manufacturer
has_many :components
validates_presence_of :name, :price
validates_length_of :name, :maximum => 35
after_save :call_some_method
end
In Rails:
17. “Ruby” and “Ruby on Rails”
are not the same thing
Ruby
A Programming Language
1993 by Yukihiro “Matz” Matsumoto
18. “Ruby” and “Ruby on Rails”
are not the same thing
Ruby
A Programming Language
1993 by Yukihiro “Matz” Matsumoto
Ruby on Rails
Web Application Framework written in Ruby
2004 by David Heinemeier Hansson
19. Rubyis an Object Oriented scripting language.
Clean syntax.
Easy to learn.
Less and more redeable code.
Principle of Least Surprise (POLS).
Shorter development times.
Simple but powerful.
No compilation cycle.
21. Everything in Rails is
Ruby code
((SQLSQL andand JavaScriptJavaScript are abstracted)are abstracted)
22. ““Ruby successfully combines Smalltalk'sRuby successfully combines Smalltalk's
conceptual elegance, Python's ease of useconceptual elegance, Python's ease of use
and learning, and Perl's pragmatism.”and learning, and Perl's pragmatism.”
Curt Hibbs (O'Reilly Author)Curt Hibbs (O'Reilly Author)
““You can express ideas naturally andYou can express ideas naturally and
cleanly in Ruby code. This leads tocleanly in Ruby code. This leads to
programs that are easy to write and (just asprograms that are easy to write and (just as
importantly) are easy to read months later.”importantly) are easy to read months later.”
Dave Thomas (Agile Web Development withDave Thomas (Agile Web Development with
Rails)Rails)
23. Railsis an MVCweb framework where Models, views, and
controllers are fully integrated.
You automatically get all the benefits of an MVC design without the hassle of
explicitly configuring each component to play well with the others.
user@comp:~/$ rails myrailsapp
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create config/initializers
create db
create doc
create lib
create lib/tasks
...
24. ...
<% for client in @clients %>
<tr>
<td><%=h client.name %></td>
<td><%=h client.age %></td>
</tr>
<% end %>
...
Vapp/views/clients/index.html.erb
class Client < ActiveRecord::Base
#nothing here
end
Mapp/models/client.rb
class ClientsController < ApplicationController
def index
@clients = Client.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @clients }
end
end
...
end
Capp/controllers/clients_controller.rb
...
<tr>
<td>Damian Garcia</td>
<td>28</td>
</tr>
<tr>
<td>Gustavo Brey</td>
<td>28</td>
</tr>
...
Resulthttp://localhost:3000/clients
27. Instead of asking questions like:Instead of asking questions like:
“How do I get function x to call method y?”“How do I get function x to call method y?”
Developer is able to focus on how to do somethingDeveloper is able to focus on how to do something
He is freed to focus more on the general business logicHe is freed to focus more on the general business logic
of the application.of the application.
Rails uses simple naming conventions and clever useRails uses simple naming conventions and clever use
of reflection to make your work easier with near-zeroof reflection to make your work easier with near-zero
configurationconfiguration
29. Repeating code as little as possible makes it easier to make
changes later on in the development cycle.
If the code only exists in one place, it only needs to be changed in
one place.
32. exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/clients
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/clients/index.html.erb
create app/views/clients/show.html.erb
create app/views/clients/new.html.erb
create app/views/clients/edit.html.erb
create app/views/layouts/clients.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/clients_controller.rb
create test/functional/clients_controller_test.rb
create app/helpers/clients_helper.rb
route map.resources :clients
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/client.rb
create test/unit/client_test.rb
create test/fixtures/clients.yml
exists db/migrate
create db/migrate/20080812145516_create_clients.rb
Where the Templates Go
Within this directory, the
convention is to have a separate
subdirectory for the views of each
controller
By Convention:
usr@comp:~/myapp$ ruby script/generate scaffold client name:string age:integer comment:text
33. exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/clients
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/clients/index.html.erb
create app/views/clients/show.html.erb
create app/views/clients/new.html.erb
create app/views/clients/edit.html.erb
create app/views/layouts/clients.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/clients_controller.rb
create test/functional/clients_controller_test.rb
create app/helpers/clients_helper.rb
route map.resources :clients
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/client.rb
create test/unit/client_test.rb
create test/fixtures/clients.yml
exists db/migrate
create db/migrate/20080812145516_create_clients.rb
Where the Templates Go
Within this directory, the
convention is to have a separate
subdirectory for the views of each
controller
Each directory contains templates
named after the actions in the
corresponding controller
By Convention:
usr@comp:~/myapp$ ruby script/generate scaffold client name:string age:integer comment:text
34. Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
35. Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
36. Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
usr@comp:~/myapp$ ruby script/console
Loading development environment (Rails 2.3.2)
>>
37. usr@comp:~/myapp$ ruby script/console
Loading development environment (Rails 2.3.2)
>>
Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
38. usr@comp:~/myapp$ ruby script/console
Loading development environment (Rails 2.1.0)
>>
Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
client1 = Client.create(:name => "Gustavo Brey", :age =>
"28")
39. usr@comp:~/myapp$ ruby script/console
Loading development environment (Rails 2.1.0)
>>
Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
client1 = Client.create(:name => "Gustavo Brey", :age =>
"28")
=> #<Client id: 2, name: "Gustavo Brey", age: 28,
comments: nil, created_at: "2008-08-12 20:23:55",
updated_at: "2008-08-12 20:23:55">
>>
40. usr@comp:~/myapp$ ruby script/console
Loading development environment (Rails 2.1.0)
>>
Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
client1 = Client.create(:name => "Gustavo Brey", :age =>
"28")
=> #<Client id: 2, name: "Gustavo Brey", age: 28,
comments: nil, created_at: "2008-08-12 20:23:55",
updated_at: "2008-08-12 20:23:55">
>> client1.name
41. usr@comp:~/myapp$ ruby script/console
Loading development environment (Rails 2.1.0)
>>
Active Record doesn't requiere a mapping
file.
A developer doesn't need to code getters
and setters, or even the properties of the
class.
By Convention, ActiveRecord is
able to determine that the Client class will
map to the CLIENTS table in the DB, the
same with fields in table.
app/models/client.rb
class Client < ActiveRecord::Base
end
client1 = Client.create(:name => "Gustavo Brey", :age =>
"28")
=> #<Client id: 2, name: "Gustavo Brey", age: 28,
comments: nil, created_at: "2008-08-12 20:23:55",
updated_at: "2008-08-12 20:23:55">
>> client1.name
=> "Gustavo Brey"
42. exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/clients
exists app/views/layouts/
exists test/functional/
exists test/unit/
exists public/stylesheets/
create app/views/clients/index.html.erb
create app/views/clients/show.html.erb
create app/views/clients/new.html.erb
create app/views/clients/edit.html.erb
create app/views/layouts/clients.html.erb
identical public/stylesheets/scaffold.css
create app/controllers/clients_controller.rb
create test/functional/clients_controller_test.rb
create app/helpers/clients_helper.rb
route map.resources :clients
dependency model
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/client.rb
create test/unit/client_test.rb
create test/fixtures/clients.yml
exists db/migrate
create db/migrate/20080812145516_create_clients.rb
When you generate a
controller Rails also
creates a layout for
that controller.
DRY, use Layouts
usr@comp:~/myapp$ ruby script/generate scaffold client name:string age:integer comment:text
You have the same look and
feel which needs to be
repeated in each of the
actions rhtml files.
The same functionality may
appear in multiple places.
Multiple pages may contain the
same snippets of rendered
HTML.
When Rails requests to render
a template within a controller, it
renders the one who you ask
for and also render a layout
template.
43. DRY, use Partials Partials ("partial views") are fragments of RHTML
that can be inserted into a view.
They exist to make the view logic simpler.
44. DRY, use Partials Partials ("partial views") are fragments of RHTML
that can be inserted into a view.
They exist to make the view logic simpler.
app/views/clients/edit.html.erb
<h1>Editing client</h1>
<% form_for(@client) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :age %><br />
<%= f.text_field :age %>
</p>
<p>
<%= f.label :comments %><br />
<%= f.text_area :comments %>
</p>
<p>
<%= f.submit “Update” %>
</p>
<% end %>
<%= link_to 'Back', clients_path %>
45. DRY, use Partials Partials ("partial views") are fragments of RHTML
that can be inserted into a view.
They exist to make the view logic simpler.
app/views/clients/edit.html.erb app/views/clients/new.html.erb
<h1>Editing client</h1>
<% form_for(@client) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :age %><br />
<%= f.text_field :age %>
</p>
<p>
<%= f.label :comments %><br />
<%= f.text_area :comments %>
</p>
<p>
<%= f.submit “Update” %>
</p>
<% end %>
<%= link_to 'Back', clients_path %>
<h1>New client</h1>
<% form_for(@client) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :age %><br />
<%= f.text_field :age %>
</p>
<p>
<%= f.label :comments %><br />
<%= f.text_area :comments %>
</p>
<p>
<%= f.submit “Create” %>
</p>
<% end %>
<%= link_to 'Back', clients_path %>
46. DRY, use Partials Partials ("partial views") are fragments of RHTML
that can be inserted into a view.
They exist to make the view logic simpler.
app/views/clients/edit.html.erb app/views/clients/new.html.erb
<h1>Editing client</h1>
<%= render :partial => 'form',
:locals => {:btn_text => "Update"} %>
<%= link_to 'Show', @client %> |
<%= link_to 'Back', clients_path %>
<h1>New client</h1>
<%= render :partial => 'form',
:locals => {:btn_text => "Create"} %>
<%= link_to 'Back', clients_path %>
47. DRY, use Partials Partials ("partial views") are fragments of RHTML
that can be inserted into a view.
They exist to make the view logic simpler.
app/views/clients/edit.html.erb app/views/clients/new.html.erb
<h1>Editing client</h1>
<%= render :partial => 'form',
:locals => {:btn_text => "Update"} %>
<%= link_to 'Show', @client %> |
<%= link_to 'Back', clients_path %>
<h1>New client</h1>
<%= render :partial => 'form',
:locals => {:btn_text => "Create"} %>
<%= link_to 'Back', clients_path %>
app/views/clients/_form.html.erb
<% form_for(@client) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :age %><br />
<%= f.text_field :age %>
</p>
<p>
<%= f.label :comments %><br />
<%= f.text_area :comments %>
</p>
<p>
<%= f.submit btn_text %>
</p>
<% end %>
48. Rails comes bundled with helpers capable of automating tasks such as
creating form fields, using Ajax, embedding assets such as JavaScript and CSS files,
etc.
Occasionally you’ll be looking for a helper that isn’t bundled with the documentation, one
capable of abstracting a task you’ll be using repeatedly in a view. You can do your own
Helper.
text_field(:post, :title, :size => 20)
<input type="text" id="post_title" name="post[title]" size="20" value="#{@post.title}" />
hidden_field(:signup, :pass_confirm)
<input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]"
value="#{@signup.pass_confirm}" />
image_tag("icon")
<img src="/images/icon" alt="Icon" />
app/helpers/students_helper.rb
def result_img_tag(student)
student.result < 4 ? image_tag("red.png") : image_tag("green.png")
end
<table>
<% for student in @students %>
<tr>
<td><%=h student.name %></td>
<td><%=h student.age %></td>
<td><%= result_img_tag(student) %></td>
</tr>
<% end %>
</table>
49. Database agnosticism
Rails supports a wide array of databases, including all the
common production database platforms, MySQL, SQL Server,
DB2, Oracle, SQLite, etc.
54. class ClientsController < ApplicationController
...
# GET /clients/1
# GET /clients/1.xml
def show
@client = Client.find(params[:id])
respond_to do |format|
format.html # render show.html.erb
format.js # render show.js.rjs
format.xml { render :xml => @client }
end
end
...
end
Ajax call
In the RJS file you can express everything in Ruby code:
page.replace_html 'elementId', 'Replacement text'
page.remove 'elementId'
page.insert_html :top, 'myList', '<li>New list element<li>'
page.visual_effect :fade, 'elementId', :duration => 0.5
page[:someform].reset
page[:cart].update render(:partial => 'cart')
page[:list].reload #render list element with partial with the same name
page[:product].set_style :backgroundColor => '#f00'
page.delay(5.seconds) do
page[:something].visualEffect :puff
end
page << “(3).times( function(){ alert('hi!')});” # If you 'have to' use Javascript
page.draggable :product
page.drop_receiving :cart, :url => { :action => 'do_something'}
55. ReST (Representational State Transfer)
config/routes.rb
map.resource :clients
app/controllers/clients_controller.rb
class ClientsController < ActionController::Base
def index
respond_to do |format|
format.html
format.xml { render :xml => @clients }
end
end
def new ... end
def create ... end
def edit ... end
def update ... end
def destroy ... end
end
Action URL HTTP Method
index /clients GET
show /clients/2 GET
new /clients/new GET
create /clients POST
edit /clients/2/edit GET
update /clients/2 PUT
destroy /clients/2 DELETE
The core abstraction in REST is a remote resource instead of a remote procedure call.
Uses TCP/IP naming standards to name resources on the Web
Queries and manipulates those resources with HTTP
Uses standard text-based message formats like XML or HTML to structure data
56. TDD – Test Driven Development
- If you write tests before you write your code, you end up
writing better code.
- Forces you to think before you code.
- Code becomes is more focused and clear.
Write Tests
Write code until tests pass
Try optimizing the code
57. BDD – Behaviour Driven Development
- Less about writing tests, and more about writing specifications.
- Terminology focused on the behavioural aspects of the system
rather than testing.
- “Getting the words right”, this focus not only helps you and other
developers understand your application, but can be used to show your
client that the application is meeting their needs.
- The business, developers, testers, analysts and managers are not only
on the same page but using the same words.
- Developers gain confidence in the systems they build when the
behaviour of that system is confirmed.
“Enable better TDD, by focusing on behavior rather then testing”
Dan North (behaviour-driven.org)
RSpec
is a BDD framework for Ruby. It provides two frameworks for specify how your Ruby
application should behave:
- a Story Framework for describing behaviour at the application level
- a Spec Framework for describing behaviour at the object level
58. Capistrano
- A great tool for deploying your applications.
- It's not just a deploy tool, It lets you to execute commands on
multiple remote machines in parallel.
- Also lets you group your servers by role and specify tasks that
should only be executed for certain roles.
- Easy to extend. Capistrano is written in the Ruby
programming language, and may be extended easily by writing
additional Ruby modules.
- Interfaces with Git and Subversion.
- Is the tool of choice for many Rails developers for automating
deployment.
62. User
id
email
Built-in Database Schema Version Control
20080801031822_create_user.rb rake db:migrate
20080801122231_add_names_column.rb
Migration Files:
63. User
id
email
Built-in Database Schema Version Control
User
id
first_name
last_name
email
20080801031822_create_user.rb rake db:migrate
20080801122231_add_names_column.rb
Migration Files:
64. User
id
email
Built-in Database Schema Version Control
User
id
first_name
last_name
email
20080801031822_create_user.rb rake db:migrate
20080801122231_add_names_column.rb
Migration Files:
20080801442312_combine_name_columns.rb
65. User
id
email
Built-in Database Schema Version Control
User
id
first_name
last_name
email
20080801031822_create_user.rb rake db:migrate
20080801122231_add_names_column.rb
Migration Files:
20080801442312_combine_name_columns.rb
User
id
name
email
66. User
id
email
Built-in Database Schema Version Control
User
id
first_name
last_name
email
20080801031822_create_user.rb rake db:migrate
20080801122231_add_names_column.rb
Migration Files:
20080801442312_combine_name_columns.rb
User
id
name
email
20080801502802_rename_fullname.rb
67. User
id
email
Built-in Database Schema Version Control
User
id
first_name
last_name
email
20080801031822_create_user.rb rake db:migrate
20080801122231_add_names_column.rb
Migration Files:
20080801442312_combine_name_columns.rb
User
id
name
email
20080801502802_rename_fullname.rb
User
id
fullname
email
68. User
id
email
Built-in Database Schema Version Control
User
id
first_name
last_name
email
User
id
name
email
User
id
fullname
email
20080801031822_create_user.rb rake db:migrate
rake db:migrate:down
20080801122231_add_names_column.rb
20080801442312_combine_name_columns.rb
20080801502802_rename_fullname.rb
Migration Files:
69. Most popular choices for
Code Version Control and Tracking tool:
Centralized Repository:
SubversionSubversion + TrackTrack
Distributed Repository:
GitGit + LighthouseLighthouse
76. Comparison of same web application in Java and Rails:
Java Spring/Hibernate Rails
Lines of Code 3293 1164
Number of Classes: 62 55
Number of Methods: 549 126
Configuration Lines 1161 113
The Java app's configuration alone was nearly the size of the entire Rails codebase
Rails application was significantly (15%-30%) faster!
Source: http://www.theserverside.com/news/thread.tss?thread_id=33120
Some Numbers
84. 23 million unique visitors / month
2 million searches / day
More than 48 million requests / day
More than 1500 requests / sec
Source: http://assets.en.oreilly.com/1/event/6/Surviving%20the%20Big%20Rewrite_%20Moving
%20YELLOWPAGES_COM%20to%20Rails%20Presentation.pdf
YellowPages.comYellowPages.com
85. 10th most popular application on Facebook.
Nearly 600,000 active users.
Half a million unique visitors a day and growing fast.
300 million page views a month.
300% monthly growth rate, but that is plateauing.
2.1 million unique visitors in the past month
200 requests per second.
5TB of bandwidth per month.
Source: http://highscalability.com/friends-sale-architecture-300-million-page-view-month-facebook-ror-app
Friends for Sale (Facebook app)Friends for Sale (Facebook app)