Skip to content

Instantly share code, notes, and snippets.

View line-o's full-sized avatar
🌱
weeding the garden

Juri Leino line-o

🌱
weeding the garden
View GitHub Profile
@line-o
line-o / expected-output.txt
Last active January 19, 2023 14:47
fun with permissions
0600 (.rw-------) -> 0700 (.rwx------)
0755 (.rwxr-xr-x) -> 0755 (.rwxr-xr-x)
0660 (.rw-rw----) -> 0770 (.rwxrwx---)
0664 (.rw-rw-r--) -> 0775 (.rwxrwxr-x)
0666 (.rw-rw-rw-) -> 0777 (.rwxrwxrwx)
0622 (.rw--w--w-) -> 0733 (.rwx-wx-wx)
0777 (.rwxrwxrwx) -> 0777 (.rwxrwxrwx)
@line-o
line-o / safe-ebv.xq
Last active March 2, 2023 19:23
A safe way to evaluate the effective boolean value of a sequence of items -> anything that cannot be evaluated is false
xquery version "3.1";
declare function local:safe-effective-boolean-value-if (
$result as item()*
) as xs:boolean {
try {
if ($result)
then true()
else false()
} catch err:FORG0006 {
@line-o
line-o / latest-news.html
Last active June 19, 2023 14:53
Prerender HTML with eXist-db's templating library
<main class="news-list__latest">
<ul>
<li data-template="templates:each" data-template-from="articles" data-template-to="article">
<a data-template="pr:article-link"/>
</li>
</ul>
</main>
@line-o
line-o / update-all.xq
Last active September 8, 2022 14:44
Update all packages were newer versions are available in the package repository
xquery version "3.1";
import module namespace semver = "http://exist-db.org/xquery/semver";
declare namespace http="http://expath.org/ns/http-client";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "json";
declare option output:media-type "application/json";
@line-o
line-o / flatten-one.xq
Last active August 11, 2022 21:14
array:flatten is recursive
declare function local:flatten-one($nested as array(*)) as array(*) {
array:fold-left($nested, [], function ($flattened as array(*), $next as item()*) as array(*) {
typeswitch($next)
case array(*) return array:join(($flattened, $next))
default return array:append($flattened, $next)
})
};
local:flatten-one([[1], 3, map{}, [1, [3,4]], ()])
@line-o
line-o / display.js
Created May 22, 2022 10:57
GPN20 display hack
let tx = document.getElementById("text-input")
let h = 2
let state = Array(24).fill([h, '_'])
let c = ['/', '_', '\\']
let interval
function step () {
let direction = Math.floor(Math.random() * 2.9999) - 1
let d = Math.min(3, Math.max(0, h+direction))
state.shift()
@line-o
line-o / chmod-recursive.xq
Last active November 20, 2022 06:06 — forked from joewiz/chmod-recursive.xq
[WIP] change user, group, mode on resources and collections in eXist-db recursively
xquery version "3.1";
import module namespace sm="http://exist-db.org/xquery/securitymanager";
import module namespace xmldb="http://exist-db.org/xquery/xmldb";
(: these variables need to be set by the caller :)
declare variable $collection as xs:string external;
declare variable $group as xs:string? external;
declare variable $user as xs:string? external;
declare variable $mode as xs:string external;
@line-o
line-o / hex2int.xq
Last active August 8, 2021 20:16
Convert hex string to xs:integer
xquery version "3.1";
(:
: Parts of gist were taken from by https://mathling.com/code/art/core/utilities.xqy
: Copyright Mary Holstege 2020-2021
: Licensed under CC-BY (https://creativecommons.org/licenses/by/4.0/)
:
: Parts are from the xbow library https://github.com/line-o/xbow
: by Juri Leino
: Licensed under MIT
xquery version "3.1";
(:
two possible solutions to @cassidoo's interview question from:
https://buttondown.email/cassidoo/archive/it-is-absolutely-imperative-that-every-human/
:)
declare function local:product ($result, $next) { $result * $next };
declare function local:grouping ($a, $b, $c) {
let $grouped :=
@line-o
line-o / current-winner.xq
Last active May 19, 2021 21:31
retrieve all XPaths to nodes within an element
(: thanks to Reece H. Dunn for hinting at the fn:path function :)
//node()!(.,@*)!path()