The document discusses symmetry in software interfaces and its importance. It notes that JUnit's assertion methods like assertTrue have symmetric opposite methods like assertFalse, but assertEquals is missing an assertNotEquals method. This inconsistency can surprise programmers. Adding assertNotEquals would increase interface symmetry but also interface size. The document argues interface usability should take priority, and symmetric interfaces help communicate concepts more clearly.
Awareness of design smells - indicators of common design problems - helps developers or software engineers understand mistakes made while designing and apply design principles for creating high-quality designs. This presentation provides insights gained from performing refactoring in real-world projects to improve refactoring and reduce the time and costs of managing software projects.
Awareness of design smells - indicators of common design problems - helps developers or software engineers understand mistakes made while designing and apply design principles for creating high-quality designs. This presentation provides insights gained from performing refactoring in real-world projects to improve refactoring and reduce the time and costs of managing software projects.
ScalaItaly 2015 - Your Microservice as a FunctionPhil Calçado
SoundCloud's microservice architecture is built mostly in Scala, using Finagle as its distributed systems workhorse. Finagle is an RPC system for the JVM, and it is based on a pipes-and-filters architecture that maps very nicely to functional programming concepts of higher-order functions and combinators. Over the past few years we have found that it is extremely useful to go even a step further and think of microservices as functions themselves. In this talk let's explore how SoundCloud uses Scala and Finagle, and how we started thinking of a microservices architecture as a special case of a functional system.
Systematic error management - we ported rudder to ziofanf42
This talk was given at ScalaIO 2019.
It explains how you can manage errors in a systematic way in your applications, and show how we did it in Rudder with the functional library ZIO.
It presents 4 big principles which direct my devloper job:
- 1/ Our work as developers is to discover and assess failure modes.
- 2/ ERRORS are a SOCIAL construction to give AGENCY to the receiver of the error.
- 3/ An application has always at least 3 kinds of users: users; devs; and ops. Don’t forget any.
- 4/ It’s YOUR work to choose the SEMANTIC between nominal case and error and KEEP your PROMISES.
The talk gives 5 guidelines to help you implement these principles. It also introduces a very light glimpse on system thinking that you can explore in more details in the related article "Understand things as interacting systems": https://medium.com/@fanf42/understand-things-as-interacting-systems-b273bdba5dec
If you have any questions, please ask: there is several way to contact me at the end of the deck (slide 87)!
Umfjöllun um tvo kafla í Barbin bókinni, kafli 2 og 4. Sá fyrri fjallar um Architectual Principles og sá seinni um General Responsibilty Assignment Software Patterns.
Refactoring: Improve the design of existing codeValerio Maggio
Refactoring: Improve the design of existing code
Software Engineering class on main refactoring techniques and bad smells reported in the famous Fawler's book on this topic!
Product Derivation is a key activity in Software Product Line Engineering. During this process, derivation operators modify or create core assets (e.g., model elements, source code instructions, components) by adding, removing or substituting them according to a given configuration. The result is a derived product that generally needs to conform to a programming or modeling language. Some operators lead to invalid products when applied to certain assets, some others do not; knowing this in advance can help to better use them, however this is challenging, specially if we consider assets expressed in extensive and complex languages such as Java. In this paper, we empirically answer the following question: which product line operators, applied to which program elements, can synthesize variants of programs that are incorrect, correct or perhaps even conforming to test suites? We implement source code transformations, based on the derivation operators of the Common Variability Language. We automatically synthesize more than 370,000 program variants from a set of 8 real large Java projects (up to 85,000 lines of code), obtaining an extensive panorama of the sanity of the operations.
Paper was presented at SPLC'15
Awareness of design smells - indicators of common design problems - helps developers or software engineers understand mistakes made while designing and apply design principles for creating high-quality designs. This tech talk provides insights gained from performing refactoring in real-world projects to improve refactoring and reduce the time and costs of managing software projects. The tech talk also presents insightful anecdotes and case studies drawn from the trenches of real-world projects. By attending this tech talk, you will know pragmatic techniques for refactoring design smells to manage technical debt and to create and maintain high-quality software in practice.
Contents overview:
* Why care about design principles, design quality, or design smells?
* Refactoring as the primary means for repaying technical debt
* Smells that violate abstraction, encapsulation, modularisation, or hierarchy
* Tools and techniques for refactoring
Downlight for commercial lighting application Ladislav Varga
Are you renovating or planning a commercial space.
To get out most of it contact lighting.consultant@gmail.com
OSRAM LUXPOINT® LED Downlight series have joined MACRO DIM to meet the functional yet comfortable lighting needs of commercial and public interiors. It uses a wide diffuser to cast wide beams which is available in 3,000K, 4,000K and 6,500K colour temperature. The white recessed aluminium design blends in well with typical modern suspended ceiling. OSRAM LUXPOINT® MACRO DIM is integrated with a wide-ranged dimming control for adjusting your preferred lighting conditions in any time or space. Besides, a simple screw-open clip system on the luminaire allows for safe and easy installation, which also avoids any ceiling damage during the installing or dismantling processes. Consider this downlight with 40% energy savings over higher wattage compact fluorescent alternatives.
Advantages & Benefits
– Aluminum recessed luminaire design for 3 to 4 metres ceiling height
– Comfortable lighting in 70/80 colour rendering, with reduced glare and heat emission
– Various light colour options in warm white, neutral white, daylight
– Lesser cost and time saving installation - simple screw-open clip system
– Recommend using LUXPOINT® MACRO DIM: 12 ECO type for 2 x 26W CFL, 20 ECO type for 2 x 32W CFL
ScalaItaly 2015 - Your Microservice as a FunctionPhil Calçado
SoundCloud's microservice architecture is built mostly in Scala, using Finagle as its distributed systems workhorse. Finagle is an RPC system for the JVM, and it is based on a pipes-and-filters architecture that maps very nicely to functional programming concepts of higher-order functions and combinators. Over the past few years we have found that it is extremely useful to go even a step further and think of microservices as functions themselves. In this talk let's explore how SoundCloud uses Scala and Finagle, and how we started thinking of a microservices architecture as a special case of a functional system.
Systematic error management - we ported rudder to ziofanf42
This talk was given at ScalaIO 2019.
It explains how you can manage errors in a systematic way in your applications, and show how we did it in Rudder with the functional library ZIO.
It presents 4 big principles which direct my devloper job:
- 1/ Our work as developers is to discover and assess failure modes.
- 2/ ERRORS are a SOCIAL construction to give AGENCY to the receiver of the error.
- 3/ An application has always at least 3 kinds of users: users; devs; and ops. Don’t forget any.
- 4/ It’s YOUR work to choose the SEMANTIC between nominal case and error and KEEP your PROMISES.
The talk gives 5 guidelines to help you implement these principles. It also introduces a very light glimpse on system thinking that you can explore in more details in the related article "Understand things as interacting systems": https://medium.com/@fanf42/understand-things-as-interacting-systems-b273bdba5dec
If you have any questions, please ask: there is several way to contact me at the end of the deck (slide 87)!
Umfjöllun um tvo kafla í Barbin bókinni, kafli 2 og 4. Sá fyrri fjallar um Architectual Principles og sá seinni um General Responsibilty Assignment Software Patterns.
Refactoring: Improve the design of existing codeValerio Maggio
Refactoring: Improve the design of existing code
Software Engineering class on main refactoring techniques and bad smells reported in the famous Fawler's book on this topic!
Product Derivation is a key activity in Software Product Line Engineering. During this process, derivation operators modify or create core assets (e.g., model elements, source code instructions, components) by adding, removing or substituting them according to a given configuration. The result is a derived product that generally needs to conform to a programming or modeling language. Some operators lead to invalid products when applied to certain assets, some others do not; knowing this in advance can help to better use them, however this is challenging, specially if we consider assets expressed in extensive and complex languages such as Java. In this paper, we empirically answer the following question: which product line operators, applied to which program elements, can synthesize variants of programs that are incorrect, correct or perhaps even conforming to test suites? We implement source code transformations, based on the derivation operators of the Common Variability Language. We automatically synthesize more than 370,000 program variants from a set of 8 real large Java projects (up to 85,000 lines of code), obtaining an extensive panorama of the sanity of the operations.
Paper was presented at SPLC'15
Awareness of design smells - indicators of common design problems - helps developers or software engineers understand mistakes made while designing and apply design principles for creating high-quality designs. This tech talk provides insights gained from performing refactoring in real-world projects to improve refactoring and reduce the time and costs of managing software projects. The tech talk also presents insightful anecdotes and case studies drawn from the trenches of real-world projects. By attending this tech talk, you will know pragmatic techniques for refactoring design smells to manage technical debt and to create and maintain high-quality software in practice.
Contents overview:
* Why care about design principles, design quality, or design smells?
* Refactoring as the primary means for repaying technical debt
* Smells that violate abstraction, encapsulation, modularisation, or hierarchy
* Tools and techniques for refactoring
Downlight for commercial lighting application Ladislav Varga
Are you renovating or planning a commercial space.
To get out most of it contact lighting.consultant@gmail.com
OSRAM LUXPOINT® LED Downlight series have joined MACRO DIM to meet the functional yet comfortable lighting needs of commercial and public interiors. It uses a wide diffuser to cast wide beams which is available in 3,000K, 4,000K and 6,500K colour temperature. The white recessed aluminium design blends in well with typical modern suspended ceiling. OSRAM LUXPOINT® MACRO DIM is integrated with a wide-ranged dimming control for adjusting your preferred lighting conditions in any time or space. Besides, a simple screw-open clip system on the luminaire allows for safe and easy installation, which also avoids any ceiling damage during the installing or dismantling processes. Consider this downlight with 40% energy savings over higher wattage compact fluorescent alternatives.
Advantages & Benefits
– Aluminum recessed luminaire design for 3 to 4 metres ceiling height
– Comfortable lighting in 70/80 colour rendering, with reduced glare and heat emission
– Various light colour options in warm white, neutral white, daylight
– Lesser cost and time saving installation - simple screw-open clip system
– Recommend using LUXPOINT® MACRO DIM: 12 ECO type for 2 x 26W CFL, 20 ECO type for 2 x 32W CFL
Extreme Leadership - How To Unleash The Full Potential In People And TeamsFerdinand von den Eichen
Presented by Netlighter Sofie Ek at the first Edge X event in Berlin. Sofie presents her awesome take on how to unleash the full power of a team in an agile environment.
Reunião de Câmara 05/11/2013 - Ponto 10Pedro Pires
CONCURSO PÚBLICO – FORNECIMENTO CONTÍNUO DE GASÓLEO RODOVIÁRIO PARA O PARQUE DE MÁQUINAS E VIATURAS DO MUNICÍPIO DE VIEIRA DO MINHO PARA O ANO DOIS MIL E CATORZE.
This book describes the most successful research university model in India i.e. IIIT.
IIIT is the Most Successful Self-Sustainable Research University Model with unique blend of
Education, Research and Industry Partnerships. It matches perfectly with the concept of
“University of 21st Century” in the Era of Knowledge-based-Society. The IIIT-B, IIIT-D and
IIIT-H are the market leaders. They have developed this successful model after one and half
decade long struggle. All the established engineering institutes have potential to become IIITs,
which are fastest growing Top Ranking T-Schools in India.
Wearable Computing Devices - The Next Big Thing!Aranca
Technological developments and adoption levels of end users are likely to play a key role in the demand for more wearable computing devices in the near future. It will be interesting to see whether the rise in demand sustains current momentum or fizzles out en route.
Understanding the bronchiectasis prognosisSugeng Hartono
Understanding the Bronchiectasis Prognosis Now! Here!
The article below will discuss the bronchiectasis prognosis of in a complete and detailed.
Before you find out about the bronchiectasis prognosis, would be better if you also have to know some things about bronchiectasis such as epidemiology, definition, and fatofisiologi Pathogenesis, pathology, etiology and predisposing factors, clinical features, clinical manifestations, physical examination, diagnosis and treatment of bronchiectasis.
A helpful guide for Home Buyers ~ Helping you find answers to your real estate questions. Provided by Title 365 and your online connection Account Manager Sara Forkel. Please feel free to visit website at www.Title365.com or email me directly at Sforkel@Title365.com.
Formal treatments of inheritance are rather scarce and those that do exist are often more suited for
analysis of existing systems than as guides to language designers. One problem that adds complexity to
previous efforts is the need to pass a reference to the original invoking object throughout the method call
tree. In this paper, a novel specification of inheritance semantics is given. The approach dispenses with
self-reference, instead using static and dynamic scope to accomplish similar behaviour. The result is a
methodology that is simpler than previous specification attempts, easy to understand, and sufficiently
expressive. Moreover, an inheritance system based on this approach can be implemented with relatively
few lines of code in environment-passing interpreters.
‘go-to’ general-purpose sequential collections -from Java To ScalaPhilip Schwarz
The simple idea of this slide deck is that it collects in a single place quite a bit of information that can be used to gain a basic understanding of some key differences between the ’goto’ sequential collections of Java and Scala.
Errata:
* the twitter handle of Daniel Westheide is @kaffeecoder and not @cafeecoder
* on slide 35, the numbers 215, 220, 225 and 230, should be 2^15, 2^20, 2^25 and 2^30 respectively
* on slide 54, the bottom left node should be green rather than black
Overview of Groovy language features and lead to Functional Programming in Groovy. As this is a code along session backed by this presentation, code examples are not include here as I code them live.
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.
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
Large Language Models and the End of ProgrammingMatt Welsh
Talk by Matt Welsh at Craft Conference 2024 on the impact that Large Language Models will have on the future of software development. In this talk, I discuss the ways in which LLMs will impact the software industry, from replacing human software developers with AI, to replacing conventional software with models that perform reasoning, computation, and problem-solving.
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
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
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/
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisGlobus
JASMIN is the UK’s high-performance data analysis platform for environmental science, operated by STFC on behalf of the UK Natural Environment Research Council (NERC). In addition to its role in hosting the CEDA Archive (NERC’s long-term repository for climate, atmospheric science & Earth observation data in the UK), JASMIN provides a collaborative platform to a community of around 2,000 scientists in the UK and beyond, providing nearly 400 environmental science projects with working space, compute resources and tools to facilitate their work. High-performance data transfer into and out of JASMIN has always been a key feature, with many scientists bringing model outputs from supercomputers elsewhere in the UK, to analyse against observational or other model data in the CEDA Archive. A growing number of JASMIN users are now realising the benefits of using the Globus service to provide reliable and efficient data movement and other tasks in this and other contexts. Further use cases involve long-distance (intercontinental) transfers to and from JASMIN, and collecting results from a mobile atmospheric radar system, pushing data to JASMIN via a lightweight Globus deployment. We provide details of how Globus fits into our current infrastructure, our experience of the recent migration to GCSv5.4, and of our interest in developing use of the wider ecosystem of Globus services for the benefit of our user community.
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.
AI Genie Review: World’s First Open AI WordPress Website CreatorGoogle
AI Genie Review: World’s First Open AI WordPress Website Creator
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-genie-review
AI Genie Review: Key Features
✅Creates Limitless Real-Time Unique Content, auto-publishing Posts, Pages & Images directly from Chat GPT & Open AI on WordPress in any Niche
✅First & Only Google Bard Approved Software That Publishes 100% Original, SEO Friendly Content using Open AI
✅Publish Automated Posts and Pages using AI Genie directly on Your website
✅50 DFY Websites Included Without Adding Any Images, Content Or Doing Anything Yourself
✅Integrated Chat GPT Bot gives Instant Answers on Your Website to Visitors
✅Just Enter the title, and your Content for Pages and Posts will be ready on your website
✅Automatically insert visually appealing images into posts based on keywords and titles.
✅Choose the temperature of the content and control its randomness.
✅Control the length of the content to be generated.
✅Never Worry About Paying Huge Money Monthly To Top Content Creation Platforms
✅100% Easy-to-Use, Newbie-Friendly Technology
✅30-Days Money-Back Guarantee
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-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
#AIGenieApp #AIGenieBonus #AIGenieBonuses #AIGenieDemo #AIGenieDownload #AIGenieLegit #AIGenieLiveDemo #AIGenieOTO #AIGeniePreview #AIGenieReview #AIGenieReviewandBonus #AIGenieScamorLegit #AIGenieSoftware #AIGenieUpgrades #AIGenieUpsells #HowDoesAlGenie #HowtoBuyAIGenie #HowtoMakeMoneywithAIGenie #MakeMoneyOnline #MakeMoneywithAIGenie
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!
We describe the deployment and use of Globus Compute for remote computation. This content is aimed at researchers who wish to compute on remote resources using a unified programming interface, as well as system administrators who will deploy and operate Globus Compute services on their research computing infrastructure.
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
Looking for a reliable mobile app development company in Noida? Look no further than Drona Infotech. We specialize in creating customized apps for your business needs.
Visit Us For : https://www.dronainfotech.com/mobile-application-development/
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
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.
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-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
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
GraphSummit Paris - The art of the possible with Graph Technology
Opposites Attract
1. T
OGETHER, OPPOSITES CAN FORM A
memorable whole – love and hate,
yin and yang, elves and dwarves,
Fred Durst and Britney Spears. The
notion of such symmetry guides
expectations1, 2
. Sometimes the absence
of symmetry is jarring and
inconvenient; its presence simplifying
and predictable.
In interface design asymmetry can
keep you guessing and surprised rather
than informed and aware. The previous
two columns3, 4
have explored the
notion that the essence of an effective
interface lies in being concise,
consistent and conventional. Symmetry
is a form of consistency.
JUnit5
, the popular open-source unit
testing framework for Java, provides a
number of assertion methods to allow
programmers to test expected against
actual values. There is an assertTrue
method; there is also an assertFalse
method. There is an assertNull method;
there is also an assertNotNull method.
There is an assertSame method; there is
also an assertNotSame method. There is
an assertEquals method; there is no
assertNotEquals method. Oh. A hole in
the whole. Jarring and inconvenient.
Such an inconsistency is annoying
and tends to catch programmers out at
one time or another. Of course, it is
possible to work around it by
performing the relevant equality
comparison and passing the result to
assertFalse. However, not only does
this make a set of tests look
inconsistent, it can set up the
expectation that the normal way to
work with an interface is to workaround
its limitations – I certainly know APIs
for which this is true, but their existence
is grounds for caution, not a lead for
recommended practice. It is true that
one simple assertion is the absolute
minimum that you need6
, but the whole
point of a framework is that it captures
and expresses the common features of
your domain.
For a programmer to provide
assertNotEquals in JUnit would not be
complicated, but it would be tedious,
and this is perhaps one of the reasons it
does not yet exist. In truth, assertEquals
is not a method: it is a family of
overloaded methods, and quite a large
family at that. Because of limitations in
the existing Java language – contrary to
market hype, Java is not a fully or
consistently object-oriented language –
a variant of assertEquals is provided for
each built-in integral type (where == is
used for the comparison), for each
floating-point type (where comparison
is with respect to a delta rather than
strict equality) and for object types
(where the equals method is used). So,
although an intuitive interface to use, it
is a shopping list to implement and
document, involving no small amount
of copy-and-paste duplication.
To provide assertNotEquals would
involve providing the same number of
overloads again, along with the
associated implementation,
documentation and duplication. One
could make a case that this would bloat
the interface and make life for the
implementer more tedious. It is
certainly not an exciting task, but the
question is on which side of the
interface boundary should the slog and
repetition occur? Is it the
implementer’s responsibility or the
interface user’s problem? Put like that,
it seems clear that the convenience of
an interface should favour its user over
its implementer – write once, right for
many.
What about the question of bloat?
One of the guidelines for effective
interface design is that an interface
should be concise. However, concise is
not necessarily the same concept as
short: to be concise means to be both
brief and comprehensive. The measure
of an interface is not necessarily in the
number of methods it defines, but in
the number of ways it can be used. So,
although there are many assertEquals
overloads, there is only really one
assertEquals concept and only a couple
of ways of calling it, so the usage is
simple even if the actual Java method
listing is long.
Taken from this perspective it is clear
that the omission of assertNotEquals is
more of a pain than its potential
inclusion. Taken over time, it takes
longer to discover and explain its
absence than to include and use it. Note
that little or no explanation is required
for such opposites: if you know what
assertTrue does, then you know what
assertFalse does; if you are told what
assertSame does, you don’t need to be
told what assertNotSame does.
It is interesting to note that as JUnit
has evolved, its assertion interface has
become more symmetric. JUnit version
3.8 introduced assertFalse to pair with
assertTrue, an obvious completion.
assertTrue was introduced in version
3.7 to replace the assert method, which
clashed with the keyword of the same
name introduced in Java 1.4. However,
even before Java 1.4 forced the issue in
favour of a naming convention that
threw the question of symmetry into
sharp relief, an astute interface designer
might have pondered the absence of
assertNot as a partner for assert.
Of course, not every assertion has an
implied symmetry: JUnit’s
unconditional assertion, fail, has no
obvious complement. The absence of
failure defines success – likewise, “if we
do not succeed, then we run the risk of
failure”, to quote Dan Quayle, the
former US vice president, insightful
logician and orthographer
extraordinaire. Providing, or indeed
Symmetry has something to offer the world of
software. Kevlin Henney stands some interfaces in
front of the mirror to see what’s missing
OPPOSITES
ATTRACT
PROGRAMMERS’WORKSHOP KEVLIN HENNEY
48 APPLICATION DEVELOPMENT ADVISOR
Facts at a glance
• A symmetric pair of methods represent
some opposite aspect.
• The completeness of an interface can
sometimes be considered in terms of its
symmetry.
• Symmetry, or its absence, can affect
ease of use.
• But not everything is symmetric – that
would be forced and boring.
2. requiring, a succeed method would run
the risk of being both odd and
awkward.
Looking back at the Java
RecentlyUsedList interface described in
the previous two columns3, 4
, the most
obvious asymmetry is the absence of an
isFull query:
interface RecentlyUsedList
{
boolean isEmpty();
int size();
int capacity();
void clear();
void push(String newHead);
String elementAt(int index);
...
}
Just as list.isEmpty() more
accurately captures the essence of
list.size() == 0, list.isFull() would
better express the intent of list.size()
== list.capacity().
The ordering discipline encapsulated
by a recently used list ensures that the
most recently pushed is at the head and
the least recently pushed value is last.
The use of the push terminology
suggests perhaps a pop method could be
useful, losing the least recent entry.
Whether or not one chooses to
include these additional features, for
convenience or capability, symmetry
has certainly helped highlight them as
considerations:
interface RecentlyUsedList
{
boolean isEmpty();
boolean isFull();
int size();
int capacity();
void clear();
void push(String newHead);
String pop();
String elementAt(int index);
...
}
The symmetry between push and pop
is emphasised in their respective input
and output. However, symmetry in
code tends to be local, informal,
evocative and sketched; it is rarely a
global, formal, binding, mirror-perfect
relationship. For example, there is no
precondition on push, but pop cannot be
called on an empty list; a successful pop
always changes the visible state of the
list, whereas a push of the most recently
used item will leave the list unchanged.
Reasonable asymmetry
Of course, it is easy to become overly
enchanted by symmetry. For example,
having a habit or working to a
guideline to provide a setter with every
getter. Not only is this not a good idea,
it is actually quite a bad one7
.
Restricting object mutability either to
full immutability – whether by copy, by
class or by const8
– or to a few well-
defined and well-motivated state-
modifying methods is a more reasoned
and less error-prone path to take.
It is possible to query an entry in the
recently used list by index, but not to
set one by index. This is quite
reasonable: setting a value directly
would defeat the ordering discipline
that is the whole point of a recently
used list. It also leads to some
interesting questions concerning one of
the other invariants that govern the
data structure: entries are unique.
What would happen to the data
structure if an entry were set, by index,
to the value of an existing entry? There
are many possible interpretations and
responses, but few are worth pursuing.
Such behaviour is outside the scope of
a recently used list. The perceived
requirement demands either a revisit
or another solution. Scope creep often
arises because such questions are
answered in code rather than unasked.
A more reasonable symmetry
Conversely, a reasonable guideline is
that if you have a setter, there should
probably be a corresponding getter. To
be more precise, if an object has an
attribute, either conceptual or physical,
that can be modified by a method,
there should be some way of querying
that attribute. Failure to do so leads to
write-only attributes, which can be
frustrating to use and awkward – or
impossible – to test.
For (counter)example, Java’s
ArrayList class has an implied attribute
that describes its current capacity,
which is how many elements it can
hold without automatically resizing, as
opposed to its current size, which is the
number of elements it currently holds.
The capacity defaults to 10 on creation,
unless it is specified directly as a
constructor argument, and can be
specified explicitly using the
ensureCapacity method or trimmed to
the current required size using
trimToSize.
The documentation talks about the
capacity and how to change it, and the
concept is visible in the interface, but
there is no way to find out what it is.
This means that the capacity is
modifiable but unobservable, so the
capacity-related operations are
untestable: how would one write an
assertion to confirm that the default
constructed capacity was in fact 10?
This may at first seem academic:
testing the correctness of ArrayList is
surely Sun’s problem, so there is no
need to worry about the issue.
However, it is the design principle at
stake, not the specific example: there
ought to be a test somewhere – within
or without Sun – so what would it be?
It is interesting to note that
ArrayList’s less sophisticated, less well
reasoned and less focused predecessor,
Vector, offers the capacity query in
question.
Write-only attributes can be quite
subtle, and it is easy to miss them,
especially if you are the implementer.
Proximity to the implementation can
make it hard to share the interface
user’s perspective. A critical eye –
yours or someone else’s – or a test-
driven approach6, 9
can help to tune
into this line of symmetry. s
References
1. Kevlin Henney, “Five Possible
Things Before Breakfast”,
artima.com, June 2003,
www.artima.com/weblogs/
viewpost.jsp?thread=5432
2. Kevlin Henney, “Factory and
Disposal Methods”, VikingPLoP
2003, September 2003, available
from www.curbralan.com
3. Kevlin Henney, “Form Follows
Function”, App Dev Advisor,
March 2004.
4. Kevlin Henney, “Conventional and
Reasonable”, App Dev Advisor,
May 2004.
5. JUnit, available from http://junit.org
6. Kevlin Henney, “Put to the Test”,
App Dev Advisor, November 2002.
7. Kevlin Henney, “The Good, the Bad,
and the Koyaanisqatsi”, VikingPLoP
2003, September 2003, available
from www.curbralan.com
8. Kevlin Henney, “Objects of Value”,
App Dev Advisor, November 2003.
9. Kent Beck, Test-Driven
Development by Example, Addison-
Wesley, 2003.
KEVLIN HENNEY PROGRAMMERS’WORKSHOP
JULY-AUGUST 2004 49