Commit Graph
100 Commits
Author SHA1 Message Date
dc 2fe1bc2eea blog: add formula, range-value and NOTNULL-constraint caveats to the special missings post
Verified on a real SAS estate:
- a physical NOT NULL (or primary key) constraint rejects a special missing,
  and getdata merges that constraint into a frontend NOTNULL rule - which
  passes a special missing, so the editor is more lenient than the constraint
- a special missing as a MINVAL rule value fails every cell; as a MAXVAL rule
  value it fails every real number
- a HARDFORMULA/SOFTFORMULA reading a special-missing cell returns #VALUE!
- PRX and the JS engine agree on the value; SAS pads the numeric-to-character
  conversion, so an anchored pattern re-used in SAS needs strip()
2026-09-23 07:29:04 +00:00
dc 3e39339332 blog: scope the validation section to Data Controller rules and note the MISSING= gotcha
- heading + intro now say these are Data Controller's MPE_VALIDATIONS rules,
  applied in the browser
- new paragraph on options MISSING: a regular missing prints as . unless the
  option changes it (eg to blank); special missings are never affected
- CASE split out of the rule list: it is a character rule, and a special
  missing always reaches the browser as an uppercase letter
- HARDREGEX and SOFTREGEX separated (SOFTREGEX warns rather than blocks, and
  is ignored when the column also has a HARDREGEX)
- LinkedIn copy kept in sync

Behaviour confirmed against the deployed services on a real Viya estate.
2026-09-23 07:17:46 +00:00
dc 6d554930be docs(feed): add the cover image to the special missings post
Cover art for "28 Ways to Be Missing in SAS": a pack of wolves on a snow plain
at dusk with one animal standing apart, carrying the post's opening line - a
numeric missing is not a lone wolf, there are 28 of them.

Source image was 4:3, so it is cropped to 1.91:1 (1200x627) to match the other
feed covers and double as the LinkedIn share card. The crop was chosen to keep
both the lone wolf on the left and the full pack on the right in frame, losing
only sky above the clouds and foreground snow.

Sets previewImg in the front matter; the template renders it, so it is not
embedded in the body as well. Verified through gatsby build - the image
pipeline emits 300/600/1200-wide variants.
2026-09-22 21:36:39 +00:00
dc a56c2f8d48 docs(feed): record the final cover image prompt on the special missings post
Replaces the placeholder one-liner with the prompt actually intended for the
cover: the pack of wolves on a snow plain at dusk with one animal standing
apart, plus the negative constraints, the output spec (./cover.jpeg at
1200x627, previewImg in front matter) and a fallback single-subject variant.

Two deliberate choices are recorded so they are not lost on a regenerate:

- No text, letters or numbers anywhere in the image. The subject is letters
  standing in for numbers, so a stray glyph undercuts the cover.
- No exact head count of 28. Generators cannot count, and a crowded pack reads
  worse than a dozen clear animals; the number belongs in the headline.

Links to the full prompt and variants on paste.4gl.io.
2026-09-22 21:17:41 +00:00
dc 27ff40b739 blog: correct the video label on the v4.0 special missings post
The special missings video was labelled "Retain Formulas when Loading Excel
to SAS", which is a different video. Restores the one-line correction that
was in the earlier revision of this branch, kept separate from the feed post.
2026-09-22 18:10:28 +00:00
dc 4937edd7f4 feed: add a special missings post, and revert the blog edits
The special missings material that was added to the v4.0 blog post belongs in
its own post: that article is a release announcement for v4.0, not a teaching
piece. This reverts the blog change and publishes the content under /feed/.

The new post covers what SAS special missings are, how the SASjs Adapter
carries them between the browser and SAS, and how Data Controller's validation
rules treat them - NOTNULL passes, MINVAL fails, MAXVAL passes, and the regex
rules apply as they would to any other value.

