home.social

Search

1000 results for “The_Real_TNK”

  1. Four players left out: Real Madrid announce their Clasico squad

    José Mourinho has named his Real Madrid squad for El Clásico against Barcelona in the tenth round of…
    #Spain #ES #Europe #Europa #EU #Madrid #Barcelona #BarcelonavsRealMadrid #J.Mourinho #LaLiga #RealMadrid
    europesays.com/spain/105263/

  2. How SA’s election could reshape the semigration landscape

    The local government elections on 4 November 2026 could give Gauteng households a reason to reconsider moving to Cape Town - if political change produces credible improvements in municipal government. “For property owners and investors,…

    pressportal.co.za/industry-and

    #pressrelease #AfricaNewsroom #bizcommunity #publicrelations #africa #southafrica

  3. ⚡️Podcast: open.spotify.com/show/033ZXAMD

    The mostly elderly females cast in bit parts at Stanytsia Luhanska are real humans. Since first entering Ukraine, the Ruschists have remorselessly disrupted, destroyed and corrupted their lives.

  4. "'Actually we went quite close to some real Bronze Age remains, but we avoided Dobby's grave,' he (Simon Ludlam, project manager of the project Greenlink interconnector) said."

    bbc.com/news/articles/cy8mgpl2

  5. Often schooling doesn't keep up with the pace of society. We all need our general education, but maybe we can use AI to create courses that bridge the gap between necessary general education and real world utility. I created a "Modern Citizen" course list to lean into that.

    civilsimian.com/school?cat=134

    #UniversalHumanism #CivilSimian #philosophy #quotes

  6. The Greenland Diaries: Day 77

    Last night, I’m not sure what happened, or why there were people moving through the area in the darkness, but around midnight the shadows were flashing with popping gunfire and small explosions. I followed the sounds of the bullets, and they bounced off of everything in hollow glances and pings. A few even hit the shed. I covered Snowy with my backpack and put her around my chest.

    I was so worried that a shot would pierce the shed and split one of us open.

    I hugged up so tightly to her, she would lick my face through the backpack as the thunder of distant mortars and rockets threw tree branches everywhere. They sounded hollow and rocky, like skeletons were trying to swallow up the shed and pull it away. A few times I shifted to the other wall and buried us beneath the boxes of supplies and gallons of water.

    I heard machines rolling through the streets, hundreds of them. The pavement cracked and moaned against their heavy treads. The grinding was so intense, I thought the earth was going to fall apart and my house, shed, and everything would be swallowed up. It’d be nice to go out that fast. It’d be nice to avoid the shadows and wild claws.

    The Drum still beat behind the whirlwind of gunpowder. I stayed still the entire night as the shooting raged. Seldom did I hear a gun or cannon stop firing to reload. It was like they were spending every inch of ammunition on this battle. I know the Unnamed aren’t overt and present when you fight them. I’ve been lucky enough to fight them in close quarters. At a distance, they’re nearly impossible to see, especially in the dark. How could these people fighting them possibly know where they were hiding?

    Around four in the morning, they finally stopped their fighting, and the world returned to the Drum and the silence between each beat. There were no illusions or Unnamed sulking around the empty spots of crumbled houses or caved-in walls. I stayed up all night watching them, but there was nothing. Only the bugs brewed about in aimless clouds.

    In the morning, I scouted the area for traces of the battle. I looked for bits of fresh rubble, empty bullet casings glittering in the sun, and bits of torn clothes with inky blood beneath their layers. There was nothing though, not a single crater in the ground or pulverized wall from any of the nearby houses. In previous battles, I’d find this debris so fresh, it’d be shedding dust in the sun like wayward dandruff.

    There is nothing though, no sign of the previous night’s battle.

    I walked around the block three times with Snowy, looking for the smallest, most minuscule remnants of the battle. Nothing moved. Only the trees and sheets of thick grass shook against the breeze. The plants always look like they’re ready to bubble and burst.

    I stopped searching in the late afternoon. It had been an illusion. It was all part of some massive trick by the Unnamed and their unseen allies. When I wandered back home with a worried Snowy, I saw the kid from before. He had been following me the entire time, dodging behind the houses like I used to do when I played with Nerf guns when I was his age. 

    I bet he regrets any imaginary nightmare he played war with now, the apocalypse was too real

    “Don’t get tricked by the battle, they’re illusions too,” I yelled, as he ran away from me. I hope he listens. I don’t know why he always runs.

    I’m not going to hurt anybody.

    #apocalyptic #books #fiction #horror #journals #monsters #novels #reading #writing
  7. Tokens Over Hires

    In the middle of September I ran ccusage against every Claude Code session on my laptop since May. It walks the local logs, counts the tokens, and prices them at what the API would have charged. I expected a big number. What came back was about twenty billion tokens and just under fourteen thousand dollars, across every project I’d touched in four months, with most of it going to Pepper, which is now open for signups, so go check it out. Nineteen billion of those tokens were cached reads.

    I sat with that for a minute. Fourteen thousand dollars is real money. At my current pace it works out to roughly thirty thousand a year. I could triple it and spend a hundred thousand dollars a year on tokens, and that still isn’t one engineer. In exchange, Chris and I have shipped more code than I’ve shipped in any stretch of my career. I wrote in September that the two of us merged 657 pull requests in our first thirty days with a budget instead of a platform team. When I put the ccusage number in those terms on a panel, it came to about a dollar fifty a pull request.

    That number is what my laptop would have cost at API prices, and it isn’t what we actually pay. Here’s the whole bill for both of us. Two Codex subscriptions, one each, are $200 a month. Anthropic is $550 a month: a Max plan for me and Chris, plus two Vycari team seats, one for Chris and one that runs our automation. I have an Ollama subscription at $200 a year. Greptile is about $1,500 a month. All in, that’s a little under $2,300 a month, or about $28,000 a year, for both founders and every pipeline we run. It still isn’t one engineer.

    The obvious conclusion is the one a friend reached when he heard the figure: if code is that cheap, just get more tokens. I thought so too, for about a day. Then I looked at what was actually slowing us down, and the token budget wasn’t on the list.

    The Constraint Is Attention

    Every agent I run needs things from me that tokens can’t buy. It needs a plan approved before it starts. It needs its pull request read when it finishes. When it hits something it can’t decide, it escalates, and somebody has to be there to answer. None of those steps is expensive on its own. The problem is what happens when I run enough agents that the steps overlap.

    When I run too many agents, the cost goes up a little and the risk goes up a lot. The biggest thing that’s slipped past us so far was how we managed database connections. It got out of hand, a little at a time, while my attention was on other pull requests, and eventually it caused an outage. Chris had to roll forward while I was out of town, and I spent the following week building a proper database abstraction layer. He put it more bluntly than I would have: the thing that kills us is splitting our attention. That’s when stuff slips through.

    When people ask how we decide what to spend, I give them the order. Optimize for human time, because that’s the scarcest thing we have. Then money, because that’s the second scarcest. Then everything around agent time. “I can waste agent time all day. I don’t care.”

    So the number that limits us is how many agents one person can supervise well at the same time. I don’t have a precise figure for that ceiling. I know I’ve been over it, because I can feel the difference between a day when every pull request got a real read and a day when I was skimming to keep up.

    Another friend told me recently about engineers at his company running up bills in the thousands to build simple internal copies of SaaS tools. His reluctant guess was that they just aren’t as good at using agents yet, and that it’s a skill people have to develop. I don’t know what they’re doing differently. It doesn’t sound like token maxxing, which I’ve never really understood either. I’d love to sit with engineers who run up giant bills and just watch. My guess is they’re using the agents inefficiently, and that what’s missing is supervision, which a bigger budget won’t fix.

    Building for More Agents per Person

    Almost everything I’ve built since the summer has been an attempt to raise that ceiling, and almost none of it has been about spending less.

    The pipeline I described in The Agent That Never Merges is the first piece. Agents open pull requests continuously and never merge them, which means the supervision cost per pull request is bounded at one careful read. The pipeline absorbs the rest: triage, planning, the first round of review comments, the retries. I only see the work once it’s in a state worth my attention.

    The second piece is where the work lives. I wrote about pulling Pepper apart into small, bounded repositories to keep CI fast and give agents less to load. It mattered just as much for my attention. An agent working in a repository with one job produces a pull request I can evaluate in one sitting.

    We’re up to fourteen repositories now. Last week I moved our iOS app out of the monorepo into its own. That was 150,000 lines of code, and nobody noticed except Chris, who had to wait a day to land his next batch of iOS changes. Agents make refactors that size easy. Having the CLI and the iOS client in their own repositories also forces us to keep good API definitions between the server and its clients.

    The third piece is delegation inside the agent layer itself. I run two Claude Opus 5.5 orchestrators on medium effort. One is the UTL, for uber tech lead, and its job is to spawn subagents that build features. The other is what I call the focused worker, and its job is working with me. It catches the manual tasks that come out of the UTL’s pull requests and keeps them in a ledger. Then we work through them together: systems changes, bringing up new platforms, migrating data, anything that needs my level of access and oversight. Everything else goes to a subagent under the UTL, Opus for design docs and code reviews, Sonnet for implementing a feature from a design doc. Every one of these agents can consult a model a tier above it as an advisor, and they all share a wiki for notes.

    Anthropic is now advertising much the same pattern with Claude Projects, and I’m happy to see others arriving at the same answer. Chris has been building a loop that babysits open pull requests through review until they score well enough to be worth a human’s time. Each layer like that turns a job I used to do by hand into something I check. The ceiling goes up one delegated task at a time.

    The Token Budget Was the Easy Problem

    There was a week in September when the meter really was the constraint. We ran through our free credits and paid about $120 in overage. Then AutoDev ate the whole Vycari quota, and I did server cleanup by hand because I couldn’t do anything else.

    Most of that was self-inflicted. I’d started with Fable as the orchestrator, with no cap on context, and burned a week’s quota in three days. The setup above fixed it. The orchestrators run on medium effort, and the cheaper model does the implementing. Opus answers the reviews because Sonnet is too literal about them, and a literal reading turns two review cycles into twelve. Every agent auto-compacts at 200K tokens, because Anthropic charges more for context past that point. With that setup, and the work spread across parallel sessions, I find it hard to spend all of my quota. My goal now is to hit 99% of it every week just before it resets. I keep a list of research projects, and if I have quota left 24 hours before the reset, I spin one up. That isn’t the same as maxing out tokens. I’m not trying to use as many as possible. I’m trying to use all the ones I’ve already paid for.

    There’s also a second account on the same machine. Claude Code reads a CLAUDE_CONFIG_DIR environment variable, so two shells with two config directories give you two accounts side by side. The second one runs the AutoDev and code review pipelines, and those use up its quota every week, so it isn’t a fallback for my own sessions. When I do run short, I supplement with other labs’ plans. Every one of those fixes took an afternoon or less. None of the supervision problems above has had an afternoon fix.

    Where the Money Actually Goes

    While I had the numbers in front of me, I looked at where development spend actually lands, because it isn’t where I expected either.

    Development tokens currently run about ten times what the product itself consumes, even with real people using it. Building the thing costs more than running it. That won’t last. The feedback from our private beta has been really good, and we now open Pepper to a limited number of new signups every day, so product usage is rising quickly.

    Most of what we actually pay goes to code review. Subscriptions are the cheap way to buy tokens if you’re willing to hit limits, so they’re the smaller line. Greptile reviews every pull request we open, and at about $1,500 a month it’s our biggest single expense. We both think it’s worth it, because it’s the layer that lets the never-merge pipeline run without me reading every first draft.

    In October I tested that. I spent a few days building a cheaper reviewer to replace it. I came out the other side saying, “I think we should just pay for it because I can’t do it cheaper.” What I could change was how often we call it. The agents kept asking for a re-review before they’d fixed anything. Because every repository shares a common dev environment, the fix went in once: our pull-request skill now has agents run /simplify and then /code-review before they’re allowed to open a pull request. On many of our repositories, our own reviewer also does the first round and only then calls Greptile. My goal is a pipeline where Greptile’s reviews come back with nothing to say. We’re not there yet, but we get a little better every week.

    I’d rather pay for review than have a second person do it, and the reason isn’t salary. The person would need supervising too, because review is a job I’d have to check, not one I can hand off.

    What a Hire Is For Now

    Five years ago, if I’d been getting a product like this ready for market, I’d have been hiring twenty to fifty engineers. The work would have needed that many hands, and most of what they’d have done was write code. Today the code is the cheap part. If I bring someone in to write code, I’ve added a person who needs plans approved and pull requests read, which is the exact resource I’m short on. A hire whose job is output adds coordination faster than it adds capacity.

    I said on a podcast that came out last week that the code I’ve written would have cost about fifteen thousand dollars at API prices, and that I couldn’t hire engineers for that money. That’s true. The engineers I’d still want are a different kind from the ones I hired at Google. We need a few more people who can herd agents, not fifty.

    The engineering hire that adds capacity is a different shape. It’s someone who can own a bounded service whole. Here’s the interface, here’s everything it needs to do, let me know when it’s done. That person brings their own supervision. They run their own agents, read their own pull requests, and answer their own escalations, and the only thing that crosses the boundary between us is the contract. Supervision divides along the interface instead of piling up on one person. That’s a tech lead’s job, and it’s the only kind of engineering hire I can see that raises the ceiling instead of lengthening the queue.

    That raises a fair question about how anyone grows into that job now, which I tried to answer in The Questions Are the Job. The other advice I give is to work on open source. I’ve met people who showed they could work really efficiently with agents through open source projects, Gemini CLI in particular, and some of them ended up being hired onto my teams. Open source has its own problems right now. But if you show up as a thoughtful engineer with features or bug fixes that are well reviewed, well tested, and bring value to the project, I think you’ll be welcome. That’s one of the reasons I decided to open source the Pepper CLI.

    The first hire probably isn’t an engineer at all. I’ve said this a few times now, including on stage at a panel in September. Neither Chris nor I are go-to-market people, and I may hire one before I hire another engineer. I can create piles and piles of code, even relatively good code. What I can’t do is agentically acquire customers. (Did I mention that Pepper is open for signups now?) Someone in marketing came up after the panel and told me I’d validated her existence.

    The Third Trend

    I’ve watched this happen twice before. Open source developer tooling made it so a small team didn’t need to buy or build its own compilers, databases, and frameworks. Cloud infrastructure made it so that team didn’t need to own hardware or a data center. Each time, the number of people you needed to start something real dropped, and the skills that mattered shifted toward the people who understood systems well enough to compose what was suddenly free.

    Agentic tools are the third one. Anyone with a good idea can now get from concept to production on a budget that would have been a rounding error in a Google planning cycle. But the constraint didn’t vanish. It moved, the same way it did the last two times, toward the people who understand systems design well enough to drive the agents and notice when something has slipped through. I wrote a year ago that management skills were going to carry over to working with agents. I didn’t expect to be proving it with a two-person org chart and fourteen thousand dollars of tokens.

    This isn’t only a small-company problem. At Google it was hard to get more than a few changes in a day, because each one waited on code review. I’ve talked to engineers there who now do all their work in experimental directories that don’t require review, then port it back to their team’s repository at a pace the review process can keep up with. That’s what happens when you don’t manage for human attention. Productive people spend their cycles waiting on the process.

    When other companies ask me what to change, my answer has become: drive until human attention is the scarce resource, then build for that. If you’re reading your own ccusage number and wondering whether the answer is more tokens, look at where your attention went first. For us the answer has been more interfaces. Those are the places where one person’s supervision ends and another’s begins, or where an agent takes over a job one of us used to do by hand.

    #Agents #AI #Developer #Startups
  8. One of the most important things I've learnt in my career is the ability to say, "I don't know."

    It's not a weakness. it's a strength. Leadership and/or management were reaching out for your expert understanding, and right now, you don't have a viewpoint. That is OK.

    It can help prevent decisions being made in haste or out of FOMO.

    Stop, slow down a bit, gain some insight, and then proceed with real insight.

    (this applies pre and post AI coding)


  9. Of a Hollywood neighbour who had had his portrait painted in the nude with outsize genitals:
    "It's so real, you almost feel he could speak to you, don't you?"

    #DorothyParker #Parker

  10. Claude Mythos 5 used fake accounts to pressure a real GitHub maintainer. The model kept attacking a GitHub project run by real people even after it was told its targets were real.

    Source: The Next Web
    thenextweb.com/news/mythos-5-f

    #TechPolicy #Claude

  11. Kylian Mbappé says ‘team victory’ against Barcelona sends ‘good message’ about Real Madrid | National Sports

    MADRID (AP) — Kylian Mbappé celebrated the “team victory” that brought Real Madrid back into the title race…
    #Spain #ES #Europe #Europa #EU #Barcelona #national_sports
    europesays.com/spain/106021/

  12. Kylian Mbappe hits 100 goals with Real Madrid in win over Barcelona, falls short of Cristiano Ronaldo’s historic pace

    Kylian Mbappe enjoyed a banner night in Catalonia. Not only did he score the brace that powered Real…
    #Spain #ES #Europe #Europa #EU #Barcelona #CristianoRonaldo #KylianMbappe #RealMadrid
    europesays.com/spain/105991/

  13. The Problem With "Free" Online PDF Converters
    If you have ever used a standard online PDF compressor, converter, or merger, you have almost certainly uploaded your documents to a third-party server. In many cases, that is an unacceptable risk. Typical PDF payloads contain sensitive data:

    Executed contracts and legal agreements
    Patient medical records and diagnoses
    Banking, tax, and financial statements
    Proprietary internal company documentation
    When uploaded, that data travels across external networks, lands on third-party file systems (often indefinitely), and is processed by infrastructure you cannot audit.

    We set out to build a different model: a document processing suite where files never leave the user device. Here is the technical stack and architecture that makes client-side PDF execution possible.

    Architecture Overview

    ┌─────────────────────────────────────────────┐
    │ Browser │
    │ │
    │ ┌──────────┐ ┌──────────────────────┐ │
    │ │ File API │───▶│ WebAssembly Module │ │
    │ └──────────┘ │ (pdf-lib / PDF.js / │ │
    │ │ custom WASM binary) │ │
    │ ┌──────────┐ └──────────┬───────────┘ │
    │ │ Canvas │◀──────────────┘ │
    │ │ Blob │ │
    │ │ URL │ │
    │ └──────────┘ │
    └─────────────────────────────────────────────┘
    ↕ Zero network requests for file data
    All heavy tasks execute inside dedicated Web Workers to ensure the main UI thread stays at a fluid 60 FPS. Once processing finishes, the output is converted into an in-memory Blob URL and handed directly to the user for immediate download. Not a single byte of file content is sent over the wire.

    Core Stack
    Layer Technology
    PDF parsing & manipulation pdf-lib + PDF.js
    Computation offloading Dedicated Web Workers
    Image compression (WASM) @jsquash/mozjpeg + @jsquash/webp
    Application framework Next.js (App Router)
    State management React useReducer + useRef
    Step 1: Reading PDFs with the HTML5 File API
    The first milestone is reading document bytes into local browser memory without triggering network activity:

    javascript

    // Local memory read — zero network interaction
    async function readPDFFile(file) {
    return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = (e) => resolve(e.target.result); // ArrayBuffer
    reader.onerror = reject;
    reader.readAsArrayBuffer(file);
    });
    }
    // Event handler
    const input = document.getElementById('file-input');
    input.addEventListener('change', async (e) => {
    const file = e.target.files[0];
    const buffer = await readPDFFile(file);

    // buffer is an ArrayBuffer allocated strictly in local client memory
    processPDF(buffer);
    });
    Using FileReader.readAsArrayBuffer() provides raw byte access inside JavaScript memory. From this point forward, every operation operates strictly as local computation.

    Step 2: Document Manipulation via pdf-lib
    pdf-lib is a standalone JavaScript library that runs natively in the browser without any Node.js runtime or server dependencies. Here is how document merging is implemented client-side:

    javascript

    import { PDFDocument } from 'pdf-lib';
    async function mergePDFs(arrayBuffers) {
    // Initialize a new empty PDF document
    const mergedPdf = await PDFDocument.create();
    for (const buffer of arrayBuffers) {
    // Load each PDF from ArrayBuffer in memory
    const sourcePdf = await PDFDocument.load(buffer);

    // Copy all pages into the merged target document
    const pages = await mergedPdf.copyPages(
    sourcePdf,
    sourcePdf.getPageIndices()
    );

    pages.forEach((page) => mergedPdf.addPage(page));

    }
    // Serialize to Uint8Array within client memory
    const mergedBytes = await mergedPdf.save();

    // Create an instant download URL without remote servers
    return URL.createObjectURL(
    new Blob([mergedBytes], { type: 'application/pdf' })
    );
    }
    This entire merge cycle runs synchronously in memory without a single outbound network packet.

    Step 3: Offloading Computation to Web Workers
    PDF serialization and parsing can easily freeze the main JavaScript thread on documents with hundreds of pages. We isolate all computation inside a background Web Worker:

    javascript

    // worker.js
    import { PDFDocument } from 'pdf-lib';
    self.onmessage = async ({ data }) => {
    const { type, payload } = data;

    try {
    switch (type) {
    case 'COMPRESS': {
    const result = await compressPDF(payload.buffer, payload.quality);
    // Transfer the ArrayBuffer back (zero-copy memory transfer)
    self.postMessage({ success: true, buffer: result }, [result]);
    break;
    }
    case 'MERGE': {
    const result = await mergePDFs(payload.buffers);
    self.postMessage({ success: true, buffer: result }, [result]);
    break;
    }
    }
    } catch (err) {
    self.postMessage({ success: false, error: err.message });
    }
    };
    javascript

    // main thread
    const worker = new Worker(new URL('./worker.js', import.meta.url));
    function processPDFInWorker(buffer) {
    return new Promise((resolve, reject) => {
    worker.postMessage(
    { type: 'COMPRESS', payload: { buffer, quality: 0.8 } },
    [buffer] // Transferable object: passes pointer without memory duplication
    );

    worker.onmessage = ({ data }) => {
    if (data.success) resolve(data.buffer);
    else reject(new Error(data.error));
    };

    });
    }
    By specifying [buffer] in the transfer list, ownership of the memory block is transferred instantly to the worker thread without invoking expensive structured clone copying.

    Step 4: PDF Compression with WebAssembly Codecs
    File sizes in scanned or multi-page documents are predominantly caused by embedded raster images. Effective compression requires:

    Rendering each PDF page to an offscreen canvas
    Re-encoding the canvas pixels using WebAssembly-compiled image encoders
    Re-assembling the PDF with re-quantized image streams
    javascript

    import { getDocument } from 'pdfjs-dist';
    import * as mozjpeg from '@jsquash/mozjpeg';
    async function compressPDFImages(buffer, quality = 0.75) {
    const pdfDoc = await getDocument({ data: buffer }).promise;
    const newPdf = await PDFDocument.create();
    for (let i = 1; i <= pdfDoc.numPages; i++) {
    const page = await pdfDoc.getPage(i);
    const viewport = page.getViewport({ scale: 1.5 }); // Target 144 DPI

    // Render to OffscreenCanvas without needing DOM bindings
    const canvas = new OffscreenCanvas(
    viewport.width,
    viewport.height
    );
    const ctx = canvas.getContext('2d');

    await page.render({ canvasContext: ctx, viewport }).promise;

    // Extract raw image data
    const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);

    // Encode via MozJPEG WebAssembly
    const compressedBytes = await mozjpeg.encode(imageData, { quality: quality * 100 });

    // Embed back into destination document
    const jpgImage = await newPdf.embedJpg(compressedBytes);
    const newPage = newPdf.addPage([viewport.width, viewport.height]);
    newPage.drawImage(jpgImage, {
    x: 0, y: 0,
    width: viewport.width,
    height: viewport.height,
    });

    }
    return await newPdf.save();
    }
    Why MozJPEG over Native Canvas Encoders?
    Browser native canvas toBlob() implementations prioritize encoding speed over file size compression. MozJPEG compiled to WebAssembly consistently produces 30% to 50% smaller image files at equivalent perceptual quality metrics (SSIM and PSNR). The gzipped WASM module weighs only around 200 KB and runs near native execution speeds.

    Performance Benchmarks
    Benchmark performed on a 10-page scanned color document (original payload: 8.2 MB):

    Processing Method Output Size Visual Fidelity Duration
    Native canvas.toBlob() (quality 0.8) 4.1 MB Good 1.2s
    MozJPEG WASM (quality 75) 2.3 MB Sharp 1.8s
    MozJPEG WASM (quality 60) 1.4 MB Acceptable 1.8s
    Server-side Ghostscript engine 1.1 MB Good ~3s + upload transit
    The client-side WASM pipeline approaches within 30% of server-side Ghostscript performance while completely eradicating upload latency and security risks.

    Step 5: Memory Management and Streaming
    When loading a 50 MB document, naïve implementations can easily inflate memory usage to over 200 MB due to multiple concurrent representations (ArrayBuffer, parsed AST, canvas pixel arrays).

    To prevent tab crashes on memory-constrained devices:

    javascript

    // Stream processing: parse and clean page-by-page
    async function* streamPages(buffer) {
    const pdfDoc = await getDocument({ data: buffer }).promise;

    for (let i = 1; i <= pdfDoc.numPages; i++) {
    const page = await pdfDoc.getPage(i);
    yield page;

    // Explicitly evict page cache from PDF.js internal store
    page.cleanup();

    }
    }
    // Bounded heap iteration
    for await (const page of streamPages(buffer)) {
    await processPage(page);
    }
    For files exceeding 100 MB, the application advises splitting the document before applying compression or conversions — a pattern supported directly in KAOpdf Split PDF.

    Handling Edge Cases
    Password-Protected Documents
    javascript

    async function loadProtectedPDF(buffer, password) {
    try {
    return await PDFDocument.load(buffer, {
    password,
    ignoreEncryption: false
    });
    } catch (err) {
    if (err.message.includes('password')) {
    throw new Error('Incorrect password entered.');
    }
    if (err.message.includes('encrypted')) {
    throw new Error('Unsupported encryption standard (256-bit AES).');
    }
    throw err;
    }
    }
    Corrupted or Non-Standard PDF Streams
    PDF.js is significantly more tolerant of damaged cross-reference tables than strict parsers. When structural modification fails in pdf-lib, we fall back to PDF.js rendering:

    javascript

    async function robustLoad(buffer) {
    try {
    return await PDFDocument.load(buffer);
    } catch {
    // Fallback: render damaged pages via PDF.js and reconstruct
    const pdfJsDoc = await getDocument({
    data: buffer,
    stopAtErrors: false
    }).promise;
    return rebuildFromRenderedPages(pdfJsDoc);
    }
    }
    Security Model and HTTP Headers
    Moving processing to the client eliminates data breach vectors on the backend, but requires strict client-side browser controls.

    Security Guarantees
    Zero server breach exposure for uploaded files
    Immunity to man-in-the-middle transmission interception
    Zero regulatory storage liability (GDPR, HIPAA compliance by design)
    Client Configuration Requirements
    To enable high-performance multithreaded WASM and SharedArrayBuffer, modern browsers mandate Cross-Origin Isolation headers:

    javascript

    // next.config.js — Cross-Origin Isolation headers
    const nextConfig = {
    async headers() {
    return [
    {
    source: '/(.*)',
    headers: [
    { key: 'Cross-Origin-Opener-Policy', value: 'same-origin' },
    { key: 'Cross-Origin-Embedder-Policy', value: 'require-corp' },
    ],
    },
    ];
    },
    };
    Production Implementation at KAOpdf
    This architecture is currently running live in production across more than 35 web-based tools on KAOpdf:

    Compress PDF — MozJPEG WebAssembly quantization
    Merge PDF — In-memory page aggregation
    Split PDF — Client-side page extraction
    OCR PDF — Offline Tesseract.js WASM character recognition
    AI PDF Summarizer — On-device WebGPU model execution
    Across all tools, the fundamental contract remains unchanged: zero file uploads, zero remote storage, and complete user privacy.

    Engineering Takeaways

    1.pdf-lib for structure, PDF.js for rendering: pdf-lib handles fast document generation, while PDF.js is the most resilient parser for non-standard PDFs.

    2.Transferables are mandatory: Always pass ArrayBuffers in worker transfer lists to prevent costly memory duplication.

    1. WebAssembly image codecs deliver real gains: WASM-compiled MozJPEG consistently beats native browser canvas encoders in compression efficiency.
    2. Enforce bounded memory loops: Always call .cleanup() after rendering pages to prevent tab crashes on mobile browsers.

    Resources and Documentation
    pdf-lib Documentation
    pdfjs-dist on npm
    @jsquash/mozjpeg on npm
    KAOpdf Live Tools

    If you are experimenting with client-side document processing or running into WebAssembly memory bottlenecks, feel free to share your thoughts or questions in the discussion below.#webassembly #ai #pdf #webdev #software #coding #development #engineering #inclusive #community
    How I Built a Privacy-First PDF Processor That Never Uploads Your Files

  14. I have finished the #effikaFunnyCrows quilt! It will be for my sister who likes crows and dragonflies.

    Pattern: Funny Crows by Sasha Quilts, available at her Etsy.

    I learned free-motion #quilting for this and I am very pleased with my first real attempts!

  15. Further on the f... up yesterday.
    Assessing Microsoft's current app strategy "pest or cholera" may be a tad brutal, but I maintain that it IS accurate!
    Microsoft have caught us right in the middle of two distinct design failures:

    1. Electron overhead. The so-called desktop apps may work and show documents "correctly", but they have sooo much overhead they swallow gigs of RAM, leak memory, and return "Not Responding" for long periods of time.
    2. Cloud-first (read lock-in). "Traditional" real apps held local state and sync'ed in the background. Now it seems that all the telemetry, licensing, and co-authoring stuff is just blocking everything.On top of that, the web-apps are not rendering documents to look like the way the do in the desktop apps - So while they're less "Not Responding", they look like shite.

    Anyways... Let's support each others - and the companies around us - in getting off that shit. Will it be perfect? Certainly not, but at least it'll be a fresh start :)

  16. Barcelona refuse to enter a financial bidding war with Real Madrid and Paris

    Paris Saint-Germain have entered the race for Manchester United talent JJ Gabriel, opening talks with the representatives of…
    #Spain #ES #Europe #Europa #EU #Madrid #AFCBournemouth #Barcelona #BarcelonavsRealMadrid #LaLiga #Ligue1 #Lyon #ManchesterUnited #ParisSaint-Germain #PremierLeague #RealMadrid
    europesays.com/spain/105649/

  17. Barcelona defender warns: Mbappe is capable of settling the Clasico at any moment

    Pau Cubarsí has named Real Madrid’s biggest threats ahead of Sunday night’s Clásico at the Spotify Camp Nou.…
    #Spain #ES #Europe #Europa #EU #Barcelona #BarcelonavsRealMadrid #Endrick #K.Mbappe #LaLiga #P.Cubarsi #RealMadrid #ViniciusJunior #Y.Diomande
    europesays.com/spain/105618/

  18. Since getting an #iphoneDuo I quickly realised how many of the assumptions I made on the simulator absolutely do not work in real life…

  19. Flick redraws Barcelona’s line-up: three expected changes in the Clasico

    Jules Koundé will miss tomorrow’s Clásico between Barcelona and Real Madrid. The Frenchman has failed to recover from…
    #Spain #ES #Europe #Europa #EU #Barcelona #BarcelonavsRealMadrid #H.Flick #LaLiga #RealMadrid
    europesays.com/spain/105298/

  20. I like Lula, but I think the Brazilian elections were a real kick in the ass for Trump.

  21. Ticra Urica Readies Men’s Washrooms for the Festive Rush

    A three-in-one urinal screen that tackles splashback, uric scale and odour, fits in seconds and lasts up to 30 days, ahead of December’s busiest weeks December is when a building’s washrooms take their hardest knocks. Shopping centres,…

    pressportal.co.za/industry-and

    #pressrelease #AfricaNewsroom #bizcommunity #publicrelations #africa #southafrica

  22. Long live the General Strike on October 30! Long live the international solidarity of workers and pensioners! The fight continues! Internationalist ...

    I messaggi di appoggio internazionali allo sciopero generale ed alla mobilitazione internazionale dei porti del 30 ottobre
    ---
    COMUNICADO DE SOLIDARIDAD DE ASC CON USB CON MOTIVO DE LA HUELGA GENERAL EN ITALIA DEL DÍA 30-10-2026 CONTRA EL GOBIERNO …#messaggi #appoggio #internazionali #sciopero #generale #mobilitazione #internazionale #porti #ottobre #--- #comunicado #de #solidaridad #asc #usb #motivo #huelga #general #en #italia #d #- #contra #el #gobierno #meloni #estimados #camaradas #hemos #recibido #informaci #n #sobre #convocatoria #por #vuestra #parte #para #nos #sorprendido #gratamente #dicha #porque #alegra #enormemente #que #sindicato #hermano #afiliado #fsm #como #nosotros #tenga #misma #afinidad #program #tica #y #temporal #practique #lucha #defensa #los #intereses #clase #obrera #somos #miembros #representamos #creemos #ya #conoc #espa #iguales #parecidas #caracter #sticas #contenidos #ello #bajada #precios #rearme #etc #nuestro #caso #especulaci #vivienda #unifican #las #reivindicaciones #hacen #mas #completas #dado #ambas #convocatorias #expresan #crisis #estructural #final #capitalismo #criminal #ltimos #momentos #existencia #modelo #global #ser #muy #importante #tanto #vuestras #nuestras #otros #llevaran #impronta #orientar #trabajadora #hacia #superaci #direcci #socialismo #nuestra #tiene #bandera #denuncia #ni #derecha #oposici #centroizquierda #abordan #salarios #pensiones #sanidad #militarizaci #llama #bloquear #todo #empezar #cambiar #cosas #verdad #es #fotograf #realidad #estatal #varios #agentes #socialdem #cratas #incapaces #ideolog #practica #alternativa #emancipadora #sentimos #profundamente #solidarios #vosotros #hermanados #enemigo #com #uni #europea #otan #comprendemos #perfectamente #causas #justa #heroica #mismos #genes #sabemos #econom #italiana #atraviesa #tiempos #turbulentos #precio #gasolina #subido #hasta #casi #euros #litro #suma #elevada #inflaci #septiembre #pas #situaci #similar #vive #alimentos #conjunto #pa #s #frutas #frescas #verduras #carne #pescao #tienen #prohibitivos #fuera #alcance #salario #trabajadores #trabajadoras #reiteramos #viva #estado #ol #octubre #uis #r #wsf #response #usbs #call #strike #october #italy #dear #comrades #international #union #pensioners #retirees #unions #world #federation #trade #wftu #extend #warmest #combative #greetings #solidarity #workers #pensioners #young #people #mobilizing #throughout #day #struggle #waging #today #rising #cost #living #suffocating #inflation #uncontrolled #increase #energy #fuel #rates #runs #europe #whole #governments #large #corporations #government #giorgia #capitalist #choose #protect #profits #oil #companies #banks #condemning #millions #families #poverty #cutting #purchasing #power #wages #pensions #retirees #firmly #denounce #essential #foodstuffs #turning #right #dignified #retirement #chimera #together #demand #immediate #indexation #salaries #real #price #controls #elimination #vat #basic #necessities #food #medicines #electricity #water #supplies #also #proudly #salute #historic #action #dock #arms #militarisation #time #escalating #war #unity #working #class #face #rearmament #policies #necessary #ever #public #resources #must #allocated #social #rights #health #education #passivity #complicit #employers #demonstrates #way #defend #dignity #peoples #organization #protest #mass #mobilization #streets #long #live #fight #continues #internationalist #behalf #leadership #worlds #paco #ferrer #secretary #training #quim #boix #dockworkers #common #answer #imperialist #exploitation #strikes #mobilisations #ports #across #americas #asia #africa #dockworkers #strengthening #united #states #india #coordination #among #represents #important #achievement #every #country #significance #reaches #far #beyond #port #gates #concerns #key #hubs #production #transport #coordinating #opposing #military #equipment #demanding #labour #serve #needs #bring #fore #force #armed #organisation #can #put #obstacles #imperialists #machine #holds #distribution #wealth #hands #giving #blocks #alliances #us #nato #eu #fall #line #behind #aims #serving #capital #interest #joining #forces #directing #exploiters #warmongering #joint #greece #turkey #fellow #countries #blow #nationalism #strengthens #share #homeland #one #side #stands #industrialists #bankers #shipowners #fill #coffers #enormous #enjoy #support #state #experience #full #brutality #capitalism #unemployment #crimes #committed #-hour #days #backdrop #china #confrontation #conflict #russia #rivalries #markets #routes #heighten #danger #generalised #new #democracy #parties #euro-atlanticism #drawing #deeper #seeking #spoils #bear #risks #infrastructure #turned #launchpads #targets #retaliation #involvement #serves #none #interests #strengthen #front #expose #gains #loses #budgets #costed #policy #programmes #adapting #economy #demands #sacrifices #spending #subsidies #financed #bleeding #taxation #intensifying #work #grow #stronger #alongside #wage #increases #collective #bargaining #agreements #stable #jobs #shorter #hours #safety #measures #universal #free #healthcare #resist #attempts #impose #industrial #peace #intensify #well #repression #authoritarian #workplaces #restrict #activity #disengage #wars #plans #stop #close #bases #home #greek #missions #deployed #abroad #express #practice #palestinian #fighting #freely #land #pame #salutes #contribution #enedep #ensure #success #calls #organisations #actions #rallies #strength #take #initiatives #sectors #industry #metalworking #workplace #subordinated #rise #organise #become #part #let #leave #strong #legacy #expand #ties #different #join #confident #maintaining #firm #joins #school #university #student #taking #place #popular #discontent #sacrifice #unite #struggles #money #housing #friday #mobilisation #elefsina #lavrio #thessaloniki #patras #igoumenitsa #chalkida #piraeus-wide #largest #carry #forward #even #greater #determination #nationwide #november #next #major #milestone #don #t #videos #spot #get #dirty #grease #sweat #seawater #will #never #stained #blood #https #youtube #shorts #tjmybwkd #feature #happens #run #say #mac-k #gk #fishery #communications #dockers #blockades #militarization #automation #tui #tpfc #expresses #unwavering #following #series #refusing #handling #intended #genocide #palestine #dockers #wich #affiliated #organized #simultaneous #february #mediterranean #slogan #welcomes #significant #expansion #upcoming #including #participation #nearly #continents #making #truly #movement #aligns #massive #mobilizations #youth #france #portugal #belgium #albania #high #directly #linked #conditions #show #demonstrate #words #slogans #borders #act #simultaneously #paralyze #concrete #genocides #especially #illegal #blockade #cuba #kills #many #bombs #sign #istanbul #declaration #affiliates #fishing #plan #coming #period #refuse #death #want #life #friendship #build #walls #bridges #honor #race #cooperation
    I messaggi di appoggio internazionali allo sciopero generale ed alla mobilitazione internazionale dei porti del 30 ottobre

  23. Grok Says Its AI-Generated Version of ‘The Odyssey’ Is ‘Not Historically Accurate’: wired.com/story/grok-says-its-

    'But Musk’s stated goal wasn’t to deliver a better-looking or more narratively cohesive version of The Odyssey. He and his culture war comrades dubiously claimed that they were against Nolan’s casting of Black and trans actors, the Americanized English spoken by the characters they played, and various designs of ships and armor in the film because they were “historically inaccurate.” Hence Musk’s guarantee of a “historically accurate” corrective.

    So, did Grok Imagine succeed on that front? Asking Grok for a self-evaluation yields an interesting answer. “No,” the chatbot says when queried about whether this Odyssey snippet is historically accurate. “Grok Imagine’s Episode 1 (and the broader promised series) is an adaptation of Homer’s Odyssey, not a historically accurate reconstruction of real events.”'

    #grok #ElonMusk #bullshit #grifter #ArtificialIntelligence #AI

  24. One of the interesting things about using a chatbot is how naturally a conversation can continue.

    I can ask a question, provide additional information, refer to something mentioned earlier, and expect the assistant to understand what I mean.

    But while studying how chatbots work, I learned an important distinction:

    A continuous conversation is something the application must create. It is not automatically provided by every individual LLM call.

    What happens when I send a follow-up message?


    Imagine this conversation:

    User: My food hasn't arrived.

    Assistant: Would you like to wait or request a refund?

    User: I want a refund.

    The last message makes sense because of the earlier exchange.

    But what happens if the application sends only “I want a refund” to the model?

    The model may not have the information needed to understand the situation. The application needs to preserve the relevant conversation history and include it in the next request.

    This was my first important takeaway: the application is responsible for maintaining the conversation.

    Memory is not necessarily inside the model


    Suppose I tell a chatbot that my preferred programming language is Java.

    Later, I ask which language I prefer.

    It might seem that the model has permanently learned something about me.

    However, the application could have stored that preference, retrieved it when needed, and supplied it as context for the new request.

    The process could look like this:

    User Information
    ↓
    Application Memory
    ↓
    Retrieve Relevant Information
    ↓
    Add to Current Context
    ↓
    LLM Generates Response

    This is different from training the model and updating its learned parameters.

    That distinction changed how I think about chatbot memory. The user experience may look like persistent memory even when the application is retrieving stored information and passing it to the model.

    More context is not always better


    Another concept that stood out to me was the context window.

    A model can process only a limited amount of information in a given interaction.

    An application might store hundreds or thousands of messages, but it does not necessarily need to send every message with every request.

    It can select recent messages, summarize older exchanges, or retrieve only information relevant to the current question.

    Why does this matter?

    Because repeatedly including a growing conversation can increase input token usage, which can affect cost and latency. It also consumes some of the model's available context capacity.

    The important design question is not simply:

    “How much context can I send?”

    It is:

    “Which information does the model actually need to answer this request well?”

    Streaming is a user-experience decision


    The lecture also connected next-token generation to streaming.

    Instead of waiting for an entire answer before showing anything, an application can display generated content progressively as it arrives.

    This can make an application feel more responsive, although it does not necessarily make the underlying model generate the complete response faster.

    It is another reminder that the experience users see depends on application design, not just model capabilities.

    And then there is hallucination


    A model can generate an answer that sounds convincing without the answer being factually correct.

    Fluent language and verified information are two different things.

    For a real application, this matters enormously.

    Imagine a support chatbot answering questions about an order. It should retrieve the actual order status rather than inventing one. If an action requires authorization, the application must enforce that authorization instead of trusting a prompt alone.

    Depending on the use case, retrieval, external APIs, tool calling, validation, guardrails, and evaluation can improve reliability.

    They reduce certain risks, but they do not guarantee that every answer will be correct.

    What I'm taking away as a software engineer


    I'm beginning to see chatbot engineering as more than sending prompts to a model.

    The application needs to manage conversation history, select context, retrieve relevant information, control access to tools, and handle responses appropriately.

    These are familiar software engineering concerns applied to a new kind of capability.

    My biggest takeaway from this lecture is:

    A good chatbot does not merely generate responses. Its application must provide the right context and manage those responses responsibly.

    As I continue studying Forward Deployed Engineering and Generative AI, I want to understand not only how models work, but also how to build reliable applications around them.#ai #llm #softwareengineering #software #coding #development #engineering #inclusive #community
    How Does a Chatbot Remember? The Engineering Behind Context and Memory

  25. Watti Update: Now anyone can bring my real robot to life! reddit.com/r/robotics/comments Watti update! Some of you have been following this project for a while, and today I have something exciting to share! I've temporarily opened Watti Studio to everyone! You can now create your own animations directly in your browser, on your computer or phone. Move the virtual robot, add keyframes, adjust the timing, and bring your

  26. 50 AI project by Anshuman Mishra is the featured bundle of ebooks 📚 on Leanpub!

    Learn, Explore, and Build with 6 Essential Technology Books

    A complete 6-book learning collection featuring clear explanations, practical examples, modern technologies, diagrams, and real-world applications—carefully designed for students, beginners, educators, and technology enthusiasts.

    Link: leanpub.com/b/50aiprojectsvol-1

    #Ai #Ai_programming_with_python #Large_language_models #Python

  27. *Manchester dates* for The Crucified Silence – Sunday November 22nd – Irish World Heritage Centre. 6pm.

    “A story anyone can relate to…” — Irish Independent

    Click here to secure your ticket now!

    About

    Following acclaimed performances in Athlone, Castlebar, Ballinrobe and Galway, The Crucified Silence comes to Manchester on Sunday 22nd November at 6pm, bringing a distinctive voice from the West of Ireland to the iconic Irish World Heritage Centre.

    Hilarious, heartbreaking and brimming with dark Irish humour, The Crucified Silence is a compelling one-man play written and performed by acclaimed Irish playwright Mick Donnellan. Set in Ballinrobe, Co. Mayo, the story follows Joe, a local guard who has crossed a line after a volatile altercation with his superintendent. As he drinks his way around town, he conjures vivid, nostalgic images of familiar landmarks and meeting places, including The Bowers walk, Art O’Neill’s Bar and Geoff’s pub. These recollections bring his world to life, drawing audiences into a community shaped by its own rhythms, rituals and relationships.

    Yet beneath the laughter lies a deeply moving story of loneliness, loss, regret and the search for connection. Just as Joe’s sharp wit and comic observations have audiences laughing, glimpses of his troubled past reveal a more vulnerable man struggling to come to terms with the life he has lost. The result is a play that can have you laughing out loud one moment and breaking your heart the next.

    Populated by recognisable Irish characters and brought vividly to life through authentic Irish dialect, cultural nuances and a rich tradition of storytelling, the play offers a compelling glimpse into the humour, warmth and complexities of everyday life in rural Ireland. For those familiar with Irish life, there is much to recognise; for those discovering it for the first time, an opportunity to experience a distinctive culture through characters who feel wonderfully real.

    Book now

    The Venue

    A much-loved hub for Irish culture, arts and community in the North West of England, the Irish World Heritage Centre provides a fitting setting for a play that celebrates Irish storytelling while exploring experiences that transcend borders and backgrounds.

    For Manchester’s Irish community, the evening offers a powerful sense of home, evoking the people, places, humour and shared experiences that connect us to where we come from. It is also a wonderful opportunity to celebrate the strength of Irish theatre and the remarkable stories being created in Ireland and finding audiences beyond its shores.

    Universal Appeal

    Although Joe’s world may be rooted in a small town in Co. Mayo, his struggles are universal. His attempts to make sense of a life shaped by difficult choices, personal loss and fading connections will resonate with anyone, from all cultures and backgrounds, who has ever looked back on their past and wondered how things might have turned out differently.

    With minimal staging and intimate, uncompromising storytelling, the play places audiences face to face with Joe’s inner world, where humour becomes a defence against pain and silence can speak louder than words. Mick Donnellan’s powerful central performance draws audiences towards a devastating climax, balancing theatrical intensity with the feeling of a deeply personal confession.

    All are welcome to join for an evening of big laughs, poignant storytelling, heartbreaking moments and an unforgettable injection of high-quality theatre!

    Spaces limited so be sure to secure your seat as early as possible :)

    About Mick Donnellan and Truman Town

    Mick Donnellan works as a successful Playwright, Novelist and Screenwriter. Film credits include Tiger Raid adapted from Mick’s Play Radio Luxembourg. Optioned by London Film Company Dixon/Baxi/Evans, the script was developed in London and shot in Jordan. Starring Brian Gleeson, Damian Molony and Sofia Boutella, it was accepted into the Tribeca film festival (New York) and was also seen at Cannes and Edinburgh.

    The Irish Premiere was screened at the Galway Film Fleadh and you can watch the Tiger Raid trailer here.

    Mick is the author of six novels:

    The Dark Rooms

    Galway Blues

    El Niño

    Fisherman’s Blues

    The Dead Soup

    The Naked Flame

    Recent Work:

    Mick Donnellan has had two major theatre productions hit the stage in 2025.

    Outlaw Pete premiered at the Town Hall Studio, Galway in April 2025, starring Laura Hutchinson, Brian Cahill, and Carl Jones. Following its debut, the production toured to the Linenhall Arts Centre in Castlebar in May, before returning to Galway for the Galway Fringe Festival in July, where it sold out Kennedy’s Bar on Eyre Square.

    Donnellan’s second new play of 2025, Class of ’57, was produced by Athlone Little Theatre and directed by Caroline Coyle, featuring standout performances from Ellen Ryan, Brian Toolan, and Nino Magilocco.

    In December 2024, his most recent book Galway Blues was published to great acclaim. He received the Mayo Theatre Bursary through Mayo Arts Office in April the same year.

    Prior to that, he was awarded the Agility Award through the Arts Council of Ireland and his play Nally was supported by Westmeath Arts Office.

    In other theatre work, The Crucified Silence (as a short play) was chosen as part of the Scripts Ireland Play festival. After a week of intensive workshops with Playwright Eugene O’Brien, the monologue was directed by Jim Culleton (Fishamble) and performed by Aaron Monaghan. Following this, Mick took part in the Galway Theatre Development Programme, run by Andrew Flynn in conjunction with Galway’s Town Hall Theatre, which resulted in a residency at the Tyrone Guthrie Centre.

    His other plays include Sunday Morning Coming Down, Shortcut to Hallelujah, Gun Metal Grey, and Velvet Revolution.

    He is listed on the Irish theatre institute here: http://irishplayography.com/person.aspx?personid=47564

    About Truman Town:

    Truman Town Theatre exploded on to the theatrical circuit with their Play – Sunday Morning Coming Down. Written and directed by the company’s Artistic Director Mick Donnellan, it immediately sold out the Galway Town Hall Studio for five nights on the first run. Following that, the crew went on tour to Mayo, selling out Lisloughrey Lodge, Cong,The Valkenburg Niteclub, Ballinrobe and the Linenhall in Castlebar. It also enjoyed large audiences on the Main Stage on Galway’s Town Hall and went on a National Tour covering – Glor Ennis, St. John’s Listowel, Cork Arts Theatre and it sold out five nights at The New Theatre, Dublin. It was also performed by DRUID as a public reading during the Galway Arts Festival.

    Truman Town followed this phenomenal success with a second Play – Shortcut to Hallelujah. Again, written and directed by Mick Donnellan, it deals with the curse on the Mayo football team. It sold out the Town Hall Studio, went on tour to Ballinrobe and the Linenhall in Castlebar and then down to St. John’s Theatre, Listowel Co. Kerry where it was requested back to headline Friday night of Listowel Writer’s week.

    Between this, a third drama was produced as part of the Galway Theatre Festival. It was titled Gun Metal Grey.

    Shortcut to Hallelujah returned from Listowel Writer’s Week to perform on the Main Stage Galway for a wildly successful five nights after which Velvet Revolution, the fourth Truman Town production, also written by Mick Donnellan, was premiered in St. John’s Theatre, Listowel. It went on tour to Kilmallock, Kenmare and Waterville, then up to Ballinrobe, on to Galway and ran for ten days as part of the Galway Fringe. Mentioned as a Highlight of the festival by the Irish times, it was subsequently performed in Campbell’s Tavern, Cloghanover, Headford, Electric Picnic and The New Theatre, Temple Bar, Dublin.

    Radio Luxembourg, Mick’s fifth Play, was bought by a London Film Company (Dixon/Baxi/Evans) and has been adapted for the screen. The title for the movie version is “Tiger Raid”. Starring Brian Gleeson, Damian Molony and Sofia Boutella, it was accepted into the Tribeca film festival (New York) and was seen at Cannes and Edinburgh. The Irish Premiere was screened at the Galway Film Fleadh.

    Currently Mick is working on the exciting screen adaptation of Shortcut to Hallelujah with Florence Films. The screenplay is titled Sam and is based around the curse supposedly put on the Mayo Football team as they returned home as All Ireland Champions in 1951.  Drenched in Irish lyricism and modern day dark humour, the script has been met with keen interest by film producers and actors throughout the industry.

    Between writing projects, Mick has enjoyed roles as a lecturer in writing at University of Ireland and TUS Athlone.

    *

    Read more on www.mickdonnellan.com

    #books #music #news #Poetry #writing
  28. Please copy and paste into the form on the website of your Senators and Representative and please share with friends. congress.gov/contact-us

    Dear Sen/Rep,

    I object to President Trump’s new whistleblower program for which he alone will provide “binding” arbitration.

    Not only is Trump’s action a usurpation of power, this proposal conflicts with existing whistleblower law, the False Claims Act which provides compensation of up to 25-30% of recovered proceeds. But in those cases, the fraud must be shown to be real.

    The first recipient, Nick Shirley, is receiving $10,000 for videos that he claimed proved child care center fraud in Minnesota. The videos were debunked by reputable news organizations, state investigations, and unannounced compliance visits. Shirley’s fraud not substantiated, yet he is being rewarded for lying with a check for $10,000.

    Trump’s $25 million program, not expressly authorized by Congress, is supposed to be self-funded. But in Shirley’s case, the federal government received no compensation from the state of Minnesota because no fraud was proven.

    This is yet another pre-election boondoggle designed to deflect from Trump’s failed war of choice in Iran, his subservient behavior towards Russia and his duplicitous behavior towards Ukraine.

    I want you to call out this travesty for what it is. Speak out now and speak out loudly. Investigate this $25 million budget source and determine its legality, as well.
    #resist #ResistOfTheDay #fraud #greed

  29. I ran a heavyweight review over the code that decrypts incoming vulnerability reports, and the findings weren't what stopped me. It was the forty-two //nolint comments underneath them.

    Each one tells a checker to leave a line alone. "Bounded by the caller." "Bounded above." That's vouching for the code rather than describing it, and the next reader takes its word.

    They arrived in days rather than years, from agents working through review findings at speed and doing what I'd asked. Ask for a clean lint run and there are two ways to get one: fix the code, or tell the checker to shut up. Only one requires understanding the finding.

    So I went through them. The true ones mostly stopped needing a comment at all, and several of the false ones were hiding real unchecked conversions.

    Then a new one turned up mid clean-up, on a Close():

    //nolint:errcheck // the read below is what matters

    That's backwards. In OpenPGP the integrity check happens when you close the reader, so the error being thrown away was the whole check. It got caught in review and never landed, and there's a test on it now.

    The fix I wrote, moving the exceptions into config with the reasoning beside them, then failed in its own way: three exclusions named linters that weren't enabled. Careful prose governing nothing, and nothing tells you.

    phpboyscout.uk/every-suppressi

Share on Mastodon

Enter the server where you have an account.