making a note here to check this out.
🌠 Joke plugins, hands-free notes, & table improvements
Tasks styling, a plugin for day trading, multi-column embeds & callouts, and a method for taking notes about people. ⌘ Read more
** week notes **
Some things of note, links mostly:
First and foremost, I found a suitable pinboard replacement in link hut! Shout outs to my buddy Bruno for the tip.
Here’s a bookmarklet I wrote to make it a bit more ergonomic for how I like to roll,
javascript
javascript:(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
<span class="hljs-keyword">const</span> tags = prompt(<span class="hljs-string">'A space separated list of tags.' ... ⌘ [Read more](https://eli.li/2023/03/31/week-notes)
🌠 Improved Community Updates & Task Searching
New folder plugins, LLM powered plugins, plugin APIs, improved audio notes support, and some neat new public vaults. ⌘ Read more
🌠 Bookkeeping, Eisenhower Matrixes, & Pretty Canvas Cards
An interview with Obsidian’s new CEO, workflow tips, and a personal note about the Silicon Valley bank run (I’m fine; I hope you are too). ⌘ Read more
💚 Updated notes, Discord server, & an anthology
Access an RSS feed of interesting (and occasionally annotated) articles, check out some of my very short stories, and more benefits for financial supporters. ⌘ Read more
[Updated] Feedback Form Wizard: improved PHP 8 (8.0, 8.1, etc) compatibility
The script generated by the
Feedback Form Wizard has been updated
to improve compatibility with PHP 8 (eg, 8.0, 8.1, etc). Note: if you have generated your form and script
after 1 January 2023, you already have this version (ver 3.2.0). ⌘ Read more
** week notes **
I’ve been experimenting. I’ve been concocting a recipe for vegan kugel, and rediscovering little features and edges of my website I’d forgotten I baked in. Like chocolate chips hidden in an oatmeal raisin cookie.
One chip most recently re-discovered: support for per-page custom styles?! All I gotta do is include an optional bit of meta data, bespoke-css, that points to a style sheet. I may play with this feature more. I do love myself some css. I can tell exactly when in my life I added this feature because th … ⌘ Read more
🌠Gems of the Year & RSS still isn’t dead
Auto-close on Mac, generate TTRPG content, & improve your audio notes transcription ⌘ Read more
Lindypress Bug Fix
Just a brief note that for the past couple of days, you might’ve been unable to buy books on LindyPress.net if you are in the United States, Canada or Australia (which is a lot of you). This has now been fixed, so you can place your orders now!
The issue was that there was a silent API update that kept addresses from validating states and provinces. Note that if your order placed, it’s all okay, this is only for people for whom the site would not let place an order.
… ⌘ Read more
Lindypress Bug Fix
Just a brief note that for the past couple of days, you might’ve been unable to buy books on LindyPress.net if you are in the United States, Canada or Australia (which is a lot of you). This has now been fixed, so you can place your orders now!
The issue was that there was a silent API update that kept addresses from validating states and provinces. Note that if your order placed, it’s all okay, this is only for people for whom the site would not let place an order.
… ⌘ Read more
JMP: SMS Account Verification
Some apps and services (but not JMP!) require an SMS verification code in order to create a new account. (Note that this is different from using SMS for authentication; which is a bad idea since SMS can be easily intercepted, are not encrypted in transit, and are v … ⌘ Read more
blog: short note about why you should code it yourself
** Accessibility updates **
I’m feeling pretty chuffed! Last week I wrote about my intention to make this website more accessible. My motivations were many-fold, but, primarily, mostly shame. I’ve worked as an accessibility specialist in the past, and now spend a bunch of my days at work looking for ways to make public infrastructure online more accessible. It seemed fitting to at least make sure the little bit I contribute to the web here is also accessible.
I thought it was going t … ⌘ Read more
🌠 Natural Language Search & a New CEO
Improved flashcards in spaced repetition, guides and tools for spacial thinking, and different perspectives on note taking and naming. ⌘ Read more
🌲Building a habit of checking in with the bigger picture
On the importance of knowing when to sit down and dive deep into your notes… so you don’t get overwhelmed always keeping them neat. ⌘ Read more
In reply to: Oatmeal - week notes
The worst kind of blogging is blogging about blogging, so, I’ll keep this blogging about blogging short!
I’ve made some minor updates to the design of the website that have improved it’s usability a wee bit, and are a step in the right direction toward upping my accessibility game. The major remaining accessibility issues are around color contrast and some structura … ⌘ Read more
** week notes **
It got a wee bit cold here in Maine this weekend. It was thankfully uneventful for us. We hung around inside and watched it get real cold outside. Our home faired pretty well, too. Honestly pleasantly surprised about that!
We picked this weekend to go all in on potty training — pantsless days, treats, rousing bouts of encouragement sung, and a lot of spot cleaning. Fueled by hubris, I thought we had this potty trainin … ⌘ Read more
🌠 More LLM Integrations & Sample Notes for Cooking, Workouts, etc.
Obsidian’s nominated for a Golden Kitty in Productivity, there’s a new RGB theme. Plus, fancy new dataview & templater scripts for day planning & YouTube metadata. ⌘ Read more
(Communiqué) L’énergie du désespoir
Suite à la demande d’un lecteur assidu, je reproduis ici la tribune, déjà publiée vendredi par Olivier Delamarche et Nicolas Meilhan, adressée par les acteurs des territoire de l’Ain, de Savoie et Haute Savoie à l’adresse du Président Macron au sujet de la crise énergétique qui les frappe de plein fouet. Note à mes lecteurs […] ⌘ Read more
Etymonline
⌘ Read more
Etymonline
⌘ Read more
I bought my Galaxy Note 8 five years go today. This is by far the most use I’ve gotten out of one smartphone!
🌠 Whiteboard Canvas for Mindmaps, & a personal note
Canvas showcases and a holiday hiatus. ⌘ Read more
Snikket: Notes on the F-Droid security warning
Snikket Android users who installed the app via F-Droid may receive a warning
from F-Droid telling them that the app has a vulnerability and that they
“recommend uninstalling immediately”. First of all - don’t panic! This is a
over-simplified generic warning that is scary, but the actual situation is
not quite so scary and has an explanation. Here goes…
When an app is developed and ready for release, it must be compiled and built,
to produce the fina … ⌘ Read more
wrote guiding notes for the qiudanz tag exploration that we will be showcasing on the Hybrid Live Coding Interfaces 2022 workshop. | gemini://compudanzas.net/qiudanz_tag.gmi
🌠 Weekly Reviews, Zen Mode, & Aggregation
System commands & tips for making notes useful. ⌘ Read more
🌲Using Obsidian for Teaching?
For the most part, my teaching notes are very simple and low-tech. But Obsidian was helpful when I was allowed to use it. ⌘ Read more
Jérôme Poisson: Libervia progress note 2022-W45
Hello, it’s time for a long overdue progress note.
I’ll talk here about the work made on ActivityPub (AP) gateway and on end-to-end encryption around pubsub.
Oh, and if everything goes well, this blog post should be accessible from XMPP and ActivityPub (and HTTP and ATOM feed), using the same identifier goffi@goffi.org.
The work made on the AP gateway has been possible thanks to a NLnet/NGI0 grant (w … ⌘ Read more
🌠 Doom! & Scrollable Daily Notes
A request for python devs to help out with the community hub vault, a new comprehensive tutorial for beginners, & discussion of YAML APIs. ⌘ Read more
** Occasional notes **
If they aren’t weekly, I guess they’re occasional?
3rd repair procedure to fix brain bleed was a success. I have a few more scans and follow ups, but, knock wood I think I’m through at this point.
I’ve spent about a week laying low and taking it easy navigating some wild pain, but that is subsiding now. I watched a bunch of stuff. It was a nice change of pace. I don’t typically watch much television or many movies. Stand outs (all things I revisited) include:
- Michael Clayton
- Point Break, the o … ⌘ Read more
One-Size-Fits-All? How to Take Big Notes and How to Take Small Notes
Introduction[1]Historically, the length of media content has often been the result of technological restrictions. The SMS, for instance, is restricted to 160 characters due to the underlying GSM-7 protocol. Consequently, a change in the technological conditions can affect the l … ⌘ Read more
I started a notes section of my website. It’s for shorter, less formal posts. https://mckinley.cc/notes/20221101-yet-another-blog.html
JMP: SMS Account Verification
Some apps and services (but not JMP!) require an SMS verification code in order to create a new account. (Note that this is different from using SMS for authentication; which is a bad idea since SMS can be easily intercepted, are not encrypted in transit, and are v … ⌘ Read more
🌠 Improved note relationship sensing & Catppuccinos!
Kepano shared some thoughts about the AI-assisted text generation plugins, there’s a new plugin for RTL/LTR language detection, plus: improved OCR ⌘ Read more
🌠 Obsidian Out of Beta, Obsidian October Extended
Table generators, advanced project management options, & a guide to Charles Darwin’s note taking method. ⌘ Read more
JMP: SMS Account Verification
Some apps and services (but not JMP!) require an SMS verification code in order to create a new account. (Note that this is different from using SMS for authentication; which is a bad idea since SMS can be easily intercepted, are not encrypted in transit, and are v … ⌘ Read more
🌲The Konik Method for Making Useful Notes
How to make notes for reference, not self-improvement: A practical guide to messy notes meant to be used, not admired. ⌘ Read more
🌠 Pandoc, Happiness, & Dataview Tricks
Weekly notes, Eisenhower matrixes, and my new job with Readwise. ⌘ Read more
just wrote a note in my code float* output; /* to write output to physical device, or just the next lower device in the abstraction tower */ feeling pretty proud of that LoL #coding #klebe
** week notes **
Am I allowed to call them“week notes” if I don’t do them weekly?
I went in for what was supposed to be my final brain scan, a diagnostic angiogram (don’t look that up). The good news is that the repair has officially cured my brain bleed! The bad news is that they saw another vessel that looks primed to bleed; I’m due for another repair procedure sometime in October. I’m pretty bummed to not be done with this ordeal, but trying to remain optimistic that this new one was caught before it bled and because the surgeon s … ⌘ Read more
#TIL pencil writing is more permanent and waterproof than most ink. good news, I love pencils! #eco #notes
Une presse française lâche et paresseuse
Ah, finalement, qu’il est doux d’être journaliste en France dans un journal de révérence ! Jadis, c’était un travail fatigant, voire stressant et parfois même risqué : il fallait aller chercher l’information directement sur le terrain et la corroborer le carnet de notes à la main. Certains événements pouvaient impliquer de mettre sa vie en danger ; et […] ⌘ Read more
🌠 Visual Notetaking Guides & Demo Vaults for Managers
You can now push notes to Readwise’s Reader app for improved spaced repetition review. You can also comment on the Roundup! ⌘ Read more
(cont.)
Just to give some context on some of the components around the code structure.. I wrote this up around an earlier version of aggregate code. This generic bit simplifies things by removing the need of the Crud functions for each aggregate.
Domain ObjectsA domain object can be used as an aggregate by adding the event.AggregateRoot struct and finish implementing event.Aggregate. The AggregateRoot implements logic for adding events after they are either Raised by a command or Appended by the eventstore Load or service ApplyFn methods. It also tracks the uncommitted events that are saved using the eventstore Save method.
type User struct {
Identity string ```json:"identity"`
CreatedAt time.Time
event.AggregateRoot
}
// StreamID for the aggregate when stored or loaded from ES.
func (a *User) StreamID() string {
return "user-" + a.Identity
}
// ApplyEvent to the aggregate state.
func (a *User) ApplyEvent(lis ...event.Event) {
for _, e := range lis {
switch e := e.(type) {
case *UserCreated:
a.Identity = e.Identity
a.CreatedAt = e.EventMeta().CreatedDate
/* ... */
}
}
}
Events
Events are applied to the aggregate. They are defined by adding the event.Meta and implementing the getter/setters for event.Event
type UserCreated struct {
eventMeta event.Meta
Identity string
}
func (c *UserCreated) EventMeta() (m event.Meta) {
if c != nil {
m = c.eventMeta
}
return m
}
func (c *UserCreated) SetEventMeta(m event.Meta) {
if c != nil {
c.eventMeta = m
}
}
Reading Events from EventStore
With a domain object that implements the event.Aggregate the event store client can load events and apply them using the Load(ctx, agg) method.
// GetUser populates an user from event store.
func (rw *User) GetUser(ctx context.Context, userID string) (*domain.User, error) {
user := &domain.User{Identity: userID}
err := rw.es.Load(ctx, user)
if err != nil {
if err != nil {
if errors.Is(err, eventstore.ErrStreamNotFound) {
return user, ErrNotFound
}
return user, err
}
return nil, err
}
return user, err
}
OnX Commands
An OnX command will validate the state of the domain object can have the command performed on it. If it can be applied it raises the event using event.Raise() Otherwise it returns an error.
// OnCreate raises an UserCreated event to create the user.
// Note: The handler will check that the user does not already exsist.
func (a *User) OnCreate(identity string) error {
event.Raise(a, &UserCreated{Identity: identity})
return nil
}
// OnScored will attempt to score a task.
// If the task is not in a Created state it will fail.
func (a *Task) OnScored(taskID string, score int64, attributes Attributes) error {
if a.State != TaskStateCreated {
return fmt.Errorf("task expected created, got %s", a.State)
}
event.Raise(a, &TaskScored{TaskID: taskID, Attributes: attributes, Score: score})
return nil
}
Crud Operations for OnX Commands
The following functions in the aggregate service can be used to perform creation and updating of aggregates. The Update function will ensure the aggregate exists, where the Create is intended for non-existent aggregates. These can probably be combined into one function.
// Create is used when the stream does not yet exist.
func (rw *User) Create(
ctx context.Context,
identity string,
fn func(*domain.User) error,
) (*domain.User, error) {
session, err := rw.GetUser(ctx, identity)
if err != nil && !errors.Is(err, ErrNotFound) {
return nil, err
}
if err = fn(session); err != nil {
return nil, err
}
_, err = rw.es.Save(ctx, session)
return session, err
}
// Update is used when the stream already exists.
func (rw *User) Update(
ctx context.Context,
identity string,
fn func(*domain.User) error,
) (*domain.User, error) {
session, err := rw.GetUser(ctx, identity)
if err != nil {
return nil, err
}
if err = fn(session); err != nil {
return nil, err
}
_, err = rw.es.Save(ctx, session)
return session, err
}
Command palette and commands for managing a graph of notes: https://merveilles.town/@akkartik/108766067153506592
Preview of a note-taking app I’ve been working on: https://archive.org/details/akkartik-pensieve-2022-07-27 (video; 5 mins)