The document discusses building a web application using Python and MongoDB to allow development team members to explore MongoDB. It describes setting up projects using TurboGears2, SQLAlchemy, and Ming to work with both SQL and MongoDB databases. The application allows tracking expenses and incomes. SQLAlchemy and Ming ORMs provide similar declarative interfaces, with Ming inspired by SQLAlchemy. Sprox and TGAdmin help generate CRUD functionality. Data is stored using either the SQLAlchemy or Ming ORM approaches.
Rapid and Scalable Development with MongoDB, PyMongo, and MingRick Copeland
This talk, given at PyGotham 2011, will teach you techniques using the popular NoSQL database MongoDB and the Python library Ming to write maintainable, high-performance, and scalable applications. We will cover everything you need to become an effective Ming/MongoDB developer from basic PyMongo queries to high-level object-document mapping setups in Ming.
PyconIE 2016 - Kajiki, the fast and validated template engine your were looki...Alessandro Molina
Kajiki si an XML/HTML template engine born as a replacement for Genshi with specific improvements for speed and an easier inheritance system based on blocks.
A journey through the wonderful world of Node.js C++ addons. This talk was given at the September 8, 2015 NodeMN meetup.
Code: https://github.com/cb1kenobi/nodemn
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.
Rapid and Scalable Development with MongoDB, PyMongo, and MingRick Copeland
This talk, given at PyGotham 2011, will teach you techniques using the popular NoSQL database MongoDB and the Python library Ming to write maintainable, high-performance, and scalable applications. We will cover everything you need to become an effective Ming/MongoDB developer from basic PyMongo queries to high-level object-document mapping setups in Ming.
PyconIE 2016 - Kajiki, the fast and validated template engine your were looki...Alessandro Molina
Kajiki si an XML/HTML template engine born as a replacement for Genshi with specific improvements for speed and an easier inheritance system based on blocks.
A journey through the wonderful world of Node.js C++ addons. This talk was given at the September 8, 2015 NodeMN meetup.
Code: https://github.com/cb1kenobi/nodemn
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.
Supercharging reflective libraries with InvokeDynamicIan Robertson
Reflection is a powerful tool but has traditionally carried with it a performance penalty. This session shows how a combination of InvokeDynamic and bytecode generation can be used to transform a traditional reflection-based library into one in which there is almost no performance penalty. To do so, the presentation starts with a brief need-to-know overview of JVM bytecode and the InvokeDynamic protocol. It then walks through creating a simple JSON marshaling library by using ASM bytecode generation and InvokeDynamic and shows how hand-rolled marshaling code can be rivaled in performance. Techniques for testing this code, including security policies, are also covered.
Vue.js + Django - configuración para desarrollo con webpack y HMRJavier Abadía
Presentación del meetup de Vue.js en Madrid, el 12/Sep/2017 donde explicamos cómo configurar Django y webpack para desarrollar SPAs con Vue.js y backend con Django: incluye configuración de Hot-Module-Reloading, autenticación, API y rutas.
El código de ejemplo se puede encontrar aquí: https://github.com/jabadia/gif_catalog
Our favorite language is now powering everything from event-driven servers to robots to Git clients to 3D games. The JavaScript package ecosystem has quickly outpaced past that of most other languages, allowing our vibrant community to showcase their talent. The front-end framework war has been taken to the next level, with heavy-hitters like Ember and Angular ushering in the new generation of long-lived, component-based web apps. The extensible web movement, spearheaded by the newly-reformed W3C Technical Architecture Group, has promised to place JavaScript squarely at the foundation of the web platform. Now, the language improvements of ES6 are slowly but surely making their way into the mainstream— witness the recent interest in using generators for async programming. And all the while, whispers of ES7 features are starting to circulate…
JavaScript has grown up. Now it's time to see how far it can go.
Powerful JavaScript Tips and Best PracticesDragos Ionita
Javascript Best Practices, IIFE, Immediately invoked function expressions, typeof, instanceof, constructor, random items from an array, generate an array of numbers, append an array to another array, is a number, is an array, remove an item from an array
MongoDB is the trusted document store we turn to when we have tough data store problems to solve. For this talk we are going to go a little bit off the path and explore what other roles we can fit MongoDB into. Others have discussed how to turn MongoDB’s capped collections into a publish/subscribe server. We stretch that a little further and turn MongoDB into a full fledged broker with both publish/subscribe and queue semantics, and a the ability to mix them. We will provide code and a running demo of the queue producers and consumers. Next we will turn to coordination services: We will explore the fundamental features and show how to implement them using MongoDB as the storage engine. Again we will show the code and demo the coordination of multiple applications.
This upload requires better support for ODP formatForest Mars
I uplopaded this version in Open Office .ODP format, which is presumably the reason slideshare messed up the formatting. Slideshare, can we get some better support for open formats, stat?
If you'd like to view these slides, I've re-uploaded this talk in .ppt format.
All you need to know about the JavaScript event loopSaša Tatar
Learn the difference between JavaScript Engine, JavaScript Runtime, what is JavaScript event loop and why we should care.
At the end the presentation goes through a couple of examples and implementations of throttle and debounce utility functions.
Presentation given at the Toulouse JUG in Dec 2019
GraalVM and its native-image component allow building native standalone executables from Java or any other language compiling to Java bytecode like Scala or Kotlin.
This talks goes through the practical steps leading to producing a native executable for a command-line tool, explaining the benefits and also the limits of GraalVM native-image.
Supercharging reflective libraries with InvokeDynamicIan Robertson
Reflection is a powerful tool but has traditionally carried with it a performance penalty. This session shows how a combination of InvokeDynamic and bytecode generation can be used to transform a traditional reflection-based library into one in which there is almost no performance penalty. To do so, the presentation starts with a brief need-to-know overview of JVM bytecode and the InvokeDynamic protocol. It then walks through creating a simple JSON marshaling library by using ASM bytecode generation and InvokeDynamic and shows how hand-rolled marshaling code can be rivaled in performance. Techniques for testing this code, including security policies, are also covered.
Vue.js + Django - configuración para desarrollo con webpack y HMRJavier Abadía
Presentación del meetup de Vue.js en Madrid, el 12/Sep/2017 donde explicamos cómo configurar Django y webpack para desarrollar SPAs con Vue.js y backend con Django: incluye configuración de Hot-Module-Reloading, autenticación, API y rutas.
El código de ejemplo se puede encontrar aquí: https://github.com/jabadia/gif_catalog
Our favorite language is now powering everything from event-driven servers to robots to Git clients to 3D games. The JavaScript package ecosystem has quickly outpaced past that of most other languages, allowing our vibrant community to showcase their talent. The front-end framework war has been taken to the next level, with heavy-hitters like Ember and Angular ushering in the new generation of long-lived, component-based web apps. The extensible web movement, spearheaded by the newly-reformed W3C Technical Architecture Group, has promised to place JavaScript squarely at the foundation of the web platform. Now, the language improvements of ES6 are slowly but surely making their way into the mainstream— witness the recent interest in using generators for async programming. And all the while, whispers of ES7 features are starting to circulate…
JavaScript has grown up. Now it's time to see how far it can go.
Powerful JavaScript Tips and Best PracticesDragos Ionita
Javascript Best Practices, IIFE, Immediately invoked function expressions, typeof, instanceof, constructor, random items from an array, generate an array of numbers, append an array to another array, is a number, is an array, remove an item from an array
MongoDB is the trusted document store we turn to when we have tough data store problems to solve. For this talk we are going to go a little bit off the path and explore what other roles we can fit MongoDB into. Others have discussed how to turn MongoDB’s capped collections into a publish/subscribe server. We stretch that a little further and turn MongoDB into a full fledged broker with both publish/subscribe and queue semantics, and a the ability to mix them. We will provide code and a running demo of the queue producers and consumers. Next we will turn to coordination services: We will explore the fundamental features and show how to implement them using MongoDB as the storage engine. Again we will show the code and demo the coordination of multiple applications.
This upload requires better support for ODP formatForest Mars
I uplopaded this version in Open Office .ODP format, which is presumably the reason slideshare messed up the formatting. Slideshare, can we get some better support for open formats, stat?
If you'd like to view these slides, I've re-uploaded this talk in .ppt format.
All you need to know about the JavaScript event loopSaša Tatar
Learn the difference between JavaScript Engine, JavaScript Runtime, what is JavaScript event loop and why we should care.
At the end the presentation goes through a couple of examples and implementations of throttle and debounce utility functions.
Presentation given at the Toulouse JUG in Dec 2019
GraalVM and its native-image component allow building native standalone executables from Java or any other language compiling to Java bytecode like Scala or Kotlin.
This talks goes through the practical steps leading to producing a native executable for a command-line tool, explaining the benefits and also the limits of GraalVM native-image.
Brief introduction to DTrace technologies within OpenSolaris/Solaris 10 and DTrace probes within Apache, PHP and MySQL can provide end to end dynamic tracing of your Drupal based web site..
Robust C++ Task Systems Through Compile-time ChecksStoyan Nikolov
Task-based (aka job systems) engine architectures are becoming the de-facto standard for AAA game engines and software solutions. The talk explains how the task system in the Hummingbird game UI engine was designed to both be convenient and to avoid common programmer pitfalls. Advanced C++ techniques are employed to warn and shield the developer from errors at compile time.
WMQ Toolbox: 20 Scripts, One-liners, & Utilities for UNIX & Windows T.Rob Wyatt
The pipe symbol is your command-line friend. If you string together the right combination of utility programs it is possible to automate really useful administrative tasks, and if you can do it on one line you get to wear the Wizard's hat around the office as an added bonus. So whether you want to become a scripting wizard and impress your friends, or just want to get stuff done, this session is for you.
Description
At Stitch Fix most application logs are output in a structured JSON format for simpler debugging and downstream consumption.
In this talk we’ll cover in more detail why structured logs are useful and provide leverage, caveats to using them, and how simple it is to get one going with Python.
Abstract
At Stitch Fix most application logs are output in a structured JSON format for simpler debugging and downstream consumption. For example, data scientists can add a field to their application log and it will automatically turn up as a parsed field in Elasticsearch for easy dashboarding and querying via Kibana, or be easily found and queried in Presto. In this talk we’ll cover in more detail why structured logs are useful and provide leverage, caveats to using them, and how simple it is to get one going with Python.
Pomodori is a tool for the Pomodoro Technique written using HotCocoa under MacRuby, the Ruby implementation for Mac OS. In this talk you'll see how easy you can write native Cocoa applications like Pomodori thanks to HotCocoa, a thin Ruby DSL around the Cocoa framework. In this presentation you can also find how to test first the UI and which architecture fits TDD the best.
DTrace and SystemTap are dynamic tracing frameworks available for Solaris and Linux respectively. This session will give an overview of the static DTrace probes available in both Drizzle and MySQL and show numerous examples of scripts that utilize these probes. Mixing dynamic and static probes will also be discussed.
Talk given by Chris McCuller, Associate Software Engineer at Salesforce, at GEMConf Triangle in August 2016
Did you know you can ember g an ember g? Mind blown? Take a wading pool splash into how to use Ember's blueprints to streamline common development tasks.
Monitoring as Code: Getting to Monitoring-Driven Development - DEV314 - re:In...Amazon Web Services
“Infrastructure as Code” has changed not only how we think about configuring infrastructure, but about the infrastructure itself. AWS has been at the core of this movement, enabling your infrastructure teams to benefit from software engineering best practices such as CI/CD, automated testing, and repeatable deployments. Now that you have mastered the art of managing your infrastructure as code, it’s time to leverage these same lessons for monitoring and metrics. In this session, we dive into how you can leverage tooling such as AWS, Terraform, and Datadog to programmatically define your monitoring so that you that you can scale your organizational observability along with your infrastructure, and attain consistency from local development all the way through production.
Session sponsored by Datadog, Inc.
E bpf and dynamic tracing for mariadb db as (mariadb day during fosdem 2020)Valeriy Kravchuk
eBPF on Linux 4.9+ is probably the best way to study performance problems. Basic usage of ftrace interface, bcc tools and bpftrace, as well as main bpftrace features and commands are presented. Several typical use cases
(including adding dynamic probes to MariaDB servers, working with stack traces and creating Flame Graphs) are discussed.
idsecconf2023 - Satria Ady Pradana - Launch into the Stratus-phere Adversary ...idsecconf
Adversary Simulation pada lingkungan cloud memiliki karakteristik unik sehingga memerlukan pendekatan khusus. Stratus menawarkan fleksibilitas dalam melakukan simulasi attack secara native pada lingkungan cloud. Presentasi ini akan memberikan penjelasan tentang penggunaan Stratus dalam adversary simulation dan bagaimana mengembangkan skenario khusus sesuai kebutuhan.
What's new with JavaScript in GNOME: The 2020 edition (GUADEC 2020)Igalia
By Philip Chimento.
This talk is about all the improvements made in GNOME's JavaScript platform in the past year. If you are writing code for a GNOME app or shell extension that uses JavaScript and you want to know how to modernize your code or use new language features, this talk will be interesting for you. If you are curious
about the progress made on the garbage collection bug, and what needs to happen before it can be fixed, this talk will be interesting for you. And if you are interested in working on a JavaScript engine and want some ideas for projects
to get started with, from beginner through expert level, this talk will definitely be interesting for you!
(c) GUADEC 2020
July 22nd - 28th, 2020
https://2020.guadec.org
BarcelonaJUG2016: walkmod: how to run and design code transformationswalkmod
walkmod is an open source tool to apply and share code conventions. Code conventions are internally designed as code transformations. In this sessions we will se how to run walkmod in a real project and how to contribute designing automatic quick fixes for existing PMD, Checkstyle or Sonar rules
Apache Arrow has set itself as the standard data interchange format between processes and systems dealing with high amounts of data in the data engineering field. PyArrow is the Python implementation of Apache Arrow and it provides access to all Apache Arrow features.
Arrow has evolved as a on-disk storage format, an in-memory format, a format to exchange data over network and a compute engine. This allows it to be used as a full-stack solution in the data engineering world, and we will see how we can combine those capabilities to build a fully functional data engineering solution that is incredibly effective and fast.
ROOM
EP2016 - Moving Away From Nodejs To A Pure Python Solution For AssetsAlessandro Molina
Presents the DukPY project ( https://github.com/amol-/dukpy ) which aims at making possible to run Javascript code and perform common assets transformation steps through the WebAssets framework
EuroPython 2015 - Storing files for the web is not as straightforward as you ...Alessandro Molina
DEPOT ( http://depot.readthedocs.org/en/latest/ ) is a file storage framework born from the experience on a project that saved a lot of files on disk, until the day it went online and the customer system engineering team decided to switch to Heroku, which doesn’t support storing files on disk.
The talk will cover the facets of a feature “saving files” which has always been considered straightforward but that can become complex in the era of cloud deployment and when infrastructure migration happens.
After exposing the major drawbacks and issues that big projects might face on short and long terms with file storage the talk will introduce DEPOT and how it tried to solve most of the issues while providing a super-easy-to-use interface for developers. We will see how to use DEPOT to provide attachments on SQLAlchemy or MongoDB and how to handle problems like migration to a different storage backend and long term evolution.
Like SQLAlchemy makes possible to switch your storage on the fly without touching code, DEPOT aims at making so possible for files and even use multiple different storages together.
Beaker is probably the most widespread cross-framework solution to manage sessions and caching in the python web ecosystem.
Born in 2005 from Pylons author has been historically maintained together with the Pylons framework. Since Pylons has been deprecated in favour of Pyramid, the Pylons Project team decided to write a custom session management solution for Pyramid and let the user handle more advanced backends.
Since 2015 beaker maintenance has been passed to the TurboGears project who ported it to a fully native Python3 solution and it’s stille the de-facto standard for Sessions and Caching on Bottle.
The talk will cover the advantages and drawbacks of the architectural decisions behind the 10 years of history of Beaker, the drawbacks we discovered while porting it to Python3 and which have been the “wrong choices” and how we plan to solve them and make it shine again as the best whole-around solution for Sessions and Caching on WSGI.
PyConFR 2014 - DEPOT, Story of a file.write() gone wrongAlessandro Molina
DEPOT ( http://depot.readthedocs.org/en/latest/ ) is a file storage framework born from the experience on a project that saved a lot of files on disk, until the day it went online and the customer system engineering team diceded to switch to Heroku, which doesn't support storing files on disk.
Like SQLAlchemy makes possible to switch your storage on the fly without touching code, DEPOT aims at making so possible for files and even use multiple different storages together.
PyConUK 2014 - PostMortem Debugging and Web Development UpdatedAlessandro Molina
Developers tend to ignore that users can be more creative than them. Use their debugging skills for your own benefit: post-mortem debugging is one of the most important features your web framework can provide.
This talk will cover some of the simplest practices and available tools for debugging on production environments and to immediately improve quality of your web applications.
Developers tend to ignore that users can be more creative than them. Use their debugging skills for your own benefit: post-mortem debugging is one of the most important features your web framework can provide.
This talk will cover some of the simplest practices and available tools for debugging on production environments and to immediately improve quality of your web applications.
MongoTorino 2013 - BSON Mad Science for fun and profitAlessandro Molina
The talk will cover how to use BSON directly as an exchange protocol to gain speed and advanced types.
BSON is the underlying serialization protocol used by MongoDB to store and represent data.
Whenever we retrieve data from MongoDB we get it as BSON, then our drivers decode it just so that our web service can encode it back in JSON.
We will see how to take advantage of BSON for fun and speed skipping this double step by directly fetching BSON and decoding it at client side.
PyConUK2013 - Validated documents on MongoDB with MingAlessandro Molina
Ming is a SQLAlchemy-inspired object-document mapper (ODM) for MongoDB developed at SourceForge which is also used by the TurboGears2 web framework to provide mongodb support.
After a short introduction to the basic Ming layer we will cover the Ming Object Document Mapper layer to show how to take advantage of its Unit Of Work to avoid performing incomplete changes and achieve relations between collections.
The last part of the talk will show how to use Ming to perform lazy migration of data when your schema changes and how to drop below the ODM layer to achieve maximum speed.
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...Alessandro Molina
Web development is more and more moving to rich JavaScript and mobile applications, building a fast and reliable API server has become a core foundation in such situations.
The new 2.3 version of TurboGears2 is aiming at providing a great toolkit on both Python3 and Python2 for such cases thanks to builtin support for:
New minimal mode for small single file applications.
Gevent based deploy on Mozilla Circus using the new GearBox toolkit
The TGJSonAutodoc sphinx extension for automatically documenting JSON based API
Out of the box support for MongoDB using the Ming ODM
The DebugBar profiler and query analyzer for MongoDB
Those tools can make really easy to quickly prototype a fully working and documented web service, greatly improving a developer life and quality of the services. Even deployment can become a single line command thanks to the GearBox toolkit integration with Mozilla Circus while the jsoncall sphinx extension can really speed up service documentation thanks to its tgjsonautodoc directive.
PyGrunn2013 High Performance Web Applications with TurboGearsAlessandro Molina
Users are getting more and more used to fast websites, a second or two is way too much before they leave the page. Since version 2.2 TurboGears has focused on providing more tools to create faster web applications and improving its speed constantly. The latest 2.3 version, the first to support Python3 is up to 4x faster than the previous and provides a great toolset to make fast pages. The talk will focus on showcasing the tools provided by the framework to increase speed of your web applications and provide some tips and tricks to get maximum speed from the framework itself.
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!
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
GridMate - End to end testing is a critical piece to ensure quality and avoid...ThomasParaiso2
End to end testing is a critical piece to ensure quality and avoid regressions. In this session, we share our journey building an E2E testing pipeline for GridMate components (LWC and Aura) using Cypress, JSForce, FakerJS…
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
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionAggregage
Join Maher Hanafi, VP of Engineering at Betterworks, in this new session where he'll share a practical framework to transform Gen AI prototypes into impactful products! He'll delve into the complexities of data collection and management, model selection and optimization, and ensuring security, scalability, and responsible use.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
Threats to mobile devices are more prevalent and increasing in scope and complexity. Users of mobile devices desire to take full advantage of the features
available on those devices, but many of the features provide convenience and capability but sacrifice security. This best practices guide outlines steps the users can take to better protect personal devices and information.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfPeter Spielvogel
Building better applications for business users with SAP Fiori.
• What is SAP Fiori and why it matters to you
• How a better user experience drives measurable business benefits
• How to get started with SAP Fiori today
• How SAP Fiori elements accelerates application development
• How SAP Build Code includes SAP Fiori tools and other generative artificial intelligence capabilities
• How SAP Fiori paves the way for using AI in SAP apps
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...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.
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.
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...Neo4j
Leonard Jayamohan, Partner & Generative AI Lead, Deloitte
This keynote will reveal how Deloitte leverages Neo4j’s graph power for groundbreaking digital twin solutions, achieving a staggering 100x performance boost. Discover the essential role knowledge graphs play in successful generative AI implementations. Plus, get an exclusive look at an innovative Neo4j + Generative AI solution Deloitte is developing in-house.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
1. From SQLAlchemy to Ming with
TurboGears2
Alessandro Molina
alessandro.molina@axant.it
@__amol__
2. Simple, Stupid, Serviceable
● We wanted to offer to development team
members the opportunity to take a first look at
MongoDB.
● We wanted to do this by letting them write an
actual web app using Python.
● We wanted a real use case: “expenses and
incomings” tracking (serviceable)
● We wanted everyone to understand how it is
expected to work (stupid)
● Must be blazing fast to implement, we don't have
a lot of time (simple)
4. Python Technologies
● Why? Needed a WebApp ready in 5 minutes while being
possible to quickly play with the code
● Python: Our team is manly python developers based
● TurboGears2: Our team is used to TG. Object Dispatch is really
comfortable and the framework is incredibly fast to start with
while still making possible to quickly get under the hood.
● Genshi: clean and plain xhtml, even designers can understand it,
also it came by default
● ToscaWidgets: Can do most of the HTML for us
● Sprox: Can do most of the CRUD for us
5. Quickstarting Our Project
(tg2dev)Quasar-2:tuts amol$ paster quickstart mt_sqla
● Project Structure Enter package name [mt_sqla]: paster quickstart mt_sqla
(tg2dev)Quasar-2:tuts amol$
Enter package name [mt_sqla]:
Would you prefer mako templates? (yes/[no]):
Do you need prefer mako templates? (yes/[no]):
Would you authentication and authorization in this project? ([yes]/no):
with Controllers Selected need implied templates: authorization in this project? ([yes]/no):
Do you and authentication and
Selected and implied templates:
tg.devtools#turbogears2 TurboGears 2. Standard Quickstart Template
tg.devtools#turbogears2 TurboGears 2. Standard Quickstart Template
for Index Page (tg2dev)Quasar-2:mt-sqla amol$ python setup.py develop
(tg2dev)Quasar-2:mt-sqla amol$ python setup.py develop
paster srunning develop
paster srunning develop
Installed /Users/amol/wrk/tuts/mt-sqla
Installed /Users/amol/wrk/tuts/mt-sqla
● Models for Users, (tg2dev)Quasar-2:mt-sqla amol$ paster setup-app development.ini
(tg2dev)Quasar-2:mt-sqla amol$ paster setup-app development.ini
Running setup_config() from mt_sqla.websetup
Running setup_config() from mt_sqla.websetup
Creating tables
Groups and
Creating tables
(tg2dev)Quasar-2:mt-sqla amol$ paster serve development.ini
(tg2dev)Quasar-2:mt-sqla amol$ paster serve development.ini
Starting server in PID 23939.
Permission
serving on server in PID 23939.
Starting http://127.0.0.1:8080
serving on http://127.0.0.1:8080
● Authentication (tg2dev)Quasar-2:tuts amol$ paster quickstart –ming mt_ming
Enter package name [mt_ming]: paster quickstart –ming mt_ming
(tg2dev)Quasar-2:tuts amol$
Enter package name [mt_ming]:
and Authorization
Would you prefer mako templates? (yes/[no]):
Do you need prefer mako templates? (yes/[no]):
Would you authentication and authorization in this project? ([yes]/no):
Selected need implied templates: authorization in this project? ([yes]/no):
Do you and authentication and
Selected and implied templates:
tg.devtools#turbogears2 TurboGears 2. Standard Quickstart Template
tg.devtools#turbogears2 TurboGears 2. Standard Quickstart Template
● Both on SQLA (tg2dev)Quasar-2:mt-ming amol$ python setup.py develop
(tg2dev)Quasar-2:mt-ming amol$ python setup.py develop
paster srunning develop
paster srunning develop
Installed /Users/amol/wrk/tuts/mt-ming
and Ming
Installed /Users/amol/wrk/tuts/mt-ming
(tg2dev)Quasar-2:mt-ming amol$ paster setup-app development.ini
(tg2dev)Quasar-2:mt-ming amol$ paster setup-app development.ini
Running setup_app() from mt_ming.websetup
Running setup_app() from mt_ming.websetup
(tg2dev)Quasar-2:mt-ming amol$ paster serve development.ini
(tg2dev)Quasar-2:mt-ming amol$ paster serve development.ini
Starting server in PID 23939.
serving on server in PID 23939.
Starting http://127.0.0.1:8080
serving on http://127.0.0.1:8080
7. SQLAlchemy
● Supports pratically everything: PostgresSQL,
MySQL, SQLite, Firebird, Oracle, MSSQL, Sybase,
DB2, Informix, SAPDB, MSAccess
● Declarative ORM layer with access to a powerful and
flexible query builder
● Unlike many tools, it never enforces schemas or
relies on naming conventions of any kind.
● Unit Of Work system organizes pending
insert/update/delete operations into queues and
flushes them all in one batch (Patterns of Enterprise
Application Architecture - Martin Fowler)
8. Python MongoDB Ecosystem
● PyMongo: Driver for MongoDB, everything is a dictionary
● MongoEngine: ORM, query language is familiar to Django users
● Ming: ORM, query language is familiar to SQLAlchemy users
● MongoKit: ORM, written to be as simple and light as possible
MongoKit Ming
class BlogPost(Document): class WikiComment(MappedClass):
structure = { class __mongometa__:
'title':unicode, session = session
'body':unicode, name = 'wiki_comment'
'author':unicode,
'date_creation':datetime.datetime, _id = FieldProperty(schema.ObjectId)
'rank':int text=FieldProperty(str, if_missing='')
} page_id = ForeignIdProperty('WikiPage')
page=RelationProperty('WikiPage')
tutorial.BlogPost.find({'body': {'$exists': True}})
WikiComment.query.find({'text':{'$exists':True}})
MongoEngine PyMongo
class User(Document): post = {"author": "Mike",
email = StringField(required=True) ... "text": "My first blog post!",
first_name = StringField(max_length=50) ... "tags": ["mongodb", "python"],
last_name = StringField(max_length=50) ... "date": datetime.datetime.utcnow()}
Users.objects(age__lte=18) db.posts.find({"author": "Mike"})
9. Ming
● SQLAlchemy inspired, easy to catch up if you are
used to SQLAlchemy
● Declarative ORM layer, use ORM through objects
and get direct access to mongo through collections
● Integrated Migrations (deprecated attributes and
even on-demand lazy migration code)
● Unit of Work, we tried it, we loved it, we wanted it
even on MongoDB
● Mongo In Memory, complete implementation of
MongoDB in memory for unit testing
10. Some Little Magic (TGAdmin)
● It did CRUD for us.
● Works both with SQLAlchemy and Ming
● Comes for free with TurboGears2
● Sprox based, deeply customizable
11. Storing our Data
from sqlalchemy import Table, Column from ming import schema as s
from sqlalchemy import Table, Column
from sqlalchemy.types import Unicode, Integer, from ming import schema as s
from ming.orm import FieldProperty, Mapper
Float, sqlalchemy.types import Unicode, Integer,
from DateTime from ming.orm import FieldProperty, Mapper
from ming.orm.declarative import MappedClass
Float, DateTime
from datetime import datetime from ming.orm.declarative import MappedClass
from session import DBSession
from datetime import datetime from session import DBSession
from datetime import datetime
from datetime import datetime
class MoneyTransfer(DeclarativeBase): class MoneyTransfer(MappedClass):
class MoneyTransfer(DeclarativeBase):
__tablename__ = 'money_transfers' class MoneyTransfer(MappedClass):
class __mongometa__:
__tablename__ = 'money_transfers' class __mongometa__:
session = DBSession
session = DBSession
name = 'money_transfers'
name = 'money_transfers'
uid = Column(Integer, autoincrement=True, _id = FieldProperty(s.ObjectId)
uid = Column(Integer,primary_key=True)
autoincrement=True, _id = FieldProperty(s.ObjectId)
date = FieldProperty(s.DateTime,
primary_key=True)
date = Column(DateTime, default=datetime.now) date = FieldProperty(s.DateTime,
if_missing=datetime.now)
sign = =Column(Integer, default=1)
date Column(DateTime, default=datetime.now) if_missing=datetime.now)
sign = FieldProperty(s.Int, if_missing=1)
sign = Column(Integer, default=1)
description = Column(Unicode(255)) sign = FieldProperty(s.Int, if_missing=1)
description = FieldProperty(s.String)
description = Column(Unicode(255))
value = Column(Float, default=0) description = FieldProperty(s.String)
value = FieldProperty(s.Float, if_missing=0)
value = Column(Float, default=0) value = FieldProperty(s.Float, if_missing=0)
12. Retrieving and Displaying Data
from tw.forms import DataGrid from tw.forms import DataGrid
from tw.forms.datagrid DataGrid
from tw.forms import import Column from tw.forms.datagrid DataGrid
from tw.forms import import Column
from tw.forms.datagrid import Column from tw.forms.datagrid import Column
transactions_grid = DataGrid(fields=[ transactions_grid = DataGrid(fields=[
transactions_grid 'date'),
Column('Date', = DataGrid(fields=[ transactions_grid 'date'),
Column('Date', = DataGrid(fields=[
Column('Date', 'date'),
Column('Description', 'description'), Column('Date', 'date'),
Column('Description', 'description'),
Column('Description', 'description'),
Column('Value', lambda row:row.value*row.sign)]) Column('Description', 'description'),
Column('Value', lambda row:row.value*row.sign)])
Column('Value', lambda row:row.value*row.sign)]) Column('Value', lambda row:row.value*row.sign)])
class RootController(BaseController): class RootController(BaseController):
class RootController(BaseController):
@expose('mt_sqla.templates.index') class RootController(BaseController):
@expose('mt_ming.templates.index')
@expose('mt_sqla.templates.index')
def index(self): @expose('mt_ming.templates.index')
def index(self):
def index(self): DBSession.query(MoneyTransfer).all()
transactions = def index(self): MoneyTransfer.query.find().all()
transactions =
transactions = DBSession.query(MoneyTransfer).all()
total = sum((t.value*t.sign for t in transactions)) transactions = MoneyTransfer.query.find().all()
total = sum((t.value*t.sign for t in transactions))
total = sum((t.value*t.sign for t in transactions))
return dict(page='index', total = sum((t.value*t.sign for t in transactions))
return dict(page='index',
return dict(page='index',
transactions=transactions, return dict(page='index',
transactions=transactions,
transactions=transactions,
transactions_grid=transactions_grid, transactions=transactions,
transactions_grid=transactions_grid,
transactions_grid=transactions_grid,
total=total) transactions_grid=transactions_grid,
total=total)
total=total) total=total)
<div style="width:650px; margin-top:20px;">
<div style="width:650px; margin-top:20px;">
<a href="${tg.url('/admin/moneytransfers/new')}">Add New Transaction</a>
<a href="${tg.url('/admin/moneytransfers/new')}">Add New Transaction</a>
${transactions_grid(transactions)}
${transactions_grid(transactions)}
<div style="text-align:right;"><strong>AVAILABLE:</strong> ${total}</div>
<div style="text-align:right;"><strong>AVAILABLE:</strong> ${total}</div>
</div>
</div>
13. What changed
● Template remained the same. Thanks god we
have an ORM.
● Had to change the model.
● Had to change just 1 line of controller code to
retrieve the data. Ming and SQLA are similar
enough
● Did we really need to change that line? We just
want to get a list of objects...
14. Sprox, abstraction over abstraction
● ORMProvider, provides an abstraction over the ORM
● ORMProviderSelector, automatically detects the provider to
use from a model.
● Mix those together and you have a db independent layer.
● Provider.query(self, entity, limit=None, offset=0, limit_fields=None,
order_by=None, desc=False) → get all objects of a collection
● Provider.get_obj(self, entity, params) → get an object
● Provider.update(self, entity, params) → update an object
● Provider.create(self, entity, params) → create a new object
SQLAlchemy
transactions = DBSession.query(MoneyTransfer).all()
transactions = DBSession.query(MoneyTransfer).all()
Sprox
count, transactions = provider.query(MoneyTransfer)
Ming count, transactions = provider.query(MoneyTransfer)
transactions = MoneyTransfer.query.find().all()
transactions = MoneyTransfer.query.find().all()
15. Experiments Experience
● Starting with a really simple use case made people
get comfortable with MongoDB and feel confident
enough to start learning more complex features.
● The idea of being possible to use sprox to abstract
over the db, making possible to switch back anytime,
created a “safety net” idea in people.
● When people feel safe they start experimenting a lot
more and learn by themselves.