The bmannconsulting.com website

weekend hacking

+17 -4
_includes/head.html
···
<meta property="og:title" content="{{ site.title }}">
<meta property="og:type" content="website">
{% endif %}
-
-
{% if page.date %}
+
+
{% if page.published %}
+
<link rel="canonical" href="{{ page.link }}" />
+
<meta property="article:published_time" content="{{ page.published | date_to_xmlschema }}">
+
<meta property="article:author" content="{{ page.author }}">
+
{% elsif page.date %}
<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
<meta property="article:author" content="{{ site.url }}/">
{% endif %}
···
<meta property="fc:frame:image:aspect_ratio" content="1:1">
{% endif %}
-
<!-- Open Frames -->
+
{% if page.frame %}
+
<!-- Open Frames Custom -->
+
<meta property="fc:frame" content="vNext">
+
{% if page.frame.button1 %}
+
<meta property="fc:frame:button:1" content="{{ page.frame.button1.label }}">
+
<meta property="fc:frame:button:1:action" content="{{ page.frame.button1.action }}">
+
<meta property="fc:frame:button:1:target" content="{{ page.frame.button1.target }}">
+
{% endif %}
+
{% else %}
+
<!-- Open Frames Default -->
<meta property="fc:frame" content="vNext">
<meta property="fc:frame:button:1" content="🌱 Home">
<meta property="fc:frame:button:1:action" content="link">
···
<meta property="fc:frame:button:3" content="💬 Drips">
<meta property="fc:frame:button:3:action" content="link">
<meta property="fc:frame:button:3:target" content="https://www.drips.network/app/bmann.eth">
-
+
{% endif %}
<title>
{% if page.id == "home" %}
{{ site.title }}
+53
_journals/2024-04-21_1024.md
···
+
---
+
title: "April 21st, 2024"
+
date: "2024-04-21, 10:24:06 -07:00"
+
section: journal
+
aliases: []
+
---
+
Going through some open tabs and made a bunch of updates. Now took myself to the coffee shop to work on some blog coding.
+
+
**Custom Frames Support**
+
+
I added [[Farcaster Frames]] support to the site, using just default settings similar to what is already inserted into page headers for [[OpenGraph]].
+
+
Using the [[Ghost]] page as an example, I'm modifying the [head template](https://github.com/bmann/bmcgarden/blob/archivetrim/_includes/head.html#L45) so that I can put in custom frame data per notes page.
+
+
```yaml
+
frame:
+
image: /assets/2024/ghost_logo_black.jpg
+
image-aspect-ratio: "1:1"
+
button2:
+
label: "Github"
+
action: "link"
+
target: https://github.com/TryGhost/Ghost
+
button1:
+
label: "Home"
+
action: "link"
+
target: "https://ghost.org"
+
```
+
+
[[Obsidian]] doesn't support these kind of nested header properties, so I need to do it in source code view.
+
+
Yes, there would be some way to create this in a way that loops through a button array.
+
+
**Canonical Link**
+
+
I take notes on articles. I keep a local copy of the article and capture when it was published, who the author was, and usually clip some quotes and make some comments of my own.
+
+
I want people to go read the original! And I don't want to "steal" search traffic or attention from the original. In fact, I want to boost it! Reading [Wikipedia on the canonical link](https://en.wikipedia.org/wiki/Canonical_link_element), this not really what it's meant for.
+
+
Regardless, adding some header meta data. This is the part of thinking for [[Community Search Engines]] that has to happen.
+
+
**Articles Page**
+
+
Turns out I had an unfinished [articles](/articles/) page! Fixed a couple of things with it, including getting year sorting done correctly. Design of it still needs a lot of work.
+
+
**Code Page**
+
+
Let's make a page with all the notes that have a code repository / git link! Here's [code](/code/).
+
+
Oh fun, of course I have some people entries, and if I have their Github profile filled out, they'll show up on this page.
+
+
There aren't that many entries on here because I have more in the old Logseq notes with [github](https://notes.bmannconsulting.com/#/page/github) and [git](https://notes.bmannconsulting.com/#/page/git) properties.
+
+
And separately, I'd like to capture my [1.4K starred repos on Github](https://github.com/bmann?tab=stars). The "signal" of me adding a notes page is stronger than "merely" starring on Github, but it should at least contribute to a personal search index (which again leads into [[Community Search Engines]] too).
+7 -3
_layouts/note.html
···
{% if page.link %}
<strong><a href="{{ page.link }}">{{ page.link | remove: "https://" | truncate: 42 }}</a></strong>{% if page.author %}, by {{ page.author }}{% endif %}{% if page.published %}, {{ page.published | date: "%B %-d, %Y" }}{% endif %}<br />
{% endif %}
-
{% if page.github %}
-
<strong>Github: <a href="{{ page.github }}">@{{ page.github | remove: "https://github.com/" }}</a></strong><br />
-
{% endif %}
+
{% unless page.published %}
<time datetime="{{ page.last_modified_at | date_to_xmlschema }}">
Last updated on {{ page.last_modified_at | date: "%B %-d, %Y" }}
</time>
{% endunless %}
+
+
<ul>
+
{% if page.github %}
+
<li><strong>github:</strong>&nbsp;<a href="{{ page.github }}">@{{ page.github | remove: "https://github.com/" }}</a></li>
+
{% endif %}
+
</ul>
</div>
<div id="notes-entry-container">
+1
_notes/Dark Forest and Cozy Web.md
···
published: 2020-02-08
author:
- Maggie Appleton
+
image: /assets/2024/darkforest-cozyweb-maggie-appleton.png
---
Maggie Appleton’s illustration of this term is amazing - visit her article to check it out.
+19
_notes/Farcaster Frames.md
···
+
---
+
link: https://docs.farcaster.xyz/reference/frames/spec
+
tags:
+
- Farcaster
+
- specification
+
- frames
+
---
+
> Frames are a standard for creating interactive and authenticated experiences on Farcaster, embeddable in any Farcaster client.
+
>
+
> A frame is a set of `<meta>` tags returned within the `<head>` of an HTML page. If a page contains all required frame properties, Farcaster apps will render the page as a frame. The frame `<meta>` tags extend the [[OpenGraph|OpenGraph protocol]].
+
>
+
> Frames can be linked together to create dynamic applications embedded inside casts.
+
+
Inspired by [[David Furlough]]'s work on Mod, the Warpcast team created this Frames spec for the [[Farcaster]] protocol directly. David is working on [[Open Frames]] for use in Farcaster and beyond.
+
+
## Warpcast Testing Tools
+
+
* [Preview a frame](https://warpcast.com/~/developers/embeds) without having to cast
+
* [Frame validator](https://warpcast.com/~/developers/frames) to check that it's formatted correctly
+5 -6
_notes/Farcaster.md
···
> Since Farcaster is public and decentralized, anyone can build an app to read and write data. Users own their accounts and relationships with other users and are free to move between different apps.
[[Warpcast]] is the original app built and run by the team that designed the Farcaster protocol.
-
## Frames
-
<https://warpcast.notion.site/Farcaster-Frames-4bd47fe97dc74a42a48d3a234636d8c5>
+
Frames extend the [[OpenGraph]] standard and turn static embeds into interactive experiences.
-
Frames extend the [[OpenGraph]] standard and turn static embeds into interactive experiences. The diagram below shows the difference between a standard OG and a Frame OG inside Warpcast.
-
-
### Creating the initial frame
+
Example:
```html
<meta property="fc:frame" content="vNext" />
···
<meta property="fc:frame:button:4" content="Blue" />
```
-
If you share the URL in a cast, it will show up as a frame. To test that the frame works without casting, try the [Warpcast Embed Tools](https://warpcast.com/~/developers/embeds).
+
If you share the URL of a page in a cast that has these meta tags, it will show up as a frame.
+
+
See [[Farcaster Frames]] and [[Open Frames]]
+7
_notes/Feedback on Federating Ghost.md
···
+
---
+
image: /assets/2024/ghost_logo_black.jpg
+
---
A [survey](https://tally.so/r/m67X4P) asking for feedback on Federating [[Ghost]]
> ActivityPub support is one of our [most requested features](https://forum.ghost.org/t/federate-over-activitypub/1989) of all time, and so we're currently taking some time to think about how this could work inside Ghost.
···
I would interact with more Ghost sites in the "comments" if I didn't have to create new accounts all the time!
I already recommend [[Ghost]] and could now consider using it for use cases that look more like community servers use cases.
+
+
---
+
+
I linked to [[2024-04-21_0804|Matthew Bogart's write up answering this survey]].
+12 -2
_notes/Ghost.md
···
- app
link: https://ghost.org
github: https://github.com/TryGhost/Ghost
+
frame:
+
image: /assets/2024/ghost_logo_black.jpg
+
image-aspect-ratio: "1:1"
+
button2:
+
label: "Github"
+
action: "link"
+
target: https://github.com/TryGhost/Ghost
+
button1:
+
label: "Home"
+
action: "link"
+
target: "https://ghost.org"
+
---
-
GitHub <https://github.com/TryGhost/Ghost>
-
A blogging and membership based newsletter app. [[MIT]] licensed open source.
Maintained by the [non-profit Ghost Foundation](https://ghost.org/about/), who also run a paid managed hosting service at <http://ghost.org>.
+1
_notes/How Algolia uses Electron to improve internal productivity.md
···
- networkedorgs
- Algolia
- orgdesign
+
- article
published: 2016-10-26
author:
- Algolia
+21
_notes/Open Frames.md
···
+
---
+
github: https://github.com/open-frames
+
---
+
An open specification for
+
+
From the [specification repo](https://github.com/open-frames/standard):
+
+
> Since the launch of [[Farcaster Frames]], we’ve seen a number of protocols work to add Frames support independently. The original Frames spec was designed for Farcaster and wasn’t set up to handle interactions from different types of applications with unique capabilities. Open Frames is a lightweight extension to the Frames spec to help coordinate the many new applications and protocols adopting Frames.
+
>
+
> Open Frames is an initiative with the following goals:
+
>
+
> 1. Allow Frames developers to support interactions from different types of clients
+
> 2. Don’t screw up the best thing about Frames: how easy it is to build on
+
>
+
> We expect the Open Frames specification to evolve, both through improvements to the Farcaster Specification and through the needs of Open Frames applications with different capabilities.
+
+
## About
+
+
Frames are an interactive social object based around adding specific [[OpenGraph]] tags to any web page which are then rendered as an interactive "frame" made of images, text input, and some action buttons that are rendered in the host client application.
+
+
The input of a Frame is nothing more than a link, e.g. `example.com/some/frame/path`, which makes them a little bit like an [[unfurl]] or [[OEmbed]] that a number of applications already support.
+11
_notes/OpenGraph.md
···
+
---
+
link: https://ogp.me/
+
tags:
+
- specification
+
- metadata
+
aliases:
+
- OGP
+
---
+
> The [Open Graph protocol](https://ogp.me/) enables any web page to become a rich object in a social graph. For instance, this is used on Facebook to allow any web page to have the same functionality as any other object on Facebook.
+
>
+
> While many different technologies and schemas exist and could be combined together, there isn't a single technology which provides enough information to richly represent any web page within the social graph. The Open Graph protocol builds on these existing technologies and gives developers one thing to implement. Developer simplicity is a key goal of the Open Graph protocol which has informed many of [the technical design decisions](https://www.scribd.com/doc/30715288/The-Open-Graph-Protocol-Design-Decisions).
+4 -12
_pages/articles.html
···
---
<p style="padding: 1.5em 1em; background: #f5f7ff; border-radius: 25px;">
-
Articles are important long reads where I have local comments and quotes I refer back to.
+
Articles are important long reads where I have local comments and quotes I refer back to. My general rule is that if I mention an article to two different people, I should probably make a local page for it.
</p>
-
-
-
<main>
-
{% assign postsByYear =
-
site.notes | group_by_exp:"post", "post.published | date: '%Y'" %}
-
+
{% assign postsByYear = site.notes | group_by_exp:"post", "post.published | date: '%Y'" %}
+
{% assign postsByYear = postsByYear | sort: "name" | reverse %}
+
{% for year in postsByYear %}
<h3 id="{{ year.name }}">{{ year.name }}</h3>
<ul>
···
{% unless post.tags contains "article" %}
{% break %}
{% endunless %}
-
{% unless post.section == 'journal' %}
<li id="date-content" style="padding-bottom: 0.6em; list-style: none;">Source: <a href="{{ post.link }}">{{ post.title }}</a> by {{ post.author }} Local: <a href="{{ post.url }}" class="internal-link">#</a></li>
-
{% endunless %}
{% endfor %}
</ul>
-
{% if year.name == '2012' %}
-
{% break %}
-
{% endif %}
{% endfor %}
<br/>
+25
_pages/code.html
···
+
---
+
layout: page
+
title: Code Repositories 💾
+
permalink: /code/
+
---
+
+
<p style="padding: 1.5em 1em; background: #f5f7ff; border-radius: 25px;">
+
Notes on the site with a link to a code repository. Usually refers to apps and other open source code.
+
</p>
+
<main>
+
{% assign codenotes = site.notes %}
+
<ul>
+
{% for post in site.notes %}
+
{% if post.github %}
+
<li><a href="{{ post.url }}">{{ post.title }}</a> - <a href="{{ post.github }}">@{{ post.github | remove: "https://github.com/" }}</a>
+
</li>
+
{% elsif post.git %}
+
<li><a href="{{ post.url }}">{{ post.title }}</a> - <a href="{{ post.git }}">{{ post.git | remove: "https://" }}</a>
+
</li>
+
{% endif %}
+
{% endfor %}
+
</ul>
+
<br/>
+
<br/>
+
</main>
assets/2024/darkforest-cozyweb-maggie-appleton.png

This is a binary file and will not be displayed.

assets/2024/ghost_logo_black.jpg

This is a binary file and will not be displayed.