The LinkedIn version of the copy, and the image prompt for the cover, are
recorded in a comment at the foot of the file.
2026-09-22 17:53:55 +00:00
allan fcba390804 Merge pull request 'feed: render poem fenced blocks as verse, not code' (#18) from feat/poem-format into main
publish / Build-and-publish (push) Successful in 4m13s
Reviewed-on: #18
2026-09-20 19:25:54 +00:00
allan 8b6e3e60bc Merge pull request 'feed: add the carousel assets (PDF + slides) to the poem post folder' (#17) from feat/if-ode-carousel into main
publish / Build-and-publish (push) Successful in 4m3s
Reviewed-on: #17
Reviewed-by: Allan <allan@4gl.io>
2026-09-20 19:25:17 +00:00
blog-dev d244a34fc9 feed: render poem fenced blocks as verse, not code 2026-09-20 19:18:11 +00:00
blog-dev 686a745f0b feed: break the carousel stanza slides between the two quatrains 2026-09-20 19:09:38 +00:00
blog-dev 510947d173 feed: add the LinkedIn carousel (PDF + slides) to the post folder 2026-09-20 18:55:18 +00:00
allan 589a745c5b Merge pull request 'Update content/feed/if-an-ode-to-data-control/index.md' (#16) from allan-patch-1 into main
publish / Build-and-publish (push) Successful in 3m53s
Reviewed-on: #16
2026-09-20 17:39:19 +00:00
allan d04c55c731 Update content/feed/if-an-ode-to-data-control/index.md 2026-09-20 17:39:07 +00:00
allan a6a6abf009 Merge pull request 'feat(feed): If - An Ode to Data Control' (#15) from feat/if-ode-to-data-control into main
publish / Build-and-publish (push) Successful in 4m0s
Reviewed-on: #15
Reviewed-by: Allan <allan@4gl.io>
2026-09-20 17:31:40 +00:00
blog-dev 88368fa31d feed: trim the boast and the repeated first-line echo from the intro 2026-09-20 17:21:19 +00:00
blog-dev fdb1db216d feed: rework the poem cover into a title-page design; note the 2022 publication year 2026-09-20 16:37:23 +00:00
blog-dev 6d833f9654 feat(feed): If - An Ode to Data Control 2026-09-20 15:54:56 +00:00
allan 6bcd0adf81 Merge pull request 'feed: correct the case sensitivity example in the full table search post' (#14) from fix/full-table-search-case-sensitivity into main
publish / Build-and-publish (push) Successful in 3m58s
Reviewed-on: #14
Reviewed-by: Allan <allan@4gl.io>
2026-09-17 07:47:31 +00:00
blog-dev 93348ad604 feed: tighten the case sensitivity note to a single sentence 2026-09-17 07:44:53 +00:00
dc 7561bb0c39 feed: correct the case sensitivity example in the full table search post
The post claimed `smith` finds `Smithson`, which only holds for a case
insensitive match. The comparison is case sensitive, so the search term has
to match the case as stored: `Smith` finds `Smithson`, and `smith` finds
`Goldsmith`, but `smith` will not find `Smithson`.
2026-09-16 23:42:45 +00:00
allan 959a9ffab4 Merge pull request 'Feed post: Full Table Search' (#13) from feat/full-table-search into main
publish / Build-and-publish (push) Successful in 4m34s
Reviewed-on: #13
Reviewed-by: Allan <allan@4gl.io>
2026-09-16 23:22:22 +00:00
blog-dev 2348575737 feed: full table search - new demo video, copy matches the recording
- embed the re-recorded 16:9 demo video (search walkthrough, 39s)
- drop the one million row CAS claim from the description, the body and the
  social copy: the recording demonstrates a table in the Viewer, so the
  text now says only what the video shows
2026-09-16 23:17:43 +00:00
blog-dev b2aac21b90 feed: full table search - any value, any column, no query 2026-09-15 17:19:07 +00:00
allan 438b1e93d7 Merge pull request 'Move Cyber Essentials badge to who-is section + about page' (#12) from fix/cert-badge-placement into main
publish / Build-and-publish (push) Successful in 3m56s
Reviewed-on: #12
2026-09-11 20:27:09 +00:00
blog-dev 674737f840 fix: move Cyber Essentials badge to who-is section + about page, drop hero/footer placements 2026-09-11 20:22:29 +00:00
hermes 150be89246 Merge pull request 'Surface Cyber Essentials certification on homepage hero and footer' (#11) from feat/cyber-essentials-badge into main
publish / Build-and-publish (push) Successful in 3m57s
2026-09-11 19:45:26 +00:00
blog-dev b6fea27963 feat: surface Cyber Essentials certification on homepage hero and footer 2026-09-11 19:45:06 +00:00
blog-dev aa1f015f5a docs(blog): punchier LinkedIn draft for non-DC users - pain-first, no jargon
publish / Build-and-publish (push) Successful in 6m39s
2026-09-04 09:29:20 +00:00
blog-dev 79b62e4cfc docs(blog): add source LinkedIn post comment for the v7.13 article
publish / Build-and-publish (push) Successful in 6m33s
2026-09-04 08:06:46 +00:00
blog-dev 73d4796638 fix(blog): show sasdemo instead of root user in audit demo screenshot
publish / Build-and-publish (push) Successful in 6m36s
2026-09-04 07:51:32 +00:00
blog-dev 7267af58c4 ci: drop npm cache from setup-node - save/restore costs exceed the benefit at this repo size
publish / Build-and-publish (push) Successful in 7m0s
2026-09-04 07:23:58 +00:00
blog-dev e5dfcd84da feat(blog): add audit-column demo image showing the IF formula resolving live
publish / Build-and-publish (push) Successful in 13m17s
2026-09-04 01:28:42 +00:00
blog-dev 02295334b3 fix(blog): restore hardening and polishing phrasing in v7.13 post
publish / Build-and-publish (push) Successful in 13m11s
2026-09-04 01:09:48 +00:00
blog-dev e7a538ed9a feat(blog): link getdata and postedit hook to code.datacontroller.io
publish / Build-and-publish (push) Successful in 15m42s
2026-09-04 00:53:20 +00:00
blog-dev 60a19dda89 fix(blog): correct PK live-formula wording in v7.13 post
publish / Build-and-publish (push) Successful in 15m16s
2026-09-04 00:36:58 +00:00
blog-dev b415793eec fix(blog): trim intra-release fix churn from the also-in-release list
publish / Build-and-publish (push) Successful in 15m40s
2026-09-04 00:20:36 +00:00
blog-dev d352ea8fea fix(blog): re-encode v7.13 images to bust poisoned CDN edge cache entries
publish / Build-and-publish (push) Successful in 15m47s
The /static/* path sits behind a Cloudflare cache-everything rule with a
62-day edge TTL. An image fetched mid-deploy can pin a bad (truncated/404)
response at an edge POP. Re-encoding produces new content-hashed URLs so
every variant is fetched fresh from origin. Pixels are identical.
2026-09-04 00:19:32 +00:00
blog-dev 9e04cd4220 feat(blog): v7.13 release post - formulas & regex with live screenshots
publish / Build-and-publish (push) Successful in 15m47s
2026-09-03 23:56:29 +00:00
blog-dev 181c3ae834 fix(feed): update LinkedIn source copy - community edition, not 5-user free tier
publish / Build-and-publish (push) Successful in 13m5s
2026-08-27 17:04:13 +01:00
blog-dev 0ec0789ac4 feat(feed): five lines of defence post with cover image
publish / Build-and-publish (push) Successful in 13m1s
2026-08-27 16:43:07 +01:00
blog-dev 2e5fc4a368 feat(feed): legacy data ingestion post with cover image
publish / Build-and-publish (push) Successful in 12m56s
2026-08-24 16:37:11 +01:00
blog-dev 3d66f91820 fix(feed): correct docs link to /restore/
publish / Build-and-publish (push) Successful in 12m54s
2026-08-20 22:26:03 +01:00
blog-dev 5cdfadf75c feat(feed): use ctrl-z as cover, move trains meme into post body
publish / Build-and-publish (push) Successful in 13m0s
2026-08-20 22:20:56 +01:00
hermes fef2c3c12e chore: li update
publish / Build-and-publish (push) Successful in 12m58s
2026-08-20 22:14:47 +01:00
blog-dev b50efc01e2 feat(feed): expand rollback post LinkedIn copy, drop version refs
publish / Build-and-publish (push) Successful in 12m52s
2026-08-20 21:50:27 +01:00
blog-dev de23966721 feat(feed): add rollback data changes post with meme 2026-08-20 21:06:43 +01:00
4gl 9121bf900d fix: contact image
publish / Build-and-publish (push) Successful in 13m2s
2026-08-17 20:14:26 +01:00
4gl 56175353d6 feat: sas projects / excel
publish / Build-and-publish (push) Successful in 12m56s
2026-08-17 19:51:20 +01:00
4gl 26b4c55ecd feat: horror stories
publish / Build-and-publish (push) Successful in 13m19s
2026-08-15 09:47:06 +01:00
4gl 5be23393d6 fix: dc link
publish / Build-and-publish (push) Successful in 12m56s
2026-08-13 13:52:18 +01:00
4gl bf3ef8bab1 fix: links
publish / Build-and-publish (push) Successful in 12m51s
2026-08-13 13:46:43 +01:00
4gl 729437308a fix: feed post git data
publish / Build-and-publish (push) Successful in 13m19s
2026-08-13 13:28:30 +01:00
4gl 244829edf9 feat: post
publish / Build-and-publish (push) Successful in 12m58s
2026-08-12 10:32:04 +01:00
4gl b51c831b53 chore: ai docs
publish / Build-and-publish (push) Successful in 13m28s
2026-08-11 10:47:35 +01:00
4gl 8e0b28ed93 feat: libinfo feed post
publish / Build-and-publish (push) Successful in 13m33s
2026-08-11 09:13:04 +01:00
4gl 5b6575ae8e fix: small edits + ai notes
publish / Build-and-publish (push) Successful in 12m53s
2026-08-10 18:42:49 +01:00
4gl 9dcedfffb0 feat: business data capture feed post
publish / Build-and-publish (push) Successful in 12m55s
2026-08-10 18:28:16 +01:00
4gl 34846e5a4c fix: formatting
publish / Build-and-publish (push) Successful in 12m51s
2026-08-09 18:12:42 +01:00
4gl 26304f3c73 feat: fsedit feed post
publish / Build-and-publish (push) Successful in 13m9s
2026-08-09 18:00:11 +01:00
4gl 14b745e2e7 fix: agent tidy up 2026-08-09 17:39:33 +01:00
4gl bdddfac52a fix: image
publish / Build-and-publish (push) Successful in 12m45s
2026-08-07 15:15:09 +01:00
4gl 2cc3a13340 feat: new article
publish / Build-and-publish (push) Successful in 13m3s
2026-08-07 15:01:17 +01:00
4gl ebd77c9d76 feat: regex rules
publish / Build-and-publish (push) Successful in 12m48s
2026-07-28 14:28:28 +01:00
4gl 73fccc70a5 feat: first announcement
publish / Build-and-publish (push) Successful in 12m44s
2026-07-26 15:27:48 +01:00
allan b58387bee5 fix: prod -> production
publish / Build-and-publish (push) Successful in 12m42s
2026-06-16 11:35:30 +01:00
allan 53aa81c788 feat: env restriction
publish / Build-and-publish (push) Successful in 13m14s
2026-06-16 11:24:56 +01:00
allan d2c8e5e6bc feat: price reduction
publish / Build-and-publish (push) Successful in 12m46s
2026-03-18 14:22:17 +00:00
allan 50833b4fd8 chore: rename
publish / Build-and-publish (push) Successful in 12m39s
2026-03-14 13:57:11 +00:00
allan 1f4e159fe0 fix: wording
publish / Build-and-publish (push) Has been cancelled
2026-03-14 13:50:41 +00:00
allan ae55a82b19 feat: snowflake support
publish / Build-and-publish (push) Successful in 12m41s
2026-03-14 13:33:56 +00:00
_ bf3e48654c fix: footer
publish / Build-and-publish (push) Successful in 11m21s
2026-02-15 22:38:44 +00:00
_ 9c4c1e9d99 fix: footer
publish / Build-and-publish (push) Failing after 6m3s
2026-02-15 22:28:25 +00:00
_ b543b5ab96 fix: footer
publish / Build-and-publish (push) Failing after 6m7s
2026-02-15 21:56:45 +00:00
_ 19743c7dd5 fix: tidy up
publish / Build-and-publish (push) Successful in 11m21s
2026-02-15 21:37:46 +00:00
_ 39ab4be7f7 fix: footer
publish / Build-and-publish (push) Has been cancelled
2026-02-15 21:27:03 +00:00
_ 51761ca3bd fix: footer
publish / Build-and-publish (push) Successful in 11m22s
2026-02-15 21:07:50 +00:00
_ 72e01e4c02 fix: deps
publish / Build-and-publish (push) Successful in 11m29s
2026-02-15 20:07:05 +00:00
_ 1b7a29b2d6 chore: remove old image
publish / Build-and-publish (push) Failing after 1m16s
2026-02-15 19:59:13 +00:00
_ 2120a3892a fix: release table as preview 2026-02-15 19:59:00 +00:00
_ 90ddd63370 fix: 2025
publish / Build-and-publish (push) Has been cancelled
2026-02-15 19:58:08 +00:00
_ ed1c90c057 feat: use image instead of table@
publish / Build-and-publish (push) Successful in 2m26s
2026-02-15 19:55:38 +00:00
_ 4a1a420e39 fix: formatting
publish / Build-and-publish (push) Successful in 2m23s
2026-02-15 19:49:54 +00:00
_ 54ddedd1af feat: 2025 blog post@
publish / Build-and-publish (push) Successful in 2m25s
2026-02-15 19:35:47 +00:00
sead 08070f3586 Merge pull request 'Update' (#10) from dcio_refactor into main
publish / Build-and-publish (push) Successful in 2m21s
Reviewed-on: #10
2025-12-13 18:28:26 +00:00
sead eda6c62f03 fix(deps): update gatsby, remove ignore scripts due to sharp install error 2025-12-13 19:24:26 +01:00
sead 4a30ce77db fix: disable contact form submit if email is not valid 2025-12-13 18:57:28 +01:00
sead 85d7f4c61c feat: add disabled prop to SolidButton 2025-12-13 18:56:57 +01:00
sead a95d63d12e Merge pull request 'Fix contact form' (#9) from fixes-13122025-2 into main
publish / Build-and-publish (push) Failing after 1m14s
Reviewed-on: #9
2025-12-13 17:17:22 +00:00
sead 8434c781d6 fix: contact form 2025-12-13 17:53:11 +01:00
sead 6537e3aee1 chore: remove unused variables 2025-12-13 17:45:04 +01:00
sead f17ab261ce fix: add new tab to more external links 2025-12-13 17:44:25 +01:00
sead 67eabbe55f revert: contact form fix
This reverts commit dc0db8e8f2. Wrong form.
2025-12-13 17:43:07 +01:00
sead 0ed1caa651 Merge pull request 'Update contact form, and open external links in new tab' (#8) from fixes-13122025 into main
publish / Build-and-publish (push) Failing after 1m19s
Reviewed-on: #8
2025-12-13 16:21:27 +00:00
sead e566abab23 fix: open ext. links in new tab
Closes #7
2025-12-13 17:07:40 +01:00
sead 148c1b66a7 fix(build): disable npm install scripts 2025-12-13 16:55:03 +01:00
sead dc0db8e8f2 fix: contact form
Disable gmail addresses.
2025-12-13 16:53:26 +01:00
Yury d2509decd0 Merge pull request 'chore(CI): fixed Publish step' (#4) from publish-fix into main
publish / Build-and-publish (push) Successful in 3m4s
Reviewed-on: #4
2024-06-20 06:27:38 +00:00
Yury 87ff818bf3 chore(CI): fixed Publish step 2024-06-20 09:25:25 +03:00
allan d3b1e4ec95 Merge pull request 'fix: fixed build and resolved conflicting dependencies' (#3) from contact-fix into main
publish / Build-and-publish (push) Failing after 3m5s
Reviewed-on: #3
Reviewed-by: mihajlo <mihajlo@4gl.io>
2024-06-19 14:01:01 +00:00
allan 06d09aa91c Merge branch 'main' into contact-fix 2024-06-19 13:41:25 +00:00