=============================================================================================================================================== =============================================================================================================================================== =============================================================================================================================================== ========================= ETHOS OF THIS PROJECT: ========================= - This app is ment to serve the cryptocurrency community as a simple / easy-to-use, HIGHLY secured / optimized, and PRIVATE / ALWAYS 100% FREE and open source cryptocurrency portfolio tracker. - The "server edition" of this app can run 24/7 (with very little elecricity usage costs, depending on what machine runs it) on a Debian / Ubuntu / DietPi OS / RaspberryPi OS / Armbian / Windows / Mac installation on a user's internal / home network, saving price chart data and sending out price alerts (or doing any other background task) any time of the day or night...even on a raspberry pi zero ($10 chipset / $30 kit / ~1 watt power usage). The "desktop edition" of this app runs as a local / native app on a PC (just download / run it), allowing for easy installation by less technically-advanced users. - The design of this app is minimalistic ON PURPOSE to achieve all the above-mentioned important properties, all while still able to run on low power hardware (raspberry pi / pine64 / etc), which in turn makes this app a feasible choice for end-users of ANY portfolio size large or small. - By MINIMIZING exposure to user details (in case a user's operating system is ever hacked), security / privacy within this app is actually ENHANCED. In this specific case of attempting to maintain security and privacy of an end-user, the "less is more" approach works best (features / security is always a balance that must be considered in any app, but ESPECIALLY in a cryptocurrency app). ADDITIONALLY, these considerations become EVEN MORE IMPORTANT if an end-user's portfolio grows in value over the years. - There is no rush here to add features EVER, as this is a "passion project" (NOT for profit). There is also no "paying for a feature". If end-users want to donate twords the project, it must be a "generalized donation" not tied to any specific contract / agreement between the donors and developers. One of the primary pillars as mentioned above is "ALWAYS 100% FREE and open source". This is how the backbone of the ENTIRE underlying internet was built out in the mid / late 1990's and early 2000's. This project is HEAVILY COMMITED to this ideal. Accepting donations must NEVER prioritize development for the few over the many, PERIOD. The goal here is to create / maintain software that ANYBODY can use, redistribute, fork, and modify to their liking (WITH ATTRIBUTION / under the GPLv3 license). =============================================================================================================================================== =============================================================================================================================================== =============================================================================================================================================== ============================================ CONTRIBUTION GUIDELINES (FOR DEVELOPERS): ============================================ - Please review the above "ETHOS OF THIS PROJECT" section, to see if your planned iterations are in line with this project's main pillars / objectives. Maybe even contact the project lead, to run your ideas by them and get feedback before you start coding. Remember you also can fork this project, if you have a different set of objectives in mind. - NO PACKAGE MANAGERS (Composer etc)!!! This app is built with STRICT SECURITY AS A CORE ETHOS VALUE. Using package managers opens an app up to supply chain attack vectors, not to mention could potentially bloat the codebase beyond practicality of security code reviews (of however many 'recently-auto-updated' dependencies there are). If a library can install WITHOUT a package manager (even if it requires a few dependancies), THAT IS OK / GO FOR IT. Otherwise, don't use that library. - Please consider using "snake case" when creating variables / classes / etc, to match the coding style of the app. This helps a lot during code reviews to find bugs and security issues in more complex code, by making the code easier to read through. - Please consider using spaces instead of tab spacing when nesting / indenting. This makes it easier when refactoring code, if we need more nested indentation to read code cleaner for code reviews. - Please optimize your logic after fleshing it out, and make sure everything works as intended, AND reads clean during code reviews. Other contributors should NOT need to 'fix' much in your code contributions, as this defeats the purpose of having multiple contributors. There is no rush here, this is free software. You can take all the time you need, and get it right. - Please make sure you use decent semantics for your variable / class names, etc. This goes a VERY long way twords making code readable during code reviews. - Please add enough comments to your code to clarify what's going on, especially for moderate to heavy logic. Just like good semantic naming, this ALSO goes a VERY long way twords making code readable during code reviews. - Be liberal with spacing and new lines in your logic. This ALSO goes a VERY long way twords making code readable during code reviews. - Consider breaking up LARGE class functions into child functions in some areas, EVEN IF IT'S NOT RE-USED ANYWHERE ELSE, IF the code in that area is HEAVILY REPETITIVE (A MILE LONG). This ALSO goes a VERY long way twords making code readable during code reviews. - ALL code you include in your contribution MUST BE COMPATIBLE WITH THE GPLv3 LICENSE that this app is released under. If you include any code licensed by somebody other than yourself, you MUST leave attribution for them in your contribution. Also ALWAYS include the open source license the code was ORIGINALLY released under (EVEN IF IT IS THE SAME LICENSE THIS APP IS RELEASED UNDER). -DEV NOTES: This app was developed with bluefish on ubuntu (*NOT* the un-polished windows version) set to "5 spaces" as a tab indentation (and enabling indentation of selected text). THE AMOUNT OF INDENTED SPACING IN FILES #CHANGES AUTOMATICALLY# WHEN "BLUEFISH => PREFERENCES => INITIAL DOCUMENT SETTINGS => TAB WIDTH" IS CHANGED, JUST SO YOU KNOW WHY THE NESTED INDENTS MAY NOT LOOK GOOD ON YOUR SETUP. -LAST IMPORTANT NOTES BELOW, and thank you in advance for any considerations by you on contributing to this app's codebase. It's much appreciated, happy coding! :) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! D O N T F O R G E T T O S Q U A S H T H E B U G S ! !!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ((((c, ,7)))) ((((((( )))))))) ((((((( )))))))) ((((((@@@@@@@@@@@)))))))) @@@@@@@@@@@@@@@@))))))) @@@@@@@@@@@@@@@@@@))))))@@@@ @@/,:::,\/,:::,\@@@@@@@@@@@@@@ @@|:::::||:::::|@@@@@@@@@@@@@@@ @@\':::'/\':::'/@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@\ / \ ( \ ( ) \ \ \ / \ ---------------------------------------------------------------------- (CREDIT: https://asciiart.website/index.php?art=animals/insects/other) ---------------------------------------------------------------------- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ===> WHEN DEBUGGING PHP, LEAVE "$ct['dev']['debug_php_errors']" IN "developer-config.php" SET ===> LIKE SO, TO ALWAYS LOG ALL PARSE / FATAL PHP ERRORS DURING TESTING: (E_ERROR | E_PARSE) !!!! ===> Set PHP-CLI (for cron) "/etc/php/X.X/cli/php.ini": error_log = /var/log/php_errors.log ===> (run: "sudo touch /var/log/php_errors.log" / "sudo chmod 666 /var/log/php_errors.log") !!!! ===> Desktop Editions log all PHP errors to: /INSTALL_CRYPTO_TRACKER_HERE/php_errors.log !!!! ===> Server Edition (on debian) logs Apache PHP errors to: /var/log/apache2/error.log !!!! ===> Any admin config "category => setting" value SET TO NULL is considered a corrupt value, ===> for the SAKE OF COMPATIBILITY with upgrade detection / processing (use '' instead of null) !!!! ===> config.php (and plug-conf.php for plugins) MUST only contain STATIC VALUES, ===> as all configs are saved to / run from the cache file: /cache/secured/ct_conf_XXXXXXXXX.dat !!!! ===> DO *NOT* UPGRADE ZingCart, as it can be BUGGY ocassionally for auto-resizing on page showing, ===> AND we FORCE the BRANDING LINK to show EVEN IN A LOCALHOST environment (with custom tweaks) !!!! ===> May come in handy for writing PHP unit tests (in /app-lib/php/inline/debugging/): ===> https://stackoverflow.com/questions/861254/iterate-over-properties-of-a-php-class !!!! ===> See top of the file "/app-lib/js/var_defaults.js", for notes on declaring global / local ===> variables inside javascript-based app logic IN A PROPER MANNER (JS is different from PHP) !!!! ===> Test in a WebKit-based browser [Epiphany|Safari|Midori], besides Firefox / Chromium. !!!! ===> Try to wrap up tests / UX / QA / debugging before adding new architecture ===> (find every flaming turd before you start a dumpster fire!). !!!! ===> Try to break up larger changes into smaller milestones, ===> then plenty of time is spent on UX / testing / debugging. !!!! ===> PHPbrowserBox (used for Windows Desktop Editions) Shortcut Keys: ===> Reload / refresh browser : Shift + F5 (Mac: Command + R) ===> Open devtools : F12 (Mac: Fn + F12) !!!! ===> Ocassionally update cacert.pem in the main directory (for Windows Desktop Edition): ===> https://curl.se/ca/cacert.pem !!!! ===> "developer-config.php" contains MANY MANY MANY developer-only configs! !!!! ===> Don't require any higher than PHP v7.2 until PHP v9 has been out awhile. !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! =============================================================================================================================================== =============================================================================================================================================== ===============================================================================================================================================