# blags

created_at: 2023-10-19 15:25:45
title: Some Text
uri: some-text
body:
  This is some text. This is some text. This is some text. This is some text. This is some text. This is some text. This is some text. This is some text. This is some text. This is some text. 


created_at: 2023-10-28 15:25:45
title: Toxi Method
uri: toxi-method
body:
  Toxi came up with a three-table structure. Via the table “tagmap” the bookmarks and the tags are n-to-m related. Each tag can be used together with different bookmarks and vice versa. This DB-schema is also used by wordpress.

  The queries are quite the same as in the “scuttle” solution.
  Intersection (AND)

  Query for bookmark+webservice+semweb

  SELECT b.*
  FROM tagmap bt, bookmark b, tag t
  WHERE bt.tag_id = t.tag_id
  AND (t.name IN ('bookmark', 'webservice', 'semweb'))
  AND b.id = bt.bookmark_id
  GROUP BY b.id
  HAVING COUNT( b.id )=3

  Union (OR)

  Query for bookmark|webservice|semweb

  SELECT b.*
  FROM tagmap bt, bookmark b, tag t
  WHERE bt.tag_id = t.tag_id
  AND (t.name IN ('bookmark', 'webservice', 'semweb'))
  AND b.id = bt.bookmark_id
  GROUP BY b.id

  Minus (Exclusion)

  Query for bookmark+webservice-semweb, that is: bookmark AND webservice AND NOT semweb.

  SELECT b. *
  FROM bookmark b, tagmap bt, tag t
  WHERE b.id = bt.bookmark_id
  AND bt.tag_id = t.tag_id 
  AND (t.name IN ('Programming', 'Algorithms'))
  AND b.id NOT IN (SELECT b.id FROM bookmark b, tagmap bt, tag t WHERE b.id = bt.bookmark_id AND bt.tag_id = t.tag_id AND t.name = 'Python')
  GROUP BY b.id
  HAVING COUNT( b.id ) =2

  Leaving out the HAVING COUNT leads to the Query for bookmark|webservice-semweb.
  Credits go to Rhomboid for helping me out with this query.
  Conclusion

  The advantages of this solution:

      You can save extra information on each tag (description, tag hierarchy, …)
      This is the most normalized solution (that is, if you go for 3NF: take this one :-)

  Disadvantages:

      When altering or deleting bookmarks you can end up with tag-orphans.


created_at: 2024-10-19 15:25:45
title: Bun Sqlite
uri: bun-sqlite
body:
  The API is simple, synchronous, and fast. Credit to better-sqlite3 and its contributors for inspiring the API of bun:sqlite.


created_at: 2025-1-19 15:25:45
title: Sass Breaking Changes
uri: sass-stuff
body:
  Sass has added support for the CSS Media Queries Level 4 specification. This originally conflicted with some Sass-specific syntax, so this syntax was deprecated and is now interpreted according to the CSS standard.

  Compatibility:
  Dart Sass
      since 1.56.0
  LibSass
      ✗
  Ruby Sass
      ✗

  Because Sass supports almost any Sass expression in parenthesized media conditions, there were a few constructs whose meaning was changed by adding full support for Media Queries Level 4. Specifically:

      @media (not (foo)) was historically interpreted by Sass as meaning @media (#{not (foo)}), and so compiled to @media (false).

      @media ((foo) and (bar)) and @media ((foo) or (bar)) were similarly interpreted as SassScript’s logical operators, compiling to @media (bar) and @media (foo) respectively.

  Fortunately, these came up very infrequently in practice.
  Transition Period
  Transition Period permalink

  Compatibility:
  Dart Sass
      since 1.54.0
  LibSass
      ✗
  Ruby Sass
      ✗

  First, we emitted deprecation warnings for the previous ambiguous cases. These will have suggestions for how to preserve the existing behavior or how to use the new CSS syntax.
  Can I Silence the Warnings?
  Can I Silence the Warnings? permalink

  Sass provides a powerful suite of options for managing which deprecation warnings you see and when.
  Terse and Verbose Mode
  Terse and Verbose Mode permalink

  By default, Sass runs in terse mode, where it will only print each type of deprecation warning five times before it silences additional warnings. This helps ensure that users know when they need to be aware of an upcoming breaking change without creating an overwhelming amount of console noise.

  If you run Sass in verbose mode instead, it will print every deprecation warning it encounters. This can be useful for tracking the remaining work to be done when fixing deprecations. You can enable verbose mode using the --verbose flag on the command line, or the verbose option in the JavaScript API.


created_at: 2025-06-30 01:35:33
title: test2
uri: test2
body:
  # **H**eading 1
  This is a paragraph that I need to put in *here is some italics*
  1. This is a list
  2. This is a second list
  3. 

  ## Heading 2
  ---
  **Bold**

  Regular; hmm double enter gets a new 

  > This is a quote
  > This is starting to work
  > It will only line over on width basis I guess that makes sense


created_at: 2025-06-30 01:49:09
title: test3
uri: test3
body:
  # **H**eading 1
  This is a paragraph that I need to put in *here is some italics*
  1. This is a list
  2. This is a second list
  3. 

  ## Heading 2
  ---
  **Bold**

  Regular; hmm double enter gets a new 

  > This is a quote
  > This is starting to work
  > It will only line over on width basis I guess that makes sense
  8:49


