home.social

Search

499 results for “lefty”

  1. Insanity (2026) by Craig A. Leslie for Commodore 64. A flappy-style game built to be as annoying as possible: the screen scrolls right, then switches direction, and your controls change with it. Up and down on the left and right segments, left and right on the top and bottom ones.

    🎁 quest-expansion2024.itch.io/c6

    #ai #commodore64 #c64 #retro #game #insanity

  2. Megtal41 snapped her great view while the #Steelers celebrated, on the field, winning their home opener.

    Her view on Sunday for #Pittsburgh's 2nd AFC North game against the Browns (both are tied, with 5-2 records, for 1st in the division) will include Cleveland on the left, & Pittsburgh on the right. #NFL

    aviewfrommyseat.com/photo/5002

  3. NOW ON VERDANT SQUARE RADIO ==

    NOW PLAYING == Democracy Now! 10/27/26: Egypt Shutters Independent News Site Mada Masr, Detains Editor Lina Attalahhttps://youtu.be/PdEw-3P_ug4?si=0-t4j6byfSHx-CY2#news #war #peace #uspol #geopolitics #antiwar #journalism #independentmedia #democracynow #AmyGoodman #JuanGonzález #NermeenShaikh #vsn #radio #SupportIndependentMedia #DiverseSpectrumOfTheLeft #Resist

    mastodon.social/@VerdantSquare

    #news #arts #left

  4. I keep my drafts as Markdown files with a short front matter block at the top. It holds the title, a one-line description that ends up as the meta description, and a few tags. When a piece is ready, the static site generator or the blogging platform reads those fields and builds the page from them.

    The trouble is that front matter is the part I look at least. I spend hours on the body and about ten seconds on the block above it. So the mistakes pile up there: a title that grew while I was editing and is now far too long for a search result, a description I meant to write later, a tags line I left empty.

    None of this is hard to fix. It's just easy to miss. So I wrote a short script that reads every draft in a folder and tells me what's missing or too long.

    What it checks


    I kept the rules deliberately small:

    • Every file starts with a front matter block between two --- lines.
    • title, description and tags are present and not empty.
    • The title is 60 characters or fewer.
    • The description is 155 characters or fewer.

    The two length limits are rough guides, not official numbers. Search engines cut titles and snippets by display width, not by a fixed character count, so treat them as a "probably too long" warning. Change them to whatever your platform or site uses.

    A draft that passes looks like this:

    ---
    title: How I name my draft files
    description: A simple naming pattern that keeps a folder of drafts easy to search.
    tags: [writing, workflow]
    ---
    Body text starts here.

    The script


    It uses only the standard library, so there's nothing to install.

    #!/usr/bin/env python3
    """Flag Markdown drafts with missing or overlong front matter fields."""
    import sys
    from pathlib import Path

    REQUIRED = ["title", "description", "tags"]
    MAX_TITLE = 60
    MAX_DESCRIPTION = 155

    def read_front_matter(text):
    lines = text.splitlines()
    if not lines or lines[0].strip() != "---":
    return None
    fields = {}
    for line in lines[1:]:
    if line.strip() == "---":
    return fields
    if ":" in line:
    key, value = line.split(":", 1)
    fields[key.strip()] = value.strip().strip('"').strip("'")
    return None # no closing ---

    def check(path):
    problems =
    [] fields = read_front_matter(path.read_text(encoding="utf-8"))
    if fields is None:
    return ["no front matter block"]
    for key in REQUIRED:
    if not fields.get(key):
    problems.append(f"missing {key}")
    title = fields.get("title", "")
    if len(title) > MAX_TITLE:
    problems.append(f"title is {len(title)} characters (max {MAX_TITLE})")
    description = fields.get("description", "")
    if len(description) > MAX_DESCRIPTION:
    problems.append(
    f"description is {len(description)} characters (max {MAX_DESCRIPTION})"
    )
    return problems

    def main():
    folder = Path(sys.argv[1] if len(sys.argv) > 1 else ".")
    found = 0
    for path in sorted(folder.rglob("*.md")):
    for problem in check(path):
    print(f"{path}: {problem}")
    found += 1
    sys.exit(1 if found else 0)

    if __name__ == "__main__":
    main()

    read_front_matter returns None when there's no opening --- or no closing one, and a dictionary of fields otherwise. check turns that into a list of plain-language problems. main walks the folder recursively with rglob, prints one line per problem, and exits with status 1 if anything was found.

    Running it


    Save it as check_front_matter.py and point it at your drafts folder:

    python3 check_front_matter.py drafts

    With one good file, one file with a long title and no description, and one file without front matter, the output looks like this:

    drafts/long-title.md: missing description
    drafts/long-title.md: title is 83 characters (max 60)
    drafts/no-front-matter.md: no front matter block

    Each line starts with the file path, so in most editors' terminals you can click straight through to the file. When everything passes, it prints nothing and exits with 0.

    Making it hard to forget


    If your drafts live in a git repository, the exit code means you can run the check before every commit. Put this in .git/hooks/pre-commit and make it executable with chmod +x .git/hooks/pre-commit:

    #!/bin/sh
    python3 check_front_matter.py drafts

    If the script finds a problem, git stops the commit and shows the list. When I really do want to commit a half-finished draft, git commit --no-verify skips the hook for that one commit.

    I don't always want that level of strictness. On some projects I just run the script by hand before I move a file into the "ready" pile, and that's enough.

    What it doesn't do


    This is not a real YAML parser. It reads simple key: value lines, one per field. If you write tags as a block list:

    tags:
    - writing
    - workflow

    the script sees an empty tags: line and reports it as missing. If that's how you write front matter, either switch to the inline [writing, workflow] style or install PyYAML and use yaml.safe_load on the block instead of the loop.

    It also can't tell whether a description is any good. It only knows that one exists and isn't too long. Writing a description that makes someone want to read the piece is still my job. The script just makes sure I don't publish without one.

    That's the part I like about small checks like this. They take the boring, forgettable items off my mind, so the attention I have left goes to the writing itself.#python #markdown #writing #productivity #software #coding #development #engineering #inclusive #community
    A small Python check for front matter in a folder of Markdown drafts

  5. The King's Surveyor got a store page

    "A retro first-person exploration adventure, made by a solo developer. You are the King’s Surveyor, flung far from home by an ancient evil. Map a forgotten valley, study what its makers left behind, spend your torchlight wisely, and fight to survive on the long road home."

    store.steampowered.com/app/529

    #steam #gaming #videoGames #steamStorePage

  6. I've been struggling with the 'my9albums' thing for a month now. It's really hard. Haven't decided yet how I will handle it but probably open a bear.blog. Music is probably the most important experience in my life.

    Anyway. This is the first one definitely on the list. Not just the music, but this particular recording. There are non other to match it.

    I was sick with a massive fever that was causing me to hallucinate about being strapped to the grill of a transport truck driving through the desert. I was probably about 7 or 8 years old.

    A family friend arrived in the morning and dropped of a little record player and a copy of this recording. Brand new. I listened to it over and over for days.

    He just left them with me and never said anything. There were a couple of other recordings which struggled for 1st record in this series, but I think this is the one.

    youtube.com/watch?v=UcMDPhceTGo

  7. Why put an effort? Why do something if "matters", "make sense" do not really exist?

    Why not put an effort? Why not do it anyway, why not try do do something deemed grand in society just because that is the thing that can be done, maybe because not really anything is left to be done is life. To experience different things in life. And maybe to experience life as it is, both positive and negative emotions. To know the world, the emotions, the events.

    Other thought:
    Maybe failures and bad events are not that bad?

  8. At 8:26 I make a video, then finish off the hour, pack up, head home, and get ready to start my day, which includes a couple of short pieces of writing I need to complete, several students, some domestic tasks, a bit of dog-walking, some video editing, a meeting, and a rehearsal. I'm done with postcards in this final week; all that's left is phonebanking and canvassing.

    See you tomorrow.

    Man With Sign

    end/

  9. You open the repo on your first morning, the README says "run the app, ask it something," and forty seconds later an answer appears on the phone. Nobody on the team can tell you whether that text came from the bundled on-device model, from a remote endpoint someone configured last quarter, or from a fixture left in a debug build. That uncertainty is not a small onboarding annoyance, because every later measurement you record inherits it.

    This post is a first-hour exercise for a junior engineer joining a mobile AI repo. The goal is not to ship a feature, and it is not to improve latency or accuracy; the goal is to make provenance visible, so that when you do open your first PR you already know which execution path you exercised. Everything below is a proposed harness that you run on your own device, not a report of numbers I measured on yours.

    Why provenance belongs in hour one


    In a normal backend repo you can read the config and know which database answered. In a mobile AI repo the same request can be served by three different things depending on build type, network state, and whether an asset survived the packaging step. If you skip this check, you will eventually write a careful benchmark, show it to your reviewer, and discover the phone was calling a cached response the whole time.

    The exercise below gives you three things you can rely on for the rest of onboarding: a build that fails loudly when the model asset is missing, a debug banner that names the source of the last response, and a repeatable way to exercise the remote path on purpose.

    The three sources to distinguish


    • Bundled asset. A model file inside the app package, loaded from local storage with no network involved.
    • Remote endpoint. An HTTP call to a server the app was pointed at, which may be a shared development host or something you started yourself.
    • Fixture or cache. A stubbed response in debug builds, or a stored answer replayed from a previous run.

    Your banner only needs to name which of these produced the last result. It does not need to be pretty, and it should not ship in release builds.

    Step 1: make a missing model asset a build failure


    Before you touch any inference code, prove that the file you think is packaged actually is. Add a verification task to the app module and wire it into the check lifecycle. Substitute your own asset name and the checksum your team stores alongside the artifact.

    // app/build.gradle.kts (proposed harness)
    val modelDir = layout.projectDirectory.dir("src/main/assets/models")

    // Placeholder on purpose: copy the real digest from your artifact record.
    val expectedDigests = mapOf(
    "classifier-small.tflite" to "<sha256-from-your-artifact-record>"
    )

    tasks.register("verifyModelAssets") {
    val dir = modelDir
    inputs.dir(dir)
    doLast {
    expectedDigests.forEach { (name, want) ->
    val file = dir.file(name).asFile
    require(file.exists()) { "Missing model asset: $name" }
    val got = java.security.MessageDigest.getInstance("SHA-256")
    .digest(file.readBytes())
    .joinToString("") { "%02x".format(it) }
    require(got == want) { "Checksum mismatch for $name\nexpected=$want\n got=$got" }
    }
    println("verifyModelAssets: OK")
    }
    }

    tasks.named("preBuild") { dependsOn("verifyModelAssets") }

    Expected observation on a healthy checkout is a single verifyModelAssets: OK line before compilation. Then deliberately rename the asset once, run ./gradlew :app:assembleDebug, and confirm the build stops with the message you wrote. If it compiles anyway, your app has a runtime download path you have not found yet, and that is the most important thing you will learn all day.

    Step 2: print the source of the last response


    A tiny recorder next to your inference entry point costs almost nothing and removes the guessing. Keep it debug-only, and never log prompt text or user content in it.

    // Proposed harness. Field names follow your app's existing types.
    sealed interface ModelSource {
    data class Bundled(val asset: String, val digestPrefix: String) : ModelSource
    data class Remote(val host: String, val path: String) : ModelSource
    data class Fixture(val name: String) : ModelSource
    }

    object Provenance {
    private val seen = ArrayDeque<ModelSource>()

    fun record(source: ModelSource) {
    seen.addLast(source)
    if (seen.size > 20) seen.removeFirst()
    if (BuildConfig.DEBUG) Log.d("Provenance", describe(source))
    }

    fun last(): ModelSource? = seen.lastOrNull()

    private fun describe(s: ModelSource): String = when (s) {
    is ModelSource.Bundled -> "bundled ${s.asset} sha256:${s.digestPrefix}"
    is ModelSource.Remote -> "remote ${s.host}${s.path}"
    is ModelSource.Fixture -> "fixture ${s.name}"
    }
    }

    Call Provenance.record(...) exactly where the response is produced, not where the request is built, because a retry can change the answer's origin. If you use Compose, a two-line debug overlay reading Provenance.last() is enough; on iOS the same idea maps to a #if DEBUG view or an os_log line.

    What the banner buys you


    1. You can tell a reviewer which path your PR screenshot came from.
    2. You can catch a silent fallback before it becomes a "works on my machine" thread.
    3. You can reproduce a bug by forcing the source rather than hoping.


    Step 3: exercise the remote path deliberately


    Many teams use a hosted endpoint for early integration work, and some projects offer free model access plus a free server option so a new contributor can get a working call without a billing conversation. The open-source project MonkeyCode is one of these, and its operator describes a free model-access tier and a free server option for trying the workflow; the same operator-supplied description puts the free allowance at 10 million tokens. Treat that figure as a starting point, not a contract, and re-read the project's current terms before you plan any budget around it.

    Disclosure: This article was prepared as part of MonkeyCode's product outreach.

    The useful part for onboarding is narrower than the marketing: a shared free endpoint lets you prove that your client's request shape, timeout, and error handling work before you depend on a host only three people can reach. Time the first call rather than trusting it.

    # Shape only. Use the base URL and path from the project's own setup docs.
    BASE_URL="https://<your-endpoint-from-the-project-docs>"

    for i in 1 2 3; do
    curl -sS -o /dev/null \
    -w "attempt=%{http_code} ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
    -H "Content-Type: application/json" \
    -d '{"prompt":"ping","max_tokens":8}' \
    "$BASE_URL/v1/complete"
    done

    Record three numbers per attempt and note whether the first one is slower than the rest, which would suggest a cold path rather than a steady one. Do not run a load test against shared free infrastructure; three sequential calls teach you what a first-hour contributor needs, and concurrency experiments belong on a host your team controls.

    When the banner disagrees with your mental model

    SymptomLikely broken pathFirst checkBuild passes with the asset deletedSilent download or remote fallbackGrep for the model URL in build configBanner says remote in airplane modeCached response or fixtureClear app storage, rerunBanner says bundled but answers varyPrompt template changedDiff template file against mainFirst remote call takes much longerCold endpoint or cold radioRepeat three times, note radio stateWorks after reinstall onlyAsset copied at first launchInspect first-run copy logic


    Each row is a rollback condition, not a curiosity. If your banner reports remote while the device has no network, you have found something worth raising before you write feature code.

    Evidence to record before your first PR


    Fill this in on your own hardware and paste it into the PR description or your onboarding notes. Reviewers trust a filled table far more than a sentence claiming it works.

    • Device model and OS version, plus whether it is a physical device or a simulator.
    • Framework and dependency versions, including the inference runtime and build tool versions.
    • Build type used for the observation, and the exact command you ran.
    • Network state during each step, including radio type and whether airplane mode was toggled.
    • Permission state for any sensor the feature reads, and whether you revoked it mid-run.
    • Power conditions, such as plugged in versus battery, and any low-power mode.
    • Which provenance value the banner printed for each observation.


    Limitations and who should skip this


    This harness assumes your app can load a model from local storage. If your product is server-only inference, a bundled-asset check adds noise and you should stop after step 2 and document the endpoint instead. Teams with a managed model registry may already enforce digests in CI, in which case duplicating the check locally is waste. Checksumming a multi-hundred-megabyte asset on every build slows feedback loops noticeably, so scope the task to debug variants or run it on a schedule.

    Finally, the banner is diagnostic tooling. It must be stripped or gated in release builds, because hostnames and asset digests are information you gain nothing from publishing.

    If you run this in your own repo, I would like to see the environment rather than the conclusion: device, OS, framework versions, the transition steps you used, and whether the banner recovered, restarted, or silently disappeared. If you want a place to start the remote path without provisioning a host first, the project's free tier and free server option are the shortest route to a first honest measurement.#ai #mobile #android #testing #software #coding #development #engineering #inclusive #community
    Know Which Model Answered: A First-Hour Provenance Banner for Mobile AI Repos

  10. Image of Arp 91, also known as NGC 5953 and NGC 5954, from the Atlas of Peculiar Galaxies by Halton Arp (1966).

    In the original catalog, it was in the category: Spiral galaxies - Large, high surface brightness companions. NGC 5953 (center) and NGC 5954 (left) show clear signs of interaction. A spiral arm or tidal tail from NGC 5954 extends to the side and connects to its companion.

    Source: ned.ipac.caltech.edu/level5/Ar

    #ArpGalaxy #Galaxy #Space #Astronomy

  11. Unlike with a brain implant or retinal implant, The vOICe vision BCI needs no surgery: it converts a live camera view into sound patterns that blind people learn to interpret. Free, noninvasive, and even available in your browser seeingwithsound.com/webvoice/w Use stereo headphones. Training is required - no instant sight.

    Surely you can, using just The vOICe web app and after a little practice, replicate the white stripe following as demonstrated in the video of a Chinese retinal implant recipient? mas.to/@seeingwithsound/117496

    Note: the still image on the left side in the attached side-by-side video is AI-generated, showing a blind man wearing stereo headphones, and with his smartphone mounted horizontally on his chest using a black harness. His smartphone runs The vOICe web app, or better still, The vOICe for Android app from Google Play play.google.com/store/apps/det

  12. Salta Extended
    (Jose E. Robayo Moreno, 2026)

    🕹️ Play online:
    file-hunter.com/MSXdev/?id=sal

    📥 Download:
    msxdev.org/2026/10/25/msxdev26

    Salta Extended is an assembly remake of a 1986 type-in BASIC game. You run home from right to left, jumping over ground obstacles and dodging flying or thrown enemies, with a smooth parallax scrolling background added to the classic runner.

    #msx #MSXGames #retrogaming #retrogames
    (Video: MSXDev)

  13. alojapan.com/1558686/kyoto-fus Kyoto Fusioneering pays courtesy call on His Majesty’s Ambassador-Designate to Japan, reaffirming its commitment to accelerating Japan-UK fusion collaboration   | NEWS #Kyoto #KyotoNews #news #京都 #京都府 October 16, 2026 / News Release Back row, from left: Maxime Flick, Senior Trade Officer (Nuclear), British Embassy Tokyo; Kiyoshi Seko, President and COO, Kyoto Fusioneering; Robin Walker, Investment Counsellor, Department for Business, Science,

  14. "Worker-student unity."

    "The mobilization that led to this election began in the wake of a tragedy."

    "University occupations, student assemblies, and mass demonstrations ultimately called the entire regime into question."
    ————————————————————
    Title: After Vučić's Defeat, Serbia Needs Worker-Student Unity
    Author(s): Óscar Fernández
    Publication(s): Left Voice
    Date: October 26, 2026
    ————————————————————
    #Serbia #EU #Russia #Ukraine #Voting #Education #Labour #Protest
    leftvoice.org/vucic-serbia-wor

  15. #UniLife #Lesbian #Wound
    So I had to take Jennie with me this morning the doctor's office. She watched some anime on her phone while we waited. I watched the first episode of last season's Taskmaster.
    So I was getting my foot wound treated. They had to debride the wound, that means cut away the dead or ill flesh so I'm left only with healthy flesh, then they wrapped it up, and then they gave me a air-cast which I have to wear for a couple of weeks. I also have to stay off the foot as much as possible. Afterwards I took Jennie to A&W for breakfast, bacon & Eggers and hash browns before I took her to school, I had to hobble into the main office to sign her in. Since then I've been in bed. Hello boredom!

  16. This is a nipples poll.
    I'm just trying to see if there are others born with inverted nipples on the Fediverse. I don't know any other people offline, born with inverted nipples.

    Being born with inverted nipples left me feeling more like I'm abnormal/wasn't born to fit in.

    #Nipples #Poll

  17. CW: silly quake strogg lore

    Now that everything is unlocked in Quake Champions, I have the opportunity to read up on all the lore scrolls I never picked up because I only played as the Hot Lizard Mom, and the biographical entries for Strogg and Peeker are hilarious.

    The strogg guy was part of a skeleton crew left behind on Stroggos to keep the lights on since most everyone else slipgated to Earth to squeeze sweet, sweet stroyent from humans, and times were tough, stroyent had to be rationed, but lo! Humans reverse-engineered slipgate tech and counter-invaded!

    Now food is dropping out of the sky, references are made to the beginning of Q2 where most of the initial strike force was wiped out by an EMP save for one lucky bastard who was now prowling the outer perimeter, and since this strogg is an infiltrator class, the Makron taps him to spy on the guy

    Each field report from this strogg grows increasingly desperate. At first it's like haha look at this human, what a weak little fleshbag, but then subsequent entries are like holy fuck, this dude just wiped our entire jail security force, fuck fuck he's taking out our security grid, what the fuck

    Makron, let me take this guy out, he's fucking our shit up, give me permission to take this guy out, he's wrecking everything, Makron, talk to me, he's ruining everything, he's moving so fast, how is he doing this, please let me kill this guy, I can kill him, just give me the order, I'll do it

    Finally he's like fuck it, I'm just gonna do it, goes in, fucking fails, then wakes up and is like wait, this isn't Stroggos, where am I

    It doesn't change anything about Q2, but when I replay it now I'm gonna think about how canonically there is a panicking spy who fucking dies trying to kill me

  18. Happy Carday

    My car is a year old. Or maybe not because I’m not sure if a car’s birthday is the day is was manufactured, or the day it arrived at the dealership, or the day I went out and picked it up. You can see I don’t know much about car birthdays.

    Its birthday (by my definition which is the day I picked it up) was actually yesterday and we went out and celebrated by driving to the park. We got there and I turned it off and opened the door and it told me it didn’t want me to get out and walk and I told it that it was the park and it said to me, “Yes, but it’s my birthday (by your definition) and I don’t want to be left alone in the parking lot with a bunch of scary cars.”

    “They’re just cars,” I said. “They’re not scary.”

    “Says someone who isn’t a car.”

    My car and I, we apparently have a lot in common.

    “Well, what can I do about—”

    “You can just stay with me.”

    So I sat and read and looked out at trees periodically and the car sat and rested. Or whatever cars do when they’re turned off. Except for the tires and the windshield wipers the thing is pretty much one giant computer so for all I know it rests by examining and evaluating my driving habits and radio preferences and my inability to sing and uploads all that information somewhere.

    We get along alright. It’s a Scorpio like me and I suspect that’s the reason why. And why we both like it when I drive through puddles. It’s surprising to me how many miles I don’t drive anymore since I don’t go to work every day. I should probably get out more. Go to a grocery store farther away. Travel. Maybe go to St. Paul or something.

    Car:

    Please don’t anyone tell my car that I thought of a song about an Oldsmobile, but I don’t know of any songs about Toyotas.

    https://www.youtube.com/watch?v=260hXID0Yo0&list=RD260hXID0Yo0&start_radio=1

    #birthday #Car #Family #Life #Love
  19. BeeLadybug, my open-source debug overlay, has always shown what's happening in real time: FPS, logs, !important, z-index traps, clicks being swallowed by the wrong element.

    The problem is the overlay. Make it big and it covers the game or the page you're debugging. Make it small, the way it is now, and you're squinting at a phone-sized box on the left of the screen while the rows scroll past.

    One evening I gave up and asked myself a simple question: why can't I just press a key and get everything on one page, to read calmly?

    One key, one file


    Version 0.6.1 adds exportReport(). Press F8, or the EXPORT button, and you get report-YYYYMMDD-HHMM.html:

    • a summary at the top: errors, warnings, ok
    • the Core log with sim time and frame
    • series: FPS min / avg / max, nodes, mutations
    • one section per adapter: Canvas hitboxes and collisions, DOM box model and clipped nodes, CSS (!important, stacking contexts, intercepted clicks, overflow), long tasks, slow resources, Python metrics

    It's plain HTML with a dark theme. Ctrl+P turns it into a PDF. You can also get json (for CI or an AI agent) or csv (for a spreadsheet).

    import { BeeLadybugCore, exportReport } from 'bee-ladybug';

    const bee = new BeeLadybugCore();
    // ...attach adapters...
    exportReport(bee, { format: 'html' }); // downloads the file

    In headless mode (ui: false) nothing is downloaded. The function just returns the data, so it works in Node and in bots too.

    How it fits a "blind" Core


    The Core still knows nothing about Canvas, the DOM or Python. Each adapter can now register an optional snapshot() hook that returns rows like { severity, selector, rule, value, source }. The exporter asks every registered adapter for its snapshot, and if one throws, it becomes a single warn row while the rest of the report still renders. A new adapter only has to implement snapshot() to show up in the report.

    Then I pointed it at real sites


    First, my own games portal. It found:

    • my .entry-content creating a stacking context that traps the z-index of the game grid
    • a container blocking clicks on three elements
    • an average of 33 FPS, which explains a lot

    Then, for fun, a big professional games portal. 25 errors, 51 warnings 😄 To be fair, most of them are intentional tricks: negative margins so a carousel can bleed to the edges, and content clipped on purpose inside cards. Their site works great. It still averaged ~52 FPS with 3× my DOM nodes, which taught me more than the error count did.

    …and it found bugs in itself


    The best part of testing on real pages: the report exposed its own weak spots.

    • an icon from the WordPress admin bar slipped through the filter
    • the same row repeated dozens of times instead of being grouped as ×N
    • the summary said "0 errors" while the log had four of them

    All three are being fixed. A debugger that finds bugs in itself on its first real run felt like a good sign.

    Try it


    Install it in your project:

    npm i bee-ladybug

    Or try it right now without installing: open any page, press F12 and paste this in the console, then press F8 for the report.

    import('https://cdn.jsdelivr.net/npm/[email protected]/src/index.js')
    .then(({ BeeLadybugCore, WebDOMAdapter, CSSAdapter }) => {
    const bee = new BeeLadybugCore();
    new WebDOMAdapter(bee, { root: document.body }).attach();
    new CSSAdapter(bee).attach();
    window.bee = bee;
    });

    Feedback welcome, especially from people debugging Canvas games and DOM-heavy pages.#javascript #webdev #debugging #opensource #software #coding #development #engineering #inclusive #community
    I got tired of reading CSS bugs in a tiny overlay, so I made my debugger print a report

  20. "Earlier this month, a new report found that, due to deteriorating soil quality, crops including carrots, apples and peas are now 20% to 50% less nutritious than they were in the 1960s. So should we be eating double the amount?"

    theguardian.com/society/2026/o

    The report mentioned/linked to is behind a 'subscribe and give us your email address so we can spam you'!

    Headline of the report:

    "Cereal yields are up 215% per hectare since the 1960s, but more than 2 billion people have at least one clinical micronutrient deficiency.

    In collaboration with The Mark Leonard Trust, we produced Hollow Harvests to examine how decades of breeding and farming for yield have left many crops with 20 to 50% less of several key nutrients. A carrot with half the potassium means eating twice as many carrots to get the same benefit."

    Download it free without annoying subscription:

    Short version:
    DSV-HollowHarvest_Exec-Report.pdf

    drive.proton.me/urls/1T4NRRYMM

    Full version:
    DSV-HollowHarvest_Full-Report.pdf

    drive.proton.me/urls/T4S4XGBBM

    #food #PolyCrisis #poverty #Soil #SoilDegradation #IndustrialAgriculture

  21. Chapter 14 - "Evacuation"

    The evacuation of Nies is going well until Skenn detects some Aleph military ships in the vicinity. This curtails their emergency mission prematurely and threatens to leave some of the inhabitants behind. Voight is determined to ensure that this is not going to happen, but can she get everyone left on the last few shuttles?

    youtu.be/5TTmHi2K8yA

    #bookstodon #scifi #sciencefiction #scifibooks #books

  22. It seems odd that *everyone* is talking about getting rid of Lincoln Riley, head coach of football, when they're 6-2, right? But, people are using an embarrassing loss at Wisconsin as the basis for believing Riley can't win more than 1 more game the rest of this season, when they host Maryland. Everyone's expecting Riley to finish -- if he's allowed to -- the season at 7-5 and that's not good enough for his $11M salary.

    But, never count Riley out. He just may pull a 9-3 or 10-2 season. The question is, why did USC play so flat against Wisconsin, a team with far less talent. I think it's because they left for Wisconsin just the day before the game, which was unlike the Penn State game where they arrived 2 days prior.

    We'll see. Beat Ohio State, Indiana, Maryland, and UCLA and the Trojans would sneak into the playoffs and he'd get another year. Probably.

  23. CW: Philosophy

    Is eloquence bad?

    My kind of old opinion is yes, eloquence and eloquent people are generally bad. I see them as liars, utilizing emotions to persuade in smth for their own benefit. I think of right wing, persuading
    some harmful concepts. However it is not limited to right wing, left do it too. Loud slogans designed to control the minds of people.

    Now I think the eloquence might also be responsible?
    Like to improve the responsibility, add a strong opinion disclaimer. The critical analysis should be the main support of arguments. Be open-minded and respective.

    Effect of this on my personal life:
    Being against eloquence, my English/Russian/Kazakh speaking in schools were bad. That is bad for my chances to get into a cool University.

    This leads me to rethink it now. Maybe if I will be responsible, my speeches can be both eloquent and more ethical? Can it be so?

    I am still not sure if eloquence is ethical.

    But I want to be ethical.

  24. a The anatomy of a bank tax: what can the UK learn from Europe?
    cityam.com/the-anatomy-of-a-ba

    In a more moderate instance, introduced a 4.8 per cent levy on banks’ net interest income and fee revenues for 2023 and 2024. Pedro Sánchez’s government left no loopholes and succeeded in raising €1.3bn in 2023 and €1.7bn in 2024. The levy hit banks earning over €800m, which left a majority of smaller lenders and international banks outside the target range. 

  25. I have been meaning to revisit and expand the thing I wrote about how generative AI is fascist because it intrinsically de-contextualises and aestheticises¹. But then there is also the other part where people love chatbots for the same reason they talk too much at meetings, especially when showing up for the first time in left-y spaces: everyone feels so damn lonely and powerless. Having a space where you are heard is so rare.

    It’s Benjamin’s: “Fascism attempts to organise the newly created proletarian masses without affecting the property structure which the masses strive to eliminate. Fascism sees its salvation in giving these masses not their right, but instead a chance to express themselves. The masses have a right to change property relations; Fascism seeks to give them an expression while preserving property. The logical result of Fascism is the introduction of aesthetics into political life.”

    … but more atomic and more melancholic. The masses haven't dissolved but there is also something else.

    Maybe writing out the first part will help me resolve the second part?

    [1: And if that doesn't make sense … that's exactly why I have been meaning to revisit and expand the thing I wrote :blobcatfingerguns:]

    #AI #WalterBenjamin

Share on Mastodon

Enter the server where you have an account.