In this talk from GOTO Berlin 2013, Cory Foy discusses the importance of listening to your code to know when to refactor, test, and build solutions which will withstand the test of time.
The document discusses the idea that code "cries" when it is difficult to understand and modify. It suggests reframing "code smells" as issues where the code is trying to communicate something but is not being understood. The author argues that software becomes harder to work with over time because developers try to force their own designs rather than letting the code evolve naturally through an iterative process. Developers are encouraged to let go of preconceived designs and diagrams in order to build code in a more organic, timeless way.
The permanent resident who is honest - Based on Honesty Idioms English Online Inc.
The document provides an overview of a lesson on honesty idioms for language learners. It includes reviewing and practicing idioms like "to play by the rules" and "a monkey business". Learners fill in blanks with the correct idioms, listen to an audio on mobility rights for permanent residents, discuss experiences, and learn about adjective clauses. The lesson aims to improve vocabulary, listening, speaking, grammar and reflection on learning.
The document provides rules for capitalization. It discusses capitalizing the pronoun "I" and the exclamation "O"; capitalizing the first word of a sentence; capitalizing the first word of quoted sentences if they are complete sentences; capitalizing proper nouns and modifiers associated with them; capitalizing a person's title when preceding their name with exceptions; capitalizing points of compass when referring to regions; capitalizing the first and last words of titles with other rules for capitalizing words within titles; capitalizing days of week, months, and holidays but not seasons with exceptions; and capitalizing words derived from proper nouns.
In this talk from Red Hat's 2014 Agile Conference, Cory Foy talks about the conditions necessary to bring about true organizational change towards agility. In addition, he covers patterns of adoptions and a variety of techniques used at scale
Part of this Agile Requirements Workshop was to do a 20/20 Vision ranking game with the participants to understand and discuss what their "Biggest Challenge" is in Agile Requirements. This is draft one of the team's ranking of these challenges. More context will be forthcoming.
Many companies have created a proper noun titled "Agile". But that word doesn't exist as a proper noun. The goal isn't to achieve some mythical ethos of "Agile" but instead to have organizational agility. This presentation covers the principles of Organizational Agility and how to make your organization get to the goal of agility.
These are the slides from Robert "Uncle Bob" Martin's talk at the Chicago Day of Mobile event held in March 2010. Slides posted with permission from Bob.
The document discusses the idea that code "cries" when it is difficult to understand and modify. It suggests reframing "code smells" as issues where the code is trying to communicate something but is not being understood. The author argues that software becomes harder to work with over time because developers try to force their own designs rather than letting the code evolve naturally through an iterative process. Developers are encouraged to let go of preconceived designs and diagrams in order to build code in a more organic, timeless way.
The permanent resident who is honest - Based on Honesty Idioms English Online Inc.
The document provides an overview of a lesson on honesty idioms for language learners. It includes reviewing and practicing idioms like "to play by the rules" and "a monkey business". Learners fill in blanks with the correct idioms, listen to an audio on mobility rights for permanent residents, discuss experiences, and learn about adjective clauses. The lesson aims to improve vocabulary, listening, speaking, grammar and reflection on learning.
The document provides rules for capitalization. It discusses capitalizing the pronoun "I" and the exclamation "O"; capitalizing the first word of a sentence; capitalizing the first word of quoted sentences if they are complete sentences; capitalizing proper nouns and modifiers associated with them; capitalizing a person's title when preceding their name with exceptions; capitalizing points of compass when referring to regions; capitalizing the first and last words of titles with other rules for capitalizing words within titles; capitalizing days of week, months, and holidays but not seasons with exceptions; and capitalizing words derived from proper nouns.
In this talk from Red Hat's 2014 Agile Conference, Cory Foy talks about the conditions necessary to bring about true organizational change towards agility. In addition, he covers patterns of adoptions and a variety of techniques used at scale
Part of this Agile Requirements Workshop was to do a 20/20 Vision ranking game with the participants to understand and discuss what their "Biggest Challenge" is in Agile Requirements. This is draft one of the team's ranking of these challenges. More context will be forthcoming.
Many companies have created a proper noun titled "Agile". But that word doesn't exist as a proper noun. The goal isn't to achieve some mythical ethos of "Agile" but instead to have organizational agility. This presentation covers the principles of Organizational Agility and how to make your organization get to the goal of agility.
These are the slides from Robert "Uncle Bob" Martin's talk at the Chicago Day of Mobile event held in March 2010. Slides posted with permission from Bob.
The band Queen was formed in 1970 in London, England by four musicians who had known each other for years: Freddie Mercury, Brian May, Roger Taylor, and Mike Gross. They struggled to find success early on, going through multiple bass players before settling on John Deacon. Their self-titled debut album was released in 1973 to mixed reviews. They gained popularity through their live performances as an opening act. Their second album and its hit single "Seven Seas of Rhye" helped them break through commercially. After releasing several successful albums in the 1970s, Queen achieved worldwide recognition and fame.
The document provides an overview of the top 6 programming languages to learn in 2021 based on job opportunities, learning resources, usage, and trends. It ranks the languages from #6 to #1, with JavaScript ranked #1 as the most widely used and in-demand language. The document analyzes each language's job prospects, typical uses, and popularity trends to help readers decide which language to focus on learning. It also includes exercises to practice grammar, pronunciation, and soft skills related to the topic.
The document provides three reasons why learning to code is important:
1. To understand how technology works, as code is the language that runs computer programs, apps, and websites. Learning to code allows one to stay competitive in the digital era.
2. Coding teaches problem-solving skills and thinking sequentially, like telling a story with a goal and plan. This improves one's ability to think.
3. As more jobs transform digitally, coding skills open employment opportunities and add value to any profession. Coding enhances creativity and the ability to create possibilities. Overall, learning to code improves one's life and work in today's technology-focused world.
How to tell a better story (in code)(final)Bonnie Pan
To tell a better story in code, start with knowing your audience, use ubiquitous languages in your code so that no translation is needed for your audience.
Apply visual design principles to identify code smells and organize the layout in a way to strengthen the communication.
Start from there then practice often by refactoring.
The truth is there are never shortcuts to tell a better story in life or in code, practice practice practice by refactoring we will make our code tell a better story.
Let’s opt in better software for our future selves and others. Let’s make our code accessible for those who are interested in our code. Let’s invite our audience to our story in code.
The Scottish Ruby Conference featured talks on writing simple and understandable code, reading code to improve skills, dealing with feelings of uncertainty when coding, and how Rails adopted patterns and techniques developed elsewhere like MVC, Active Record, REST, convention over configuration, and ERB.
The document discusses marketing principles for small software vendors based on the book "The 22 Immutable Laws of Marketing" by Al Ries and Jack Trout. It summarizes the key points of the first 5 laws: 1) It is better to be the number one player in a category. 2) If you cannot be first, create a new category where you can be number one. 3) It is better to be first in people's minds than first in the market. 4) Perception is more important than reality in product battles. 5) The most powerful marketing message focuses on owning a single word or idea in customers' minds.
Jeff shares four important lessons he has learned about software development: [1] The best code is no code at all - avoid writing code when possible through alternatives like calling other departments or using existing open source/commercial solutions. [2] Code is for humans first, and computers second - code expresses the problem to humans, so write code that is clear for other humans to understand. [3] You are not as smart as you think you are - the software field is constantly changing, so continuously learn and question your assumptions. [4] Software development is 80% social and 20% technical - most of the challenges lie in understanding user needs through communication, while technical problems can often be solved through search engines.
My closing talk for this year's Fronteers conference in Amsterdam, the Netherlands about just how cool it is to be someone who builds things for the web.
Why your project's brand is more important than the code - SCRIPTShane Curcuru
The document discusses the importance of branding and storytelling for open source projects. It argues that while code is important internally, branding and telling the story of a project's value to external audiences is key to growing communities and users. Effective branding involves both technical "Geeks" focused on code and non-technical "Suits" focused on communicating the project's benefits. The governance of a project's brand is also important to consider to ensure the community remains in control of the story being told.
How to Teach and Learn with ChatGPT - BETT 2023Dominik Lukes
The document discusses how ChatGPT works and its limitations. It notes that ChatGPT:
- Is built on top of large language models like GPT-3 and predicts the next token rather than reasoning.
- Only sees text as tokens rather than words, sentences, etc. and has no memory or ability to look up facts.
- Is limited by its context window size in generating responses.
- Does not learn from interactions but can be steered through examples and feedback to provide more accurate responses within its capabilities. Prompt engineering is important to get the most value from ChatGPT.
Christian Heilmann - Building human interfaces powered by AI - Codemotion Ber...Codemotion
This document discusses building human interfaces powered by AI. It covers various AI technologies like natural language processing, computer vision, sentiment analysis and speech recognition that can help create more intuitive interfaces. It also addresses challenges around data privacy, bias, transparency and the responsible use of AI. The document provides examples of how these technologies can automate tasks, reduce errors and help humans interact with machines in a more natural way. It emphasizes that AI should be designed to serve human needs.
The document discusses 17 techniques that start-ups can use to generate revenue, as introduced in a slide deck presentation. It provides examples for each technique, including allowing users to look professional by paying for advanced features, enticing users to join exclusive groups or communities, using mystery and discovery to drive engagement, appealing to users' desire to maintain ownership and control over their accounts and data, leveraging users' competitive instincts to complete sets or reach milestones, and exploiting various human psychological tendencies like the fear of missing out or the need for speed and convenience. The goal is to understand why people are willing to pay before designing business models around monetization strategies.
Psychology for designers or 3 predictions from psychology for the future of ...Joe Leech
How can an understanding of psychology make your designs better? @mrjoe will make three predictions for the future of web design based on psychology.
We'll also cover
-Why Siri doesn't work very well and won't for a while
-Why right now, we are designing like Sheldon from the Big Bang Theory
-How we'll be designing in five years time
Psychology for designers or 3 predictions from psychology for the future of ...cxpartners
The document discusses three predictions for the future of web design based on psychology:
1. Designing like Conversation - Web design will focus more on synchronous interactions like conversations.
2. Designing with Mental Models of Relevance - Design will involve understanding users' mental models and recognizing patterns of relevance based on multiple context elements.
3. Designing with Olfaction - The possibility of designing smell-based interactions is discussed, though this prediction is acknowledged to be less likely. The key is leveraging how memory of smells can create experiences. Social aspects of modeling other minds and shared cognition are highlighted as important influences on these predictions.
The document discusses common mistakes made by developers. It addresses 7 common mistakes: thinking the job is only about coding; blaming unclear requirements on others; prioritizing speed over quality; focusing only on coding without understanding the problem domain; avoiding asking for help; considering testing to be someone else's job; and blaming limits on management rather than taking responsibility. For each mistake, it provides a counterpoint and tips to avoid the mistake and improve development practices.
In questa sessione a quattro mani introdurremo alcuni dei refactorings più comuni e più facilmente applicabili nell'utilizzo quotidiano, e vedremo come risolverli in maniera facile, veloce ed indolore utilizzando ReSharper e pochi colpi di tastiera.
Incidentalmente, inseriremo nel mentre un pò di patterns e di Test-Driven Development, perchè "se non è testato, allora non funziona"
The presentation given at the ACCU 2009 conference.
Synopsis...
Legacy code. You can't live with it. You can't live without it.
Well, you can't avoid it, at least. Spend long enough in the software factory, and you'll inevitably run into other people's old code. And of course, none of this old stuff is any good. It's nothing like the high quality software you craft. Pure tripe.
Let's be honest, sometimes you might even stumble across some of *your own* old code, and embarrassing as it is, you have to admit that you don't know how it works, let alone how to fix it.
This presentation will look at practical strategies for working with "old" crufty code. We'll see how to:
start working with a completely unfamiliar codebase
understand old spaghetti programming
make correct modifications
prevent bad code from causing more pain in the future
/dev/fort: you can build it in a week @emwJames Aylett
Imagine a place with no distractions – no IM, no Twitter, in fact no internet access at all. Within, a dozen or more developers, designers, thinkers and doers. And a lot of a food. Now imagine that place is a fort. I talk about why anyone would want to go on holiday to do their day job, the bits of the internet we had to rebuild to work without the internet, and some tips you can use even when you don't have a fort.
This document provides an introduction to computer science and programming concepts. It discusses that computers are everywhere and not just personal computers. It also covers binary, algorithms, data structures, programming languages, conditions, loops, and games to demonstrate computer science concepts. The document encourages learning computer science through online courses and communities.
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...Cory Foy
One of the goals of agility is to be able to respond rapidly to market change. But do you feel prepared to wake up to a product announcement from Amazon disrupting your entire business? Would you know what steps to take?
Instead of being worried, we can get mapping! Wardley Mapping, coined by Simon Wardley, is a way of understanding markets and components in a way that allows us to visualize and anticipate change in markets - and develop strategies and gameplays for how we can respond to them.
This session uses several real-world cases of work with organizations to map their landscape and show the strategies and gameplays that allowed them to reshape where they were headed - and allow you to understand your organization’s market and how you can think about features and product direction.
Stratgic Play - Doing the Right Thing at the Right TimeCory Foy
In this talk from Red Hat Agile Day 2015, Cory Foy covers the notion of Strategic Play by covering tools like Wardley Maps, Business Model Canvas, Purpose-Based Alignment Model and Product Vision Statement
The band Queen was formed in 1970 in London, England by four musicians who had known each other for years: Freddie Mercury, Brian May, Roger Taylor, and Mike Gross. They struggled to find success early on, going through multiple bass players before settling on John Deacon. Their self-titled debut album was released in 1973 to mixed reviews. They gained popularity through their live performances as an opening act. Their second album and its hit single "Seven Seas of Rhye" helped them break through commercially. After releasing several successful albums in the 1970s, Queen achieved worldwide recognition and fame.
The document provides an overview of the top 6 programming languages to learn in 2021 based on job opportunities, learning resources, usage, and trends. It ranks the languages from #6 to #1, with JavaScript ranked #1 as the most widely used and in-demand language. The document analyzes each language's job prospects, typical uses, and popularity trends to help readers decide which language to focus on learning. It also includes exercises to practice grammar, pronunciation, and soft skills related to the topic.
The document provides three reasons why learning to code is important:
1. To understand how technology works, as code is the language that runs computer programs, apps, and websites. Learning to code allows one to stay competitive in the digital era.
2. Coding teaches problem-solving skills and thinking sequentially, like telling a story with a goal and plan. This improves one's ability to think.
3. As more jobs transform digitally, coding skills open employment opportunities and add value to any profession. Coding enhances creativity and the ability to create possibilities. Overall, learning to code improves one's life and work in today's technology-focused world.
How to tell a better story (in code)(final)Bonnie Pan
To tell a better story in code, start with knowing your audience, use ubiquitous languages in your code so that no translation is needed for your audience.
Apply visual design principles to identify code smells and organize the layout in a way to strengthen the communication.
Start from there then practice often by refactoring.
The truth is there are never shortcuts to tell a better story in life or in code, practice practice practice by refactoring we will make our code tell a better story.
Let’s opt in better software for our future selves and others. Let’s make our code accessible for those who are interested in our code. Let’s invite our audience to our story in code.
The Scottish Ruby Conference featured talks on writing simple and understandable code, reading code to improve skills, dealing with feelings of uncertainty when coding, and how Rails adopted patterns and techniques developed elsewhere like MVC, Active Record, REST, convention over configuration, and ERB.
The document discusses marketing principles for small software vendors based on the book "The 22 Immutable Laws of Marketing" by Al Ries and Jack Trout. It summarizes the key points of the first 5 laws: 1) It is better to be the number one player in a category. 2) If you cannot be first, create a new category where you can be number one. 3) It is better to be first in people's minds than first in the market. 4) Perception is more important than reality in product battles. 5) The most powerful marketing message focuses on owning a single word or idea in customers' minds.
Jeff shares four important lessons he has learned about software development: [1] The best code is no code at all - avoid writing code when possible through alternatives like calling other departments or using existing open source/commercial solutions. [2] Code is for humans first, and computers second - code expresses the problem to humans, so write code that is clear for other humans to understand. [3] You are not as smart as you think you are - the software field is constantly changing, so continuously learn and question your assumptions. [4] Software development is 80% social and 20% technical - most of the challenges lie in understanding user needs through communication, while technical problems can often be solved through search engines.
My closing talk for this year's Fronteers conference in Amsterdam, the Netherlands about just how cool it is to be someone who builds things for the web.
Why your project's brand is more important than the code - SCRIPTShane Curcuru
The document discusses the importance of branding and storytelling for open source projects. It argues that while code is important internally, branding and telling the story of a project's value to external audiences is key to growing communities and users. Effective branding involves both technical "Geeks" focused on code and non-technical "Suits" focused on communicating the project's benefits. The governance of a project's brand is also important to consider to ensure the community remains in control of the story being told.
How to Teach and Learn with ChatGPT - BETT 2023Dominik Lukes
The document discusses how ChatGPT works and its limitations. It notes that ChatGPT:
- Is built on top of large language models like GPT-3 and predicts the next token rather than reasoning.
- Only sees text as tokens rather than words, sentences, etc. and has no memory or ability to look up facts.
- Is limited by its context window size in generating responses.
- Does not learn from interactions but can be steered through examples and feedback to provide more accurate responses within its capabilities. Prompt engineering is important to get the most value from ChatGPT.
Christian Heilmann - Building human interfaces powered by AI - Codemotion Ber...Codemotion
This document discusses building human interfaces powered by AI. It covers various AI technologies like natural language processing, computer vision, sentiment analysis and speech recognition that can help create more intuitive interfaces. It also addresses challenges around data privacy, bias, transparency and the responsible use of AI. The document provides examples of how these technologies can automate tasks, reduce errors and help humans interact with machines in a more natural way. It emphasizes that AI should be designed to serve human needs.
The document discusses 17 techniques that start-ups can use to generate revenue, as introduced in a slide deck presentation. It provides examples for each technique, including allowing users to look professional by paying for advanced features, enticing users to join exclusive groups or communities, using mystery and discovery to drive engagement, appealing to users' desire to maintain ownership and control over their accounts and data, leveraging users' competitive instincts to complete sets or reach milestones, and exploiting various human psychological tendencies like the fear of missing out or the need for speed and convenience. The goal is to understand why people are willing to pay before designing business models around monetization strategies.
Psychology for designers or 3 predictions from psychology for the future of ...Joe Leech
How can an understanding of psychology make your designs better? @mrjoe will make three predictions for the future of web design based on psychology.
We'll also cover
-Why Siri doesn't work very well and won't for a while
-Why right now, we are designing like Sheldon from the Big Bang Theory
-How we'll be designing in five years time
Psychology for designers or 3 predictions from psychology for the future of ...cxpartners
The document discusses three predictions for the future of web design based on psychology:
1. Designing like Conversation - Web design will focus more on synchronous interactions like conversations.
2. Designing with Mental Models of Relevance - Design will involve understanding users' mental models and recognizing patterns of relevance based on multiple context elements.
3. Designing with Olfaction - The possibility of designing smell-based interactions is discussed, though this prediction is acknowledged to be less likely. The key is leveraging how memory of smells can create experiences. Social aspects of modeling other minds and shared cognition are highlighted as important influences on these predictions.
The document discusses common mistakes made by developers. It addresses 7 common mistakes: thinking the job is only about coding; blaming unclear requirements on others; prioritizing speed over quality; focusing only on coding without understanding the problem domain; avoiding asking for help; considering testing to be someone else's job; and blaming limits on management rather than taking responsibility. For each mistake, it provides a counterpoint and tips to avoid the mistake and improve development practices.
In questa sessione a quattro mani introdurremo alcuni dei refactorings più comuni e più facilmente applicabili nell'utilizzo quotidiano, e vedremo come risolverli in maniera facile, veloce ed indolore utilizzando ReSharper e pochi colpi di tastiera.
Incidentalmente, inseriremo nel mentre un pò di patterns e di Test-Driven Development, perchè "se non è testato, allora non funziona"
The presentation given at the ACCU 2009 conference.
Synopsis...
Legacy code. You can't live with it. You can't live without it.
Well, you can't avoid it, at least. Spend long enough in the software factory, and you'll inevitably run into other people's old code. And of course, none of this old stuff is any good. It's nothing like the high quality software you craft. Pure tripe.
Let's be honest, sometimes you might even stumble across some of *your own* old code, and embarrassing as it is, you have to admit that you don't know how it works, let alone how to fix it.
This presentation will look at practical strategies for working with "old" crufty code. We'll see how to:
start working with a completely unfamiliar codebase
understand old spaghetti programming
make correct modifications
prevent bad code from causing more pain in the future
/dev/fort: you can build it in a week @emwJames Aylett
Imagine a place with no distractions – no IM, no Twitter, in fact no internet access at all. Within, a dozen or more developers, designers, thinkers and doers. And a lot of a food. Now imagine that place is a fort. I talk about why anyone would want to go on holiday to do their day job, the bits of the internet we had to rebuild to work without the internet, and some tips you can use even when you don't have a fort.
This document provides an introduction to computer science and programming concepts. It discusses that computers are everywhere and not just personal computers. It also covers binary, algorithms, data structures, programming languages, conditions, loops, and games to demonstrate computer science concepts. The document encourages learning computer science through online courses and communities.
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...Cory Foy
One of the goals of agility is to be able to respond rapidly to market change. But do you feel prepared to wake up to a product announcement from Amazon disrupting your entire business? Would you know what steps to take?
Instead of being worried, we can get mapping! Wardley Mapping, coined by Simon Wardley, is a way of understanding markets and components in a way that allows us to visualize and anticipate change in markets - and develop strategies and gameplays for how we can respond to them.
This session uses several real-world cases of work with organizations to map their landscape and show the strategies and gameplays that allowed them to reshape where they were headed - and allow you to understand your organization’s market and how you can think about features and product direction.
Stratgic Play - Doing the Right Thing at the Right TimeCory Foy
In this talk from Red Hat Agile Day 2015, Cory Foy covers the notion of Strategic Play by covering tools like Wardley Maps, Business Model Canvas, Purpose-Based Alignment Model and Product Vision Statement
Continuous Deployment and Testing Workshop from Better Software WestCory Foy
In this workshop from the 2015 SQE Better Software West conference, Cory Foy details the Continuous Paradigm companies are embracing - including Continuous Integration, Continuous Deployment, and Continuous Testing. This presentation was co-created by Jared Richardson.
Choosing Between Scrum and Kanban - TriAgile 2015Cory Foy
The document compares and contrasts the Scrum and Kanban frameworks. Scrum is a framework that utilizes roles, artifacts, and events like sprints, stand-ups, and planning. Kanban focuses on visualizing workflow, limiting work-in-process, measuring and managing flow, making policies explicit, and using models for continuous improvement. Both aim to provide structure, frequent feedback, and adapting processes through inspecting outcomes. However, Kanban emphasizes evolutionary change through techniques like limiting work-in-process while Scrum relies more on timeboxed sprints.
In the software development world, we spend a lot of our time coding, and very little practicing. In this presentation to the Triangle.rb group, Smashing Boxes CTO Cory Foy talks about a focused development practice called Code Katas - and how they can help you improve your hiring, your team, and your own programming abilities
In this talk from Southern Fried Agile 2014, Cory Foy gives an overview of the patterns necessary to have successful agility when working with distributed and dispersed teams. He looks at Scrum, Kanban and various virtual tools.
In this talk from Triangle.rb, Cory Foy goes over basic language features of Ruby, along with some gotchas from David Black's "The Well Grounded Rubyist". We cover variables, classes, blocks, and other aspects.
Agile Roots: The Agile Mindset - Agility Across the OrganizationCory Foy
In this talk from Agile Roots 2014, Cory Foy talks about what is necessary for agility across the entire enterprise - regardless of whether you are using Agile, Lean, or Waterfall. Cory also covers the three principles and four value statements of agility.
Triangle.rb - How Secure is Your Rails Site, Anyway?Cory Foy
In this talk from Triangle.rb, Cory Foy details the state of Rails security, including paying attention to libraries you use. He includes real world examples of exploits, and links to resources
In this talk from a Tampa 8th Light University, Senior Craftsman Cory Foy details the design patterns used in Rails, and shows their use and implementation while reference Fowler's PoEAA and Alexander's Timeless Way of Building
This document discusses the importance of listening to code to understand what it is communicating. It recommends deciding to listen, listening for the whole message without personal biases, being patient, curious, and testing your understanding. Other topics covered include katas, koans, adding new features, design principles like SOLID, commonality/variability analysis, and the need for context to truly understand code.
Getting Unstuck: Working with Legacy Code and DataCory Foy
From this presentation for the IASA in 2007, Cory covers common challenges in dealing with Legacy Code and Data, and some tools and techniques for handling them.
In this session from Øredev 2010 in Malmö, Sweden, Cory Foy tackles what it takes to foster Software Craftsmanship and why it's so important to value those people who are taking responsibility for their careers
In this session from Øredev 2010 in Malmö, Sweden, Cory Foy covers the concepts of Koans and Katas in the software world by explaining the concepts of learning models such as the Dreyfus Model of Skills Acquisition, Shu Ha Ri and others.
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
Conversational agents, or chatbots, are increasingly used to access all sorts of services using natural language. While open-domain chatbots - like ChatGPT - can converse on any topic, task-oriented chatbots - the focus of this paper - are designed for specific tasks, like booking a flight, obtaining customer support, or setting an appointment. Like any other software, task-oriented chatbots need to be properly tested, usually by defining and executing test scenarios (i.e., sequences of user-chatbot interactions). However, there is currently a lack of methods to quantify the completeness and strength of such test scenarios, which can lead to low-quality tests, and hence to buggy chatbots.
To fill this gap, we propose adapting mutation testing (MuT) for task-oriented chatbots. To this end, we introduce a set of mutation operators that emulate faults in chatbot designs, an architecture that enables MuT on chatbots built using heterogeneous technologies, and a practical realisation as an Eclipse plugin. Moreover, we evaluate the applicability, effectiveness and efficiency of our approach on open-source chatbots, with promising results.
The Microsoft 365 Migration Tutorial For Beginner.pptxoperationspcvita
This presentation will help you understand the power of Microsoft 365. However, we have mentioned every productivity app included in Office 365. Additionally, we have suggested the migration situation related to Office 365 and how we can help you.
You can also read: https://www.systoolsgroup.com/updates/office-365-tenant-to-tenant-migration-step-by-step-complete-guide/
In the realm of cybersecurity, offensive security practices act as a critical shield. By simulating real-world attacks in a controlled environment, these techniques expose vulnerabilities before malicious actors can exploit them. This proactive approach allows manufacturers to identify and fix weaknesses, significantly enhancing system security.
This presentation delves into the development of a system designed to mimic Galileo's Open Service signal using software-defined radio (SDR) technology. We'll begin with a foundational overview of both Global Navigation Satellite Systems (GNSS) and the intricacies of digital signal processing.
The presentation culminates in a live demonstration. We'll showcase the manipulation of Galileo's Open Service pilot signal, simulating an attack on various software and hardware systems. This practical demonstration serves to highlight the potential consequences of unaddressed vulnerabilities, emphasizing the importance of offensive security practices in safeguarding critical infrastructure.
Discover top-tier mobile app development services, offering innovative solutions for iOS and Android. Enhance your business with custom, user-friendly mobile applications.
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving
Manufacturing custom quality metal nameplates and badges involves several standard operations. Processes include sheet prep, lithography, screening, coating, punch press and inspection. All decoration is completed in the flat sheet with adhesive and tooling operations following. The possibilities for creating unique durable nameplates are endless. How will you create your brand identity? We can help!
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
Essentials of Automations: Exploring Attributes & Automation ParametersSafe Software
Building automations in FME Flow can save time, money, and help businesses scale by eliminating data silos and providing data to stakeholders in real-time. One essential component to orchestrating complex automations is the use of attributes & automation parameters (both formerly known as “keys”). In fact, it’s unlikely you’ll ever build an Automation without using these components, but what exactly are they?
Attributes & automation parameters enable the automation author to pass data values from one automation component to the next. During this webinar, our FME Flow Specialists will cover leveraging the three types of these output attributes & parameters in FME Flow: Event, Custom, and Automation. As a bonus, they’ll also be making use of the Split-Merge Block functionality.
You’ll leave this webinar with a better understanding of how to maximize the potential of automations by making use of attributes & automation parameters, with the ultimate goal of setting your enterprise integration workflows up on autopilot.
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor IvaniukFwdays
At this talk we will discuss DDoS protection tools and best practices, discuss network architectures and what AWS has to offer. Also, we will look into one of the largest DDoS attacks on Ukrainian infrastructure that happened in February 2022. We'll see, what techniques helped to keep the web resources available for Ukrainians and how AWS improved DDoS protection for all customers based on Ukraine experience
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
1. When Code Cries
Cory Foy
@cory_foy
foyc@coryfoy.com
http://www.coryfoy.com
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
Reading from Timeless Way. Then: All of us here are technologists in some way. We desire to
build things that people will use. Living software. But if you look at our industry, the fruit of
our labors is not living software. The majority of software out there has a common attribute.
It is:
1
2. Bad Code
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
Bad Code is the bane of the software industry. Why is it that, over time, code becomes harder
and harder to work with - and how can we prevent ours from ending up with the same fate?
To answer that, perhaps we should start with identifying what quality code is. So, is this
quality code?
2
3. Is this quality code?
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
Why do we like Easy to Change code? Because it is a lower cognitive burden. Because writing
code is hard enough, as we’ll see.
3
4. Cognitively Undemanding
Where we want our
software
Context
Embedded
Context
Reduced
Modifying Software we
wrote
#gotober @cory_foy
Modifying Software we
didn’t write
Cognitively Demanding
foyc@coryfoy.com
Friday, October 18, 13
We want code that is in the upper right quadrant. But, if we’re lucky to be modifying our own
code, it’s in the lower left. Worse case, we don’t even have the context, so it’s in the lower
right. Now, if we have tests, that helps increase the context. But when we don’t, we can end
up with code that looks like
4
5. #gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
6. Code Smells
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
6
Right - “Smelly Code”. But what I’d like to do today is reframe the discussion slightly. Instead
of telling our code that it smells, let’s recognize something else - our code is trying to talk to
us.
7. Code Talks
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
And imagine trying to talk to someone about something important - say, the building is on
fire - and them not understanding your strange gestures and telling you you are smelly.
Would that make you happy? It doesn’t make our code happy. And if I can take some poetic
license, I’d even say that code cries
7
8. Code Cries
Because No One
Understands What It Is
Saying
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
8
And our code cries not because it is smelly, but because no one understands what it is trying
to say. It’s trying to point out what it wants to do, what is important, and how to use it. And it
isn’t happy about that! Too often we try to force what we want, what we think is best.
9. “...we have so far beset ourselves with rules, and
concepts, and ideas...that we have become afraid of
what will happen naturally, and convinced that we must
work within a “system” and with “methods” [or] our
surroundings will come tumbling down in chaos.”
Christopher Alexander - “The Timeless Way of Building”
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
9
We turn to our UML and architecture diagrams and design documents, trying to brute force a
system that will work, afraid that if we don’t - chaos. But nature *dictates* an iterative design
- one where the best path is not only discovered, but continually chosen. We literally can not
build software any other way.
10. #gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
10
This is a map of the Mississippi River in the United States. What’s special about it is that it is all of the routes the
river has run through the years. We create a design. We settle down, build a house, have a family. But the code
doesn't want that. It has plans beyond our design. And if we don't listen to those plans, our days will become filled
with holding off the impending - and inevitable - change (http://www.adammandelman.net/tag/harold-fisk/)
11. #gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
11
For example, in 2011, the Mississippi River tried to change course, I believe to the Orange
area. And it normally would have - except for the millions of dollars the Army Corp of
Engineers spent to erect dams, flood farm fields and otherwise keep it on the course best for
us - not for it. But trying to brute force design into nature’s iterative process isn’t the only
problem. (10k next)
12. Ten Thousand Hours
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
12
There’s a common figure that is given to developers about what it takes to become great in
software. Does anyone know that number? <Click> This is the number of hours to “master” a
skill. But as much as we tout this, we don’t really act like this is important. People new to
software either get this
14. #gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
Empty promises! (Beaker story). Can you imagine learning C++ in 24 hours? Well, you might
be able to learn syntax, but programming isn’t about syntax. It’s about communication,
precisely why they are called programming languages. But learning communication is hard,
and we don’t have time for that! (Jr vs Sr next)
14
15. Number of Results for
“X Developer”
Linked In:
Junior Developer: 17,157
Senior Developer: 123,634
Google:
Junior Developer: 1,060,000
Senior Developer: 4,290,000
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
We have a gap there. If we really want to make it better, we have to figure out how to fill that
gap. And it turns out we can look at how we classify and learn natural languages and create
some interesting parallels to software
15
16. Imperative Programming
Functional Programming
Logic Programming
Dynamic Typing
Static Typing
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
16
The first is how different languages - and paradigms - can affect our viewpoints. Linguist
Roman Jakobson points out “Languages differ essentially in what they must convey and not in
what they may convey”. For example, if I said, in English, I had dinner with a neighbor last
night, I wouldn’t have to reveal if it was a male or female. But if I said the same thing in
French or German, I would be obliged to (voisin vs voisine and Nachbar vs Nachbarin). So
they same can be said for programming languages. Functional must express problems in the
context of reduction of terms. Imperative expresses problems as a statement of the process,
and logic expresses problems as a statement of the result. Static typing forces us to
abstractions sooner, while dynamic typing allows the abstraction to be held off
17. Coding Standards Define Dialects
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
17
The second is that even within languages we have dialects. We have to agree on what that
common dialect is going to be. This is traditionally the essence of coding standards - what is
our agreed upon dialect?
18. Cognitively Undemanding
- Copying from the board
- Reading a Map
- Face to Face Conversation
- Selecting food in the
lunchroom
BICS
- Following a class schedule
- Telephone Conversation
- Oral Presentations
- Getting an absence excuse
Context
Embedded
Context
Reduced
- Demonstrations
- Basic Math
Computations
- Science Experiments
- Standardized Tests
- Math Concepts and
Applications
- Listening to a Lecture
CALP
#gotober @cory_foy
Cognitively Demanding
foyc@coryfoy.com
Friday, October 18, 13
The process of learning a natural language has been mapped in two ways. If we look at this
model, we can now do something similar with programming. We can create a model to show
where our gaps are - both in teaching, and in our own learning.
18
19. Foy-Z
Cognitively Undemanding
BICS
Katas
Koans
Context
Embedded
Context
Reduced
Principles and
Patterns
Writing Production
Code
CALP
#gotober @cory_foy
Cognitively Demanding
foyc@coryfoy.com
Friday, October 18, 13
This model, which I’m calling the “Foy-Z” model, since my name isn’t Jay, looks like this. We
need to start by providing context. Katas provide low cognitive challenge to practice
expanding viewpoints. Koans provide language specific nuances. Principles and Patterns
provide guides for forces you’ll encounter, and it takes all of the above to write production
code.
19
20. Katas
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
Let’s start with Katas. First described in the software world by Pragmatic Dave Thomas, they
offer the ability to practice without the solution being the cognitive challenge. In short, they
allow developers to practice varying externally motivated viewpoints.
20
21. Conway’s Game of Life
- Infinite Grid of Cells
- Each Cell has two states - alive or dead
- Interacts with neighbors in a well known way
http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
21
22. Conway’s Game of Life - If Statement
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
22
23. Conway’s Game of Life - No Conditional
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
23
24. Foy-Z
Cognitively Undemanding
BICS
Katas
Koans
Context
Embedded
Context
Reduced
Principles and
Patterns
Writing Production
Code
CALP
#gotober @cory_foy
Cognitively Demanding
foyc@coryfoy.com
Friday, October 18, 13
So Katas allow us to not focus on solving the problem, but instead using the problem to
explore the space of viewpoints. The context is very high - we cognitively understand the
problem, so we can focus on practice. But at some point we need more - and that’s where
24
25. Koans
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
25
Koans come in. Koans provide language-specific nuances - the grammar if you will. They
tend to be language specific, but lower context. It’s like practicing nouns and verbs - great to
do, but much better if you have some context to put them in. For example (next Edgecase
Koans)
32. Principles and
Patterns
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
32
Design Patterns provide a guide for the forces encountered. What does that mean? We have a
tendency to think of Design Patterns as recipes to make our code look a certain way. But
33. 4 Rules of Simple Design
Does this code
express all of the
ideas we want to
express?
Are there concepts
from our domain
that can be
expressed?
#gotober @cory_foy
Friday, October 18, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
33
34. Fowler’s Perspectives (from UML Distilled)
Are we operating at
the right level Conceptual,
Specification or
Implementation?
#gotober @cory_foy
Friday, October 18, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
34
35. SOLID Principles
Do we have
duplication
(implementation or
conceptual)?
Single
responsibilities?
LoD violations?
LSP violations?
#gotober @cory_foy
Friday, October 18, 13
Transition to patterns
foyc@coryfoy.com
35
36. Naming something the name of a pattern
does not make it that pattern
Putting patterns in our code does not
make our code good
#gotober @cory_foy
Friday, October 18, 13
Patterns are something else.
foyc@coryfoy.com
36
40. • Pattern Name
• Intent
• Also Known As
• Motivation / Forces
• Applicability
• Structure
• Participants
• Collaboration
• Consequences
• Implementation
• Sample Code
• Known Uses
• Related Patterns
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
The GoF Book wasn’t a beginners guide. It was Erich’s PhD Thesis. Patterns are designed to
put into form the forces you may run into while building code. What does that mean?
40
41. Multiple
Pictures
- Countries
- Products
- Locations
Send
Pictures
- Send Data
- Receive Data
Server
#gotober @cory_foy
Storage Options
foyc@coryfoy.com
Friday, October 18, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
41
42. Offline
Not allow send
Automatically
Forces:
- Store multiple requests
- Schedule to run them
- Handle failed requests
- Allow user to see
status
#gotober @cory_foy
Queue items to send
Manually
Forces:
- User has to remember to
send
- User can’t do other tasks
until sent
- User has to send each one
foyc@coryfoy.com
Friday, October 18, 13
One way is by knowing the forces at play and comparing them to previous events. For
example, the phone (or server) could be offline. What can we do if we are offline?
42
45. Writing Production
Code
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
45
This is the most demanding of all. Why? Sure, it seems easy when we have greenfield projects
- but have we forgotten already about (We think of legacy code as old code, but there are
people writing legacy code right this very second)
46. Legacy Code
#gotober @cory_foy
Friday, October 18, 13
foyc@coryfoy.com
46
Let’s look at some legacy code. This is from an app which scores a bowling game. In bowling
parlance, a game consists of 10 frames. The first 9 frames can have 1 or 2 rolls (depending
upon whether all of the pins are knocked down in the first roll) while the last frame can have
up to three rolls (depending upon whether the player knocked down all the pins in the first
two rolls). Explain scoring. So we can extract out some logic here to reduce our cognitive load
49. To Listen, We Must Understand
To Understand, We Must Practice
To Practice, We Must Have Context
#gotober @cory_foy
foyc@coryfoy.com
Friday, October 18, 13
Software is not something we will solve through force. It is instead something that we must
learn to listen to, to feel what our code is telling us. It is through this method that we can
create software which is alive. And software which is alive is software that will survive to
match our vision of building great software to help the world, instead of having the world
utter the time honored phrase of “WTF?”
49