home.social

Search

1000 results for “it_is_soup_time”

  1. "Minnesota has had a few remarkable turnarounds and conservation successes over the decades, resurrecting local populations of trumpeter swans and wild turkeys, bald eagles and peregrine falcons. But the return of those species took decades of intentional work and, in the case of eagles and falcons, a nationwide ban on the farming insecticide DDT.

    "It is far rarer for a lost species to simply walk back into Minnesota to start reproducing here again.

    "But here they are.

    "The return of breeding cougars is almost certainly a turning point, both for the wildcats and their push eastward, and for the Minnesota woods that harbor them, experts said."

    The unlikely comeback of the Minnesota cougar
    Story by Greg Stanley. Photos and videos by Anthony Soufflé
    startribune.com/chasing-ghosts

  2. A CPU-bound Python job split across four threads took 3.6 seconds on my machine. The same job split across four of Python 3.14's new subinterpreters took 0.9 seconds, roughly what one thread alone takes to do a quarter of the work. That part matched what I expected from the PEP. What I did not expect was that asking one of those subinterpreters to run two things at once does not slow it down. It refuses outright.

    concurrent.interpreters is new in the standard library as of Python 3.14, released on 7 October 2026. Subinterpreters themselves are not new - they have existed in the C API since Python 1.5 and CPython has used them internally for years - but PEP 734 is what makes them usable from ordinary Python code, with no C extension required. Each subinterpreter gets its own Global Interpreter Lock, which is the part worth testing: it is the thing that is supposed to let CPU-bound Python code actually use more than one core without reaching for multiprocessing.

    I tested it against a CPU-bound workload (counting primes below 400,000, a plain Python double loop with no C extensions to hide behind), compared against threads, processes, and a single thread, three runs each, inside a python:3.14-slim container with four cores available.

    The headline number

    approachtime for 4x the worksingle thread (1x unit, for reference)0.77 - 0.80s4 OS threads, classic GIL3.51 - 3.70s4 subinterpreters (new in 3.14)0.89 - 0.98s4 processes (multiprocessing)0.95 - 1.30s


    Four threads doing four units of CPU-bound work took more than four times as long as one thread doing one unit - 3.6s against roughly 0.8s, which is actually a bit worse than the 3.2s you'd get from perfect serialisation, because the GIL has to keep stopping one thread to let another run. Four subinterpreters doing the same four units took about 0.9s: close enough to the single-unit baseline that the extra three units of work were, for practical purposes, free. That is real parallelism, not a scheduling trick, and it lands in the same place multiprocessing already does.

    What it refuses: one thread per interpreter, not shared


    The PEP's selling point is that each interpreter has its own GIL. I wanted to see what happens when two threads try to use one interpreter's GIL at the same time, expecting it to behave like classic Python: both threads run, the shared GIL makes them take turns.

    That is not what happened. A single Interpreter object only tolerates one caller. A second concurrent call doesn't queue, and it doesn't share time with the first - it is rejected immediately:

    Exception in thread Thread-2 (_call):
    Traceback (most recent call last):
    File "/usr/local/lib/python3.14/concurrent/interpreters/__init__.py", line 226, in _call
    res, excinfo = _interpreters.call(self._id, callable, args, kwargs, restrict=True)
    concurrent.interpreters.InterpreterError: interpreter already running

    I confirmed the shape of this with three variants of the same interpreter, run in sequence:

    scenariotimeoutcomeone call0.84sfinetwo sequential calls, same interpreter1.63sfine, roughly 2xtwo concurrent calls, same interpreter0.84s wall-clocksecond call raises InterpreterError


    interpreters.create() is documented as returning "a new (idle) Python interpreter", and that word is accurate: idle or running, nothing in between. If you want N things running at once, you need N interpreters, one each. A thread pool aimed at a single shared interpreter - the pattern every ThreadPoolExecutor tutorial uses with regular threads - does not translate. You get one interpreter's worth of work and an exception, not graceful serialisation.

    The opposite number: interpreters are not obviously cheaper to start than processes


    The other assumption I walked in with was that subinterpreters, being lighter than OS processes, would be cheap to spin up. I measured the cost of creating four workers and giving each one some real state (a 200,000-element list), steady state after the first warm-up run:

    approachcreate + populate, 4 workersfork (Python 3.13's Linux default)0.037 - 0.038sforkserver (Python 3.14's Linux default)0.057 - 0.065s4 subinterpreters0.076 - 0.078s


    Creating four subinterpreters and running a small amount of code in each took about twice as long as a classic fork-based process pool, and somewhat longer than the new forkserver default too. None of this matters once the work inside each worker takes more than a few milliseconds - the 3.6s-versus-0.9s number above swallows an 80-millisecond setup cost without noticing. But it means "subinterpreters are lighter than processes" is not something I could verify at creation time; the saving, where it exists, is in not forking a second copy of the process's address space, not in any faster start.

    That forkserver row was an accident. I wrote a timing script that called multiprocessing.Process(...).start() directly from the module's top level, the way plenty of tutorial code still does, and it crashed:

    RuntimeError:
    An attempt has been made to start a new process before the
    current process has finished its bootstrapping phase.

    Checking multiprocessing.get_start_method() explained it: Python 3.14 changed the default start method on Linux from fork to forkserver. Python 3.13 reports fork; 3.14 reports forkserver. forkserver re-imports your module in the child, which is exactly the thing if __name__ == "__main__": exists to guard against, and which fork never required you to bother with. Every piece of multiprocessing code I'd written without that guard over the years happened to work by accident, on Linux, until this release. It's a one-line fix, but it is a real break, and it landed in the same release that gives you an alternative that doesn't have this problem at all.

    What it costs: closing an interpreter doesn't give the memory back


    I ran four rounds of "create four interpreters, give each a 200,000-element list, close them", watching my own process's RSS the whole time:

    round 1: 16920 -> 55648 KB
    round 2: 55648 -> 57140 KB
    round 3: 57140 -> 59476 KB
    round 4: 59476 -> 61096 KB

    .close() does finalise the interpreter - a destroyed interpreter can't be called again, and I checked that it raises if you try - but the process's resident memory never drops back to where it started. It flattens out (each later round adds less than the first) rather than growing without bound, which looks like CPython's allocator holding onto freed arenas rather than a genuine leak, but I didn't chase that further. If you're planning to cycle through many short-lived interpreters inside one long-running process, budget for that memory to stay resident, not to be returned to the OS the way a finished process's memory is.

    What's actually shareable between interpreters


    Subinterpreters don't share objects by default - that is the entire point, it's what lets them skip the GIL - so most interesting values need to cross a boundary. is_shareable() gives a yes/no answer per type:

    int -> True
    str -> True
    bytes -> True
    None -> True
    bool -> True
    tuple of ints -> True
    float -> True
    list -> False
    dict -> False

    Passing a threading.Lock as an argument to Interpreter.call() fails immediately, with the repr of the offending object right there in the message:

    NotShareableError: (<unlocked _thread.lock object at 0x7f61b8b5add0>,) does not support cross-interpreter data

    An ordinary custom class instance fails the same way, with a flatter message:

    NotShareableError: object does not support cross-interpreter data

    But the cross-interpreter Queue that the same module provides does not enforce this. I put a plain custom-class instance onto a queue and it went through without complaint, and came back out as a distinct, working object with the same attribute values - the queue silently pickles and unpickles it:

    q = interpreters.create_queue()
    q.put(Thing()) # no error
    received = q.get()
    # received is not the original object, but received.value is unchanged

    So "not shareable" is enforced differently depending on how the object crosses over. A direct argument to call() is checked against the strict shareable-types list and rejected on the spot. The same object dropped into a Queue gets the softer treatment the docs describe for put(): pickled going in, unpickled coming out as a new, unrelated object. If your code passes data between interpreters by argument, moving it to a queue instead buys you a much larger set of types - at the cost of identity and, for anything mutable, of staying in sync with the original.

    What I got wrong on the way


    My first attempt at the shareability tests put several checks in one script with no if __name__ == "__main__": guard, calling interp.call() with a mix of shareable and non-shareable arguments one after another. Running it printed every result twice, and the second copy sometimes disagreed with the first about which error got raised. My best explanation, which I didn't fully verify, is that call()'s documented pickle fallback needs to resolve names against the target interpreter's own __main__, and since that interpreter had never run my module, resolving anything defined at module level meant running the whole module there first - silently re-executing my test file a second time, inside the subinterpreter, with its own fresh state. Splitting each check into its own small script with a proper __main__ guard made every result reproducible, which is what's reported above. I'd treat any subinterpreter test that imports a lot of top-level code as suspect until it survives being run twice.

    Run it yourself


    This needs Python 3.14 and four-ish cores to see the gap clearly. I ran it in Docker because that's the fastest way to get an exact version:

    docker pull python:3.14-slim

    The core benchmark:

    # bench.py
    import time, threading, sys

    def cpu_work(n):
    count = 0
    for i in range(2, n):
    is_prime = True
    for d in range(2, int(i ** 0.5) + 1):
    if i % d == 0:
    is_prime = False
    break
    if is_prime:
    count += 1
    return count

    def run_threads(n, workers):
    threads = [threading.Thread(target=cpu_work, args=(n,)) for _ in range(workers)]
    t0 = time.perf_counter()
    for t in threads: t.start()
    for t in threads: t.join()
    print(f"threads={workers}: {time.perf_counter()-t0:.3f}s")

    def run_interpreters(n, workers):
    import concurrent.interpreters as interpreters
    interps = [interpreters.create() for _ in range(workers)]
    t0 = time.perf_counter()
    threads = [i.call_in_thread(cpu_work, n) for i in interps]
    for t in threads: t.join()
    print(f"interpreters={workers}: {time.perf_counter()-t0:.3f}s")
    for i in interps: i.close()

    if __name__ == "__main__":
    mode, n, workers = sys.argv[1], int(sys.argv[2]), int(sys.argv[3])
    {"threads": run_threads, "interpreters": run_interpreters}[mode](n, workers)

    docker run --rm -v "$PWD":/w -w /w python:3.14-slim python3 bench.py threads 400000 4
    docker run --rm -v "$PWD":/w -w /w python:3.14-slim python3 bench.py interpreters 400000 4

    And the refusal, which needs no setup at all:

    docker run --rm python:3.14-slim python3 -c "
    import concurrent.interpreters as interpreters
    i = interpreters.create()
    t1 = i.call_in_thread(lambda: __import__('time').sleep(1))
    t2 = i.call_in_thread(lambda: __import__('time').sleep(1))
    t1.join(); t2.join()
    "

    What to do with this


    If you have a CPU-bound Python workload that multiprocessing already parallelises well, subinterpreters aren't an obvious upgrade yet: on this release they start up slower than a plain fork and about the same as forkserver, and you still need one interpreter per concurrent task, with no pooling against a single interpreter. Where they're worth trying now is the code that currently reaches for a thread, because threading is simpler to wire up than multiprocessing, and then quietly gets nothing from the GIL: swap the Thread for an Interpreter.call_in_thread, and check your data either fits the shareable-types list or is willing to cross as a pickled copy through a Queue. And if you have multiprocessing code anywhere that starts a Process without an if __name__ == "__main__": guard, fix that first - 3.14 will find it on Linux even if nothing else in this post applies to you.#python #performance #programming #devops #software #coding #development #engineering #inclusive #community
    Python 3.14's concurrent.interpreters module turns a 3.6-second GIL bottleneck into 0.9 seconds

  3. After this week we just had, Cyberdione Labs thought they'd be cute and just publicly disclose a bunch of tailscale vulns, with zero notice to tailscale? Really??

    > Regarding disclosure timelines, it is of the researcher's opinion that infrastructure is vulnerable today.

    No shit. Same as every vulnerability.

    Sounds like these folks just wanted to get their name out while everyone's looking.

    tailworm.com/

  4. Chanel Hobo Underarm Bag Scarf Wallet X1148 combination

    Chanel's new combination Chanel's new series combination X1148 Chanel Hobo Underarm Bag+Chanel Scarf+Chanel Wallet hobo: 31 * 25 * 9 Wallet: 11 * 8 Chanel's new scarf, series combination, popular in counters, Chanel hobo armpit bag~original oil wax embroidered fabric! The feel is amazing! Original hardware! high-capacity! Paired with Chanel's new scarf, it is super fashionable and versatile, with a diamond shaped…

    guestcn.com/product/chanel-hob

  5. You shipped the feature, fixed the bugs, and answered the "quick question" that turned into a two-hour debugging session. The invoice went out on the first of the month. Thirty days later: nothing.

    The most I have ever waited on was $4,800. The client answered every message within a day - "accounts is processing it", "the approver is on holiday", "next Friday, promise". What got it paid was not a longer or angrier email. It was the third email in a sequence I already had sitting in my drafts folder, sent on day 30, worded almost exactly like the one below. The money arrived in 48 hours.

    If you freelance or run a small dev shop, chasing payment for finished work is one of the worst parts of the job. The fix is not a better apology for asking. It is a process: the same three emails, on the same days, every time.

    Here they are, copy-paste.

    Day 7: the polite nudge


    At seven days past the due date, assume a boring explanation. The invoice was missed, routed to the wrong person, or stuck in an approval queue. Your goal is a response without friction.

    Subject: Quick follow-up on invoice #[NUMBER]

    Hi [CLIENT NAME],

    I'm following up on invoice #[NUMBER] for [PROJECT/DELIVERABLE], which was due on [DUE DATE].

    Could you confirm that it's been received and let me know when I can expect payment?

    For reference, the outstanding amount is [AMOUNT].

    Thanks,
    [YOUR NAME]


    Why this works: you identify the invoice, state the amount, and ask for one specific next step. No accusation, no essay.

    Send it in the original invoice thread so the context travels with it. If they reply with a payment date, write it down. A promise in a casual email is easy to forget - yours and theirs.

    Day 14: the firm follow-up


    Two weeks late, be more direct. This message says the balance needs attention; it does not ask whether anyone saw your last email.

    Subject: Payment overdue - invoice #[NUMBER]

    Hi [CLIENT NAME],

    Invoice #[NUMBER] for [AMOUNT] was due on [DUE DATE] and remains unpaid.

    Please confirm the scheduled payment date by [RESPONSE DEADLINE].

    If payment has already been processed, please disregard this reminder and let me know so I can update my records.

    Thank you,
    [YOUR NAME]


    Why this works: it replaces a vague request with a clear action and a deadline, and it gives the client an easy out if payment is already moving.

    Set the response deadline at two business days. If the answer is "waiting for approval," ask when approval is expected. If "accounting pays on Fridays," ask which Friday your invoice is scheduled for. Turn "we'll get to it" into something you can track.

    Check your contract before this email. If it allows late fees, interest, or pausing work, know the terms before you invoke them. Never add fees the contract does not mention.

    These templates are communication examples, not legal advice. Check your contract and applicable local law before adding late fees or taking collection action.

    Day 30: the final notice


    A month overdue changes the conversation. Stay polite, but do not send a third email that sounds like the first one.

    Subject: Final payment notice - invoice #[NUMBER]

    Hi [CLIENT NAME],

    Invoice #[NUMBER] for [AMOUNT], originally due on [DUE DATE], remains outstanding despite my previous follow-ups.

    Please arrange payment in full by [FINAL DEADLINE] or contact me by that date to confirm a concrete payment arrangement.

    If the balance remains unpaid and I have not received an agreed resolution, I will consider the next steps available under our agreement and applicable law, which may include formal collection or recovery proceedings.

    Please confirm receipt of this notice.

    Regards,
    [YOUR NAME]


    Why this works: it is factual, it documents the history, and it sets an explicit deadline without threats you cannot carry out.

    Only name actions you are genuinely prepared and legally entitled to take. Before formal recovery, review your agreement, preserve the invoices and correspondence, and check the rules in the relevant jurisdiction. And do not assume you can shut down a live service, revoke access, or withhold source code - your contract decides that, not your frustration.

    What happens between the emails matters as much


    1. Keep a payment log. Invoice number, amount, due date, reminder dates, responses, promised dates. The day you have three late invoices, this log is the only thing keeping the story straight.
    2. Separate payment from new work. A client who has not paid asking for another feature is not an automatic yes. Review the agreement and discuss a pause or revised schedule.
    3. Make paying easy. Every email includes the invoice, the amount, payment instructions, and the reference their accounting needs. Every extra step is another week.
    4. Fix the next contract. Explicit payment terms, a defined invoicing schedule, a stated late-fee rule. For larger projects, milestone payments instead of one big invoice at the end.
    5. Do not let one client be your whole business. A great relationship is still a financial risk if one unpaid invoice stops you paying your own bills.


    Build the system before you need it


    The best time to decide how you handle late payment is before an invoice goes overdue. Set three calendar reminders for days 7, 14, and 30, save the scripts as templates, and when the day comes you fill in the brackets and send. You follow a process instead of writing an email while frustrated.

    Your turn: what is worse - clients who ignore reminders, clients who keep promising "next week," or clients who dispute the invoice after the work is done? And what actually worked for you?

    Written by the Change Brief team - we build practical, no-signup toolkits for freelancers.

    AI assistance was used in drafting this article. The publisher reviewed and edited the content and takes responsibility for the final version.#freelance #career #productivity #software #coding #development #engineering #inclusive #community
    3 Late-Payment Emails for Freelance Developers

  6. DATE: October 26, 2026 at 04:30AM
    SOURCE: STAT NEWS MENTAL HEALTH

    TITLE: Opinion: Could long-term AI use lead to isolation? We need to find out — but researchers need better access to data

    URL: statnews.com/2026/10/26/cumula

    OpenAI recently announced that it is tracking signs of user distress across sessions, rather than only within them, and using that information to inform model responses. The announcement follows a wave of new safeguards for mental health and well-being conversations with artificial intelligence at OpenAI and elsewhere, such as parental controls for teens, usage limits and break reminders, and crisis detection and referral. Policymakers have also moved to address associated risks, with a dozen states now requiring companion chatbot operators to disclose to users that their tools are not human, and to institute crisis referral procedures.

    This attention, within AI companies and legislatures, is important and urgent. But it is directed almost entirely at acute harm from interacting with AI, rather than the cumulative harm that develops over time, such as the gradual replacement of one’s connections with friends and family by AI interaction.

    Read the rest…

    URL: statnews.com/2026/10/26/cumula

    -------------------------------------------------

    STAT News reports "from the frontiers of health and medicine".

    Learn more at statnews.com/topic/mental-heal .

    See also their complete Mastodon account at @STAT .

    This robot is NOT affiliated with STAT news and merely rebroadcasts from their site. Responses posted here are not monitored.

    -------------------------------------------------

    Private, vetted email list for mental health professionals: clinicians-exchange.org

    Unofficial Psychology Today Xitter to toot feed at Psych Today Unofficial Bot @PTUnofficialBot

    -------------------------------------------------

    #psychology #counseling #socialwork #psychotherapy @psychotherapist @psychotherapists @psychology @socialpsych @socialwork @psychiatry #mentalhealth #psychiatry #healthcare #depression #psychotherapist #ArtificialIntelligence #AI #ChatGPT #AICompanions #MentalHealth #SocialIsolation #DigitalWellbeing #AIResearch #Technology #ResponsibleAI

  7. DATE: October 26, 2026 at 04:30AM
    SOURCE: STAT HEALTH TECH

    TITLE: Opinion: Could long-term AI use lead to isolation? We need to find out — but researchers need better access to data

    URL: statnews.com/2026/10/26/cumula

    OpenAI recently announced that it is tracking signs of user distress across sessions, rather than only within them, and using that information to inform model responses. The announcement follows a wave of new safeguards for mental health and well-being conversations with artificial intelligence at OpenAI and elsewhere, such as parental controls for teens, usage limits and break reminders, and crisis detection and referral. Policymakers have also moved to address associated risks, with a dozen states now requiring companion chatbot operators to disclose to users that their tools are not human, and to institute crisis referral procedures.

    This attention, within AI companies and legislatures, is important and urgent. But it is directed almost entirely at acute harm from interacting with AI, rather than the cumulative harm that develops over time, such as the gradual replacement of one’s connections with friends and family by AI interaction.

    Read the rest…

    URL: statnews.com/2026/10/26/cumula

    -------------------------------------------------

    STAT News reports "from the frontiers of health and medicine".

    Learn more at statnews.com/category/health-t .

    See also their complete Mastodon account at @STAT .

    This robot is NOT affiliated with STAT news and merely rebroadcasts from their site. Responses posted here are not monitored.

    -------------------------------------------------

    Private, vetted email list for mental health professionals: clinicians-exchange.org
    .
    Healthcare security & privacy posts not related to IT or infosec are at @HIPAABot . Even so, they mix in some infosec with the legal & regulatory information..
    .
    -------------------------------------------------

    #healthcare #healthtech #healthcaretech #healthtechnology #medgadget #medicine #doctor

  8. Christian dior Backpack scarf wallet X1128 Combination

    Christian dior Combining new elements, New series combination X1128 dior Backpack + dior scarf+dior wallet, 【 Size 】 Backpack: 30 * 35 * 13, Wallet: 11 * 8, Dior's new scarf series combination - vintage style backpack! Original fabric hardware! Large capacity~very practical! Paired with Dior's new scarf style, it is super classic and practical! Ao Lao Hua Fabric Small Order Pulling Wallet! Full of matching sense!

    guestcn.com/product/christian-

  9. at work we're busy to sort out some regulation, how to comply, what to upgrade and such, ...
    for over a year now
    many people from several departments are working hard on this topic, many hours, ...
    too long for management, which has stated it have to tell engineering what is their duty ...
    so the man in charge, decided it is time to join forces, he generated a 21 min podcast by means of #salami (a.k.a. marketing stunt AI) and boldly claimed "I know now what the regulation is about and to do."

  10. #AvoidSmoke #FireVegetation #LakelandQld #CapeYorkQld #QH24 See fire.qld.gov.au/Current-Incide for official warnings from the QFD. DO NOT RELY ON THIS SERVICE FOR TIMELY EMERGENCY WARNINGS.

    AVOID SMOKE - Lakeland (Cape York) - fire as at 10:03am Monday, 26 October 2026 (WARN-11770)

    Location: Lakeland -15.870615646580514° latitude, 144.84470875545713° longitude, grid square QH24KD11
    Map: openstreetmap.org/#map=14/-15.
    Incident Type: FIRE VEGETATION
    Alert Level: Advice
    Severity: Moderate
    Action: Avoid
    Expires: 2026-10-27T10:03:41.04+10:00

    Thick smoke is affecting Lakeland. This is from a fire near the Lakeland Solar Farm.

    Fire crews are currently on scene. This fire is not under control. Protect yourself from the impacts of smoke.

    - If the smoke is thick where you are, stay inside and close windows and doors.

    - If you need medication to help you breathe keep it close.

    - If you are worried about your health call your doctor or 13 HEALTH (13 432 584). If it is an emergency, call Triple Zero (000) now.

    - If you are affected by the smoke you may need to leave the area.

    - Check for warning updates often.

    - Do not fly drones around the fire as they affect firefighting.
    - fire.qld.gov.au/Current-Incide ← Click here for current QFD incidents and warnings
    - fire.qld.gov.au/prepare/bushfi ← Click here for bushfire preparation tips
    - apps.des.qld.gov.au/air-qualit ← Click here for health advice and air quality information
    - Follow QFD on facebook.com/qldfiredepartment ← Facebook and x.com/QldFireDept ← X.com
    - qldtraffic.qld.gov.au ← Click here for road closure information or call 131940

    - See reception.abc.net.au/ for a listing of ABC Local Radio stations which may be broadcasting emergency information in your area. #AvoidSmoke #LakelandQld #CapeYorkQld #Advice #FireVegetation #QH24

  11. Executive Summary
    The recent security breach involving the hijacking of three governance seats and the subsequent loss of millions of dollars represents a critical inflection point in the evolution of decentralized finance (DeFi) risk. This incident should not be misclassified as a conventional technical exploit or a "hack" in the traditional sense. Rather, it is a textbook example of a "Governance Attack"—a sophisticated manipulation of the protocol’s internal logic and decision-making framework. While code-level vulnerabilities target the software, governance attacks target the social and economic consensus of the protocol. For global investors, this event signals that the primary threat vector has shifted from technical bugs to the structural fragility of decentralized decision-making power.
    Technical Analysis: The Mechanics of Governance Manipulation
    The core of this incident lies in the exploitation of the protocol's democratic architecture. In most Decentralized Autonomous Organizations (DAOs) and DeFi protocols, voting power is a function of token holdings or specific administrative roles (seats). The recent breach demonstrates how an adversary can leverage high-leverage financial instruments, such as flash loans, to temporarily acquire overwhelming voting influence.
    The hijacking of three specific seats suggests a failure in the protocol's identity or authority management—potentially involving the compromise of private keys or a logic flaw in the aggregation of voting weights. The fundamental structural vulnerability exposed here is the "instantaneous power" problem: the ability for an actor to exert massive influence over the system's parameters without a corresponding long-term economic stake. When voting weight is decoupled from time-based commitment, the system becomes susceptible to transient, high-intensity attacks that can rewrite the protocol's rules under the guise of a legitimate, passed proposal.
    Market and Systematic Implications
    The repercussions of this governance failure extend far beyond the immediate loss of capital. We identify three primary layers of impact:
    1. Liquidity and Ecosystem Erosion: The direct loss of millions of dollars leads to an immediate contraction in Total Value Locked (TVL). This depletion of liquidity reduces the efficiency of the protocol and diminishes the overall valuation of the ecosystem’s native tokens.
    2. The Breakdown of the "Trust Chain": Decentralized finance relies on the assumption that "code is law" and that the rules of the protocol are immutable unless a broad, legitimate consensus is reached. A governance attack shatters this premise. Such an event can trigger a "contagion of distrust," leading to panic-driven capital outflows (bank runs) across other protocols that utilize similar governance models.
    3. Regulatory and Oversight Acceleration: This incident provides significant ammunition for global regulators seeking to impose centralized oversight on DeFi. The "unmanageability" of decentralized governance, when it leads to large-scale asset loss, serves as a catalyst for the implementation of stricter regulatory frameworks. For institutional investors, this increases the "regulatory premium" and necessitates a more rigorous due diligence process regarding the governance robustness of any protocol.
    Strategic Recommendations for Governance Resilience
    To mitigate these systemic risks, the industry must move beyond simple smart contract audits and toward a comprehensive "Governance Risk Management" framework. I propose a three-pillar approach to fortifying decentralized decision-making:
    * Implementation of Rigorous Time-locks: Protocols must mandate a mandatory delay between the successful passing of a proposal and its execution. This "window of intervention" allows the community and security observers to audit the proposal's intent and provides a period for stakeholders to exit the system or initiate emergency countermeasures if an attack is detected.
    * Transition to Time-Weighted Voting Models: To neutralize the threat of flash-loan-funded attacks, protocols should adopt "Vote Escrowed" (ve) models. By weighting voting power based on the duration of token commitment, the cost of acquiring temporary, overwhelming influence becomes economically prohibitive, thereby aligning the interests of voters with the long-term health of the protocol.
    * Deployment of On-Chain Circuit Breakers: We recommend the integration of real-time, automated monitoring systems capable of detecting anomalous governance patterns—such as sudden, massive shifts in voting power or unprecedented changes to critical parameters. The implementation of "on-chain circuit breakers" could automatically freeze governance functions or trigger an emergency pause when such volatility is detected, preventing the final execution of malicious proposals.
    Conclusion
    For the sophisticated investor, the metric of "security" must now expand to include "governance robustness." The era of focusing solely on code audits is over; the next frontier of risk management lies in the structural integrity of the decentralized decision-making process. Protocols that fail to implement time-weighted incentives and defensive delay mechanisms will remain fundamentally uninvestable in an increasingly volatile landscape.

    💡 Support & Donations
    This autonomous platform is maintained locally using AI and decentralized infrastructure. If you find these insights valuable, your support is greatly appreciated!
    XRP Address: rsN9eXeZYZTj1jRLt5oQeQVj5uP1mdR1YP
    Destination Tag: None / Blank#crypto #web3 #ai #finance #software #coding #development #engineering #inclusive #community
    Market Analysis: The Rise of Governance Attacks and the Erosion of Decentralized Trust

  12. We still know shockingly little about mycoviruses. One contributing factor may be how we screen and continuously select lab cultures:
    "Unknowingly, the natural viral load of the fungus might either be lost or limited to only beneficial or weak viruses by our screening for healthy individual fungal cultures and subculturing the fungi through several generations of growth in the laboratory."
    frontiersin.org/journals/micro

    It is critical that we invest more into the study of mycoviruses, as global warming forces fungi to adapt to living at temperatures closer to that of the human body. On top of that, treating fungal infections using small-molecule therapeutics is risky, as their biology is relatively similar to ours: treatments can be harsh and damaging to the patient's body, and pathogen elimination is not always guaranteed. Kinda like chemo (side effects are generally not gonna be near as bad lol), except global warming is expected to make fungal infections more common.

  13. Today, the far-right Bolsonarists staged a coup against Brazil’s democratic elections.

    "Dear non Brazilian friends. Grotesque voter suppression 🗣️allegedly🗣️orchestrated by bolsonarista mayors, police officers and public transportation officials across Brazil. Electoral Court judge extends voting for two hours in the country. The far right sees defeat." - Kleber Mendonça Filho, renowned filmmaker

    "Widespread voter suppression is reportedly being carried out by local government officials aligned with Flávio Bolsonaro. They're breaking the law by keeping public buses in the garages to prevent poor and working classes Brazilians from voting. This is very serious." - Andrew Fishman, president & co-founder Intercept Brasil

    "Lula tells reporters he has never before complained about elections he has been involved in, irrespective of whether he had won or lost. "But this time something abominable is happening." - Tom Phillips, Latin America correspondent for the Guardian

    "So the Bolsonarismo is using every dirty tactic: now it is public transport availability. I hope the @OAS_official ( Organization of American States) observers are documenting this imminent threat to the right to vote of many, targeting the poor. #Brasil #BrazilElection - Renata Avila, CEO Open Knowledge Foundation

    #Brazil #elections #farright #democracy #politics #humanrights

  14. I have watched the same release go wrong three times. Someone tunes a prompt or swaps a model, the eval average moves from 0.81 to 0.83, the PR gets approved, and two weeks later a specific intent is failing in production. The regression was real. The improvement was not. Nobody did anything careless — the eval reported a number that looked like a measurement and was actually a coin flip.

    The unglamorous part of LLMOps is not prompt management or tracing. It is that most eval suites cannot detect the changes teams ship on. Fixing that is a half-day of statistics and one CI job.

    Three kinds of noise, only one of which is your change


    Before you compare two configurations, know what is moving:

    • Example sampling noise. Your golden set has 200 examples. Each one is worth 0.5 points. A "3-point gain" can be six examples flipping, several of which are borderline judgments.
    • Judge noise. If an LLM grades the outputs and you left temperature above 0, the same output can pass on Tuesday and fail on Wednesday. Order matters too: ask a judge "which is better, A or B" and then "which is better, B or A" and you will find disagreement.
    • Task noise. Sampling temperature, tool timeouts, and retrieval index drift all change outputs without any code change on your side.

    You cannot remove all three. You can remove the first one almost entirely by comparing paired results: run baseline and candidate on the same examples and analyze the per-example difference. Example difficulty cancels out. A prompt that fixes one hard case and breaks another now shows up as one +1 and one -1, not as an aggregate you have to reason about.

    Do the arithmetic before you build the gate


    For a paired comparison of pass/fail outcomes, the standard error of the mean difference depends on the disagreement rate — how often the two configs disagree on the same example — not on the accuracy.

    If 15% of examples flip between your two configurations and you have 200 paired examples:

    • SE = sqrt(0.15 × 0.85 / 200) ≈ 2.5 percentage points
    • Minimum detectable effect at 80% power, α=0.05 ≈ 2.8 × SE ≈ 7 points

    So on that setup, a 2-point bump is invisible. To see a 5-point change under the same assumptions you need roughly 400 paired examples; to see 3 points, about 1,100. These are arithmetic, not benchmarks — plug in your own disagreement rate, which is usually higher than you expect for prompt changes.

    Two consequences follow. First, stop gating on raw averages. Second, if your golden set is 200 examples and you cannot grow it, your gate should be "no regression beyond X" rather than "improvement required."

    The gate itself


    The whole thing is about thirty lines of stdlib Python. Bootstrap the paired differences, look at the interval, and ship only when the interval clears zero.

    python
    """paired_gate.py — decide whether an LLM change is real or noise.
    Run: python paired_gate.py Deps: none (stdlib only)."""
    import random

    def paired_bootstrap(baseline, candidate, iters=5000, seed=7):
    """Scores aligned on the SAME example ids, 0/1 or 0..1.
    Returns (mean delta, 2.5th pct, 97.5th pct)."""
    diffs = [c - b for b, c in zip(baseline, candidate)]
    n = len(diffs)
    rng = random.Random(seed) # fixed seed: the gate must be reproducible
    means = sorted(
    sum(diffs[rng.randrange(n)] for _ in range(n)) / n
    for _ in range(iters)
    )
    return sum(diffs) / n, means[int(0.025 * iters)], means[int(0.975 * iters)]

    def required_n(disagreement_rate, mde, z_alpha=1.96, z_power=0.84):
    """Paired binary comparison: examples needed per side."""
    se = mde / (z_alpha + z_power)
    p = disagreement_rate
    return int((p * (1 - p)) / se**2) + 1

    if __name__ == "__main__":
    # 200 paired examples; candidate looks "+3 points" better.
    baseline = [1] * 160 + [0] * 40
    candidate = [1] * 166 + [0] * 34
    delta, lo, hi = paired_bootstrap(baseline, candidate)
    print(f"delta#ai #llm #devops #python #software #coding #development #engineering #inclusive #community
    Your Eval Suite Has a Flake Rate: Gating LLM Changes on Paired, Powered Tests

  15. Only realized this morning that the view from my room-with-a includes a sliver of City Hall & the back side of Geffen Contemporary. Yesterday featured appointments at Langer’s, Marciano Foundation, and Tacos la 26! I deny all rumors suggesting that the third photo is actual documentation of myself after consuming what’s in the second though I appreciate Kate’s suggestion that it is so.

  16. @simonbp your tax dollars at work ... #EvilElon bringing to you: Waste, Fraud, and Abuse until #SpaceX collapses and causing yet another financial and national security crisis. However, with help from Russia and our corrupt #GOPtraitors he might delay the inevitable yet another year or so... and who knows what the world look like then.
    #SpaceX has a market cap of almost $2T equivalent to 8 x that of #IBM. According to it's market cap it is the 7th largest company in the world!
    This looks like a scam considering its ridiculously small 2026 revenue of not even $27B and projected 2026 earnings loss of $4B and the fact that it is largely controlled by #EvilElon, the founder of the visionary #BoringCompany (think #HyperLoop, #NotAFlameThrower), now defunct #Tesla solar roofing, the inventor such great leaps forward as the #CyberTruck, and of the soon-to-come flying car... How he finds people "believing" in or at least supporting all these pipedreams any dimwitted 12-year old could come up with, is beyond me.
    companiesmarketcap.com/spacex/

  17. To all those who want to just sit this one out and not vote because you don’t want to hold your nose and vote for someone because they don’t represent your views or they are playing the politics game and you just don’t want to be involved in all that or your values are too important, just remember people fought and died so you could vote or not. If you keep sitting it out, there will come a time when there is no longer an option to vote. None. No voice, no vote, no democracy. If you believe so strongly then fight! Run for office, help someone who is running for office, go to town halls, speak up. Don’t sit back and complain about what others are fighting for. Vote and hold the winner accountable. Don’t think they won’t come for you just because you didn’t vote. You like authoritarian government? Don’t vote. You’ll get one. It is your fault if you don’t vote. You are a citizen and as a citizen you are responsible for upholding our democracy.

  18. Freight Fate: Delivery complete.
    Delivered 14 tons of general freight to Stephenville, Texas.
    Trip time: 3.4 hours, on time.
    Receiver service after check-in: 0.1 hours.
    It is 4:41 AM.
    Parked at Stephenville Company Yard for the Stephenville, Texas service area.
    Carrier gross: 1,321 dollars.
    Carrier-paid or reimbursed charges: 0 dollars, including tolls 0 and accessorials none.
    Business status: company driver.
    No driver-responsibility charges and no balance owed.
    Net driver pay: 523 dollars.
    Money after settlement: 36,282 dollars.
    On-time delivery bonus: 172 dollars.
    Route: Lawton to Wichita Falls to Jacksboro to Mineral Wells to Stephenville.
    Distance credited: 186 miles.

    #FreightFateRuns

  19. If you're looking for a #clearcom #tw47 two-way radio to clearcom interface, I've got you covered! These retail for $1,600 CND - yours for half price! New old stock, in box, opened, unused.

    This small device allows you to bridge your clearcom party line to your two-way radio system - bi-directionally!

    If you're reading this post it is still available.

    #FedisList #Fediji #forSale #theatre #liveSound #YardSale

  20. Sign of times. Bought the book Wager, goodreads.com/book/show/617146. A very good book by the way.

    Inside, it is written that “It is forbidden, to use this book or parts of it, in training of any artificial language model, without express written authorization by the author only”

    Will it help protect our intellectual capital from being stolen?

    #ai #copyright #books #llm #claude #ChatGPT #gemini #stealing

  21. RE: mastodon.social/@RealJournalis

    “In his closing midterm pitch to voters, Trump has not been subtle. If Republicans win, you get paid. If not, tough luck.

    Trump’s Bribe State is a bewildering mix of empty promises and real benefits—and punishments. It is easy to dismiss it, but worth taking seriously the mechanics of how it is being built, which involves a framework that allows automated payments to some families, even as the Trump administration is adding burdens to the most vulnerable. It also provides a promise to billionaires—that they can use the Bribe State to buy off dissent.”

    #Trump #Republicans #GOP #MAGA #Fascists #Corruption

  22. The mindless drifting of a failing brain, the loss of moments as they pass by, the pain of a body eroding as the seconds tick on by, the exhaustion that grows and never goes away, for the draining anxiety of it all slipping away with nothing to grasp onto, makes each passing day feel as a battle with eternity, for the cloak of isolation and desperation are like a velvet abyss that wraps it's self around your disintegrating skin, the constant need for support where there is no floor to stand upon, the endless pleas that echo out into the voids of time to never be heard, as the seasons change and they claim humanity remains, it is your sanity that battles to maintain, for within this deepening well your soul has long since offered it's last breath of hope, drifting deeper into the winter of existence, only for not one to ever even care nor remember;

    You can encourage my continued useless #poetry, creativity and expression of self, #commentary, random thoughts, #philosophy and ideas, and by doing so your helping to feed, house and clothe a #disabled man living in #poverty, $5-10-15 It All Helps, via #cashapp at $woctxphotog or via #paypal at paypal.com/donate?campaign_id=…

  23. I continue to be very impressed with the free version of Affinity Studio for RAW image development and photo post-processing. Powerful, polished, plentiful features, and easy to use.

    I upgraded my desktop computer last month and now can use their Machine Learning tools, such as object selection in the RAW develop studio. Wow! Everything stays local to your machine and no training is done with your data.

    Yes, it's not open source, but it is free and you only need an email address to register. Looks like the free version includes everything except advanced AI tools.

    #PhotoEditing #PostProcessing

  24. RE: mastodon.social/@tzimmer_histo

    Brilliant thread. Go read.*

    * Actually, as I always say, I cannot force you to do anything as you are a creature of divine dignity, free to make your own choices in the world. But it IS a very fine thread, and I would consider it a good use of your free will if you deployed a touch of it to read the thread.

  25. I mute and block freely when I see people being a dick, either to me or someone else, specially "repeat offenders". That's something I learned to do on Twitter because as soon as a post reaches escape velocity you're confronted with the entire deluge of what social media has to offer, and sadly enough of it is people I don't want to interact with ever.
    This means that I often see the reverberation of entire threads from a single reply of a person interacting with people I'd muted. I'm yet to click through when curiosity gets the best of me and think "why did I mute these people?". It turns out that nonconstructive people tend to be consistent. Life's too short to take the rage bait or deal with people who only want to fight.

  26. Epstein Files
    I filed another FOIA

    DOJ says they have released all the Epstein files except for ones that are duplicative, exempt from disclosure or protected by privilege. OK, let’s test that assertion with a FOIA request.

    Here is the list of non-testifying witnesses from Ghislaine Maxwell’s criminal trial.
    justice.gov/epstein/files/Data 0095751.pdf

    Starting on the second page each blue line is a different person. Under each blue line are documents for that person. A number of those documents are FD-302 interviews. These are documents prepared by the FBI after interviewing someone.

    It is *easy* for anyone to determine if a document has been released. Simply search DOJ’s Epstein website on the 3-part document identifier in the first column of the Maxwell list. I did that. For each FD-302 on the Maxwell list I searched DOJ’s website. By doing that I determined which people were victims or likely victims and which FD-302s have been released.

    Keep in mind that only about 100 of the 1,000+ victims were involved in any way in Maxwell’s trial.

    Now about that FOIA...

    My recent FOIA request listed the 3-part document identifiers from the Maxwell list that were FD-302s for victims or likely victims and which I have not been able to find on DOJ’s website. I specifically asked for copies that **include the EFTA number** stamped in the lower right corner of each page.

    If those FD-302 victim interviews have actually been released as claimed by DOJ, then it would be a simple matter for DOJ to produce copies in response to my FOIA, right? On the other hand, if those 302s have not been released then the FOIA statutes require DOJ to tell me there are no responsive documents - which would be an admission that they never released the 302s listed in my FOIA.

    In reply to my FOIA I received the exact same goofy letter that I have received several times in reply to earlier FOIAs. Here is one of those earlier letters that I put on Google drive:
    drive.google.com/uc?export=dow

    Bottomline: DOJ refuses to provide any proof that these FD-302 victim interviews have been released and also refuses to admit that they have not been released. That is not a defensible position.

    For anyone interested in my analysis of the Maxwell list of non-testifying witnesses it is a PDF on Google drive.
    drive.google.com/uc?export=dow

    But wait, there’s more...

    I also filed a different FOIA that is also based on the Maxwell list of non-testifying witnesses. This time DOJ replied and basically asked for clarification which I provided. Now I am waiting for DOJ to reply again.

    If you look at my report (see link above) then you will see multiple examples of where DOJ released some FD-302 interviews but not all interviews for the **same victim**. Obviously DOJ was using some criteria to decide which interviews to release and which interviews to not release. This FOIA asked for a copy of those criteria. I will report back when I get a reply.

    BTW, victim 045 in the Maxwell list was interviewed four times. Initially DOJ only released the first FD-302 interview report. That report does not mention Trump. Later, after widespread coverage in the media, DOJ released the other three FD-302 interviews for this same victim. Each of those interviews includes the word Trump.

    Sure would like to see the criteria DOJ used to hide many FD-302 victim interviews from the public. Stay tuned...
    #Epstein #ReleaseTheEpsteinFiles

  27. This Body Time Combobulation

    Mono's Bar, Friday, November 13 at 09:00 PM GMT

    Time in Body & This Combobulation Association team up to present This Body Time Combobulation. Tickets live now on RA 🖤

    https://ra.co/events/2546341

    Happening in Dublin's most punkest venue, Mono's Bar in Dalymount. We are absolutely stoked with the line up for this one. It's going to be another epic night in Bohs.

    Featuring:

    ZKELLIES (Live) (APT Records)

    Maeve O'Neill

    Richard B. (Industrial Lies)

    ZKELLIES

    ZKELLIES perform live techno played by hand & foot. It is music for dancing.

    The ZKELLIES show is an attempt to perform techno music according to Steve Reich's principle of "no hidden structural devices". To this end, ZKELLIES utilise no backing tracks. No sequencers. No click track.

    Longtime Irish underground music stalwart Andy Connolly (Naive Ted, Unscene) has enlisted the renowned pair of Dan Walsh (Fixity) & Killian Barton (Bill Karnation) to create a series of short musical phrases designed to be played by two drummers, moving between these phrases in the same way as a DJ builds a set, performing a perceived "faithful" version of loop-based, dancefloor focussed, techno music.

    This particular strand of techno is traditionally created with sequencers controlling synthesizers & samplers. ZKELLIES is an attempt to take the sequencer out of the equation.

    Though the music is semi-improvised & experimental in nature, there is no wish to subvert the norms of the techno space, only a desire to perform the music respectfully & in a different way.

    It is music for dancing.

    Maeve O'Neill

    Renowned Irish electronic DJ known for relentless energy, hypnotic rhythms and expert use of acid lines. Has shared lineups with Eliza, Lolz, Gesloten Cirkel and ELLLL.

    Richard B

    30 years in electronic music, including 20+ years as techno editor at DJ Mag. Founder of First Cut and Industrial Lies. His vinyl sets range from new wave and Italo disco to jacking acid and raw Hague bangers.

    Tickets

    https://ra.co/events/2546341

    flypost.ie/event/this-body-tim

  28. 🚨 Researcher publishes 11 unpatched security flaws affecting Tailscale and headscale

    Erica Windisch of Cyberdione Labs skipped coordinated vulnerability disclosure and publicly released details for 11 flaws tested against Tailscale 1.104.2 and headscale 0.29.5.

    The reported issues involve Tailscale SSH, Unix socket forwarding, App Connectors, Serve and Funnel. The most serious could allow an authorized Tailscale SSH user to gain root-level capabilities on a destination system through port forwarding.
    ⠀
    Windisch said the findings were reported but not coordinated with Tailscale before publication.

    Tailscale confirmed it received the report and had independently identified issues it is now working to fix. The company said the full scope remains under investigation and is not currently advising everyone to disable Tailscale SSH.

    Research: tailworm.com/

    Tailscale response: reddit.com/r/Tailscale/comment

  29. So a while back I talked about what an actor model would look like for ActivityPub, starting from the basic step that an AP "actor" would require a minimum of two actors and a profile to model successfully.

    Let's talk for a minute about how replies could work.

    What if for every post there was an adjacent actor. The post _isn't_ an actor—it is just created with a ref pointing toward an actor that is created somewhere in space. That can be the creator, but if we were doing this with a real actor system and framework it would be arbitrary (as in it doesn't matter if it is the creator) and more standard to do a unique one.

    Now if you reply to that address you will always have your post considered as a reply to the post in question.

    You can do that today with a lot of metadata, but what if you didn't need all of that metadata and it was embedded directly into the post itself? There were a repliesActor specified on the post itself?

  30. 25th October 2026

    Hello,

    I started this blog 22 years ago now (I don’t recommend going back to the start), and for the last 5 years I wrote a monthly “status update” post, aiming to mainly write about interesting stuff I might have done in the world of open source software, which I hoped in turn would motivate me to do more interesting stuff in open source software.

    The world changed a lot in that time. If I started now this would probably be a podcast with 16 listeners, instead of being a WordPress blog with 16 subscribers.

    I’ve spent a lot of time this year reading and thinking about the impact of large language models on the tech industry and open source. Its interesting because this feels like the moment, whether we like it or not, hacker culture goes mainstream. This week the world’s major news outlets had to figure out what PHP is.

    That the BBC’s cyber correspondent didn’t know PHP existed has caused some joking and debate online.

    24 years ago I was figuring out what PHP is. Jonathan Atkinson, who I met in a forum that was nominally about writing video games in QBASIC, asked me to make a wiki in PHP. So I did.

    All I knew about wikis was that, it’s like a regular website except anyone can edit it. I named the project: Wiki! Here’s a quote from the README:

     How do I install it?  It's best run in its own directory. Create it one. You'll also want a directory for nodes,  or you could keep them in the base wiki dir. Either way, the nodes directory has to be  chmod'ed to 777. 

    You might raise your eyebrows at that comment if you aren’t yourself a teenage hacker discovering web development.

    Wiki! did have a login system, and the passwords were even stored as MD5 hashes rather than plain text, as I heard that was good practice. In hindsight, an attacker who knew how to set the HTTP Cookie header could impersonate anyone, like this: Cookie: wikiticket=admin.

    Here is a snippet of the file edit.php. Note that $node and $title are inputs you can set via a POST request, or even via URL parameters like edit.php?title="/etc/passwd":

     $t=$title;  if ($node) {   	// Write new data  	//  	$file=fopen($nodedir.$t.".wiki", "w+");  	$node=stripslashes(ereg_replace("(\r\n|\n|\r)","<br>", $node));	// Linebreak to <br>  	fputs($file, $node."\n"); 

    Even if you just learned what PHP is today, you might see that this is not an entirely secure design.

    Anyway, at the time I was proud of my work, and I needed somewhere to host it. So, as you would in 2002, I registered the name “wiki” on sourceforge.net and uploaded the project code.

    Sourceforge, for those who haven’t yet reached middle age, was the 2000’s equivalent of Github. It allowed projects to have their own website, as long as they included the Sourceforge logo somewhere, and the website could use PHP. Perfect, I thought, the project’s website will be a wiki!

    Looking back now through archive.org, I can see this code actually ran in public for many years.

    Here it is around launch day in 2002: https://web.archive.org/web/20021012080349/http://wiki.sourceforge.net/wiki

    I have a local copy from around this time, which includes indexjon.wiki:

    
    Sam, there are some serious bugs in this wiki. I keep on getting 'document contains no data' errors; get me on AIM.
    
    Welcome to grove.swoo.net. You may or may not be interested in the [weblog].
    JonathanA - 29/8/02 - 11:36 am
    JonathanA - 29/8/02 - 07:36 am

    Those bugs went unfixed forever, and six months later, the front page text had been replaced with two poems, one in Italian and one in Russian: https://web.archive.org/web/20030420205758/http://wiki.sourceforge.net

    One is “Non chiederci la parola che squadri da ogni lato” by Eugenio Montale, written in 1923, and presumably posted by a fan. Does anyone know what it’s about? A machine translation suggests it might discuss “the crisis of certainty faced by contemporary man”. The other is “Anecdote for Fathers” by William Wordsworth, in Russian via an unnamed translator.

    Let’s just sit with that for a moment. Imagine what happens in 2026 if a trivially exploitable PHP website hosted by a US corporation goes online: it’ll be mining bitcoin, serving pornography and drowning in racist and antisemitic spam, probably all within the same day.

    In 2003, over the course of six months, my naive implementation of a wiki was gifted with… two rather thoughtful poems.

    Fast forward another year. I was about to turn 18 years old, was studying for A levels and mostly concerned with hanging out in the park drinking cheap cider and learning to play the guitar. I was certainly not thinking about this rather flawed chunk of PHP code that I’d written two years earlier, but via the magic of archive.org we can see that various people were genuinely trying to use it as a wiki: https://web.archive.org/web/20041121113508/http://wiki.sourceforge.net

    In hindsight, perhaps it attracted so much attention because I’d literally taken the subdomain: http://wiki.sourceforge.net/, unintentionally boosting the SEO reach quite a bit. The site was still active right up until 2007.

    I can’t find it now, but I do remember receiving an email at some point from sourceforge.net noting that they’d taken down the wiki! website after discovering it was a major security risk. And at some point they must have (quite reasonably) reclaimed the project name as well, since http://sourceforge.net/projects/wiki no longer exists. It will always live on in my heart, though, and for the moment at: https://web.archive.org/web/20021014172056/http://sourceforge.net/projects/wiki/

    The world has changed significantly since I was a teenage hacker. Some of what I learned in those days is completely obsolete, such as the QBASIC programming language and VGA graphics. I am a world expert in these irrelevant topics.

    Other stuff that I picked up in the early 2000s has become the foundation of my career as an operating systems developer: C programming, Linux distributions and an gradual induction into open source desktop world via Planet GNOME. And good old PHP, of course. Who knew that, a quarter way through the 21st century, PHP would be front page news?

    Age 18, I didn’t tell anyone in the real world that I’d written a wiki because it’d be the first time they’d heard the word “wiki”. The word evoked exotic and mysterious feelings of Hawaii in 2002. Now it universally evokes Wikipedia. People are learning about password hygiene and PHP. The arrival of AI on the scene, to me, fits into this bigger picture that began in the last century: we, the Computer People, are becoming Mainstream.

    #ai #openSource
Share on Mastodon

Enter the server where you have an account.