160 karma · joined December 18, 2013
Oh, I just noticed something. HALT!
FPC or Full Page Components: the original HTML source (as seen from "view page source", not "inspect") usually contains a tag like `<div id="app"></div>` which simply serves as the place where the FPC-oriented framework inserts its magic. All the magic happens in the JS (possibly generated by compiling from something else like JSX or a component DSL). Note that a FPC is not necessarily a SPA; you could have multiple pages with one FPC each.
Sprinkled: the original HTML source has the framework's tags, attributes, and/or other markup sprinkled throughout it. The framework will search for these sprinklings in the original HTML and do as they direct. Usually the framework only looks within an encapsulating tag so the original HTML might have something like `<div id="app">...more HTML with sprinklies...</div>`.
React and Svelte are FPC frameworks. All the exciting stuff is in the code: JS, JSX, or a JS-like component DSL.
VueJS can be used in multiple modes. It can be used in pure FPC mode. It can be used in hybrid mode: with both components and sprinklies in the original HTML, including sprinklies between a component's start and end tag. And it can (almost) be used in pure sprinkled-mode. I say "almost" because you do need some JS code to define the mount point and the data. (VueJS also has two sub-modes for components: compiled client-side and pre-compiled during the build. The later requires a more complex build step).
AlpineJS is (mostly) for pure sprinkled-mode. It is easy to write non-trivial function with no JS at all, other than loading AlpineJS itself from a CDN. On page load, AlpineJS will automatically do the needful; no bootstrapping JS is required. When re-use and/or complexity requires it, you can move some or much of the code from HTML to your JS. For even more complex stuff, the new plugin ability in V3 of AlpineJS makes adding your own directives/attributes or magic variables/functions easy. This extra ability in V3 just means although you can do 80% with no or very little JS, you still have room to grow for the other 18-20%.
AlpineJS is great for and focuses on the needs of simpler apps. And most of the apps we develop should ... be ... SIMPLE.
ASCII provided characters specifically for this purpose. But no one seems to have RTFMed. ASCII 31 is a "unit separator" (or field separator as we'd call it today) and ASCII 30 is a record separator. There's even ASCII 29, a group separator, so you can have a set of records related as a group (for example, a group of records of different type but related to a single customer). And there's ASCII 28, a file separator, so you can have multiple "logical" files within one physical file.
[0] Page 70 of http://bitsavers.org/pdf/ibm/360/princOps/A22-6821-0_360Prin...
Don't hard-code the % ROI and quarterly contribution in each row; put them in cells at the top. You can then play with % ROI and quarterly contribution values to see how much you'll have when. Take each rows balance and divide by (85-age) to get a conservative estimate of annual income if retired (conservatively assumes future ROI == inflation).
Fyi, I'm a 59 yo who knew ageism in hiring was coming and is so happy that my otherwise foolish self came up with a basic plan 25+ years ago to know if he was on track or not (and managed to stay well ahead of it). Helped with spending decisions too: if I was ahead, I'd buy that motorcycle; if not I didn't.
There is still a lot of info on the old website. When we decided to go with an "emergency" rewrite of our website, instead of trying to cleanse Drupal, we rewrote only the core functions needed to run tournaments. To keep users from complaining, I kept old.chess.ca available. Now, they'll just have to wait. I do not want to risk anything that might provoke the Google monster into banishing the new website again.
Turns out sites are guilty by association. If Google finds malware on "old.chess.ca" it will bock every website ending in "chess.ca". Including "www.chess.ca" even though that website is on different servers (different IP) and contains zero links to the other bad website. Removing the server from DNS, plus disabling with .htaccess rules that redirect all requests, ... plus waiting 16 hours for Google to do another review ... is what got us back up & running.