GitHub - aca/emmet-ls: Emmet support based on LSP.
Emmet support based on LSP. Contribute to aca/emmet-ls development by creating an account on GitHub.
GitHub · github.com [1]
This is the greatest nvim emmet plugin I have tried. In the past I had tried the vim plugin a few times and just could not get a good flow with the keybindings and found it confusing for my occasional use. emmet-ls just uses lsp-completion, so its the same flow as other completions.
You can try it out by installing with :Mason
config # [2]
local lspconfig = require('lspconfig')
local configs = require('lspconfig/configs')
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.snippetSupport = true
lspconfig.emmet_ls.setup({
-- on_attach = on_attach,
capabilities = capabilities,
filetypes = { "css", "eruby", "html", "javascript", "javascriptreact", "less", "sass", "scss", "svelte", "pug", "typescriptreact", "vue" },
init_options = {
html = {
options = {
-- For possible options, see: https://github.com/emmetio/emmet/blob/master/src/config.ts#L79-L267
["bem.enabled"] = true,
},
},
}
})
References:
[1]: https://github.com/aca/emme...
Publishing rhythm
LLM now provides tools for working with embeddings
LLM is my Python library and command-line tool for working with language models. I just released LLM 0.9 with a new set of features that extend LLM to provide tools …
Simon Willison’s Weblog · simonwillison.net [1]
Simon’s llm cli is getting quite interesting. I really want to run some clustering on my website content.
References:
[1]: https://simonwillison.net/2023/Sep/4/llm-embeddings/
Formatter
How to use the Biome formatter.
Biome · biomejs.dev [1]
Tried out biome today and it worked better than prettier on jinja templates, I might adopt this over prettier.
References:
[1]: https://biomejs.dev/formatter/
Make the easy things easy
It’s so easy to get out of rhythm, get busy, and drop the ball on some things
that you really want to do or should do. This blog is a good example. I took
some time off for some family reasons, but have taken a long time to get back
to it simply because I am out of rhythm. As I am trying to get back into the
rhythm there is some tooling that I have set up for it that I completely forgot
about that feel good to use again.
Repetitive Tasks # [1]
Simple Repetitive Tasks that I have to do often can just feel soul crushing,
and one main thing that got me interested in programming.
AI tools are becoming more and more useful at solving these problems. For
instance code generation tools like co-pilot or codeium are really good at
boilerplate and pattern repetition. Things that used to be a few vim macros is
now just banging on tab.
I often look for setting up templates or some sort of snippet to replace a big
chunk of boilerplate that I know I will need over and over.
timebox # [2]
Do...
Check out aboutfeeds [1] by genmon [2]. It’s a well-crafted project with great potential.
Web feeds/RSS “getting started” guide for new users.
References:
[1]: https://github.com/genmon/aboutfeeds
[2]: https://github.com/genmon
htmx ~ The disable-element Extension
htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...
v1.htmx.org [1]
An extension to disable elements during flight of an htmx [2] request, Looks super useful for things like a create or delete button where the server would end up with an error if you double delete or double create. This eliminates an error path that the user might see under normal use of the ui.
References:
[1]: https://v1.htmx.org/extensions/disable-element/
[2]: /htmx/
htmx ~ hx-indicator Attribute
The hx-indicator attribute in htmx allows you to specify the element that will have the `htmx-request` class added to it for the duration of the request. This can be used to show spinners or progre...
htmx.org [1]
The htmx-request class is added to htmx-target elements. You can target this css selector to create loading state throbbers.
By default the target element will the self, but you can use the typical htmx [2] css selector to select which element will recieve the htmx-request class while the request is running.
The only way to override the name of the class is through config.
References:
[1]: https://htmx.org/attributes/hx-indicator/
[2]: /htmx/
-
Prime concisely made sense of why htmx is so awesome compared to what has become modern reactive web dev in 2 minutes. I had never thought of it this way and it’s incredible.
One thing I have comepletely missed out on with my use of htmx is setting the disabled state while the server is working, what a genius move!
References:
[1]: /htmx/
htmx ~ Examples ~ Updating Other Content
htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...
htmx.org [1]
Three ways to support updating other content. Fantastic article walking through the different ways to update other parts of the screen using htmx [2].
In htmx there is no 2 way data binding, the dom is your state, and if you have elements derived from the same data on the screen in different places you need to think about how to keep them in sync.
References:
[1]: https://htmx.org/examples/update-other-content/
[2]: /htmx/
Bigger Applications - Multiple Files - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
Fastapi [2] lets you tag your APIRouter’s so that the swagger docs are grouped according to the router.
router = APIRouter(tags=['router'])
Now all routes in router will appear in the router group in the swagger docs.
References:
[1]: https://fastapi.tiangolo.com/tutorial/bigger-applications/#another-module-with-apirouter
[2]: /fastapi/
Custom pages and templates - Datasette documentation
docs.datasette.io [1]
Datasette has its own static server that can host assets such as style sheets.
datasette -m metadata.json --static assets:static-files/
References:
[1]: https://docs.datasette.io/en/stable/custom_templates.html#serving-static-files
Check out hedgedoc [1] by hedgedoc [2]. It’s a well-crafted project with great potential.
HedgeDoc - Ideas grow better together
References:
[1]: https://github.com/hedgedoc/hedgedoc
[2]: https://github.com/hedgedoc
Just starred htmx-lsp [1] by ThePrimeagen [2]. It’s an exciting project with a lot to offer.
its so over
References:
[1]: https://github.com/ThePrimeagen/htmx-lsp
[2]: https://github.com/ThePrimeagen
[1]
Tailwind css component library. There are many examples with copy and pastabily with the tailwind classes already setup.
References:
[1]: /static/https://preline.co/docs/index.html
Tailwind CSS Cheat Sheet
Cheat sheet to learn Tailwind CSS quickly. Browse and search all Tailwind utility classes or CSS properties on one page.
nerdcave.com [1]
A nice searchable cheatsheet for tailwindcss classes.
References:
[1]: https://nerdcave.com/tailwind-cheat-sheet
cURL Command Without Using Cache | Baeldung on Linux
A quick and practical guide to using curl without cache.
Baeldung on Linux · baeldung.com [1]
Busting cache with curl. I’m not sure how much gets cached by curl, but I have ran into several cases where I am looking for new content and I want to ensure the content is new and no chance of being cached.
This article suggests 3 different techniques.
curl -H 'Cache-Control: no-cache, no-store' http://www.example.com
curl -H 'Pragma: no-cache' http://www.example.com
curl http://www.example.com/?xyzzyspoon
References:
[1]: https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header
[1]
sqlite has 3 different tokenizers, porter, ascii, trigram.
These can be used with sqlite-utils.
sqlite-utils enable-fts --tokenize porter database.db post title message tags
And with the python api.
db = Database('database.db')
db["post"].enable_fts(
["title", "message", "tags"], create_triggers=True, tokenize="trigram"
)
posts = list(db["post"].search(search))
References:
[1]: /static/https://www.sqlite.org/fts5.html
GitHub - sharkdp/bat: A cat(1) clone with wings.
A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.
GitHub · github.com [1]
Bat is my favorite pager, its the one for me that seems to just work more than the rest. colors, syntax highlighting, line numbers search, it just feels the most natural.
References:
[1]: https://github.com/sharkdp/bat
Check out server-hot-reload [1] by mikeckennedy [2]. It’s a well-crafted project with great potential.
Include in your web projects for dev-time auto reloading of web browser when any change is detected in content.
References:
[1]: https://github.com/mikeckennedy/server-hot-reload
[2]: https://github.com/mikeckennedy
sqlite_utils Python library - sqlite-utils
sqlite-utils.datasette.io [1]
sqlite-utils is primarily a cli tool for sqlite operations such as enabling full text search, and executing searches, but it also has a nice python api that is exposed and pretty straightforward to use.
from sqlite_utils import Database
db = Database("database.db")
db["post"].enable_fts(["title", "message", "tags])
db["post"].search("water")
This returns a generator object that you can iterate over the row objects with.
References:
[1]: https://sqlite-utils.datasette.io/en/stable/python-api.html#full-text-search