-
This repository is to keep track of my continuous technical learning efforts.
-
This repo consists of example codes, links to articles / tech videos, podcasts, readme etc.
-
As and when required, this repo would be organized into sub-folders for easy access.
-
Start date : 25 - Sep - 2023 ; End date : Infinite
-
Deeply inspired by @amitness
Day 1
-
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” ― Martin Fowler'
- Github's Markdown cheatsheet
- Added under
cheatsheets/markdown-cheatsheet.pdf
- Added under
- Rapidxml library
- Two minute learning
- Added under
Libraries/rapid-json-2-minute-learning.md
- Cmake wisdom nugget
- cmake module directive to parse documentation
- Documentation in .cmake
- Added under
developer_ecosystem/learn_cmake/cmake_tips.md
- cmake module directive to parse documentation
- Cmake useful references
Day 2
- hackingcpp cheatsheets
- std::string interfaces added under
cheatsheets/hackingcpp_cheatsheets/string_interfaces.png
- std::string interfaces added under
- cppcoreguidelines about lambda
Day 3
- cppcoreguidelines about template meta programming
Day 5
- JSON schema
- JSON Schema
- While JSON is probably the most popular format for exchanging data, JSON Schema is the vocabulary that enables JSON data consistency, validity, and interoperability at scale.
- JSON schema docs
- JSON Schema
Day 7
- QNX binary debugging commands
uname -m
readelf -a /proc/self/exe | grep -q -c Tag_ABI_VFP_args && echo "armhf" || echo "armel"
- qemu-$arch-static file is just an interpreter to run the architecture speicfic binary. Below is an example to run aarch64 specifc binary bin/hello-aarch64 on qemu-aarch64-static.
$ uname -m x86_64 $ file bin/hello-aarch64 bin/hello-aarch64: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=fa19c63e3c60463e686564eeeb0937959bd6f559, for GNU/Linux 3.7.0, not stripped, too many notes (256) $ bin/hello-aarch64 bash: bin/hello-aarch64: cannot execute binary file: Exec format error $ qemu-aarch64-static bin/hello-aarch64 Hello World!
Day 8
- Bincrafters
- Bincrafters
- Bincrafters is a community repository that provides Conan package recipes for many popular C/C++ libraries like Boost, OpenSSL etc.
- The key benefit of using packages from Bincrafters is that it can significantly reduce build times for C/C++ projects that depend on these libraries as they are able to provide prebuilt binaries, cached artifacts, better dependency management, precompiled headers, parallel builds etc.
conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
Boost.System/1.64.0@bincrafters/stable
- system_clock vs steady_clock in std::chrono
- std::chrono::system_clock
- Tracks wall-clock time from the system-wide realtime clock.
- The time points of this clock can jump forwards and backwards as the system time is changed.
- Time points are convertible to UTC through system_clock::to_time_t() and std::gmtime().
- Useful for synchronizing events across system time changes.
- std::chrono::steady_clock
-
Provides a monotonically increasing clock, that never jumps forwards or backwards.
-
Time points from this clock cannot be converted to UTC.
-
Useful for measuring intervals of time. e.g. benchmarking, repeatable timeouts.
-
Unaffected by system time adjustments or changes to the system clock.
-
In summary, system_clock represents wall-clock time and steady_clock represents monotonic time since an arbitrary point.
-
Choose based on whether you need UTC mapping or monotonic timings.
-
- std::chrono::system_clock
Day 9
-
Speed reading
- Takeaway from Technical Leaders' Guild meetup #1
- Eye exercises - circular motion, circular motion following a pacer
- Breathing, food, water, oxygen, posture
- Reading following finger
- Speed read to beat sub-vocalization.
- Read table of contents
- Focus on interesting chapters to read
- Try to comprehend what you read rather than blindly focusing on reading entire text.
- Even if you slow-read, brain can't capture or retain all information you read.
- Regular practice makes speed reading better
- Useful resource
- Action item : Try to read
Accelerate
: Part 1 over the week; and meeting scheduled for next Thursday (16-11-2023).
struct TimingSpec timing_spec{};
vsTimingSpec timing_spec_1;
- Sometimes (likely in a header), you forward-declare a class instead of including its header, and declare use a pointer or reference to that class.
- e.g. as a function parameter
- for example
class Animal; void play_cry(Animal* p_animal);
- and that's fine, after the forward declaration, Animal is what you'd call an "incomplete" type, and you can have pointers and references to those
- Instead of doing a forward declaration, you can write
void play_cry(struct Animal* p_animal)
as a short hand with the same effect. - struct or class, doesn't matter
- Sometimes (likely in a header), you forward-declare a class instead of including its header, and declare use a pointer or reference to that class.
Day 10
- clang_tidy valuable points - CMake runs Clang-Tidy as it builds the code `CMAKE_CXX_CLANG_TIDY` is set in its options. - The `run-clang-tidy.py` script can be used to run against code which hasn't been built, using a `compile-commands.json` file. - Ensure that any required source code generation is done first. - As Clang-Tidy takes a lot of time, that's probably going to be an issue either way. - Refer `clang-tidy-diff.py` for optimizing Clang-Tidy runs to only run against a set of changes.Day 11
- C++ Essentials : Templates (By Klaus Iglberger) - [Templates training Materials](https://github.com/igl42/oreilly)Reusable code snippets
- C++
- Some sample printing using
fmt
library :reusable_code_snippets/cpp/fmt_print_sample.cpp
- Convert string to vector of characters :
reusable_code_snippets/cpp/string_to_vector_of_chars.cpp
- Generic function template for logging exceptions:
reusable_code_snippets/cpp/generic_function_template_for_logging.cpp
- Converts stringstream to string to raw char buffer :
reusable_code_snippets/cpp/string_stream_to_string_to_raw_char_buff.cpp
- Converts string view to raw char buffer :
reusable_code_snippets/cpp/string_view_to_raw_buffer.cpp
- Extracts file name from path :
reusable_code_snippets/cpp/extract_file_name_from_path.cpp
- String empty check :
reusable_code_snippets/cpp/string_empty_check.cpp
- Struct instantiation formats :
reusable_code_snippets/cpp/struct_instantiate_formats.cpp
- Nested try catch inside catch block :
reusable_code_snippets/cpp/nested_try_catch_inside_catch.cpp
- Some sample printing using
- Python
- Finds number of CPU cores :
reusable_code_snippets/python/num_cpu_cores.py
- Finds number of CPU cores :
My go-to references
- C++ draft standards
-
Modern C++ features
-
Reference for resources to learn C++
- CMake tutorials
- Boost Date-time library
- System Design
- Worldwide developer conferences
- Pronunciation helper
Developers toolbox
- Utilities
- camomilla
- camomilla is a simple Python 3 script that simplifies errors produced by C++ compilers. It is very useful while dealing with heavily-templated code (e.g. when using boost::hana or boost::fusion).
- ctcache
- Cache for clang-tidy static analysis results.
- clang-tidy-cache is a command-line application which "wraps" invocations of the clang-tidy static analysis tool and caches the results of successful runs of clang-tidy.
- On subsequent invocations of clang-tidy on an unchanged translation unit, the result is retrieved from the cache and clang-tidy is not executed.
- For most C/C++ projects this allows to have static analysis checks enabled without paying the cost of excessive build times when re-checking the same unchanged source code.
- JIRA to Lucid document
- Script that can take JIRA tasks for a particular user and convert it to a Lucid document.
- Cmake reusable functions
- A general-purpose CMake library that provides functions that improve the CMake experience following the best practices.
- camomilla
- Tools
- Sonatype
- Manage your software supply chain at scale. Deliver products faster with safer open source. Protect software from malware attacks.
- Sonatype OSS index
- OSS Index is a free catalogue of open source components and scanning tools to help developers identify vulnerabilities, understand risk, and keep their software safe.
- Sonatype github
- Webinar : Fireside Chat with BMW and Their Software Supply Chain Management Journey by Fred Farber, Enterprise Architect for BMW of North America
- Sonatype
Potential Github repos to contribute
- C++
- Coding challenges
- Python
- Cmake
- Review and learning
Interesting concepts learning workshops
-
Documentation
-
Open source software
-
Jupyter notebooks
-
Automated testing
-
Modular code development
-
Data visualization
- Artificial intelligence
- Empty lesson template
Technical learning wishlist
General technical knowledge
Resource | Progress |
---|
|Article: What Every Programmer Should Know About Memory| |
|[Article: Ten simple rules for quick and dirty scientific programming](honey-speaks-tech/daily-tech-learnings-of-honey/tech_concepts_upskilling/BetterProgramming/Ten simple rules for quick and dirty scientific programming.pdf)| |
C++ committee support
Book recommendations
- Professional
- "You Are a Badass” by Jen Sincero
- NPR’s How I Built This hosted by Guy Raz.
- Rich Dad Poor Dad
My other learning interests
- Visual art
|Resource|Progress|
|---|---|
-
|Mike Rhode's 15 minute lesson on 5 basic elements of drawing| |
-
Books
- Visual Meetings - Dave Sibbet
- Visual Leaders - Dave Sibbet
- Understanding Comics - (For Nivu)
- Making Comics - (For Nivu)
- Creating clarity - Holger Nils Pohl
- How to design visual templates - Bas Bakker
- 100 daily drawings - Holger Nils Pohl
-
Some visual artists to follow
- @tbx314
- James Durno
- @visual_jam
- Andy Gray
-
Some more resources
-
-
Brain training
Daily learning playlist
- Daily self-help wisdom nuggets
- Daily clean code nuggets
- Code smells series
- Clean code cookbook code examples
A tech talk a day playlist
|Talk|Date|Progress| |---|---| |[MISRA C++ 2023 : Everything you need to know](https://www.brighttalk.com/webcast/18694/602198?bt_tok=264712432&utm_campaign=602198&utm_medium=brighttalk&_hsmi=285898922&_hsenc=p2ANqtz--LIGeQCyMw2XRRRn81nvnN445x_SNpqtIfxEWQioNQf4xXMmzuj6YkTcTwl6PN6OxfFf4MGtwTPO2Cg4XUG5bYm67dbvJGgK_b7ntmGX5NW9D4eHY&utm_source=Parasoft)|08-01-2024|Not started|Modern C++ resources for reading code
- [Squey](https://gitlab.com/squey/squey) - [Book : Physical based rendering]https://pbr-book.org/4ed/contents)Meetups/Conferences I attended
C++ meetups
Date | Name | Session | Youtube Video |
---|---|---|---|
14-10-2023 | [GRCCP] - Athens C++ Meetup | Let's get comfortable with SFINAE | https://youtu.be/-Z7EOWVkb3M?si=RFCo7rbRQPQAcZWS |
Inspiring technical people
- #artificial_intelligence
- #refactoring
- #software_craftsmanship
- #tech_quotes
- #cheatsheets
- #libraries
- #code_snippets
- #dev_ecosystem
- #cmake
- #conan
- #clang_tidy
- #coding_challenges
- #technical_writing
- #cpp_standards
- #cpp
- #cppcoreguidelines
- #tech_conferences
- #language_learning
- #study_support_for_my_son
- #git
- #ready_templates
- #visual_art
- #system_design
- #software_architecture
- #books
- #open_source
- #qnx
- #python
- #technical_review
- #productivity
- #self_help
- #clean_code
- #boost_libraries