A talk describing how best practices for writing code have changed throughout the last 21 years.
What do we think of as good code, and how has our perception of good code changed form the early days of programming to the exciting times we live in now?
In this talk we do a bit of digging into the short history of programming, by looking at the available literature and various best practices promoted throughout the ages to improve your code.
Beyond JSON - An Introduction to FlatBuffersMaxim Zaks
This document provides an introduction and overview of FlatBuffers, a cross-platform library for efficient serialization of structured data. It discusses why data serialization is needed, important criteria for persisting and sending data, comparisons of JSON and FlatBuffers, and demonstrates FlatBuffers features like the IDL, size and performance benefits, partial reads, and support for data versioning.
The document introduces Markdown, a lightweight markup language that can be written in plaintext and converted to HTML or rich format. It allows for headings, paragraphs, lists, code snippets, links and images. Markdown is useful for coders to write documentation, blog posts, readme files and in-code comments in an easy to read and write format. Doxygen notation can be used for in-code comments and Markdown files can be automatically generated into documentation with Doxygen. The document provides examples of using Markdown and Doxygen.
The DOM (Document Object Model) is a W3C standard that defines a programming interface for XML and HTML documents. The DOM represents an XML document as nodes and objects that can be manipulated programmatically. The DOM defines the logical structure of documents and the way a document is accessed and manipulated. Key points:
- The DOM allows manipulation of the contents of an XML document through a programming interface.
- The DOM represents an XML document as a tree structure, with nodes and objects that can be accessed and manipulated.
- Common DOM node types include elements, attributes, text nodes, comments and documents. The DOM defines interfaces and properties to represent the node relationships and access node contents.
Oracle ADF Architecture TV - Development - Naming Conventions & Project LayoutsChris Muir
Slides from Oracle's ADF Architecture TV series covering the Development phase of ADF projects, a discussion on naming and project layout conventions for your ADF projects.
Like to know more? Check out:
- Subscribe to the YouTube channel - http://bit.ly/adftvsub
- Development Playlist - http://www.youtube.com/playlist?list=PLJz3HAsCPVaQfFop-QTJUE6LtjkyP_SOp
- Read the episode index on the ADF Architecture Square - http://bit.ly/adfarchsquare
Talk by Jan Medved (Distinguished Engineer at Cisco) at Bay Area OpenDaylight Meetup on Oct 20, 2014.
http://www.meetup.com/OpenDaylight-Silicon-Valley/events/212834752/
Slides from Talk by Jan Medved on Yang modeling and its support in OpenDaylight meetup
http://www.meetup.com/OpenDaylight-Silicon-Valley/events/212834752
Yang is a data modeling language that is rapidly being adopted to model Netconf, an IETF standardized network management protocol, as well as to model other data interfaces in OpenDaylight. Join us for the talk by expert Jan Medved to learn about Yang and its usage within OpenDaylight.
Avoiding Pitfalls with Internationalization & LocalizationLogan Gauthier
This document discusses tips for internationalizing and localizing apps. It covers topics like internationalization vs localization, localizing text, dates, numbers, images, and directionality. It recommends using Apple's localization APIs and formats rather than hardcoding values. General tips include localizing accessibility labels, using localized sorting, and considering cultural differences in images and directionality.
Beyond JSON - An Introduction to FlatBuffersMaxim Zaks
This document provides an introduction and overview of FlatBuffers, a cross-platform library for efficient serialization of structured data. It discusses why data serialization is needed, important criteria for persisting and sending data, comparisons of JSON and FlatBuffers, and demonstrates FlatBuffers features like the IDL, size and performance benefits, partial reads, and support for data versioning.
The document introduces Markdown, a lightweight markup language that can be written in plaintext and converted to HTML or rich format. It allows for headings, paragraphs, lists, code snippets, links and images. Markdown is useful for coders to write documentation, blog posts, readme files and in-code comments in an easy to read and write format. Doxygen notation can be used for in-code comments and Markdown files can be automatically generated into documentation with Doxygen. The document provides examples of using Markdown and Doxygen.
The DOM (Document Object Model) is a W3C standard that defines a programming interface for XML and HTML documents. The DOM represents an XML document as nodes and objects that can be manipulated programmatically. The DOM defines the logical structure of documents and the way a document is accessed and manipulated. Key points:
- The DOM allows manipulation of the contents of an XML document through a programming interface.
- The DOM represents an XML document as a tree structure, with nodes and objects that can be accessed and manipulated.
- Common DOM node types include elements, attributes, text nodes, comments and documents. The DOM defines interfaces and properties to represent the node relationships and access node contents.
Oracle ADF Architecture TV - Development - Naming Conventions & Project LayoutsChris Muir
Slides from Oracle's ADF Architecture TV series covering the Development phase of ADF projects, a discussion on naming and project layout conventions for your ADF projects.
Like to know more? Check out:
- Subscribe to the YouTube channel - http://bit.ly/adftvsub
- Development Playlist - http://www.youtube.com/playlist?list=PLJz3HAsCPVaQfFop-QTJUE6LtjkyP_SOp
- Read the episode index on the ADF Architecture Square - http://bit.ly/adfarchsquare
Talk by Jan Medved (Distinguished Engineer at Cisco) at Bay Area OpenDaylight Meetup on Oct 20, 2014.
http://www.meetup.com/OpenDaylight-Silicon-Valley/events/212834752/
Slides from Talk by Jan Medved on Yang modeling and its support in OpenDaylight meetup
http://www.meetup.com/OpenDaylight-Silicon-Valley/events/212834752
Yang is a data modeling language that is rapidly being adopted to model Netconf, an IETF standardized network management protocol, as well as to model other data interfaces in OpenDaylight. Join us for the talk by expert Jan Medved to learn about Yang and its usage within OpenDaylight.
Avoiding Pitfalls with Internationalization & LocalizationLogan Gauthier
This document discusses tips for internationalizing and localizing apps. It covers topics like internationalization vs localization, localizing text, dates, numbers, images, and directionality. It recommends using Apple's localization APIs and formats rather than hardcoding values. General tips include localizing accessibility labels, using localized sorting, and considering cultural differences in images and directionality.
introduction to computer vision and image processingpakboy12
This document provides an introduction to compilers and discusses their key components and processes. It defines a compiler as a program that translates a program written in a high-level source language into an equivalent program in a lower-level target language. The main stages of compilation are scanning, parsing, semantic analysis, code generation, optimization, and error handling. The document also discusses data structures like symbol tables, parse trees, and intermediate code that are used during compilation.
The document discusses programming languages and ways they can be improved and customized. It argues that libraries are often overused to extend languages when the compiler itself could be extended instead. This could be done through compiler services that expose compiler information, macros that operate on the syntax tree, and quasi-quotations for building complex AST structures. Extending the compiler allows for more control and avoids issues like dependency cycles that plague library-based extensions.
East Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersGerke Max Preussner
Overview of basic concepts and common blockers when programming for Unreal Engine 4. Presented at East Coast Unreal Engine DevCon 2014 in Montreal and Boston.
This document provides an overview of compiler design, including:
- The history and importance of compilers in translating high-level code to machine-level code.
- The main components of a compiler including the front-end (analysis), back-end (synthesis), and tools used in compiler construction.
- Key phases of compilation like lexical analysis, syntax analysis, semantic analysis, code optimization, and code generation.
- Types of translators like interpreters, assemblers, cross-compilers and their functions.
- Compiler construction tools that help generate scanners, parsers, translation engines, code generators, and data flow analysis.
Given at TrueNorthPHP 2014:
"MVC presents a great way to divide responsibilities in your application but it offers no help in building the most critical part: the model or domain. This talk will introduce ways that can help you to encapsulate the richness of your domain. We'll look at Action Domain Response as a new way of thinking about the concepts presented in MVC before examining Hexagonal Architecture, allowing you to easily reuse your domain across multiple delivery mechanisms. We'll then finish with an introduction to Domain Driven Design, a technique that allows you to closely align your domain with the business problems it is solving while helping keep things well designed and easily maintainable. By the end of this talk you should have the knowledge needed to begin modelling your domains more powerfully while keeping them aligned to the real world problems they solve."
This document provides an overview of shell scripting in Linux. It discusses why shell scripts are used, defines what a Linux shell is, lists common shell types, and how to execute scripts. Basic shell script examples and applications are given. Advantages of shell scripts include quick development time and ability to automate tasks, while disadvantages are slower execution and error prone nature compared to other languages.
This document provides an outline for a lesson on PHP. It begins with an introduction to PHP, including its history and uses. It then covers the basics of PHP including PHP files, syntax, variables, data types, strings, and operators. The document provides examples of PHP code for echo and print statements, variable declaration and scope, data type conversion, and comments. It explains the main data types in PHP and functions for getting and setting variable types.
- The document discusses leaving Microsoft Word for other writing applications that are better suited for web writing and collaboration. It highlights issues with Word's copy/paste functionality for the web and lack of version control.
- Several alternative applications and formats are mentioned, including text editors, writing apps, note-taking apps, and Markdown/MultiMarkdown, which allow writing in plain text and converting to HTML.
- Markdown is presented as a simpler formatting syntax compared to HTML, allowing bold, italics, lists and links to be written easily without tags. MultiMarkdown adds more features like footnotes and tables.
Seven perilous pitfalls to avoid with Java | DevNation Tech TalkRed Hat Developers
Developers and security: It’s a lot more than just turning on SSL. In this session we’re going to learn to think differently about designing and coding in Java so that the application is less open to being attacked and (bonus) is often of higher quality. This talk will cover seven types of development issues that can get your application into trouble. With code examples (of course), we’ll explore a series of common code pitfalls and explain how to design and code differently. There is much to learn when creating a secure application - take your first steps here.
This document provides an introduction to server-side scripting and PHP. It discusses how server-side pages work by having the web server run scripts and send HTML to users' browsers. It then lists several common server-side scripting languages like PHP, ASP, and Python. The document proceeds to introduce PHP in more detail, covering its basics like syntax, variables, strings, arithmetic operators, and functions. It provides examples of conditional statements like if/else and looping with for and while loops.
This document provides an introduction to PHP programming. It discusses what PHP is, how to set up a PHP development environment using XAMPP, basic PHP syntax and structures, variables and data types, operators, conditional statements, arrays, and other fundamental PHP concepts. Examples are provided throughout to illustrate key points. The document is intended as a introductory guide to learning PHP for web development.
Larry Wall created the Perl programming language in 1987. Perl is a general purpose language that is practical, flexible, and supports both procedural and object-oriented programming. It has a large community of users and third-party modules. Perl can be used for tasks like web development, system administration, and more. It has the philosophies of "there's more than one way to do it" and to "share and enjoy."
Dutch PHP Conference 2015 - The quest for global design principlesMatthias Noback
The document discusses global design principles that can be applied to both inter-object and inter-application communication. It advocates treating objects like applications and applying similar design rules to both. Specifically, it recommends: depending on abstractions rather than concretions to achieve stable dependencies; avoiding duplication of knowledge while allowing duplication of facts; using immutable objects to prevent inconsistent states; hiding implementation details to avoid tight coupling; and ensuring APIs are maximally discoverable. The overall message is that communication between systems, whether objects or applications, can be improved by recognizing them as equivalent and applying cross-cutting principles of stability, information hiding, and implementation independence.
Lecture 1 introduction to language processorsRebaz Najeeb
The document provides an overview of the different phases of a compiler: lexical analysis, syntax analysis, semantic analysis, intermediate code generation, code optimization, and code generation. It discusses each phase briefly and provides examples to illustrate how a program is processed through each step of compilation.
This document discusses Communicating Sequential Processes (CSP) and building modular applications using components. It defines concurrency vs parallelism, explaining that concurrency is the model and parallelism is the act. Channels are presented as a powerful primitive for communication between concurrent tasks, allowing values to be put on or taken from the channel. Examples are given of CSP in Clojure and JavaScript. Components are described as a way to build modular applications from small, focused modules that do one thing well and avoid using globals.
This document discusses Communicating Sequential Processes (CSP) and building modular applications with components. It defines concurrency vs parallelism, explaining that concurrency is the model and parallelism is the act. Channels are presented as a powerful primitive for communication between concurrent tasks, allowing values to be put on or taken from the channel. Examples are given of CSP in Clojure and JavaScript. Components are described as a way to build modular applications with common client-server code sharing via a Unix style of small, concentrated modules. Globals are discouraged in favor of the module pattern.
This document discusses character encodings and provides tips for properly handling encodings in programming. It begins with definitions of characters, scripts, and the need for character sets. It then discusses commonly used character sets like ASCII and Unicode. UTF-8, UTF-16, and UTF-32 encodings are explained as they allow representing all Unicode characters using variable number of bytes. The document concludes with programming language-specific tips and functions for detecting, parsing, and writing encodings in languages like PHP, Java, Objective-C, and C#.
WhatsApp offers simple, reliable, and private messaging and calling services for free worldwide. With end-to-end encryption, your personal messages and calls are secure, ensuring only you and the recipient can access them. Enjoy voice and video calls to stay connected with loved ones or colleagues. Express yourself using stickers, GIFs, or by sharing moments on Status. WhatsApp Business enables global customer outreach, facilitating sales growth and relationship building through showcasing products and services. Stay connected effortlessly with group chats for planning outings with friends or staying updated on family conversations.
introduction to computer vision and image processingpakboy12
This document provides an introduction to compilers and discusses their key components and processes. It defines a compiler as a program that translates a program written in a high-level source language into an equivalent program in a lower-level target language. The main stages of compilation are scanning, parsing, semantic analysis, code generation, optimization, and error handling. The document also discusses data structures like symbol tables, parse trees, and intermediate code that are used during compilation.
The document discusses programming languages and ways they can be improved and customized. It argues that libraries are often overused to extend languages when the compiler itself could be extended instead. This could be done through compiler services that expose compiler information, macros that operate on the syntax tree, and quasi-quotations for building complex AST structures. Extending the compiler allows for more control and avoids issues like dependency cycles that plague library-based extensions.
East Coast DevCon 2014: Programming in UE4 - A Quick Orientation for CodersGerke Max Preussner
Overview of basic concepts and common blockers when programming for Unreal Engine 4. Presented at East Coast Unreal Engine DevCon 2014 in Montreal and Boston.
This document provides an overview of compiler design, including:
- The history and importance of compilers in translating high-level code to machine-level code.
- The main components of a compiler including the front-end (analysis), back-end (synthesis), and tools used in compiler construction.
- Key phases of compilation like lexical analysis, syntax analysis, semantic analysis, code optimization, and code generation.
- Types of translators like interpreters, assemblers, cross-compilers and their functions.
- Compiler construction tools that help generate scanners, parsers, translation engines, code generators, and data flow analysis.
Given at TrueNorthPHP 2014:
"MVC presents a great way to divide responsibilities in your application but it offers no help in building the most critical part: the model or domain. This talk will introduce ways that can help you to encapsulate the richness of your domain. We'll look at Action Domain Response as a new way of thinking about the concepts presented in MVC before examining Hexagonal Architecture, allowing you to easily reuse your domain across multiple delivery mechanisms. We'll then finish with an introduction to Domain Driven Design, a technique that allows you to closely align your domain with the business problems it is solving while helping keep things well designed and easily maintainable. By the end of this talk you should have the knowledge needed to begin modelling your domains more powerfully while keeping them aligned to the real world problems they solve."
This document provides an overview of shell scripting in Linux. It discusses why shell scripts are used, defines what a Linux shell is, lists common shell types, and how to execute scripts. Basic shell script examples and applications are given. Advantages of shell scripts include quick development time and ability to automate tasks, while disadvantages are slower execution and error prone nature compared to other languages.
This document provides an outline for a lesson on PHP. It begins with an introduction to PHP, including its history and uses. It then covers the basics of PHP including PHP files, syntax, variables, data types, strings, and operators. The document provides examples of PHP code for echo and print statements, variable declaration and scope, data type conversion, and comments. It explains the main data types in PHP and functions for getting and setting variable types.
- The document discusses leaving Microsoft Word for other writing applications that are better suited for web writing and collaboration. It highlights issues with Word's copy/paste functionality for the web and lack of version control.
- Several alternative applications and formats are mentioned, including text editors, writing apps, note-taking apps, and Markdown/MultiMarkdown, which allow writing in plain text and converting to HTML.
- Markdown is presented as a simpler formatting syntax compared to HTML, allowing bold, italics, lists and links to be written easily without tags. MultiMarkdown adds more features like footnotes and tables.
Seven perilous pitfalls to avoid with Java | DevNation Tech TalkRed Hat Developers
Developers and security: It’s a lot more than just turning on SSL. In this session we’re going to learn to think differently about designing and coding in Java so that the application is less open to being attacked and (bonus) is often of higher quality. This talk will cover seven types of development issues that can get your application into trouble. With code examples (of course), we’ll explore a series of common code pitfalls and explain how to design and code differently. There is much to learn when creating a secure application - take your first steps here.
This document provides an introduction to server-side scripting and PHP. It discusses how server-side pages work by having the web server run scripts and send HTML to users' browsers. It then lists several common server-side scripting languages like PHP, ASP, and Python. The document proceeds to introduce PHP in more detail, covering its basics like syntax, variables, strings, arithmetic operators, and functions. It provides examples of conditional statements like if/else and looping with for and while loops.
This document provides an introduction to PHP programming. It discusses what PHP is, how to set up a PHP development environment using XAMPP, basic PHP syntax and structures, variables and data types, operators, conditional statements, arrays, and other fundamental PHP concepts. Examples are provided throughout to illustrate key points. The document is intended as a introductory guide to learning PHP for web development.
Larry Wall created the Perl programming language in 1987. Perl is a general purpose language that is practical, flexible, and supports both procedural and object-oriented programming. It has a large community of users and third-party modules. Perl can be used for tasks like web development, system administration, and more. It has the philosophies of "there's more than one way to do it" and to "share and enjoy."
Dutch PHP Conference 2015 - The quest for global design principlesMatthias Noback
The document discusses global design principles that can be applied to both inter-object and inter-application communication. It advocates treating objects like applications and applying similar design rules to both. Specifically, it recommends: depending on abstractions rather than concretions to achieve stable dependencies; avoiding duplication of knowledge while allowing duplication of facts; using immutable objects to prevent inconsistent states; hiding implementation details to avoid tight coupling; and ensuring APIs are maximally discoverable. The overall message is that communication between systems, whether objects or applications, can be improved by recognizing them as equivalent and applying cross-cutting principles of stability, information hiding, and implementation independence.
Lecture 1 introduction to language processorsRebaz Najeeb
The document provides an overview of the different phases of a compiler: lexical analysis, syntax analysis, semantic analysis, intermediate code generation, code optimization, and code generation. It discusses each phase briefly and provides examples to illustrate how a program is processed through each step of compilation.
This document discusses Communicating Sequential Processes (CSP) and building modular applications using components. It defines concurrency vs parallelism, explaining that concurrency is the model and parallelism is the act. Channels are presented as a powerful primitive for communication between concurrent tasks, allowing values to be put on or taken from the channel. Examples are given of CSP in Clojure and JavaScript. Components are described as a way to build modular applications from small, focused modules that do one thing well and avoid using globals.
This document discusses Communicating Sequential Processes (CSP) and building modular applications with components. It defines concurrency vs parallelism, explaining that concurrency is the model and parallelism is the act. Channels are presented as a powerful primitive for communication between concurrent tasks, allowing values to be put on or taken from the channel. Examples are given of CSP in Clojure and JavaScript. Components are described as a way to build modular applications with common client-server code sharing via a Unix style of small, concentrated modules. Globals are discouraged in favor of the module pattern.
This document discusses character encodings and provides tips for properly handling encodings in programming. It begins with definitions of characters, scripts, and the need for character sets. It then discusses commonly used character sets like ASCII and Unicode. UTF-8, UTF-16, and UTF-32 encodings are explained as they allow representing all Unicode characters using variable number of bytes. The document concludes with programming language-specific tips and functions for detecting, parsing, and writing encodings in languages like PHP, Java, Objective-C, and C#.
WhatsApp offers simple, reliable, and private messaging and calling services for free worldwide. With end-to-end encryption, your personal messages and calls are secure, ensuring only you and the recipient can access them. Enjoy voice and video calls to stay connected with loved ones or colleagues. Express yourself using stickers, GIFs, or by sharing moments on Status. WhatsApp Business enables global customer outreach, facilitating sales growth and relationship building through showcasing products and services. Stay connected effortlessly with group chats for planning outings with friends or staying updated on family conversations.
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsPeter Muessig
The UI5 tooling is the development and build tooling of UI5. It is built in a modular and extensible way so that it can be easily extended by your needs. This session will showcase various tooling extensions which can boost your development experience by far so that you can really work offline, transpile your code in your project to use even newer versions of EcmaScript (than 2022 which is supported right now by the UI5 tooling), consume any npm package of your choice in your project, using different kind of proxies, and even stitching UI5 projects during development together to mimic your target environment.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
What is Augmented Reality Image Trackingpavan998932
Augmented Reality (AR) Image Tracking is a technology that enables AR applications to recognize and track images in the real world, overlaying digital content onto them. This enhances the user's interaction with their environment by providing additional information and interactive elements directly tied to physical images.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
Do you want Software for your Business? Visit Deuglo
Deuglo has top Software Developers in India. They are experts in software development and help design and create custom Software solutions.
Deuglo follows seven steps methods for delivering their services to their customers. They called it the Software development life cycle process (SDLC).
Requirement — Collecting the Requirements is the first Phase in the SSLC process.
Feasibility Study — after completing the requirement process they move to the design phase.
Design — in this phase, they start designing the software.
Coding — when designing is completed, the developers start coding for the software.
Testing — in this phase when the coding of the software is done the testing team will start testing.
Installation — after completion of testing, the application opens to the live server and launches!
Maintenance — after completing the software development, customers start using the software.
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
E-commerce Application Development Company.pdfHornet Dynamics
Your business can reach new heights with our assistance as we design solutions that are specifically appropriate for your goals and vision. Our eCommerce application solutions can digitally coordinate all retail operations processes to meet the demands of the marketplace while maintaining business continuity.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
Odoo ERP software
Odoo ERP software, a leading open-source software for Enterprise Resource Planning (ERP) and business management, has recently launched its latest version, Odoo 17 Community Edition. This update introduces a range of new features and enhancements designed to streamline business operations and support growth.
The Odoo Community serves as a cost-free edition within the Odoo suite of ERP systems. Tailored to accommodate the standard needs of business operations, it provides a robust platform suitable for organisations of different sizes and business sectors. Within the Odoo Community Edition, users can access a variety of essential features and services essential for managing day-to-day tasks efficiently.
This blog presents a detailed overview of the features available within the Odoo 17 Community edition, and the differences between Odoo 17 community and enterprise editions, aiming to equip you with the necessary information to make an informed decision about its suitability for your business.
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
5. The bookshelf
“A man may as well expect to
grow stronger by always eating
as wiser by always reading.”!
— Jeremy Collier
6. Writing Solid Code
❖ Steve Maguire!
❖ Microsoft Programming!
❖ 1993!
❖ “Microsoft’s Techniques for
Developing Bug-Free C
Programs”
7. The Pragmatic Programmer
❖ Andrew Hunt & David
Thomas!
❖ Addison Wesley!
❖ 2000!
❖ “examines the core process -
taking a requirement and
producing working, maintainable
code that delights its users”
8. Code Complete
❖ Steve McConnell!
❖ Microsoft Programming!
❖ 2004 (1st Edition 1993)!
❖ “A Practical Handbook of
Software Construction” - “Helps
you build the highest quality
code”
9. Clean Code
❖ Robert C. Martin (“Uncle Bob”)!
❖ Prentice Hall!
❖ 2009!
❖ “A handbook for Agile Software
Craftsmanship” — “How to write
good code and how to transform
bad code into good code”
10. 97 Things Every Programmer Should Know
❖ Various Artists, edited by
Kevlin Henney!
❖ O’Reilly!
❖ 2010!
❖ “Collective Wisdom from the
Experts” — “you’ll expand your
skills by … learning appropriate
best practices”
11. Growing Object-Oriented Software, Guided by Tests
❖ Steve Freeman & Nat Pryce!
❖ Addison Wesley!
❖ 2010!
❖ “Two TDD pioneers show how to
let tests guide your development
and ‘grow’ software that is
coherent, reliable, and
maintainable”
12. The Art of Readable Code
❖ Dustin Boswell & Trevor
Foucher!
❖ O’Reilly!
❖ 2011!
❖ “Simple and Practical Techniques
for Writing Better Code”
13. Guess the book!
“If we encounter a man of rare
intellect, we should ask him what
books he reads.”!
— Ralph Waldo Emerson
14. 2011
2009
! ! 1993
Use Hungarian notation for variables
❖ “Although names like pch look
funny and are hard to
pronounce, they are filled with
information.”!
❖ “Conveying information is far
more important in naming your
variables than being able to
stand up and read your code
aloud during a program
review.”
/* pointer to character
pointer */
char **ppch;
15. ! ! 1993
Use Hungarian notation for variables
❖ “Although names like pch look
funny and are hard to
pronounce, they are filled with
information.”!
❖ “Conveying information is far
more important in naming your
variables than being able to
stand up and read your code
aloud during a program
review.”
/* pointer to character
pointer */
char **ppch;
16. Don’t use Hungarian notation for variables
❖ “In modern languages we have
much richer type systems, and
the compilers remember and
enforce the types.”!
❖ “Nowadays HN and other
forms of type encoding are
simply impediments. They
make it harder to read the
code.”
/* pointer to character
pointer */
char **ppch;
2011
2009
! ! 1993
17. Don’t use Hungarian notation for variables
❖ “In modern languages we have
much richer type systems, and
the compilers remember and
enforce the types.”!
❖ “Nowadays HN and other
forms of type encoding are
simply impediments. They
make it harder to read the
code.”
/* pointer to character
pointer */
char **ppch;
2009
18. 2004
Don’t use Yoda Conditions
❖ “Putting constants and
expressions on the left-hand
side of comparisons works
only when one of the operands
is a constant or an expression.”!
❖ “If instead you use a compiler
switch, the compiler would
alert you to every possible
assignment bug.”
2011
! ! 1993
if (10 == x)
// if 10, x is!
19. Don’t use Yoda Conditions
❖ “Putting constants and
expressions on the left-hand
side of comparisons works
only when one of the operands
is a constant or an expression.”!
❖ “If instead you use a compiler
switch, the compiler would
alert you to every possible
assignment bug.”
if (10 == x)
// if 10, x is!
! ! 1993
20. 2010
Enforce singletons
❖ “If you want to define a class
that allows only one object to
be instantiated, enforce this by
hiding all the constructors of
the class and providing a static
routine to access the class’s
single instance.”
public class MaxId {
private MaxId() {}
public static MaxId
GetInstance() { /*..*/ }
}
2004
! ! 1993
21. Enforce singletons
❖ “If you want to define a class
that allows only one object to
be instantiated, enforce this by
hiding all the constructors of
the class and providing a static
routine to access the class’s
single instance.”
public class MaxId {
private MaxId() {}
public static MaxId
GetInstance() { /*..*/ }
}
2004
22. 2011
Prefer Write-Once Variables
❖ “The more places a variable is
manipulated, the harder it is to
reason about its current value”!
❖ “Variables that are a
‘permanent fixture’ are easier
to think about”!
❖ “Immutables tend to more
often be trouble-free”
2004
! ! 2000
23. 2011
Prefer Write-Once Variables
❖ “The more places a variable is
manipulated, the harder it is to
reason about its current value”!
❖ “Variables that are a
‘permanent fixture’ are easier
to think about”!
❖ “Immutables tend to more
often be trouble-free”
24. 2011
Design for Unit Tests
❖ “Most important, is it possible
to automatically and
thoroughly validate the design
using a unit test? If not, you
should consider using an
alternative design that can be
tested.”
2004
! ! 1993
25. Design for Unit Tests
❖ “Most important, is it possible
to automatically and
thoroughly validate the design
using a unit test? If not, you
should consider using an
alternative design that can be
tested.”
! ! 1993
27. Use Hungarian Notation for Variables
❖ Prefix indicates type or intended use!
❖ Widely used after use in Microsoft Windows C libraries!
❖ “Systems Hungarian” vs. “Apps Hungarian”
char ch; /* a plain old character */
bool f; /* flags that are always TRUE or FALSE */
char *pch; /* a character pointer */
char **ppch; /* pointer to a character pointer */
char *szName; /* a zero-terminated string */
28. Why?
❖ Makes wrong code ‘look wrong’ [Maguire93], [McConnell04]!
❖ Easy to decipher pointer expressions [McConnell04]!
❖ Semantic prefixes add information that compiler doesn’t
know about [McConnell04]!
❖ Standardized prefixes encourage consistent naming
[McConnell04]
29. Why not?
❖ Encoding adds burden of deciphering [Martin09]!
❖ Not necessary for types anymore [Martin09]!
❖ Functions and classes are shorter now [Martin09]!
❖ Inappropriate in object-oriented systems [Hunt00]!
❖ Code is read more than it’s written [Hunt00]
31. Specify interface or implementation in class name
❖ Denote in the class name when a class is an interface or
when it implements an interface!
❖ Typically using prefix ‘I’ for Interface and/or postfix
‘Impl’ for Implementation
class IBloober {
virtual void blob() = 0;
};
!
class BlooberImpl : public IBloober {
virtual void blob();
};
33. Why not?
❖ Users shouldn’t (have to) know they’re dealing with an
interface, better to encode the Impl [Martin09]!
❖ Names ending in Impl duplicate information [Freeman10]!
❖ Can indicate poorly named interface or design [Freeman10]
35. Align similar statements
❖ Can be used wherever similar statements are done on
multiple lines!
❖ Purely aesthetic enhancement
customerPurchases = customerPurchases + CustomerSales(customerID);
customerBill = customerBill + customerPurchases;
totalCustomerBill = customerBill + PreviousBalance(customerID) +
LateCharge(customerID);
customerRating = Rating(customerID, totalCustomerBill);
36. Why?
❖ Alignment scheme shows statements belong together
[McConnell93]!
❖ Neater listing and quicker scanning [McConnell93]!
❖ Column edges provide “visual handrails” [Boswell11]!
❖ Doesn’t take much work [Boswell11]
37. Why not?
❖ A headache to maintain as names change and lines are
moved amongst different indentations [McConnell04]!
❖ Emphasizes wrong things [Martin09]!
❖ Keep lists short [Martin09]!
❖ Eliminated by automatic reformatting tools [Martin09]
39. Keep functions short
❖ Functions should be as small as possible
std::string renderPageWithSetupsAndTeardowns(
PageData pageData, bool isSuite) {
if (isTestPage(pageData))
includeSetupAndTeardownPages(pageData, isSuite);
return pageData.getHtml();
}
40. Why?
❖ Easier to read and understand [Martin09]!
❖ Documentary value (descriptive name) [Martin09]!
❖ Easier to improve function when the code is by itself
[Boswell11]
41. Why not?
❖ Routines of longer length are no more error prone than
shorter routines, shorter may have more errors [McConnell93],
[McConnell04]!
❖ Routines of longer length are cheaper to develop
[McConnell93], [McConnell04]!
❖ Tiny functions can hurt readability [Boswell11]
44. Don’t Repeat Yourself (DRY)
❖ Every piece of code must have a single, unambiguous,
authoritative representation within a system [Hunt00]
45. Why?
❖ Change in one will make two implementations diverge
[Hunt00]!
❖ Similar code in two routines implies an error in
decomposition [McConnell93]!
❖ Duplication is a missed opportunity for abstraction
[Martin09]!
❖ Duplication can indicate bad design [Hunt00]!
❖ Copy/Paste programming is bad, remember Y2K [Hunt00]
47. Early Return
❖ Use guard clauses to return early for exceptional or
error conditions!
❖ Return early from e.g. linear search when a result is
found
public boolean Contains(String str, String substr) {
if (str == null || substr == null) return false;
if (substr.equals("")) return true;
...
}
48. Why?
❖ Implementing without guard clauses unnatural [Boswell11]!
❖ Avoids deep nesting [McConnell04], [Boswell11]!
❖ Single exit point less important with shorter functions
[Martin09]!
❖ Single exit point less important with modern languages
[Boswell11]
49. Why not?
❖ Breaks Structured Programming single-entry, single exit
‘law’ [Martin09]!
❖ Harder to understand a routine when unaware of all
return points [McConnell93]
51. Prefer Exceptions to Returning Error Codes
❖ Use exceptions to clarify the control flow
try {
socket.read(name);
process(name);
socket.read(address);
processAddress(address);
socket.read(telNo)
// etc, etc...
} catch (IOException e) {
Logger.log("Error reading individual: " +
e.getMessage());
}
52. Why?
❖ Clarifies normal flow of control [Hunt00]!
❖ Avoids violation of command query separation [Martin09]!
❖ Don’t force user to handle error immediately [Martin09]!
❖ Signal errors in a way that cannot be ignored [McConnell04]
53. Why not?
❖ High-level program flow obscured by bubbling up
[Boswell11]!
❖ Alternative error handling often more appropriate
[McConnell04]!
❖ Exceptions should only be used in exceptional
situations (that should never happen) [Hunt00]
55. Tell, Don’t Ask
❖ Objects make their decisions based only on the
information they hold internally or that which came
with the triggering message [Freeman10]
((EditSaveCustomizer) master.getModelisable()
.getDockablePanel()
.getCustomizer()
.getSaveItem().setEnabled(Boolean.FALSE.booleanValue());
!
// becomes...
master.allowSavingOfCustomisations();
59. Use Functional Programming Principles
❖ Use knowledge of functional programming in
imperative languages!
❖ Work with immutable data and pure functions where
possible
60. Why?
❖ Avoid side effects [Garson10]!
❖ Simpler to debug (source of change easy to find) [Garson10]!
❖ Avoid thread race conditions [Carmack12]!
❖ The more places a variable is manipulated, the harder it
is to reason about its value [Boswell11]
63. Program in Terms of the Problem Domain
❖ Model types and behavior in terms of the programming
problem rather than the computer science solution
if (portfolioIdsByTraderId.get(trader.getId())
.containsKey(portfolio.getId())) { ... }
!
// becomes ...
if (trader.canView(portfolio)) { ... }
64. Why?
❖ Increases code readability and understanding [North10]!
❖ Can evolve code when domain model evolves [North10]!
❖ Work at a higher level of abstraction to allow focusing
on solving domain problems [Hunt00]!
❖ Hides low-level details [McConnell93]!
❖ Separating solution and problem domain is part of the
job of a good programmer [Martin09]
65. Why not?
❖ The people who read your code are programmers: they
know CS terms [Martin09]
67. Prefer Message-Passing in Parallel Systems
❖ Use message passing instead of shared mutable
variables!
❖ Use copies of data where necessary!
❖ If the language doesn’t provide it, use libraries or
frameworks that do
68. Why?
❖ Shared mutable memory is at the root of problems
related to concurrency: race conditions, deadlock,
livelock [Winder10]!
❖ Proven way of handling concurrency [Winder10]!
❖ Avoiding synchronization makes up for overhead [Martin09]
70. Step Through your Code in a Debugger
❖ Actively step through all new or modified code to watch
it execute!
❖ As you step through code, focus on data flow!
❖ Step through every code path
71. Why?
❖ Allows you to get a ‘feeling’ for the code and gain
confidence [Maguire93]!
❖ You could create tests, but debugging is much faster
[Maguire93]
72. Why not?
❖ Problems can be found more quickly and more
accurately by thinking [McConnell04]!
❖ A bug should be reproducible with a single command
[Hunt00]
75. Why?
❖ Easier to test [Everyone]!
❖ Test-friendly code leads naturally to well-organized
code [Boswell11]!
❖ Decoupling leads to easier refactoring [Boswell11]!
❖ Classes with less state are simpler and easier to
understand [Boswell11]!
❖ Designing to test promotes reusability [Hunt00]
76. Why not?
❖ Could sacrifice readability for the sake of enabling tests
[Boswell11]!
❖ Testing by itself does not improve software quality
[McConnell93], [McConnell04]
78. Test-Driven Development
❖ Write test cases before writing code!
❖ Follow Red-Green-Refactor cycle!
❖ Do not write code without having test cases
79. Why?
❖ Forces you to think about requirements and design of
the code, finds problems earlier [McConnell04]!
❖ Tests will cover virtually all production code [Martin09]!
❖ Creates short feedback cycle in development [Freeman10]!
❖ Integrates refactoring in development [Freeman10]!
❖ Takes same amount of time as creating tests afterwards
[McConnell04]
80. Why not?
❖ Can create false sense of security (should not be only
form of testing) [McConnell04]!
❖ Just keeping testing in mind can help improve the code
[Boswell11]!
❖ Testing can get in the way of product development
[Boswell11]
82. Boy Scout Rule
❖ “Always leave the campground cleaner than you found
it”!
❖ When you check in a module, make a small
improvement, regardless of who the original author was
83. Why?
❖ The end of deterioration of software systems [Martin10]!
❖ Systems gradually get better [Martin10]!
❖ Promotes collective ownership [Martin10]!
❖ Don’t be afraid of the code [Lewis10]
84. Why not?
❖ What kind of motto is “If it ain’t broke, fix it anyway”?
[Maguire93]!
❖ Programmers don’t treat improved code as if it were
new code [Maguire93]!
❖ Your colleagues are not bozos, they might have had
their reasons [Maguire93]!
❖ Change in itself is not a virtue [McConnell04]
86. Conclusion
“The word is about,!
there's something evolving,!
whatever may come,!
the world keeps revolving!
!
They say the next big thing is here,!
that the revolution's near,!
but to me it seems quite clear!
that it's all just a little bit of history
repeating”!
!
—Alex Gifford by way of Shirley Bassey
Arjan van Leeuwen / @avl7771
87. Conclusion
❖ (Better) unit testing and test-driven development have
an impact on other practices!
❖ Concurrency finally having an impact, comeback of
functional language principles!
❖ Many practices that might seem recent were in fact
known for a long time
88. References
❖ [Boswell11] Dustin Boswell, Trevor Forcher, “The Art of Readable Code”. O’Reilly, 2011.!
❖ [Carmack12] John Carmack, “Functional Programming in C++”. http://www.altdevblogaday.com/2012/04/26/functional-
programming-in-c/, 2012.!
❖ [Freeman10] Steve Freeman, Nat Pryce, “Growing Object-Oriented Software”. Addison-Wesley, 2010.!
❖ [Garson10] Edward Garson, “Apply Functional Programming Principles”, from “97 Things Every Programmer Should Know”.
O’Reilly, 2010.!
❖ [Hunt00] Andrew Hunt, David Thomas, “The Pragmatic Programmer”. Addison-Wesley, 2000.!
❖ [Maguire93] Stephen A. Maguire, “Writing Solid Code”. Microsoft Press, 1993!
❖ [Martin09] Robert C. Martin, “Clean Code”. Prentice Hall, 2009.!
❖ [McConnell93] Steve McConnell, “Code Complete”. Microsoft Press, 1993!
❖ [McConnell04] Steve McConnell, “Code Complete 2”. Microsoft Press, 2004.!
❖ [North10] Dan North, “Code in the Language of the Domain”, from “97 Things Every Programmer Should Know”. O’Reilly, 2010.!
❖ [Winder10] Russel Winder, “Message Passing Leads to Better Scalability in Parallel Systems”, from “97 Things Every Programmer
Should Know”. O’Reilly, 2010.