Skip to content

This repository is to keep track of my continuous tech learning efforts. This will also consist of example codes, links to articles / tech videos, podcasts, readme etc.

License

Notifications You must be signed in to change notification settings

honey-speaks-tech/daily-tech-learnings-of-honey

Repository files navigation

Honey's daily technical learnings

  • 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

Contributors

daily-tech-learnings-of-honey contributors

Daily learning log

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

Day 2

  • hackingcpp cheatsheets
    • std::string interfaces added under cheatsheets/hackingcpp_cheatsheets/string_interfaces.png

Day 3

Day 4

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
Day 6

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.

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{}; vs TimingSpec 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
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)
Day 12 - Sonatype - Vulnerability analysis tool - Details added under #Developers toolbox section
Day 13 - Cmake - [CMake youtube tutorial's notes](https://codevion.github.io/#!cpp/cmake.md)

Knowledge Bank

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
  • Python
    • Finds number of CPU cores : reusable_code_snippets/python/num_cpu_cores.py
Resources for resources

Cheatsheets

My go-to references

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.
  • Tools
Potential Github repos to contribute

Interesting concepts learning workshops

Technical learning wishlist
Technical writing
Resource Progress
Article: 33 Good Technical Writing Examples
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)| |

Software Architecture |Resource|Progress| |---|---|

|Article: Learning resources for software architecture| |

C++ articles

Resource Progress

|Blog: Understanding when not to std::move in C++| |

C++ videos

Resource Progress

|Video: Let's get comfortable with SFINAE (C++)| |

C++ committee support
Papers review wishlist
Resource Progress

|Paper: P2951R3 - Shadowing is good for safety| |

Open-source projects I contribute

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

Daily learning playlist

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

Hashtags

About

This repository is to keep track of my continuous tech learning efforts. This will also consist of example codes, links to articles / tech videos, podcasts, readme etc.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published