{"id":16214816,"url":"https://github.com/lecrapouille/bacasable","last_synced_at":"2026-02-19T05:32:46.785Z","repository":{"id":64565463,"uuid":"103018484","full_name":"Lecrapouille/BacASable","owner":"Lecrapouille","description":"[SandBox][Examples] My micro projects for learning and to be used in larger projects","archived":false,"fork":false,"pushed_at":"2026-02-04T23:21:49.000Z","size":2079,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-05T11:31:23.198Z","etag":null,"topics":["autoload-lib","cpp","gtk3","gtkmm","julia","max-plus","maxplus","model-view-controller","model-view-presenter","mvc","mvc-pattern","mvp","mvp-pattern","plant-growth","shared-library"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lecrapouille.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-10T09:41:37.000Z","updated_at":"2026-02-04T23:21:53.000Z","dependencies_parsed_at":"2023-01-30T22:01:28.122Z","dependency_job_id":"73127201-cc87-43de-a816-f2ee78e9f91d","html_url":"https://github.com/Lecrapouille/BacASable","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Lecrapouille/BacASable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lecrapouille%2FBacASable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lecrapouille%2FBacASable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lecrapouille%2FBacASable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lecrapouille%2FBacASable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lecrapouille","download_url":"https://codeload.github.com/Lecrapouille/BacASable/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lecrapouille%2FBacASable/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29604552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T05:11:50.834Z","status":"ssl_error","status_checked_at":"2026-02-19T05:11:38.921Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autoload-lib","cpp","gtk3","gtkmm","julia","max-plus","maxplus","model-view-controller","model-view-presenter","mvc","mvc-pattern","mvp","mvp-pattern","plant-growth","shared-library"],"created_at":"2024-10-10T11:13:06.122Z","updated_at":"2026-02-19T05:32:41.776Z","avatar_url":"https://github.com/Lecrapouille.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BacASable\n\nSharing my POC/micro projects that I made for learning some techniques that can be used\nfor my biggest projects. This is kind of GitHub GISTs but grouped in a single repo (sandbox\nmeans bac à sable in French).\n\nMainly C++ code but also Julia, Forth, Prolog, Scilab, GTK+ and C code ... some related to C++.\n\n## Bash\n\nQuick bash scripts:\n- backing up my GitHub projects.\n\n## ChatGPT\n\nTest generating C++ code from ChatGPT.\n\n## C code\n\n### AutoLoadLib\n\nInteractive Programming in C: edit your C code at run-time, see your changes on\nyour application without restarting it. This allows to mimic the C language as\nan interpreted language.\n\n## C++\n\n### Forth Wrapper\n\nProve of concept implementing an ultra-basic Forth interpreter wrapping C++ API.\nTwo examples are given:\n- Wrapping a thin C++ abstraction library integrating the physic engine Bullet and\nthe 3D library OpenSceneGraph.\n- Wrapping a C++ symbolic library Ginac.\n\n### Design Pattern\n\nVisitor, Observer, MVP, Component ...\n\n#### Visitor\n\nIterate on a collection of class instances that have different API and call the\ncorrect methods. Ideal for Game graph scene.\n\n#### Component\n\nComposition is better than inheritance. Similar to Strategy pattern but Component is\nused for completing the state of the instance instead of adding dynamically behavior.\n\n#### Observer\n\nSafe observer managing the case where the Observer can be destroyed before the\nObservable.\n\nNote: Personally I would use [libsigc++](https://developer.gnome.org/libsigc++-tutorial/stable/index.html)\ninstead of implementing my own Observer/Listener class. This lib allows you to\nadd signals/slots (similarly to Qt). I give an example of this lib.\n\n#### MVC-MVP\n\nLearning how to implement design pattern Model-View-Controller (MVC) and a\nModel-View-Presenter (MVP) in C++ first with console then with gtk+.\nI tried to write minimalist examples.\n\n### Unit Tests\n\nGetting fun to mock C functions such as open(), read() to unit tests C function calling them.\nWe exploit the behavior of weak symbols by creating mock functions and define C++ mock class\nto use them easily with Google test/mock. See the README in this folder for more details.\n\n### Symbolic Manipulation\n\nBasic symbolic manipulation in C++.\n\n### Runtime Polymorphism\n\nBased on the YT vide \"Better Code: Runtime Polymorphism\" by Sean Parent.\nhttps://sean-parent.stlab.cc/papers-and-presentations/#better-code-runtime-polymorphism\n\n### ConditionVariable\n\nTest a basic wrapper for notifications through condition variables.\n\n### Union\n\nTest union structure for a Forth project https://github.com/Lecrapouille/SimForth. I dislike the idea of manipulating two separeted stacks: integer and float. Use a single one and make the operator change the type in the same way than OCaml operators `+` and `+.`, `int_of_float`.\n\n### C# Properties\n\nMimic C# properties in C++.\n\n### Containers\n\nPrototype structure such as grph, scene graph ...\n\n### Policies\n\nC++ policy template for iterating over folders and extract desired files.\n\n## Game Engine\n\nLearning by myself how to program in Godot and Unity:\n- Point of view code implementation.\n- Local vs world transformaation.\n\n## Gedit\n\n### Syntax highlighting\n\nSome *.lang files for my personal projects inspired by https://artisan.karma-lab.net/faire-todo-lists-gedit\n- logs: for highlighting log files generated by my personal projects (SimTaDyn ...)\n- forth: (TODO) for highlighting my SimForth script (a personal Forth slightly modified)\n\n## GTK+\n\n### GTK+2 with GTK-server\n\nBash script to launch GTK+2 application and GTK-server https://www.gtk-server.org/. Initial step before making the portage for Forth application.\n\n### Design Patterns\n\nMy personal implementation of some design patterns because all examples I found\non internet do not respond to concrete cases. For example:\n- Model-View-Presenter is pure Android design pattern and I could not find one\n  nice and simple implementation in C++, GTKmm.\n- Observer nobody in blogs seems to care about the case where the Observer is\n  destroyed before the Observable.\n- Component pattern for decoupling patterns.\n- Visitor pattern.\n\n## Julia\n\n### Call C/C++ code\n\nSee how from Julia we can call C functions.\n\n### Max-Plus algebra\n\n## Max-Plus\n\nDefining a Max-Plus class in C++ and Julia for Max-Plus algebra.\nMore information about this algebra, see https://en.wikipedia.org/wiki/Max-plus_algebra\nMy portage to Julia of the Max-Plus Scilab toolbox: https://github.com/Lecrapouille/MaxPlus.jl\n\n## MyMakefile\n\nTemplate for my Makefile helper.\n\n## OpenCV in C++\n\nTesting some basic functions, camera settings, car counting, ...\n\n## Prolog\n\nLearning programming Prolog. Learning how to call Prolog from C++ code. Implementing ultra basic Prolog routines based\non graph theory that could be used inside my personal project SimTaDyn instead of heavy C++ class and code.\n\n## Law Control\n\n### ScicosLab / NSP (Scilab) blocks\n\nSome \"As it\" very old and unmaintained C code for ScicosLab: joystick, camera, UART.\nhttp://www.scicoslab.org/\n\n### Plant Growth\n\nA student project for generating 3D plants made long yeeeears ago [NSP](https://cermics.enpc.fr/~jpc/nsp-tiddly/mine.html) or [ScicosLab](http://www.scicoslab.org/). Note: ScicosLab is the fork of Scilab (the equivalent of Matlab) and NSP is now replaced by NSP. This is not a serious application. If you are interested by simulation of plant growth read :\n* (fr) http://www.linneenne-lyon.org/depot1/14367.pdf\n* (en) https://hal.inria.fr/file/index/docid/71706/filename/RR-4877.pdf\n\n### Auto Parking\n\nQuick demo made while studying state of arts for auto parking.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flecrapouille%2Fbacasable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flecrapouille%2Fbacasable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flecrapouille%2Fbacasable/lists"}