The document describes a conversation between the speaker and their friend Nathan about error handling in Go. The speaker realized they did not fully understand how errors work in Go after coding in it for months. They saw errors only as string messages. After discussing Nathan's code, the speaker was motivated to learn more about how errors truly work in Go from the standard library perspective. They then share insights about errors being values that need immediate handling, and how the error interface and errorString struct are used to create error values in Go.
If you want to learn iPhone app development complete, so you arrived on right location... From my slides u easily learn iPhone app development.. This is my second tutorial slides.. I also share some more tutorials.. Keep in touch...
If you want to learn iPhone app development complete, so you arrived on right location... From my slides u easily learn iPhone app development.. This is my third tutorial slides.. I also share some more tutorials.. Keep in touch...
Cucumber for automated acceptance testing.pptxKalhan Liyanage
Acceptance testing ensures software meets stakeholder requirements by testing functionality from the stakeholder's perspective. Cucumber is an acceptance testing framework that uses a plain language format called Gherkin to define test cases as features, scenarios, and steps. Gherkin files are mapped to code step definitions to automate testing. Cucumber supports tagging scenarios and organizing common steps and context across scenarios to facilitate maintenance.
Document contains the Natural Algorithm for a Sentiment Analysis & Opinion Mining System drafted and implemented at Sculatics.
Document assumes readers to have a basic understanding of Sentiment Analysis, Natural Language Processing and Artificial Intelligence.
100% code coverage by static analysis - is it that good?PVS-Studio
The document discusses achieving 100% code coverage through static analysis and whether this is truly valuable. It notes that static analyzers often generate false positives that can drown out real errors. The author's static analyzer was finding many false positives for code that could never be executed. To address this, the analyzer was updated to not analyze code branches that are provably unreachable based on condition expressions. This reduces false positives while still finding all real errors, demonstrating that 100% coverage does not necessarily mean higher quality analysis.
This document discusses syntax-directed translation and type checking in programming languages. It explains that in syntax-directed translation, attributes are attached to grammar symbols and semantic rules compute attribute values. There are two ways to represent semantic rules: syntax-directed definitions and translation schemes. The document also discusses synthesized and inherited attributes, dependency graphs, and the purpose and components of type checking, including type synthesis, inference, conversions, and static versus dynamic checking.
This document summarizes Chapter 5 of the book "C Programming: A Modern Approach" regarding selection statements in C. It discusses logical expressions using relational and equality operators that return true or false values. It then covers the if statement for conditional execution, including else clauses, nested if statements, and conditional expressions. Finally, it discusses the switch statement as an alternative to nested if statements for selecting among multiple possible cases.
If you want to learn iPhone app development complete, so you arrived on right location... From my slides u easily learn iPhone app development.. This is my second tutorial slides.. I also share some more tutorials.. Keep in touch...
If you want to learn iPhone app development complete, so you arrived on right location... From my slides u easily learn iPhone app development.. This is my third tutorial slides.. I also share some more tutorials.. Keep in touch...
Cucumber for automated acceptance testing.pptxKalhan Liyanage
Acceptance testing ensures software meets stakeholder requirements by testing functionality from the stakeholder's perspective. Cucumber is an acceptance testing framework that uses a plain language format called Gherkin to define test cases as features, scenarios, and steps. Gherkin files are mapped to code step definitions to automate testing. Cucumber supports tagging scenarios and organizing common steps and context across scenarios to facilitate maintenance.
Document contains the Natural Algorithm for a Sentiment Analysis & Opinion Mining System drafted and implemented at Sculatics.
Document assumes readers to have a basic understanding of Sentiment Analysis, Natural Language Processing and Artificial Intelligence.
100% code coverage by static analysis - is it that good?PVS-Studio
The document discusses achieving 100% code coverage through static analysis and whether this is truly valuable. It notes that static analyzers often generate false positives that can drown out real errors. The author's static analyzer was finding many false positives for code that could never be executed. To address this, the analyzer was updated to not analyze code branches that are provably unreachable based on condition expressions. This reduces false positives while still finding all real errors, demonstrating that 100% coverage does not necessarily mean higher quality analysis.
This document discusses syntax-directed translation and type checking in programming languages. It explains that in syntax-directed translation, attributes are attached to grammar symbols and semantic rules compute attribute values. There are two ways to represent semantic rules: syntax-directed definitions and translation schemes. The document also discusses synthesized and inherited attributes, dependency graphs, and the purpose and components of type checking, including type synthesis, inference, conversions, and static versus dynamic checking.
This document summarizes Chapter 5 of the book "C Programming: A Modern Approach" regarding selection statements in C. It discusses logical expressions using relational and equality operators that return true or false values. It then covers the if statement for conditional execution, including else clauses, nested if statements, and conditional expressions. Finally, it discusses the switch statement as an alternative to nested if statements for selecting among multiple possible cases.
Pigaios: A Tool for Diffing Source Codes against Binaries (Hacktivity 2018)Joxean Koret
Pigaios is a tool that diffs source codes against binaries to port symbols without needing to compile source codes. It parses source codes and binaries using Clang to extract artifacts from functions. Initial matches are found by comparing artifacts, then heuristics like call graph matching and nearby functions are used to find more matches. A machine learning model combined with a hand-written function calculates accuracy ratios for matches. Future work includes supporting structures/enums and C++/Objective-C. The tool aims to port symbols with near-zero false positives to help with reverse engineering.
The document discusses C expressions and operators. It covers:
1. Expressions can range from simple variables and constants to more complex expressions using operators. Operators allow building expressions and include arithmetic, relational, and logical operators.
2. Arithmetic operators include unary operators like + and - as well as binary operators like +, -, *, /, and % for addition, subtraction, multiplication, division, and remainder. Compound operators like += modify variables.
3. Increment/decrement operators ++ and -- can be used as prefix or postfix and have side effects of modifying the operand. Their order of evaluation can impact expression values.
Swift Tutorial Part 2. The complete guide for Swift programming languageHossam Ghareeb
Part 2 of The complete guide for Swift programming language. In this part we introduced:
Classes
Inheritance
Computed Properties
Type Level
Lazy
Property Observers
Structures
Equality Vs Identity
Type Casting
Any Vs AnyObject
Protocols
Delegation
Extensions
Generics
Operator Functions
This document discusses various loop constructs in C programming including while, do-while, for, and exiting loops. It covers:
- The while loop evaluates its controlling expression first before executing the loop body.
- The do-while loop evaluates its controlling expression after executing the loop body, so the body is always executed at least once.
- The for loop is ideal for loops with a counting variable, allowing initialization, a controlling expression, and an increment/decrement expression to be specified.
- break exits the entire loop, continue skips to the next iteration, and goto allows jumping to any statement but is rarely needed and can harm readability.
Introduction to Scala Implicits, Pimp my library and TypeclassesJordi Pradel
An introduction to Scala implicits and the patterns they make possible, focusing on Pimp my library and type classes.
# Usage
- Clone the repo https://github.com/agile-jordi/scalabcn-implicits-2015
- When a slide "let's code!" is found, check out the commit corresponding to its first Step, and each consecutive step after that
- e.g. At slide 4 (let's code (Steps 1-3)), check out Step 1, read the code, then Step 2 and then Step 3. Then continue to slide 4.
The document summarizes Chapter 10 of a C programming textbook. It covers topics like local variables, external variables, blocks, and scope. It also discusses organizing a C program by placing preprocessor directives, type definitions, variable declarations, function prototypes, and function definitions in a specific order. The chapter uses examples like implementing a stack with external variables and a guessing game to illustrate the concepts.
Source code recovery is one of the most tedious, and interesting, tasks in reverse engineering. During the course of this talk, the author will talk about a tool being developed (on and off) since last year that aims to generate auto-compilable source code from binaries. The tool is currently working though it needs a lot more work.
Swift is Apple's new programming language that can be used to write apps for iOS, Mac, watchOS and tvOS. It is an open source language that works with C and Objective-C, and provides type safety and modern language features. Playgrounds allow testing code in an interactive environment, and Swift can also be used on IBM's Bluemix platform. The language supports common data types like integers, strings and booleans, as well as variables, constants, comparison operators, loops, functions and more. Structs and classes can be used to define custom types along with features like properties, methods and initializers. Arrays, sets and dictionaries are also supported along with enumerations, protocols, extensions and error handling
Halvar Flake and Sebastian Porst present BinCrowd, a tool for analyzing disassembled binaries. It allows uploading analysis results to a central database for later retrieval and comparison to other binaries. This helps identify code reuse across different programs. The presentation covers techniques for function matching and scoring file similarity. It also discusses how BinCrowd can be accessed using IDA Pro and managing access levels for team collaboration.
1. The document discusses various ways of creating custom data types in programming languages, including enumerated types, named constants, and arrays. It provides guidelines and examples of creating enumerated types, using named constants, and properly utilizing arrays.
2. Creating custom data types through techniques like enumerated types and typedefs can make code more readable, reliable, and modifiable. It allows one to centralize type definitions for easier maintenance.
3. Guidelines are provided for creating enumerated types, using named constants, properly utilizing arrays, and defining custom data types. Examples are given in languages like C, C++, Pascal, and Ada.
This document provides an overview of the Python programming language and concepts like variables, data types, operators, conditional execution, functions, and iteration. It discusses key features of Python like it being an interpreted language, the Python virtual machine, differences between Python 2 and 3. It also covers topics like installing Python, using text editors, values and variable types, operators, expressions, conditional execution using if/else statements, exception handling with try/except, functions and their parameters/arguments. The document includes examples and activities for readers to practice the concepts.
This document provides an introduction to coding for grade 6 students. It discusses ethical practices in coding and contributing to society. It introduces concepts like real-world applications of coding, popular programming languages, and how coding impacts daily life. Traffic lights are used as an example of how a few lines of code can automatically change traffic signals. Coding is applied in many areas like grocery stores, transportation, entertainment and more.
INTRODUCTION TO CODING-CLASS VI LEVEL-DESCRIPTION ABOUT SYNTAX LANGUAGERathnaM16
This document provides an introduction to coding for 6th grade students. It discusses ethical practices in coding and explains that the goal of coding is to contribute to society and avoid harming others. It also outlines what students will learn in each chapter, including real-world applications of coding, how coding impacts daily life, popular programming languages, algorithms, variables, and using conditionals for control flow. Traffic lights and barcode scanners are provided as examples of how coding is applied in everyday life.
This document provides an introduction to coding concepts such as variables, data types, arrays, functions, and programming languages. It discusses key topics like:
- Variables store values in programming and must be initialized before use. Different data types include integers, floats, strings, and booleans.
- Arrays allow storing multiple values of the same type and can be iterated over and modified. Functions group reusable blocks of code and can accept parameters and return values.
- Programming languages act as an interface between humans and computers. High-level languages like Python are easier for humans but compiled to low-level machine code.
- Basic Python syntax is demonstrated through examples like printing, arithmetic operations on variables, and
This document provides an introduction to C++ programming including problem solving skills, software evolution, procedural and object oriented programming concepts, basic C++ programs, operators, header files, conditional statements, loops, functions, pointers, structures and arrays. It discusses topics such as analyzing problems, planning algorithms, coding solutions, evaluating results, procedural and object oriented paradigms, inheritance, polymorphism, flowcharts, basic syntax examples, and more. Various examples are provided to illustrate key concepts in C++.
Python is an interpreted scripting language created in 1991 by Guido van Rossum. It is useful for small to medium sized projects and is used by many companies like Google, Yahoo, and YouTube. Python can be installed on Windows, Mac OS, and Linux operating systems by downloading the appropriate version from its website. It is an interpreted language, meaning code is executed directly without compilation. Python uses static typing where the type of a value determines how it behaves in expressions. It provides many built-in functions for common operations like math, converting between types, and rounding numbers. Functions allow code reuse and make programs more readable.
This document discusses different types of errors that can occur in programming:
1) Compilation errors occur when the compiler cannot compile source code due to issues like typos.
2) Linker errors are rare and usually due to misspelling library function names.
3) Execution errors happen at runtime from issues like division by zero.
4) Logical errors are mistakes in program logic not caught by the compiler that result in unexpected output.
Pigaios: A Tool for Diffing Source Codes against Binaries (Hacktivity 2018)Joxean Koret
Pigaios is a tool that diffs source codes against binaries to port symbols without needing to compile source codes. It parses source codes and binaries using Clang to extract artifacts from functions. Initial matches are found by comparing artifacts, then heuristics like call graph matching and nearby functions are used to find more matches. A machine learning model combined with a hand-written function calculates accuracy ratios for matches. Future work includes supporting structures/enums and C++/Objective-C. The tool aims to port symbols with near-zero false positives to help with reverse engineering.
The document discusses C expressions and operators. It covers:
1. Expressions can range from simple variables and constants to more complex expressions using operators. Operators allow building expressions and include arithmetic, relational, and logical operators.
2. Arithmetic operators include unary operators like + and - as well as binary operators like +, -, *, /, and % for addition, subtraction, multiplication, division, and remainder. Compound operators like += modify variables.
3. Increment/decrement operators ++ and -- can be used as prefix or postfix and have side effects of modifying the operand. Their order of evaluation can impact expression values.
Swift Tutorial Part 2. The complete guide for Swift programming languageHossam Ghareeb
Part 2 of The complete guide for Swift programming language. In this part we introduced:
Classes
Inheritance
Computed Properties
Type Level
Lazy
Property Observers
Structures
Equality Vs Identity
Type Casting
Any Vs AnyObject
Protocols
Delegation
Extensions
Generics
Operator Functions
This document discusses various loop constructs in C programming including while, do-while, for, and exiting loops. It covers:
- The while loop evaluates its controlling expression first before executing the loop body.
- The do-while loop evaluates its controlling expression after executing the loop body, so the body is always executed at least once.
- The for loop is ideal for loops with a counting variable, allowing initialization, a controlling expression, and an increment/decrement expression to be specified.
- break exits the entire loop, continue skips to the next iteration, and goto allows jumping to any statement but is rarely needed and can harm readability.
Introduction to Scala Implicits, Pimp my library and TypeclassesJordi Pradel
An introduction to Scala implicits and the patterns they make possible, focusing on Pimp my library and type classes.
# Usage
- Clone the repo https://github.com/agile-jordi/scalabcn-implicits-2015
- When a slide "let's code!" is found, check out the commit corresponding to its first Step, and each consecutive step after that
- e.g. At slide 4 (let's code (Steps 1-3)), check out Step 1, read the code, then Step 2 and then Step 3. Then continue to slide 4.
The document summarizes Chapter 10 of a C programming textbook. It covers topics like local variables, external variables, blocks, and scope. It also discusses organizing a C program by placing preprocessor directives, type definitions, variable declarations, function prototypes, and function definitions in a specific order. The chapter uses examples like implementing a stack with external variables and a guessing game to illustrate the concepts.
Source code recovery is one of the most tedious, and interesting, tasks in reverse engineering. During the course of this talk, the author will talk about a tool being developed (on and off) since last year that aims to generate auto-compilable source code from binaries. The tool is currently working though it needs a lot more work.
Swift is Apple's new programming language that can be used to write apps for iOS, Mac, watchOS and tvOS. It is an open source language that works with C and Objective-C, and provides type safety and modern language features. Playgrounds allow testing code in an interactive environment, and Swift can also be used on IBM's Bluemix platform. The language supports common data types like integers, strings and booleans, as well as variables, constants, comparison operators, loops, functions and more. Structs and classes can be used to define custom types along with features like properties, methods and initializers. Arrays, sets and dictionaries are also supported along with enumerations, protocols, extensions and error handling
Halvar Flake and Sebastian Porst present BinCrowd, a tool for analyzing disassembled binaries. It allows uploading analysis results to a central database for later retrieval and comparison to other binaries. This helps identify code reuse across different programs. The presentation covers techniques for function matching and scoring file similarity. It also discusses how BinCrowd can be accessed using IDA Pro and managing access levels for team collaboration.
1. The document discusses various ways of creating custom data types in programming languages, including enumerated types, named constants, and arrays. It provides guidelines and examples of creating enumerated types, using named constants, and properly utilizing arrays.
2. Creating custom data types through techniques like enumerated types and typedefs can make code more readable, reliable, and modifiable. It allows one to centralize type definitions for easier maintenance.
3. Guidelines are provided for creating enumerated types, using named constants, properly utilizing arrays, and defining custom data types. Examples are given in languages like C, C++, Pascal, and Ada.
This document provides an overview of the Python programming language and concepts like variables, data types, operators, conditional execution, functions, and iteration. It discusses key features of Python like it being an interpreted language, the Python virtual machine, differences between Python 2 and 3. It also covers topics like installing Python, using text editors, values and variable types, operators, expressions, conditional execution using if/else statements, exception handling with try/except, functions and their parameters/arguments. The document includes examples and activities for readers to practice the concepts.
This document provides an introduction to coding for grade 6 students. It discusses ethical practices in coding and contributing to society. It introduces concepts like real-world applications of coding, popular programming languages, and how coding impacts daily life. Traffic lights are used as an example of how a few lines of code can automatically change traffic signals. Coding is applied in many areas like grocery stores, transportation, entertainment and more.
INTRODUCTION TO CODING-CLASS VI LEVEL-DESCRIPTION ABOUT SYNTAX LANGUAGERathnaM16
This document provides an introduction to coding for 6th grade students. It discusses ethical practices in coding and explains that the goal of coding is to contribute to society and avoid harming others. It also outlines what students will learn in each chapter, including real-world applications of coding, how coding impacts daily life, popular programming languages, algorithms, variables, and using conditionals for control flow. Traffic lights and barcode scanners are provided as examples of how coding is applied in everyday life.
This document provides an introduction to coding concepts such as variables, data types, arrays, functions, and programming languages. It discusses key topics like:
- Variables store values in programming and must be initialized before use. Different data types include integers, floats, strings, and booleans.
- Arrays allow storing multiple values of the same type and can be iterated over and modified. Functions group reusable blocks of code and can accept parameters and return values.
- Programming languages act as an interface between humans and computers. High-level languages like Python are easier for humans but compiled to low-level machine code.
- Basic Python syntax is demonstrated through examples like printing, arithmetic operations on variables, and
This document provides an introduction to C++ programming including problem solving skills, software evolution, procedural and object oriented programming concepts, basic C++ programs, operators, header files, conditional statements, loops, functions, pointers, structures and arrays. It discusses topics such as analyzing problems, planning algorithms, coding solutions, evaluating results, procedural and object oriented paradigms, inheritance, polymorphism, flowcharts, basic syntax examples, and more. Various examples are provided to illustrate key concepts in C++.
Python is an interpreted scripting language created in 1991 by Guido van Rossum. It is useful for small to medium sized projects and is used by many companies like Google, Yahoo, and YouTube. Python can be installed on Windows, Mac OS, and Linux operating systems by downloading the appropriate version from its website. It is an interpreted language, meaning code is executed directly without compilation. Python uses static typing where the type of a value determines how it behaves in expressions. It provides many built-in functions for common operations like math, converting between types, and rounding numbers. Functions allow code reuse and make programs more readable.
This document discusses different types of errors that can occur in programming:
1) Compilation errors occur when the compiler cannot compile source code due to issues like typos.
2) Linker errors are rare and usually due to misspelling library function names.
3) Execution errors happen at runtime from issues like division by zero.
4) Logical errors are mistakes in program logic not caught by the compiler that result in unexpected output.
System software module 1 presentation filejithujithin657
The document discusses system software and its key components. It defines system software as programs that manage computer hardware resources and provide a platform for other software. It describes common types of system software like operating systems, assemblers, compilers, linkers, loaders, and interpreters. It explains the functions of these components like memory management, process scheduling, translation between assembly and machine language, and linking of programs.
1. An algorithm is a step-by-step procedure to solve a problem using a finite number of well-defined instructions and inputs. An algorithm must be unambiguous, have a finite number of steps, and be feasible with available resources.
2. Pseudo code is used to represent algorithms without using a specific programming language syntax. It uses common programming constructs like loops and conditionals. Pseudo code improves readability and acts as a bridge between algorithms and programs.
3. The time and space complexity of an algorithm measures how resources grow as the input size increases. Time complexity is evaluated based on the number of steps, while space complexity depends on memory usage. Common complexities include constant, linear, quadratic, and
This document provides an overview of pointers and memory allocation in C++. It discusses four main areas of memory allocation: code, static, stack, and heap. Code and static memory are allocated at compile time based on variable declarations. Stack memory is allocated dynamically when functions are called to store local variables and function parameters. Heap memory is allocated dynamically at runtime using new to store dynamically allocated objects, like those in vectors, whose size is not known at compile time. Pointers allow accessing and modifying dynamically allocated memory that persists outside the current stack frame.
There are three types of errors in programming: syntax errors, run-time errors, and logic errors. Syntax errors occur when code violates rules and prevent programs from running. Run-time errors are unpredictable and can be trapped using error handling. Logic errors produce unexpected results and are hardest to find, requiring debugging tools. Visual Basic provides debugging aids like breakpoints, stepping, and watch expressions to help locate logic errors.
This is an intermediate conversion course for C++, suitable for second year computing students who may have learned Java or another language in first year.
Cis 1403 lab1- the process of programmingHamad Odhabi
This lab aims to develop students knowledge and skills needed to create a simple programming code. It covers the process of developing computer programs starting from a simple analysis of the problem, identifying outputs, inputs, and design process/algorithm, convert algorithm to code, testing, and documentation. The student will be introduced to the Java program structure, numerical variable and high-level introduction to data types. The lab does not go into depth explaining the data types and memory storage. These will be discussed in the upcoming labs. Also, the student will be introduced to the REPL cloud environment that will be used to create a simple application.
Building reusable components with generics and protocolsDonny Wals
This document discusses building reusable components with generics and protocols in Swift. It begins by outlining goals of understanding how to design code using generics, simple generics and associated types, and protocols with associated types and generics. An example problem of wanting a generic cache is presented. The document then walks through steps to build such a generic cache, including defining generics, protocols with associated types, and assembling the pieces while ensuring type safety. It concludes by summarizing best practices like designing the API first, introducing abstractions like generics and protocols as needed, and using constraints for type safety.
The document provides information about an exception handling course for the subject of C++ during the second semester. It includes details about try, catch, and throw keywords used for exception handling in C++ as well as custom exceptions using exception classes. Standard exceptions and namespaces are also briefly discussed.
Exception handling in Java allows programs to deal with errors and unexpected conditions gracefully. The try block encloses code that might throw exceptions. When an exception is thrown, the runtime system searches the call stack for a catch block that can handle the exception. The finally block always executes after the try and catch blocks complete to ensure cleanup code runs. Custom exceptions can be created by extending the Exception class.
This lab aims to develop your knowledge and skills to apply various iteration/loop technique to solve a programming problem. The lab will cover the structure of for, while and do-while loops, provide examples on when to apply each. Exceptions handling and reading from an external text file are also covered with examples.
Trusted Execution Environment for Decentralized Process MiningLucaBarbaro3
Presentation of the paper "Trusted Execution Environment for Decentralized Process Mining" given during the CAiSE 2024 Conference in Cyprus on June 7, 2024.
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...Alex Pruden
Folding is a recent technique for building efficient recursive SNARKs. Several elegant folding protocols have been proposed, such as Nova, Supernova, Hypernova, Protostar, and others. However, all of them rely on an additively homomorphic commitment scheme based on discrete log, and are therefore not post-quantum secure. In this work we present LatticeFold, the first lattice-based folding protocol based on the Module SIS problem. This folding protocol naturally leads to an efficient recursive lattice-based SNARK and an efficient PCD scheme. LatticeFold supports folding low-degree relations, such as R1CS, as well as high-degree relations, such as CCS. The key challenge is to construct a secure folding protocol that works with the Ajtai commitment scheme. The difficulty, is ensuring that extracted witnesses are low norm through many rounds of folding. We present a novel technique using the sumcheck protocol to ensure that extracted witnesses are always low norm no matter how many rounds of folding are used. Our evaluation of the final proof system suggests that it is as performant as Hypernova, while providing post-quantum security.
Paper Link: https://eprint.iacr.org/2024/257
5th LF Energy Power Grid Model Meet-up SlidesDanBrown980551
5th Power Grid Model Meet-up
It is with great pleasure that we extend to you an invitation to the 5th Power Grid Model Meet-up, scheduled for 6th June 2024. This event will adopt a hybrid format, allowing participants to join us either through an online Mircosoft Teams session or in person at TU/e located at Den Dolech 2, Eindhoven, Netherlands. The meet-up will be hosted by Eindhoven University of Technology (TU/e), a research university specializing in engineering science & technology.
Power Grid Model
The global energy transition is placing new and unprecedented demands on Distribution System Operators (DSOs). Alongside upgrades to grid capacity, processes such as digitization, capacity optimization, and congestion management are becoming vital for delivering reliable services.
Power Grid Model is an open source project from Linux Foundation Energy and provides a calculation engine that is increasingly essential for DSOs. It offers a standards-based foundation enabling real-time power systems analysis, simulations of electrical power grids, and sophisticated what-if analysis. In addition, it enables in-depth studies and analysis of the electrical power grid’s behavior and performance. This comprehensive model incorporates essential factors such as power generation capacity, electrical losses, voltage levels, power flows, and system stability.
Power Grid Model is currently being applied in a wide variety of use cases, including grid planning, expansion, reliability, and congestion studies. It can also help in analyzing the impact of renewable energy integration, assessing the effects of disturbances or faults, and developing strategies for grid control and optimization.
What to expect
For the upcoming meetup we are organizing, we have an exciting lineup of activities planned:
-Insightful presentations covering two practical applications of the Power Grid Model.
-An update on the latest advancements in Power Grid -Model technology during the first and second quarters of 2024.
-An interactive brainstorming session to discuss and propose new feature requests.
-An opportunity to connect with fellow Power Grid Model enthusiasts and users.
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.
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.
Dandelion Hashtable: beyond billion requests per second on a commodity serverAntonios Katsarakis
This slide deck presents DLHT, a concurrent in-memory hashtable. Despite efforts to optimize hashtables, that go as far as sacrificing core functionality, state-of-the-art designs still incur multiple memory accesses per request and block request processing in three cases. First, most hashtables block while waiting for data to be retrieved from memory. Second, open-addressing designs, which represent the current state-of-the-art, either cannot free index slots on deletes or must block all requests to do so. Third, index resizes block every request until all objects are copied to the new index. Defying folklore wisdom, DLHT forgoes open-addressing and adopts a fully-featured and memory-aware closed-addressing design based on bounded cache-line-chaining. This design offers lock-free index operations and deletes that free slots instantly, (2) completes most requests with a single memory access, (3) utilizes software prefetching to hide memory latencies, and (4) employs a novel non-blocking and parallel resizing. In a commodity server and a memory-resident workload, DLHT surpasses 1.6B requests per second and provides 3.5x (12x) the throughput of the state-of-the-art closed-addressing (open-addressing) resizable hashtable on Gets (Deletes).
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.
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
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
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyScyllaDB
Freshworks creates AI-boosted business software that helps employees work more efficiently and effectively. Managing data across multiple RDBMS and NoSQL databases was already a challenge at their current scale. To prepare for 10X growth, they knew it was time to rethink their database strategy. Learn how they architected a solution that would simplify scaling while keeping costs under control.
3. There
are
anima;ons
of
Nathan
and
I
coming
in
and
out
during
the
story.
• Nathan
is
a
friend
of
mine
who
contributes
to
the
fsno;fy
package,
he
has
done
some
great
things
for
the
community.
3
4. • Nathan
was
online
in
Slack
asking
ques;ons
about
error
handling.
• So,
I
did
what
any
friend
would
do,
I
jumped
into
the
conversa;on.
• AFer
talking
for
a
bit
he
showed
me
some
code
similar
to
this.
• When
I
saw
this
it
just
didn’t
feel
right.
• This
seemed
way
to
complicated
but
I
couldn’t
put
my
finger
on
it.
4
5. • I
realized
aFer
months
of
coding
in
Go
I
had
no
idea
how
errors
worked.
• I
saw
errors
in
Go
as
string
messages,
there
had
to
be
more.
• Testament
to
Go
that
you
don’t
need
to
know
all
the
details.
• Bad
experience
with
custom
error
types
in
C++
and
C#
• Custom
error
types
were
not
prevalent
but
they
did
exist
in
the
standard
library.
• To
be
effec;ve,
let’s
learn
how
errors
really
work
in
Go.
**
Next
Slide
–
Think
About
This
**
5
6. • This
is
what
I
want
you
to
take
away
from
this
talk.
6
7. • Share
two
thoughts.
• This
is
the
basis
for
how
I
look
at
error
handling.
7
8. How
we
decide
to
create
our
error
values
should
be
based
on
this
idea.
8
11. • Helps
to
clarify
how
to
think
about
errors
in
Go.
• Errors
are
values,
values
that
need
to
be
handled
as
errors
happen.
• Not
as
an
aFer
thought
or
something
to
be
handled
later.
11
12. • A
common
pa]ern
in
Go.
• The
error
value
returned
is
checked
against
the
value
of
nil.
• If
the
error
value
is
not
nil,
then
an
error
occurred
and
all
other
values
are
ignored.
• The
error
is
handled
immediately
and
decisions
are
made
as
to
how
to
proceed.
**
Next
Slide
–
Standard
Library
Support
**
12
14. • The
error
interface
as
declared
by
the
standard
library.
• Contains
a
single
method
called
Error
that
returns
a
string.
• The
interface
is
built
into
the
language.
• Though
it
is
unexported
by
its
name,
we
s;ll
have
access
to
it.
14
15. • Default
implementa;on
of
the
error
interface.
• errorString
is
declared
in
the
errors
package.
• Unexported
struct
with
a
single
unexported
field.
• The
implementa;on
uses
a
pointer
receiver
and
returns
the
value
of
s.
• Most
used
concrete
type
in
the
standard
library
for
error
values.
• The
nature
of
interfaces
make
this
struct
very
effec;ve
in
handling
errors.
15
16. • Use
New
func
to
create
error
values
using
the
struct
as
the
concrete
type.
• Takes
a
string
and
returns
a
pointer
of
type
errorString.
• The
return
type
for
the
New
func;on
is
an
interface
value
of
type
error.
• We
return
a
pointer
of
type
errorString.
• The
caller
receives
is
an
interface
value
of
type
error.
• What
does
the
value
that
the
caller
receives
actually
looks
like?
16
17. • Interface
value
is
always
a
two
machine
word
value.
• It
stores
a
concrete
type
value
that
implements
the
interface.
• When
the
New
func;on
is
an
error
interface
value
is
created
on
the
return
and
the
errorString
pointer
is
stored
within
it.
• The
language
support
abstracts
this
implementa;on
away
and
makes
working
with
these
values
intui;ve.
17
18. • Just
as
a
note.
• This
is
the
value
that
is
actually
returned
for
nil.
• An
interface
value
is
always
returned.
• We
have
like
types
present
on
both
sides
of
the
compare
statement.
18
19. • Second
way
to
create
an
error
interface
value
based
on
the
errorString
struct.
• Use
when
you
need
a
forma]ed
error,
usually
with
local
variables.
• No;ce
the
use
of
the
New
func;on
from
the
errors
package.
**
Next
–
Use
In
Standard
Library
**
19
21. • Let’s
learn
a
technique
used
in
the
standard
library
to
help
us
iden;ty
specific
errors.
• The
error
interface
variables
above
are
declared
in
the
bufio
package.
• They
provide
support
for
iden;fying
specific
errors.
• This
works
when
the
error
messages
are
sta;c.
21
22. • How
to
use
the
error
interface
variables
to
iden;fy
which
error
was
returned
by
the
Peek
func;on.
• The
Peek
func;on
can
return
either
the
ErrNega;veCount
or
ErrBufferFull
error
variable.
• We
use
the
same
variables
to
iden;fy
the
specific
error
returned.
• Make
a
more
informed
error
handling
decision.
22
23. • How
to
use
the
error
interface
variables
to
iden;fy
which
error
was
returned
by
the
Peek
func;on.
• The
Peek
func;on
can
return
either
the
ErrNega;veCount
or
ErrBufferFull
error
variable.
• We
use
the
same
variables
to
iden;fy
the
specific
error
returned.
• Make
a
more
informed
error
handling
decision.
23
24. • Other
packages
like
the
io
package
use
the
same
technique
• I
am
sure
you
have
compared
the
returned
error
interface
value
to
EOF.
24
25. • Here
is
the
implementa;on
of
the
ReadAtLeast
func;on
from
the
io
package.
• We
see
how
these
variables
are
being
returned
• We
see
how
the
EOF
variable
is
used
internally
to
check
for
that
error.
• When
you
need
to
make
a
decision
about
a
specific
error,
check
if
an
error
interface
variable
exists
to
help
you.
**
Next
–
Custom
Error
Types
**
25
26. • How
to
use
the
error
interface
variables
to
iden;fy
which
error
was
returned
by
the
Peek
func;on.
• The
Peek
func;on
can
return
either
the
ErrNega;veCount
or
ErrBufferFull
error
variable.
• We
use
the
same
variables
to
iden;fy
the
specific
error
returned.
• Make
a
more
informed
error
handling
decision.
28. • This
is
a
custom
error
type
implemented
within
the
net
package.
28
29. • This
is
a
custom
error
type
implemented
within
the
net
package.
• The
name
of
the
custom
error
type
follows
the
Go
naming
conven;on
for
custom
error
types.
• The
custom
error
type
should
provide
context
associated
with
the
error
to
help
the
caller
make
a
more
informed
decision.
• The
first
three
fields
provide
context
about
the
network
opera;on
being
performed
when
an
error
occurs.
• The
fourth
field
contains
the
actual
error
that
occurred.
• The
custom
error
type
exists
to
provide
the
context
associated
with
the
error.
29
30. • This
is
the
implementa;on
of
the
error
interface
for
OpError.
• The
context
associated
with
the
error
is
used
to
produce
a
more
detailed
error
message.
• The
context
enhances
the
details
and
produces
an
error
message
with
more
meaning.
30
31. • This
is
a
custom
error
type
implemented
in
the
json
package.
• This
custom
error
type
is
used
to
report
errors
that
occur
when
a
value
can’t
be
decoded
into
a
specific
Go
type.
• In
this
case,
the
type
itself
provides
the
context
and
maintains
state
associated
with
the
error.
31
32. • The
implementa;on
of
the
error
interface
takes
the
state
associated
with
the
error
and
produces
a
detailed
and
context
rich
message.
32
33. • This
custom
error
type
is
used
to
report
when
there
are
invalid
arguments
passed
into
an
unmarshal
call.
• In
this
case,
only
the
type
informa;on
associated
with
the
bad
argument
is
required
to
be
stored.
33
34. • Here
we
see
the
implementa;on
of
the
error
interface
for
this
custom
error
type.
• Again
the
state
associated
with
the
error
is
used
to
produce
an
error
message
with
more
meaning
and
context.
34
35. In
these
cases
• A
custom
error
type
provided
context
beyond
what
the
errors
package
could
provide.
• The
context
helped
the
caller
make
a
more
informed
decision
about
the
error
**
Next
–
Concrete
Type
Iden;fica;on
**
35
37. • This
method
is
called
by
the
exported
Unmarshal
func;on.
• Method
has
the
poten;al
to
return
error
values
of
different
concrete
types.
• Pointers
of
type
UnmarshalTypeError,
InvalidUnmarshalError
or
errorString.
• Each
error
contains
a
different
context
that
is
important
to
know.
• We
want
to
make
an
informed
decision
on
how
to
handle
the
specific
error.
37
38. • Iden;fy
the
concrete
type
is
for
the
stored
value
inside
the
error
interface
value.
• You
can
do
this,
but
there
is
a
be]er
way.
38
39. • The
switch
statement
supports
this
special
syntax.
• An
interface
type
conversion
using
the
keyword
type.
• Declare
case
statements
based
on
the
different
concrete
types
we
want
to
check
for.
39
43. • Introduce
yourself
• I
realized
aFer
months
of
coding
in
Go
I
had
no
idea
how
errors
worked.
• I
saw
errors
in
Go
as
string
messages,
there
had
to
be
more.
• Testament
to
Go
that
you
don’t
need
to
know
all
the
details.
• Bad
experience
with
custom
error
types
in
C++
and
C#
• Custom
error
types
were
not
prevalent
but
they
did
exist
in
the
standard
library.
• To
be
effec;ve,
let’s
learn
how
errors
really
work
in
Go.
43
Editor's Notes
Introduce yourself
Going to tell a quick story.
There are animations of Nathan and I coming in and out during the story.
Nathan is a friend of mine who contributes to the fsnotify package, he has done some great things for the community.
Nathan was online in Slack asking questions about error handling.
So, I did what any friend would do, I jumped into the conversation.
After talking for a bit he showed me some code similar to this.
When I saw this it just didn’t feel right.
This seemed way to complicated but I couldn’t put my finger on it.
I realized after months of coding in Go I had no idea how errors worked.
I saw errors in Go as string messages, there had to be more.
Testament to Go that you don’t need to know all the details.
Bad experience with custom error types in C++ and C#
Custom error types were not prevalent but they did exist in the standard library.
To be effective, let’s learn how errors really work in Go.
** Next Slide – Think About This **
This is what I want you to take away from this talk.
Share two thoughts.
This is the basis for how I look at error handling.
How we decide to create our error values should be based on this idea.
Ask yourself these questions.
** Next – Working With Error Values **
Helps to clarify how to think about errors in Go.
Errors are values, values that need to be handled as errors happen.
Not as an after thought or something to be handled later.
A common pattern in Go.
The error value returned is checked against the value of nil.
If the error value is not nil, then an error occurred and all other values are ignored.
The error is handled immediately and decisions are made as to how to proceed.
** Next Slide – Standard Library Support **
The error interface as declared by the standard library.
Contains a single method called Error that returns a string.
The interface is built into the language.
Though it is unexported by its name, we still have access to it.
Default implementation of the error interface.
errorString is declared in the errors package.
Unexported struct with a single unexported field.
The implementation uses a pointer receiver and returns the value of s.
Most used concrete type in the standard library for error values.
The nature of interfaces make this struct very effective in handling errors.
Use New func to create error values using the struct as the concrete type.
Takes a string and returns a pointer of type errorString.
The return type for the New function is an interface value of type error.
We return a pointer of type errorString.
The caller receives is an interface value of type error.
What does the value that the caller receives actually looks like?
Interface value is always a two machine word value.
It stores a concrete type value that implements the interface.
When the New function is an error interface value is created on the return and the errorString pointer is stored within it.
The language support abstracts this implementation away and makes working with these values intuitive.
Just as a note.
This is the value that is actually returned for nil.
An interface value is always returned.
We have like types present on both sides of the compare statement.
Second way to create an error interface value based on the errorString struct.
Use when you need a formatted error, usually with local variables.
Notice the use of the New function from the errors package.
** Next – Use In Standard Library **
Let’s learn a technique used in the standard library to help us identity specific errors.
The error interface variables above are declared in the bufio package.
They provide support for identifying specific errors.
This works when the error messages are static.
How to use the error interface variables to identify which error was returned by the Peek function.
The Peek function can return either the ErrNegativeCount or ErrBufferFull error variable.
We use the same variables to identify the specific error returned.
Make a more informed error handling decision.
How to use the error interface variables to identify which error was returned by the Peek function.
The Peek function can return either the ErrNegativeCount or ErrBufferFull error variable.
We use the same variables to identify the specific error returned.
Make a more informed error handling decision.
Other packages like the io package use the same technique
I am sure you have compared the returned error interface value to EOF.
Here is the implementation of the ReadAtLeast function from the io package.
We see how these variables are being returned
We see how the EOF variable is used internally to check for that error.
When you need to make a decision about a specific error, check if an error interface variable exists to help you.
** Next – Custom Error Types **
How to use the error interface variables to identify which error was returned by the Peek function.
The Peek function can return either the ErrNegativeCount or ErrBufferFull error variable.
We use the same variables to identify the specific error returned.
Make a more informed error handling decision.
This is a custom error type implemented within the net package.
This is a custom error type implemented within the net package.
The name of the custom error type follows the Go naming convention for custom error types.
The custom error type should provide context associated with the error to help the caller make a more informed decision.
The first three fields provide context about the network operation being performed when an error occurs.
The fourth field contains the actual error that occurred.
The custom error type exists to provide the context associated with the error.
This is the implementation of the error interface for OpError.
The context associated with the error is used to produce a more detailed error message.
The context enhances the details and produces an error message with more meaning.
This is a custom error type implemented in the json package.
This custom error type is used to report errors that occur when a value can’t be decoded into a specific Go type.
In this case, the type itself provides the context and maintains state associated with the error.
The implementation of the error interface takes the state associated with the error and produces a detailed and context rich message.
This custom error type is used to report when there are invalid arguments passed into an unmarshal call.
In this case, only the type information associated with the bad argument is required to be stored.
Here we see the implementation of the error interface for this custom error type.
Again the state associated with the error is used to produce an error message with more meaning and context.
In these cases
A custom error type provided context beyond what the errors package could provide.
The context helped the caller make a more informed decision about the error
** Next – Concrete Type Identification **
This method is called by the exported Unmarshal function.
Method has the potential to return error values of different concrete types.
Pointers of type UnmarshalTypeError, InvalidUnmarshalError or errorString.
Each error contains a different context that is important to know.
We want to make an informed decision on how to handle the specific error.
Identify the concrete type is for the stored value inside the error interface value.
You can do this, but there is a better way.
The switch statement supports this special syntax.
An interface type conversion using the keyword type.
Declare case statements based on the different concrete types we want to check for.
Introduce yourself
I realized after months of coding in Go I had no idea how errors worked.
I saw errors in Go as string messages, there had to be more.
Testament to Go that you don’t need to know all the details.
Bad experience with custom error types in C++ and C#
Custom error types were not prevalent but they did exist in the standard library.
To be effective, let’s learn how errors really work in Go.