The document discusses different approaches for handling out-of-bounds indexing of containers like std::vector in C++. It examines options like undefined behavior, debug checking, runtime exceptions, index remapping, and automatic resizing. The standard library uses undefined behavior for efficiency but other approaches provide safety checks or well-defined alternate behaviors.
Utah Code Camp, Spring 2016. http://utahcodecamp.com In this presentation I describe modern C++. Modern C++ assumes features introduced in the C++11/14 standard. An overview of the new features is presented and some idioms for mdoern C++ based on those features are presented.
We've all seen the big "macro" features in .NET, this presentation is to give praise to the "Little Wonders" of .NET -- those little items in the framework that make life as a developer that much easier!
Functional coverage is a user-defined coverage which maps
each functionality defined in the test plan to be tested to a
cover point. Whenever the functionality to be tested is hit in
the simulation, the functional coverage point is automatically updated.
Advanced atpg based on fan, testability measures and fault reductionVLSICS Design
A new algorithm based on Input Vector Control (IVC) technique is proposed, which shifts logic gate of a
circuit to its minimum leakage state, when device goes into its idle state. Leakage current in CMOS VLSI
circuit has become a major constrain in a battery operated device for technology node below 90nm, as it
drains the battery even when a circuit is in standby mode. Major concern is the leakage even in run time
condition, here aim is to focus on run time leakage reduction technique of integrated Circuit. It is inherited
by stacking effect when the series transistors are maximized in OFF state condition. This method is
independent of process technology and does not require any additional power supply. This paper gives an
optimized solution of input pattern determination of some small circuit to find minimum leakage vector
considering promising and non-promising node which helps to reduce the time complexity of the algorithm.
Proposed algorithm is simulated using HSPICE simulator for 2 input NAND gate and different standard
logic cells and achieved 94.2% and 54.59 % average leakage power reduction for 2 input NAND cell and
different logics respectively.
Utah Code Camp, Spring 2016. http://utahcodecamp.com In this presentation I describe modern C++. Modern C++ assumes features introduced in the C++11/14 standard. An overview of the new features is presented and some idioms for mdoern C++ based on those features are presented.
We've all seen the big "macro" features in .NET, this presentation is to give praise to the "Little Wonders" of .NET -- those little items in the framework that make life as a developer that much easier!
Functional coverage is a user-defined coverage which maps
each functionality defined in the test plan to be tested to a
cover point. Whenever the functionality to be tested is hit in
the simulation, the functional coverage point is automatically updated.
Advanced atpg based on fan, testability measures and fault reductionVLSICS Design
A new algorithm based on Input Vector Control (IVC) technique is proposed, which shifts logic gate of a
circuit to its minimum leakage state, when device goes into its idle state. Leakage current in CMOS VLSI
circuit has become a major constrain in a battery operated device for technology node below 90nm, as it
drains the battery even when a circuit is in standby mode. Major concern is the leakage even in run time
condition, here aim is to focus on run time leakage reduction technique of integrated Circuit. It is inherited
by stacking effect when the series transistors are maximized in OFF state condition. This method is
independent of process technology and does not require any additional power supply. This paper gives an
optimized solution of input pattern determination of some small circuit to find minimum leakage vector
considering promising and non-promising node which helps to reduce the time complexity of the algorithm.
Proposed algorithm is simulated using HSPICE simulator for 2 input NAND gate and different standard
logic cells and achieved 94.2% and 54.59 % average leakage power reduction for 2 input NAND cell and
different logics respectively.
This slide begins your formal investigation of the C# programming language by presenting a number
of bite-sized, stand-alone topics you must be comfortable with as you explore the .NET Framework.
This slide begins your formal investigation of the C# programming language by presenting a number
of bite-sized, stand-alone topics you must be comfortable with as you explore the .NET Framework.
Worse Is Better, for Better or for WorseKevlin Henney
Presented at GOTO Aarhus 2014 (2nd October 2013)
Over two decades ago, Richard P Gabriel proposed the thesis of "Worse Is Better" to explain why some things that are designed to be pure and perfect are eclipsed by solutions that are seemingly limited and incomplete. This is not simply the observation that things that should be better are not, but that some solutions that were not designed to be the best were nonetheless effective and were the better option. We find many examples of this in software development, some more provocative and surprising than others. In this talk we revisit the original premise and question in the context of product development and user experience, challenging some common ideas of what delights the user, the customer and the market and what should (or should not) be simple in a product.
Presented at NDC London (5th December 2014)
How much should you rely on your IDE to govern your coding style? How many asserts should a test case have or not have? How much work should a constructor (not) do? How do you name your classes and other identifiers? How closed or open should your classes be? How do you lay out your code? These questions and others have standard answers based on received and repeated mantras, practices that are communicated in good faith to be passed on as habits. But how much reason supports these assertions? It turns out that the advice often fails, even for the novices they are intended to guide, or simply doesn't make sense.
This talk has little respect for ritual and tradition and takes no prisoners: What actually makes sense and what doesn't when it comes to matters of practice? What guidelines offer the greatest effect and the greatest learning?
Keynote presented at SDD (12th May 2015)
Somewhere in the heart of a development process, essential to the very being of a product's existence, are the people who write, consider and wrestle with code. What motivates and demotivates them? What are the intellectual challenges and rewards? What are the skills they have and need and cognitive biases and environment they work with and against?
This talk by the editor of 97 Things Every Programmer Should Know considers the act of programming and those who do it and want to get better at it, from the perspective of development process to craft, from architecture to code.
Exploring Microoptimizations Using Tizen Code as an ExamplePVS-Studio
When talking about PVS-Studio's diagnostic capabilities in our articles, we usually leave out its recommendations about the use of microoptimizations in C and C++ code. These are not as crucial as diagnostics detecting bugs, of course, but they make an interesting subject for discussion as well.
In the glorious future, cancer will be cured, world hunger will solved and all because everything was directly instrumented for Prometheus. Until then however, we need to write exporters. This talk will look at how to go about this and all the tradeoffs involved in writing a good exporter.
An Experiment with Checking the glibc LibraryAndrey Karpov
We have recently carried out an experiment with checking the glibc library by PVS-Studio. Its purpose was to study how good our analyzer is at checking Linux-projects. The basic conclusion is, not much good yet. Non-standard extensions used in such projects make the analyzer generate a huge pile of false positives. However, we have found some interesting bugs.
Some of the most common and easy-to-calculate/easy-to-measure code metrics. Understanding these can help you make your code better: avoiding code rot and writing maintainable code all starts here. Content is created for C# .net, however, the underlying principles apply to other languages/frameworks as well.
How to make fewer errors at the stage of code writing. Part N3.PVS-Studio
This is the third article where I will tell you about a couple of new programming methods that can help you make your code simpler and safer. You may read the previous two posts here [1] and here [2]. This time we will take samples from the Qt project.
An important event has taken place in the PVS-Studio analyzer's life: support of C#-code analysis was added in the latest version. As one of its developers, I couldn't but try it on some project. Reading about scanning small and little-known projects is not much interesting of course, so it had to be something popular, and I picked MonoDevelop.
Presented at .NET South West (2024-03-26)
https://www.meetup.com/dotnetsouthwest/events/299766807/
One of the greatest shifts in modern programming practices has been how programmers across many different domains, languages and environments have embraced unit testing. Good unit testing, however, is more than waving NUnit at your C# source. Tests help to make long-term product development cost effective rather than a cost centre, they underpin the effective flow of CI/CD and reduce failure demand on a team.
But the discussion of unit testing goes further than simply writing tests: what makes a good unit test? It is not enough to have tests; poor quality tests can hold back development just as good tests can streamline it. This session provides a perspective on what good unit tests (GUTs) can look like with a couple of examples.
Presented at Agile meets Architecture (2023-10-05)
Video at https://www.youtube.com/watch?v=LLEXAdO3X1o
One of the (most overlooked) principles of the Manifesto for Agile Software Development is that "Continuous attention to technical excellence and good design enhances agility". All too often, work that focuses on addressing technical issues is deprioritised in the name of focusing on business value.
Is there a case for technical excellence — in code, in architecture, in people — beyond its appearance on a might-as-well-be-hidden page on a manifesto that's over two decades old? Is technical excellence only the concern of technical roles? Is a good architecture in conflict with business value or a vehicle for it?
This session looks to go beyond buzzwords to build a case for technical excellence that appeals to all roles in a development organisation, noting that "The best architectures, requirements, and designs emerge from self-organizing teams".
Presented online for Build Stuff meetup (https://www.buildstuff.events/events/online-build-stuff-meetup-with-kevlin-henney-and-cassandra-faris)
Whether we are talking about software architecture, coding practices or our development process, it's important to keep it real. All too often we find ourselves attracted to ideas that sound great in theory, but may not work out in practice. All too often we assume we are right — the planned release schedule, the key architectural decisions, the good practices we saw in a blog — but fail to adjust for reality. We fail to acknowledge that our knowledge was incomplete or that the situation has changed, sticking to the plan and practice regardless.
In this talk we will look at what an empirical approach to development means in practice, why it is that up-front architecture is risky and expensive, why it is that most teams who say they're doing agile development are not, and how we can use uncertainty and instability to structure our time and our code.
Presented online for C++ on Sea (2020-07-17)
Video at https://www.youtube.com/watch?v=Bai1DTcCHVE
Lambdas. All the cool kid languages have them. But does lambda mean what C++ and other languages, from Java to Python, mean by lambda? Where did lambdas come from? What were they originally for? What is their relationship to data abstraction?
In this session we will into the history, the syntax, the uses and abuses of lambdas and the way in which lambda constructs in C++ and other languages do (or do not) match the original construct introduced in lambda calculus.
Presented online for javaBin (2020-04-14)
Video at https://www.youtube.com/watch?v=orcSUE0Jjdc
Lambdas. All the cool kid languages have them. But does ‘lambda’ mean what Java, JavaScript, etc. mean by ‘lambda’? Where did lambdas come from? What were they originally for? What is their relationship to data abstraction?
In this session we will look into the history, the syntax and the uses of lambdas and the way in which lambda constructs in Java and other languages do (or do not) match the original construct introduced in lambda calculus.
Presented at DevSum (2018-05-31)
The SOLID principles are often presented as being core to good code design practice. Each of S, O, L, I and D do not, however, necessarily mean what programmers expect they mean or are taught. By understanding this range of beliefs we can learn more about practices for objects, components and interfaces than just S, O, L, I and D.
This talk reviews the SOLID principles and reveals contradictions and different interpretations. It is through paradoxes and surprises we often gain insights. We will leave SOLID somewhat more fluid, but having learnt from them more than expected.
Presented at Foo Café (2019-03-21)
Video at https://www.youtube.com/watch?v=tLSKLLxrZyY
Programmers use coding katas to kick the tyres of their programming languages, paradigms and practices. Typically anchored in a TDD cycle, katas are simple problems that give programmers the opportunity to exercise deliberate practice and explore different approaches, whether programming style, pair programming or test-first programming.
But the simplicity can be deceptive, with many programmers tiring of these katas too soon, missing out on some of the more mind-bending and paradigm-expanding opportunities on offer.
This session will pick on a couple of katas and dig deeper into TDD, lambdas, language(s), (dys)functional programming and Alcubierre drive. It will present code in a variety of languages, highlight the weaknesses of some common mantras, play around with ideas — and blend code, humour and general nerdiness to be both an enjoyable and educational session.
Procedural Programming: It’s Back? It Never Went AwayKevlin Henney
Presented at ACCU Conference 2018 (2018-04-12)
Video at https://www.youtube.com/watch?v=mrY6xrWp3Gs
When programmers describe code as 'procedural', it’s generally not meant as a compliment. There is a belief that we have collectively moved pass such thinking and onto better paradigms. But a paradigm is no more than a pattern language, a family of solutions fit for a context. Change the kind of problem you are solving and you may find a different solution makes sense — even, in these days where pure functions battle it out with classy objects, procedural programming.
This talk takes a look at some of the past, present and future of procedural programming, looking at how there’s more to it than many first assume, how it has informed and continues to influence language design and how it relates to other paradigms, such as functional and OO.
Structure and Interpretation of Test CasesKevlin Henney
Presented at ACCU Cambridge (2018-10-23)
Throw a line of code into many codebases and it's sure to hit one or more testing frameworks. There's no shortage of frameworks for testing, each with their particular spin and set of conventions, but that glut is not always matched by a clear vision of how to structure and use tests — a framework is a vehicle, but you still need to know how to drive. The computer science classic, Structure and Interpretation of Computer Programs, points out that "Programs must be written for people to read, and only incidentally for machines to execute". The same is true of test code.
This talk takes a deep dive into unit testing, looking at examples and counterexamples across a number of languages and frameworks, from naming to nesting, exploring the benefits of data-driven testing, the trade-offs between example-based and property-based testing, how to get the most out of the common given–when–then refrain and knowing how far to follow it.
Keynote present at Agile Tour Vienna (2018-10-06)
Velocity. Sprints. More points, more speed. An obsession with speed often overtakes the core values of agile software development. It’s not just development of software; it’s development of working software. Sprints are not about sprinting; they’re about sustainable pace. Time to market is less important than time in market. Full-stack development is normally a statement about technology, but it also applies to individuals and interactions. The full stack touches both the code and the world outside the code, and with that view comes responsibility and pause for thought. Doing the wrong thing smarter is not smart. The point of a team is its group intelligence not its numbers. Is scaling up the challenge, or is scaling down the real challenge? The distraction and misuse of speed, velocity, point-based systems, time, team size, scale, etc. is not the accelerant of agile development. Agility lies in experimentation, responsiveness and team intelligence.
Keynote presented at NewCrafts (2018-06-18)
Video available at https://vimeo.com/276832516
It has been said that immutability changes everything. But what does that mean in practice? What does it mean for existing code that looks more like the mutant apocalypse than an elegant application of mathematical thinking? Immutability can be an ideal that is hard to reach. Refactoring, on the other hand, is all about the art of the possible. In this talk we'll be clarifying motivation and exploring some approaches to help reducing state mutability in code.
Keynote presented at GOTO Chicago (2018-04-26)
Video available at https://www.youtube.com/watch?v=AbgsfeGvg3E
Everything is changing. Everything is new. Frameworks, platforms and trends are displaced on a weekly basis. Skills are churning.
And yet... Beneath this seemingly turbulent flow there is a slow current, strong and steady, changing relatively little over the decades. Concepts with a long history appear in new forms and fads and technologies. Principles are revisited. Ideas once lost to the mainstream are found again.
In this keynote we revisit the present through the past, looking at the enduring principles that shape programming languages, architecture, development practice and development process, the ideas that cycle round, each time becoming perhaps a little better defined, a little more mature, and look to see what else might be on the horizon.
Presented at SwanseaCon (2017-09-26)
We default to considering systems from an insider's perspective; the view from outside can be quite different. Can we apply this inversion to more than just requirements?
We may say we want testing, but what do we want from testing? We may say we want logging, but what do we want from logging? We may say we want clean code, but what do we want from clean code? We may say we want an agile process, but what do we want from an agile process? These are harder questions, but their answers can make for better solutions.
Presented at .NET South West (2017-07-25)
Code is basically made up of three things: names, spacing and punctuation. With these three tools a programmer needs to communicate intent, and not simply instruct. But if we look at most approaches to naming, they are based on the idea that names are merely labels, so that discussion of identifier naming becomes little more than a discussion of good labelling.
A good name is more than a label; a good name should change the way the reader thinks. A good name should describe structure with intention, as opposed to the affix-heavy approach common to many naming conventions in current use, where the addition of more prefixes and suffixes becomes homeopathic, diluting the meaning. Good naming is part of good design. This session looks at why and what it takes to get a good name.
Clean Coders Hate What Happens To Your Code When You Use These Enterprise Pro...Kevlin Henney
Presented at code::dive (2016-11-15)
Video available at https://www.youtube.com/watch?v=brfqm9k6qzc
It is all to easy to dismiss problematic codebases on some nebulous idea of bad practice or bad programmers. Poor code, however, is rarely arbitrary and random in its structure or formulation. Systems of code, well or poorly structured, emerge from systems of practice, whether effective or ineffective. To improve code quality, it makes more sense to pick apart the specific practices and see their interplay — the cause — than to simply focus on the code itself — the effect. This talk looks at how a handful of coding habits, design practices and assumptions can systematically balloon code and compound its accidental complexity.
Thinking Outside the Synchronisation QuadrantKevlin Henney
Presented at code::dive (2016-11-16)
Video available at https://www.youtube.com/watch?v=yl25p91flLY
Ask programmers what comes to mind when you say concurrency and most are likely to say threads. Ask what comes to mind when you say threads and most are likely to say locks or synchronisation. These assumptions are so deeply held that they define and constrain how programmers are taught and think about concurrency: thread safety is almost synonymous with the avoidance of race conditions and the guarded protection of mutable state. But this is only one quadrant of four possibilities, a quadrant diagram partitioned by mutable–immutable along one axis and shared–unshared along another. Modern C++ supports programmers in all four quadrants, not just the synchronisation quadrant. From immutability to actors, this talk will take a look at patterns and practices that encourage thinking and coding outside the locked box.
Presented at GOTO Amsterdam (2017-06-13)
Video available at https://www.youtube.com/watch?v=YyhfK-aBo-Y
What is risk? Many people aren't sure, but it's not just uncertainty: risk is exposure to uncertainty.
Instead of just plastering over the cracks, security should also involve reducing the size and number of cracks, reducing the opportunities for cracks to appear, reducing the class of errors and oversights that can open a system to failure instigated from the outside. We can learn a lot from other kinds of software failure, because every failure unrelated to security can be easily reframed as a security-failure opportunity.
This is not a talk about access control models, authentication, encryption standards, firewalls, etc. This is a talk about reducing risk that lives in the code and the assumptions of architecture, reducing the risk in development practices and in the blind spot of development practices.
Keynote presented at SATURN (2nd May 2017)
Video available at https://www.youtube.com/watch?v=MS3c9hz0bRg
"It's just a detail." Have you ever said that or been told that? Whether it's about implementation or requirements, we often use the word detail to suggest that something is not important enough to worry about. There are so many things to worry about in software development that we need to prioritize—too much detail, not enough focus. The problem is that in software, the details matter because that is what software is: lots of details brought together in combination. If we don't focus on the details, we get debt, defects, and delays.
Presented at Agile Bath & Bristol (21st March 2017)
If software development is a co-operative game, as Alistair Cockburn observed, then what kind of game is Scrum? Lots of people are playing it — or say they are — but there seems to be some disagreement about what the point of the game is, how to play it and even, in many cases, what the rules are. This talk looks at Scrum and other agile approaches through the lens of nomic games, hypothesis-driven development and fun.
Presented at the European Bioinformatics Institute (17th March 2017)
We often talk about good code — that we would like to write it, that there isn't enough of it, that it should not be considered an optional attribute of a codebase. We often talk about it but, when it comes to being precise, we don't always agree what constitutes good code, nor do we necessarily share a common view on its value.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
Listen to the keynote address and hear about the latest developments from Rachana Ananthakrishnan and Ian Foster who review the updates to the Globus Platform and Service, and the relevance of Globus to the scientific community as an automation platform to accelerate scientific discovery.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
First Steps with Globus Compute Multi-User EndpointsGlobus
In this presentation we will share our experiences around getting started with the Globus Compute multi-user endpoint. Working with the Pharmacology group at the University of Auckland, we have previously written an application using Globus Compute that can offload computationally expensive steps in the researcher's workflows, which they wish to manage from their familiar Windows environments, onto the NeSI (New Zealand eScience Infrastructure) cluster. Some of the challenges we have encountered were that each researcher had to set up and manage their own single-user globus compute endpoint and that the workloads had varying resource requirements (CPUs, memory and wall time) between different runs. We hope that the multi-user endpoint will help to address these challenges and share an update on our progress here.
Developing Distributed High-performance Computing Capabilities of an Open Sci...Globus
COVID-19 had an unprecedented impact on scientific collaboration. The pandemic and its broad response from the scientific community has forged new relationships among public health practitioners, mathematical modelers, and scientific computing specialists, while revealing critical gaps in exploiting advanced computing systems to support urgent decision making. Informed by our team’s work in applying high-performance computing in support of public health decision makers during the COVID-19 pandemic, we present how Globus technologies are enabling the development of an open science platform for robust epidemic analysis, with the goal of collaborative, secure, distributed, on-demand, and fast time-to-solution analyses to support public health.
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Enterprise Resource Planning System includes various modules that reduce any business's workload. Additionally, it organizes the workflows, which drives towards enhancing productivity. Here are a detailed explanation of the ERP modules. Going through the points will help you understand how the software is changing the work dynamics.
To know more details here: https://blogs.nyggs.com/nyggs/enterprise-resource-planning-erp-system-modules/
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
How to Position Your Globus Data Portal for Success Ten Good PracticesGlobus
Science gateways allow science and engineering communities to access shared data, software, computing services, and instruments. Science gateways have gained a lot of traction in the last twenty years, as evidenced by projects such as the Science Gateways Community Institute (SGCI) and the Center of Excellence on Science Gateways (SGX3) in the US, The Australian Research Data Commons (ARDC) and its platforms in Australia, and the projects around Virtual Research Environments in Europe. A few mature frameworks have evolved with their different strengths and foci and have been taken up by a larger community such as the Globus Data Portal, Hubzero, Tapis, and Galaxy. However, even when gateways are built on successful frameworks, they continue to face the challenges of ongoing maintenance costs and how to meet the ever-expanding needs of the community they serve with enhanced features. It is not uncommon that gateways with compelling use cases are nonetheless unable to get past the prototype phase and become a full production service, or if they do, they don't survive more than a couple of years. While there is no guaranteed pathway to success, it seems likely that for any gateway there is a need for a strong community and/or solid funding streams to create and sustain its success. With over twenty years of examples to draw from, this presentation goes into detail for ten factors common to successful and enduring gateways that effectively serve as best practices for any new or developing gateway.
Atelier - Innover avec l’IA Générative et les graphes de connaissancesNeo4j
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Allez au-delà du battage médiatique autour de l’IA et découvrez des techniques pratiques pour utiliser l’IA de manière responsable à travers les données de votre organisation. Explorez comment utiliser les graphes de connaissances pour augmenter la précision, la transparence et la capacité d’explication dans les systèmes d’IA générative. Vous partirez avec une expérience pratique combinant les relations entre les données et les LLM pour apporter du contexte spécifique à votre domaine et améliorer votre raisonnement.
Amenez votre ordinateur portable et nous vous guiderons sur la mise en place de votre propre pile d’IA générative, en vous fournissant des exemples pratiques et codés pour démarrer en quelques minutes.
Graspan: A Big Data System for Big Code AnalysisAftab Hussain
We built a disk-based parallel graph system, Graspan, that uses a novel edge-pair centric computation model to compute dynamic transitive closures on very large program graphs.
We implement context-sensitive pointer/alias and dataflow analyses on Graspan. An evaluation of these analyses on large codebases such as Linux shows that their Graspan implementations scale to millions of lines of code and are much simpler than their original implementations.
These analyses were used to augment the existing checkers; these augmented checkers found 132 new NULL pointer bugs and 1308 unnecessary NULL tests in Linux 4.4.0-rc5, PostgreSQL 8.3.9, and Apache httpd 2.2.18.
- Accepted in ASPLOS ‘17, Xi’an, China.
- Featured in the tutorial, Systemized Program Analyses: A Big Data Perspective on Static Analysis Scalability, ASPLOS ‘17.
- Invited for presentation at SoCal PLS ‘16.
- Invited for poster presentation at PLDI SRC ‘16.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
Enhancing Research Orchestration Capabilities at ORNL.pdf
Bound and Checked
1. T
HE STANDARD TEMPLATE LIBRARY (STL)
has settled the question of what a resizable
array class template should look like, although
its choice of name is a little questionable: vector
has few of the properties one would identify with a
mathematical vector. Given the obvious naming of
a linked list as list, I believe C++ novices and experts
alike would have appreciated a more obvious and direct
name for a resizable array, such as array or dynarray
– the name for the pre-STL array class in the draft
standard C++ library.
No matter. We know the name now. More
significantly, the STL has brought with it an
expectation and definition of what a container
interface should look like.The semantics and appear-
ance of subscripting offer one of the simplest examples.
It follows, with a couple of notable exceptions, a simple
form: the use of a non-negative index on operator[]
to return a reference to an element, the const-ness of
which reflects the const-ness of the source container.
Here is a slightly simplified view of the relevant
features of std::vector:
namespace std
{
template<typename value_type>
class vector
{
public:
value_type &operator[](std::size_t);
const value_type &operator[](std::size_t) const;
...
private:
...
std::size_t length;
value_type *elements;
};
}
The only technical omission from this fragment is
the defaulted allocator template parameter. It is a fea-
ture of little practical use, whose sole purpose appears
to be to obfuscate and mislead. Standard containers
also offer a number of typedefs in their public inter-
face. Many of these have little practical use; in the
previous code fragment the underlying types are
clearer. std::size_t is the standard C type for size
quantities, but wrapped in namespace std for more
standard C++ digestion.
It is interesting to explore the design decisions
that were and were not taken in establishing
subscripting semantics. There is little doubt that
indexing should start from 0 and be valid up to
and including size() - 1, but what happens when the
index is out of bounds? What are the quality of
failure options?
Undefined behaviour
This is perhaps the simplest option and it means what
it means. Out-of-range accesses are not something that
should be present in a correct program and therefore
their behaviour is not defined. A valid interpretation
of this absence of requirement is that no overhead should
be expended in checking the correctness. This
minimal requirement is opted for by the standard and
is potentially the most efficient in execution, the simplest
to implement and the most like the native arrays on
which they are modelled. The following definition,
shown as if it were defined inline within the class
definition, would be typical of many standard library
implementations:
value_type &operator[](std::size_t index)
{
return elements[index];
}
Should you access outside the legal range of
constructed objects in data, you are on your own. Your
program may crash immediately. Then again, it
might limp on for a bit, only to stumble and fall
elsewhere... or the problem may never surface as a
recognised bug. If you’re lucky it will crash immediately.
Debug checking
The next simplest option is to include checks in a debug
version. The standard assert macro offers a suitable
route, aborting the program on failure:
64 APPLICATION DEVELOPMENT ADVISOR q www.appdevadvisor.co.uk
Kevlin Henney is an
independent software
development consultant
and trainer.He can be
reached at
www.curbralan.com
C++ WORKSHOP
q The standard C++ library generally
requires no index checking on
containers, preferring efficiency to
security.
q Other index checking models are
possible and can be implemented.
q Out-of-range access can also be
interpreted to be in range, either by
remapping or by growth.
q A just-in-time instantiation policy can be
used as the basis of a bounded sparse
sequence implementation.
FACTS AT A GLANCE
When is a vector not a vector? When it’s a container. Kevlin Henney
examines the use of containers that look like vectors, which can be used
to conserve memory when elements in a vector all have the same value
Bound and checked
2. value_type &operator[](std::size_t index)
{
assert(index < length);
return elements[index];
}
Thanks to a little preprocessor magic, such checks can – and should
– be omitted in the release version. For those who care, no
performance penalty is paid in a release version. For those with different
concerns, the correctness constraint is visibly documented in the
code as well as in any debug messages generated.
Debug checking is a valid implementation of undefined
behaviour and some libraries have an option that enables such checks,
such as the STLport library1
. The availability of such an option
is great not just for testing and debugging: it is also useful for those
scaling the C++ learning curve – the moral equivalent of stabilisers
on a bicycle.
Note that although the indexing type is an unsigned type, the
assertion will also catch attempts to use negative subscripts. A negative
number converted to an unsigned quantity will become a very large
positive number, well beyond the valid subscript range for the vector.
Runtime enforcement
Although technically a logic error – something that should not occur
in a fully tested program – there is the view that bounds should
always be checked regardless of the runtime version. In such
cases, mapping out-of-bound access to a call to abort – as is the case
with assert – is perhaps not the most constructive approach.
Throwing an exception is the only meaningful enforcement:
value_type &operator[](std::size_t index)
{
if(index >= length)
throw out_of_range("operator[] invalid index");
return elements[index];
}
The std::out_of_range exception class is found in the <stdexcept>
header and derives from std::logic_error.
Note that throwing an exception is also a viable implementation
of undefined behaviour: if no behaviour is defined, any behaviour
will do. However, except in teaching, this is not always a reasonable
quality of failure to impose on users without informing them first.
The exception-throwing option should not be confused with the
debug checking option either. It makes little design sense to have
exception throwing as a release-versus-debug option, because
exception handling is either part of the fine-grained architecture
or it is not. Any halfway house is often a ramshackle, tumbledown
affair, rather than a crisp design that makes the best of all options.
Exception-safe code will not write itself if you didn’t know that
exception safety was a requirement2
.
Similarly, a design should be unambiguous and its use obvious.
The standard vector attempts to please all of the people all of the
time by supporting undefined behaviour for operator[] and
bounds-checked exception throwing for the at member. Alas, the
appeal of this design is no deeper than veneer. operator[] is the natural
choice for subscripting. It requires a conscious effort to use,
implying that the programmer is wilfully planning to access out
of bounds. If this is the case, it is a simple matter to fix the code
before the error is made, which means operator[] can then be used
safely. The need for having operator[] and at disappears in a puff
of logic and good programming practice.
Index remapping
Where the debug checking and runtime enforcement models remap
undefined behaviour to defined but exceptional behaviour, an index
remapping takes some of the subscript range outside the 0 to size()
- 1 range and resolves it to somewhere valid.
An approach that is both creative and practical – although it
breaks with C’s array model and C++’s iterator model – is to accept
signed indexing, treating negatives as accesses counted down
from the end, so that -1 accesses the last element, -2 the second
from last and so on.
value_type &operator[](std::ptrdiff_t index)
{
return elements[index + (index > 0 ? 0 : length)];
}
This convention is used in the Ruby and Python languages, but
perhaps strays a little too far from received wisdom on operator
overloading – “when in doubt, do as the ints do”3
– to be considered
an appropriate default for C++ classes. It also addresses only the
range -size() to size() - 1.
A less alternative behaviour would be to treat a vector as a
circular data structure, supporting wraparound indexing. Index-
ing off the end just continues again from the beginning:
value_type &operator[](std::size_t index)
{
return elements[index % length];
}
The only failure mode this remapping exhibits is when the vector
is empty. By default, a division by zero is undefined behaviour,
which on some platforms is mapped to a signal. You can select one
of the other out-of-bound access models described so far to
address this case.
Magic memory
And then there is always “magic memory”. If you access past the
end of the vector, it automatically grows to that size:
value_type &operator[](std::size_t index)
{
if(index >= length)
resize(index + 1);
return elements[index];
}
const value_type &operator[](std::size_t index) const
{
static const value_type defaulted;
return index < length ? data[index] : defaulted;
}
For this design to work, the value_type used must support
default construction.
Some languages and libraries have features that are equivalent
to or similar to this just-in-time growth model. For instance,
JANUARY–FEBRUARY 2002 65
C++ WORKSHOP
The STL has brought with it an
expectation and definition of what
a container interface should look
like.The semantics and appearance
of subscripting offer one of the
simplest examples
3. subscripting a non-existent element in an associative array in
Awk will spontaneously cause the creation of that element, and
likewise std::map from the STL.
However, there is the legitimate claim that this magical behaviour
could be considered subtle and error-prone for a sequential
container. A genuinely incorrect index, such as the arbitrary
value in an uninitialised variable, could lead to a resize attempt on
the order of gigabytes. With any luck this would fail outright. If
not, you might hear your machine paging madly as it attempts,
diligently and exhaustively, to default construct each and every element
in the range. There is also the stark difference between the const
and non-const versions of operator[]. That degree of asymmetry
may be a little too much to stomach.
If you don’t wish to make a big feature out of remapping, a
change to the non-const operator[] allows out-of-bound access
to be mapped to legal objects rather than to arbitrary locations
in memory:
value_type &operator[](std::size_t index)
{
static value_type defaulted;
return index < length ? data[index] : defaulted;
}
This solution provides a scribble space for subscripting, more
of a graffiti object than a constant object.The intent is not to provide
a useful value –that will change every time the out-of-range value
is assigned to – but a legal location that steers the program clear
of undefined behaviour. Note that non-const statics should be avoided
in multi-threaded environments. Allocating a per-object spare element
for use as scribble space would patch this.
Sparse and lazy
Before we throw the baby out with the bath water, there are a
couple of bright ideas lurking in the overgrowth model. Consider
a large vector in which most of the elements have the same value:
how can you work around the need for redundant storage?
Consider a sparse representation, where the common filler
value is specified and the differences are stored.The std::map container
is an associative container that offers a way of holding a value against
a key, without any requirement that keys are continuous. We can
use the unsigned index to key elements with values different
from the filler. Although we can give such a container an STL-
conforming public interface, it cannot be considered a pure
drop-in substitute for a vector because it no longer supports
constant-time random-access indexing:
template<typename value_type>
class sparse_vector
{
public:
explicit sparse_vector(
const value_type &filler = value_type())
: length(0), filler(filler)
{
}
bool empty() const
{
return length == 0;
}
std::size_t size() const
{
return length;
}
void clear()
{
elements.clear();
length = 0;
}
const value_type &operator[](std::size_t index) const
{
map_type::const_iterator found = elements.find(index);
return found == elements.end() ? filler : *found;
}
const value_type &front() const
{
return (*this)[0];
}
const value_type &back() const
{
return (*this)[length - 1];
}
...
private:
typedef std::map<size_t, value_type> map_type;
map_type elements;
size_t length;
value_type filler;
};
In the simple case of const subscripting, it is a matter of
discovering whether there is a stored corresponding element to
return, returning filler if not. The find member function of std::map
searches in logarithmic time, which is better than the linear time
of the global std::find algorithm but worse than the constant-
time random access of std::vector. The virtual length of the
sparse_vector is stored explicitly. It could also be used to
implement some form of bounds checking, as explored earlier
in this article.
What about non-const subscripting? If you access an element
that is being stored explicitly, then no problem, but accessing
something that isn’t there calls for something like spontaneous
creation:
template<typename value_type>
class sparse_vector
{
public:
...
value_type &operator[](size_t index)
{
return elements.insert(
std::make_pair(index, filler)).first->second;
}
value_type &front()
{
return (*this)[0];
66 APPLICATION DEVELOPMENT ADVISOR q www.appdevadvisor.co.uk
C++ WORKSHOP
Note that throwing an exception is
also a viable implementation of
undefined behaviour:if no
behaviour is defined,any
behaviour will do
4. }
value_type &back()
{
return (*this)[length - 1];
}
void push_back(const value_type &new_back)
{
if(new_back != filler)
elements.insert(std::make_pair(length, new_back));
++length;
}
void pop_back()
{
elements.erase(length - 1);
--length;
}
...
};
The magical incantation in operator[] needs a little deciphering:
q std::map works in terms of std::pair objects, holding the key and
mapped value together as a pair.
q The insert function takes a std::pair, which can be composed
from the intended index and the filler using std::make_pair,
and returns a result that holds an iterator to the corresponding
inserted location.
q But it doesn’t just return an iterator: it returns a std::pair with
the iterator as the first value and a bool as the second value. The
second value is true if the new mapping was inserted and false
if the key already existed.
q However, we don’t care if a new mapping was inserted with filler
as its value or if the key was already there, so we just access the
first element of the resulting std::pair, the iterator.
q In using the iterator, we need to remember that the iterator for
a std::map dereferences to a std::pair holding the key, first, and
mapped value, second. We are interested only in the looked-up
value, so we access second.
A sparse_vector that isn’t sparse
The end accessors, front and back, fall into place more easily
once you have operator[] sorted. The erase function used in
pop_back will only erase an element at a key if it exists, doing nothing
otherwise. And, true to the lazy nature of the sparse_vector data
structure, push_back performs a physical insertion only if the
value to be appended is different from the filler value. This adds
the requirement that the value_type parameter should be equality
comparable. From the primitives of pop_back and push_back you
can construct a suitable resize member function, should you
wish to make sparse_vector more std::vector-like.
You may notice that the sparse_vector is not perfectly sparse. It
cannot be 100% effective in optimising away storage for elements
that have the same value as filler, because not all uses of the non-
const operator[] are for assignment, and assignment to elements cannot
be intercepted easily:
sparse_vector<int> data(-1);
data.push_back(-1);
data.push_back(-1);
...
data[0] = -1;
std::cout << data[1] << std::endl;
After the assignment, the initial element is stored explicitly but
has the same value as filler, because an lvalue to a real object was
required on the left-hand side of the assignment. Similarly, the next -
element is stored explicitly, despite never being the target of
assignment. The call to operator[] is made independently of
how its result is to be used, even if a non-const result is used in a
const fashion.
We have little direct control over how std::vector manages its
memory and the same can be said of sparse_vector. It is possible
to extend the implementation of sparse_vector to intermittent-
ly rout out values being stored surplus to requirements. How-
ever, this would complicate the implementation and raise
questions about the evenness and efficiency of sparse_vector’s per-
formance. Taking a cue from std::vector’s own storage manage-
ment mechanisms, we can institute a simple manual interface for
sparse_vector users to use, for those who truly care about
minimising storage:
template<typename value_type>
class sparse_vector
{
public:
...
size_t capacity() const
{
return elements.size();
}
void conserve()
{
map_type::iterator at = elements.begin();
while(at != elements.end())
if(at->second == filler)
elements.erase(at++);
else
++at;
}
...
};
Using composition
Where std::vector’s capacity function indicates, in conjunction with
size, how much spare storage is left before reallocation, sparse_vec-
tor’s capacity function indicates how much capacity is actually used
in storing elements. Where std::vector’s reserve function puts
aside extra space in advance of usage, spare_vector’s conserve
function reclaims redundant element storage from usage.The gotcha
to avoid in conserve’s while loop – and the reason why it is not a
fully fledged for loop – is that erasing the element referred to by
an iterator invalidates that iterator, which means it cannot be used
for any purpose. For std::map it is a simple matter of using a post-
fix increment to ensure that the iterator is moved on some-
where valid.
The power of libraries lies in composition. It is what you can
build with a component that makes a component useful, not its
public billing. Part of this is to understand which design alternatives
were available, which were taken and what to do if you don’t like
them. In the case of the STL, it proves easy to layer a sparse sequence
container implementation on top of an associative container to support
lazy indexing. s
References
1. STLport, www.stlport.com
2. Kevlin Henney, “Making an Exception”, Application
Development Advisor, 5(4)
3. Scott Meyers, More Effective C++, Addison-Wesley, 1996
JANUARY–FEBRUARY 2002 67
C++ WORKSHOP