Skip to content

Instantly share code, notes, and snippets.

View James-E-A's full-sized avatar

James E. A. James-E-A

View GitHub Profile
@James-E-A
James-E-A / util_web.fragment.ex
Last active January 17, 2025 16:42
Elixir parse HTML datetime form input values
defmodule FooWeb.Util do
# https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-local-date-and-time-string
@spec parse_web_time!(String.t()) :: NaiveDateTime.t()
@spec parse_web_time!(String.t(), Calendar.time_zone()) :: DateTime.t()
@spec parse_web_time!(String.t(), Calendar.time_zone(), Calendar.time_zone_database()) :: DateTime.t()
def parse_web_time!(<<s::binary-size(16)>>) do
Timex.parse!(s, "{YYYY}-{0M}-{0D}T{h24}:{m}")
end
def parse_web_time!(<<s::binary-size(19)>>) do
Timex.parse!(s, "{YYYY}-{0M}-{0D}T{h24}:{m}:{s}")
@James-E-A
James-E-A / model.fragment.ex
Last active January 13, 2025 18:48
Elixir actor GenServer pattern
use GenServer
def act(action, state, actor \\ nil)
@impl true
def handle_call({:act, actor, action}, _from, state) do
case act(action, state, actor) do
:ok ->
# call succeeded; no specific reply; state unchanged
{:reply, :ok, state}
@James-E-A
James-E-A / core_components.ex
Last active January 6, 2025 01:15
Elixir "core components" with tailwind prefix
defmodule FooWeb.CoreComponents do
@moduledoc """
Provides core UI components.
At first glance, this module may seem daunting, but its goal is to provide
core building blocks for your application, such as modals, tables, and
forms. The components consist mostly of markup and are well-documented
with doc strings and declarative assigns. You may customize and style
them in any way you want, based on your application growth and needs.
@James-E-A
James-E-A / application.ex
Last active January 27, 2025 00:38
Elixir lazy upsert storing SECRET_KEY_BASE in Ecto
defmodule Foo.Application do
@moduledoc false
use Application
@impl true
def start(_type, _args) do
children = [
FooWeb.Telemetry,
Foo.Repo,
@James-E-A
James-E-A / load_oceanView.m
Last active December 12, 2024 01:48
MATLAB load OceanView TXT files
function [intensities, wavelengths, t] = load_oceanView(filesGlobString)
%load_oceanVew
% - output is INSTANTLY ready to be graphed
% via surf(t, wavelengths, intensities)
% - does NOT fail on data that's non-uniform in time
% e.g. when OceanView malfunctions
files = matlab.buildtool.io.FileCollection.fromPaths( ...
replace(filesGlobString,'/',filesep));
paths = files.paths;
@James-E-A
James-E-A / util.fragment.ex
Last active January 14, 2025 17:59
Elixir DynamicSupervisor start child if it doesn't already exist
defmodule Foo.Util do
@doc """
Exactly like [DynamicSupervisor.start_child/2](https://hexdocs.pm/elixir/1.17/DynamicSupervisor.html#start_child/2)
except that the "id" field is not [disregarded](https://hexdocs.pm/elixir/1.17/Supervisor.html#module-child-specification),
but instead used as a unique key.
Only works with simple GenServer supervisees for now.
Does NOT work with remote DynamicSupervor or distributed systems for now.
@James-E-A
James-E-A / temporal_settlement.py
Last active December 30, 2024 21:05
Beancount clear different legs of transaction on different dates
from contextlib import contextmanager
from datetime import date, timedelta
from functools import reduce
from gettext import dgettext
import re
import traceback
from types import SimpleNamespace
import uuid
from beancount.core.account import join as account_join, leaf, root, sans_root
from contextlib import contextmanager
import re
import traceback
from beancount.core.data import *
from beancount.core.prices import get_price, build_price_map
from beancount.plugins.implicit_prices import ImplicitPriceError as ImplicitPriceError_t
"""Beancount plugin to make certain prices transitive
@James-E-A
James-E-A / resource_ctx.mjs
Last active November 19, 2024 18:32
Javascript safe "Python-with like" pattern
/* pending https://github.com/tc39/proposal-explicit-resource-management */
/* Usage:
let result = await use_resource({
async acquire(url) {
// "__enter__"
const e = document.createElement('iframe');
e.src = url;
e.hidden = true;
@James-E-A
James-E-A / simple_tkinter_threaded_helper.py
Last active January 30, 2025 15:38
simple tkinter multithreaded comunication
import queue
import logging
from tkinter import TclError
import weakref
def data_bind(widget, callback, *, pass_tk_event=False, timeout=0.0, catastrophic_timeout=30.0):
"""Foolproof, thread-safe workaround for https://github.com/python/cpython/issues/47655
https://tkdocs.com/tutorial/eventloop.html
> If you need to communicate from another thread to the thread running