core: SERVE_LOCALLY symbol

1 vote

Vote

Raised 0% of 6 credits
(6 credits = 1 hour or $43.15)

Add a new Tempcode symbol, SERVE_LOCALLY. The purpose is a way to copy remote URLs locally using Tempcode, and serve them locally (maybe for speed, maybe to avoid hammering someone else's server, maybe as an automatic backup). You pass it a URL and the first time it runs it copies that URL to a local file…

Suggested by Chris Graham on 9th January 2020

core: Automatic decache of GLOBAL_HTML_WRAP.tpl in new year

1 vote

Vote

Raised 0% of 6 credits
(6 credits = 1 hour or $43.15)

Within first hour of a new year, decache GLOBAL_HTML_WRAP.tpl IF it the modification date is from the previous year. Do this in Cron.

This is necessary as the $COPYRIGHT symbol is pre-compiled into templates, and thus even if a dynamic date is configured, it will only work once that template is re-compi…

Suggested by Chris Graham on 3rd January 2020

core: Remove output streaming

1 vote

Vote

Raised 0% of 6 credits
(6 credits = 1 hour or $43.15)

Output streaming was a cool idea - have pages be able to put out HTML quickly and stream it, rather than waiting for the whole page to generate.

However, now I can see this is not very practical. Any kind of output compression (gzip, Brotli) requires putting in place a PHP output handler. This output ha…

Suggested by Chris Graham on 12th December 2019

core: Re-review all indexes

0 votes

Vote

Raised 0% of 18 credits
(18 credits = 3 hours or $129.45)

Review all indexes in the system...

1) Is each necessary? Document why with a code comment. If not, remove (as indexes use disk space and slow writes).
2) Is *sorting* covered on a single index. For example, ideally an index on a category ID will also have a secondary index column on the timestamp, so…

Suggested by Chris Graham on 19th November 2019

core: Cache warm up via Cron

0 votes

Vote

Raised 0% of 180 credits
(180 credits = 30 hours or $1,290.13)

Initial installs may seem slow because initial caches are not populated.
Additionally, future use may seem slow if some resource is accessed but the cache is expired.

These caches could easily be populated in the background (in this priority order):
- Language file cache
- Template cache
- Comcod…

Suggested by Chris Graham on 19th November 2019

core: Opportunistic scheduler

0 votes

Vote

Raised 0% of 24 credits
(24 credits = 4 hours or $172.60)

Some background Cron hooks are not very time critical, but may have a performance impact. Ideally we would run these hooks only when the server is under low load.

Code in a detector function to find if the server is under 'low load', based on I/O load, CPU usage (uptime command on Linux), and memory usa…

Suggested by Chris Graham on 19th November 2019

core: Support for descending indexes

0 votes

Vote

Raised 0% of 30 credits
(30 credits = 5 hours or $215.74)

MySQL 8 adds support for descending indexes.

This is particularly relevant for indexes where we sort by descending timestamps (e.g. viewing in a forum).

It improves index performance by about 15%, avoiding the 'Backward index scan'. I'm not sure exactly why a backward index scan is slower, because a…

Suggested by Chris Graham on 18th November 2019

installer: Graceful handling if PHP is not installed

0 votes

Vote

Raised 0% of 6 credits
(6 credits = 1 hour or $43.15)

If PHP is not installed, launching install.php creates a redirect loop, due to <meta> redirects in the code.

At minimum stop this by obfuscating the embedded HTML a bit.

Ideally though, there'd be some kind of message saying PHP should be installed.

Suggested by Chris Graham on 18th November 2019

core: AJAX session generation / httponly session ID

1 vote

Vote

Raised 0% of 30 credits
(30 credits = 5 hours or $215.74)

This issue is to solve a few distinct issues:

1) We cannot have the session ID as httponly as it is used as an ad-hoc CSRF token (getCsrfToken function).
2) CSRF tokens may expire which is poor user experience (for example, a form is opened, a user goes to sleep, and submits it the next day - but the t…

Suggested by Chris Graham on 15th November 2019

core: Option to bypass SMTP relay server

0 votes

Vote

Raised 0% of 96 credits
(96 credits = 16 hours or $690.38)

E-mail is implemented in a complicated way, more complicated and error prone than it needs to be for our situation.

A mail client connects to an SMTP relay server (smarthost), and the message goes into that server's queue - and that server then connects to the recipient's SMTP server (or another relay,…

Suggested by Chris Graham on 7th November 2019