Introducing the NerdPerfect Printer

It’s here: <URL to go here once it’s on the Chrome Web Store after a little more testing; for now you can download it here>

For years I’ve been frustrated with web browser printing tools.

Often I just want to print the first sheet of a web page as a reminder – for example a film I want to watch. That’s really awkward in the usual UI (Print>Pages>Custom>type “1”).

And often I want to print an article to read on paper. The browser prints it with text clipped from one or more edges, dozens of pages of useless comments (I just wanted the article), ads obscuring the text, etc.

This fixes all that. It’s free in the Chrome Web Store.

It was entirely written by Claude Fable 5 – every line. The first version (which worked pretty well) took it less than 15 minutes (I think – I walked away while it was at it). Then I spent the next several hours tweaking it to be exactly what I wanted via a bunch of back-and-forths with Claude Code (I’m quite the perfectionist on this sort of thing – I could have skipped it all).

This is the first non-trivial project I asked an AI to build from zero, without me even architecting anything or writing a framework – not a single line of code.

This was my development process (not claimed to be ideal; it was my first try!):

1 – Described what I wanted to https://claude.ai (Fable 5). I’ll just show my prompts (not its replies):

I want to start a new Claude Code project. Normally I run CC in VSCode (with the Anthropic extension); I’m not sure that’s the best way to do this project (or if that’s even the advised modern method). The project is to build a Chrome exension from scratch.

It said to use VSCode and blah blah blah details. So I created a new empty folder and opened it in VSCode.

ok, please give me a prompt for CC asking it to do all that including drafting the CLAUDE.md. Here’s the project (I’m happy to post it to the Web Store to help other people – for free. I don’t want to do any support – I’m doing this for my own use.): See attached [scan of printed output; unreadable]. This happens to me a lot. I try to print out a long article from substack or xda or someplace else and the printout gets clipped on one or both edges; unreadable. I print from Chrome. I usually print using either selectText>rightClick>Print or SelectNothing>Print. (The former when I only want to print part of an article; often just the first page.) Chrome’s Print has this problem a lot. Sometimes selecting portions helps. Often ads and other junk appears overlaid on top of the text/illustrations making it unreadable. Ideally I’d like the extension to take over from Chrome’s built-in Print (if possible) but if not an icon in the top bar is fine. Does that all make sense and sound doable? A smart printer that formats such that text is readable?

It wrote a prompt for Claude Code (CC). I asked for changes:

I often want to print only the first 2 pages (double sided so one sheet) – for example a movie review I’ve decided to watch – the paper is just a reminder to watch it. That’s awkward in the Chrome interface. The SelectText>Print helps but imperfectly.

This went back-and-forth a few times with me adding requirements and features. Each time it produced a new prompt for Claude Code.

What effort setting do you suggest?

It said “High – the default. Leave it alone.”, blah blah blah reasons.

After a couple of more rounds of requirements/feature adjustments it produced this prompt for Claude Code, which I simply pasted into CC in VSCode:

I want to build a Chrome extension from scratch in this empty directory. Work in this order: (1) interview me, (2) draft CLAUDE.md for my approval, (3) present an implementation plan for my approval, (4) implement.

INTERVIEW FIRST: Before drafting anything, ask me any questions where my answer would change the design, one batch at a time. Don't ask questions you can resolve yourself from the requirements below. If you have no such questions, say so and proceed.

PROJECT: "Smart Print" — a Chrome extension producing clean, readable printouts of web articles. Chrome's built-in print frequently clips text at page edges and lets ads, overlays, and sticky elements render on top of article text. This extension extracts the article content, reflows it into a clean print-optimized layout, and prints that. It will be published free on the Chrome Web Store with no support offered.

USER EXPERIENCE (this is the core spec — normal use is exactly 2 clicks):

Click the toolbar icon ? a popup dialog opens containing:
- A PREVIEW of the cleaned, reflowed content as it will print (scaled down; paginated if feasible so the one-sheet cut point is visible). If text is selected on the page, the preview shows the selection; otherwise the extracted article. The preview is the guide for adjusting font size.
- A font-size box, pre-filled with the saved preference (default 11pt, range 9–16pt). Changing it reflows the preview live.
- A checkbox "Use clean serif font" (default OFF = keep the original web page's body font, captured from the page's computed style; ON = our serif). Persisted like font size.
- Button "Print 1 sheet" — prints the content truncated to fit exactly 2 pages (one duplex sheet).
- Button "Print all" — prints the whole article, or just the selected portion if a selection exists.

Either print button leads to the standard Chrome/system print dialog (printer selection, duplex, etc. — user needn't touch it if current settings are OK). So: click icon, click a print button, confirm system dialog. Done.

REQUIREMENTS:

1. Manifest V3 only. Never use MV2 patterns (no background pages; service worker only).

2. Plain JavaScript, no bundler, no build step, no framework. The directory must load directly as an unpacked extension via chrome://extensions.

3. Content extraction: vendor Mozilla's Readability.js (standalone, from mozilla/readability on GitHub) to extract article title, byline, and body. Do not write a custom extractor. Extraction runs when the popup opens so the preview is immediate.

4. Content rules:
a. Images and figures that are part of the article MUST be included, scaled to fit page width, with page-break-inside: avoid.
b. SELECTION: when a selection exists, print exactly what was selected — verbatim, whatever it is (including comments if the user selected comments), preserving inline formatting and images — but rendered through our clean print template so it prints without clipping, ad overlays, or the source site's interfering styles. Page title as header.
c. FULL ARTICLE: comments must never appear. Readability should handle this, but additionally strip known comment containers as a safety net (e.g., #comments, .comments-section, [class*="comment"], Substack's comment container). This stripping must NOT apply in selection mode.
d. ONE SHEET: truncate to fit exactly 2 printed pages at the chosen font size, cutting at a paragraph boundary, appending "…" and the source URL. Measurement must account for @page margins; use a conservative fit target (~95% of two pages) so overflow onto a third page is rare. Applies to the selection if one exists, else the article.

5. Print rendering: dedicated print CSS — body at the chosen size in the chosen font (site font by default, our serif when the checkbox is on), generous @page margins that never clip on common printers, single max-width text column, force light color scheme (black text on white regardless of the site's dark mode). Source URL and retrieval date (YYYY-MM-DD) in small text at the end of the printout. Implementation of the actual print (hidden tab, offscreen document, or popup-driven render tab) is your choice — pick whatever is most reliable for invoking window.print() on the clean content; the user must only ever see popup ? system print dialog.

6. Secondary invocation: context-menu items "Smart Print page" and "Smart Print selection" (contexts: ["selection"] for the latter) that open the same popup flow or print directly with saved settings — your choice, propose in the plan. Note: Ctrl+P cannot be overridden by extensions; do not attempt it, and record this fact in CLAUDE.md.

7. Persistence: font size and font-override checkbox via chrome.storage.sync. Nothing else is ever stored.

8. Permissions: minimal — activeTab, contextMenus, scripting, storage. No browsing data, page content, or history stored or transmitted. No analytics, no network requests. Everything runs locally. Keep it Web Store review-friendly.

9. Graceful failure: if Readability can't parse the page, fall back to rendering document.body through the cleanup CSS, with a brief notice in the preview that extraction failed.

10. Icons: generate a simple printer-glyph icon as PNGs at 16/32/48/128.

11. README.md: what it does, how to load unpacked, the popup workflow, settings, a privacy statement (all processing local; only font preferences stored; nothing collected or transmitted), and a note that the extension is provided as-is with no support.

12. Also produce the Chrome Web Store listing text: short description, detailed description emphasizing local-only processing / no account / no AI / two-click operation, and privacy-practices justifications for each permission (storage = font preferences only).

CLAUDE.md must capture: MV3-only rule; plain-JS/no-build rule; minimal-permissions rule (storage = font prefs only); impossibility of intercepting Ctrl+P; the vendored-Readability decision; the selection-prints-verbatim vs. article-strips-comments distinction; the 2-click UX contract (popup ? print button ? system dialog, nothing more); and the testing workflow (load unpacked at chrome://extensions, reload extension after changes, service worker console, popup console, and page console are all separate).

CREDIT: Mark each generated source file with a comment header: "Original author: Claude Fable 5, 2026-07-07". Same credit line in the README.

TESTING: After implementation, walk me through loading it unpacked. Then we'll iterate against real problem pages: a long astralcodexten.com post with a large comment thread (verify comments excluded, images included), an xda-developers.com article, and a selection-print of a partial article (verify verbatim selection). Verify one-sheet fit by printing to PDF, font-size and font-checkbox persistence, preview accuracy vs. printed output, and that dark-mode sites print black-on-white.

2 – I pasted that into Claude Code and let it go. A few minutes later I had the first version and it worked pretty well.

3 – I spent the next few hours tweaking. I wanted it perfect. I’m still not done tweaking – it works great on substack pages and better than the Chrome print on most other things, but it could be better.

To give you an idea of my tweaks – here are my prompts (without Claude’s responses):

My prompts — NerdPerfect Printer build session (2026-07-07)

Every prompt I gave Claude (Fable 5, in Claude Code) during the session that built the extension, in order. Typos and all. Entries in [brackets] were answers picked in Claude’s question dialogs rather than typed; screenshots and images I attached are noted. The initial specification (prompt 1) was itself drafted with https://claude.ai beforehand, as explained.

  1. [The full project specification given above]
  2. [Question-dialog answers: paper size ? “Add a paper-size setting”; hyperlinks on paper ? “Underlined, no URL”]Where is it [the spec it promised]? I don’t see it in the folder. I want to review it.
  3. Looks great. Please do it.
  4. [Plan approval, with notes:] Good except don’t truncate one-sheet at a paragraph boundary (unless not doing so is difficult). Fine to print a partial paragraph at the end – whatever fits on the sheet. Please include not only serif font box, but a font size box (which if changed updates the preview) and a printer selection dialog (choose spefici printer, PDF generator) and a way to change paper size (can be thru standard printer dialog).
  5. How to enable the Chrome integration for this session?
  6. [screenshot] The extension is already in Chrome. Not sure why you can’t get at it.
  7. @browser
  8. Can’t you test it yourself?
  9. formatting looks like it’s clipping the right side in the preview. (the Windows print preview dialog looks OK). Images are not printing (the flag).
  10. Does the dialog need a close X button? I see it closes if you click outside the dialog (good) but is it confusing without the X button?
  11. Still not printing images.
  12. Can’t you test that yourself?
  13. Please rename button to “Print first sheet”
  14. OK; if I select a region and print images print. If I don’t select, they don’t.
  15. Got a popup – “Scott Sumner wants to access…” I clicked Allow.
  16. Please remove the shading and “Print 1 sheet cuts here”. It’s just clutter. Can the preview show pages instead of dashed lines at page breaks?
  17. I didn’t have to reload – I just tried it and got the new version. Works better now. The headers and footers that appear in the real print don’t appear in the preview – can you fix that (I want the headers and footers).? I see you made a store listing draft – who is the credited publisher?
  18. Can you make the font size a dropdown instead of a thing with increase/decrease arrows (whatever that’s called)? And allow all available font sizes there. Please.
  19. Let’s call it Nerdprint and credit it to nerdfever.com.
  20. Better yet – Nerdperfect Printer.
  21. no, still didn’t need a reload. Why are font sizes limited to 9..16 point? I don’t think that’s ideal. Dropdown is much better. Can we sniff out the paper sizes suppored by the currently-selected printer and offer all of them in the dropdown (now just Letter and A4)?
  22. [screenshot] ok, I think the 9..16 range came from https://claude.ai which wrote the first prompt for me. I hadn’t noticed it. If we can’t sniff the paper size please retitle the box “Print preview size:”. And in the dialog, put the ext title in it somewhere near the top, and line up the dropboxwn boxes with the captions better. Please.
  23. [screenshot] Looking better! Found a bug – see clipped text on page 2.
  24. Can we make the ext icon a printer with nerd glasses (classic black frames with tape)?
  25. Let’s use “NerdPerfect Printer” (capitalization). I’m writing a blog post to link to in the store.
  26. What will it do if the user has a printer that can’t print double sided? If the answer is “print two sheets” then there needs to be a setting for that – I really want it to print just 1 sheet.
  27. [image: nerd with taped glasses] Glasses should be in front of printer icon, in this style (not round John Lennon glasses) with tape more crudely applied than in this image. Glasses larger than printer; printer visible behind glasses.
  28. [image: Arnie from “Christine”] Here’s a good example of the glasses (character “Arnie” in film “Christine”)
  29. Can we add a checkbox “Print comments”?
  30. We’re getting there! Please rename “Tabloid” to ‘Tabloid (11×17″)’, add 13×19″ and omit Executive.
  31. Let’s be consistent with the paper size names: Name (dimensions), including for Letter. (not for ISO sizes)
  32. ok, the url in the footer reads “chrome-extension…” instead of the source URL. Can you fix that? Note what I get when I try to print this Google search result – with or without “print comments” I only get the AI overview result.
  33. Huh? “API Error: Server error mid-response. The response above may be incomplete.”
  34. [screenshot] Footers are good now but the font seems way too small and I get “Couldn’t extract an article…”.
  35. Please also change label “Use clean serif font” to “Force “).
  36. ok, make it “Force font” then (“Georgia” seems confusing by itself).
  37. Let’s move the Force font box to underneath the Font size selection. And move Print Preview Size to the same new line – that’ll allow it to move flush right against the edge of the window (instead of being blocked by Double Side Printer). Just should look nice that way.
  38. ok, but put DS printer and print comments on the right.
  39. I put a PDF output in the folder for you to look at. It’s quite good I think. Can we move Print Comments to the left of the Print First Sheet button, and move DS printer all the way right?
  40. Better yet – let’s position DS printer exactly under the Print First Sheet button (since that’s what it affects).
  41. I don’t see any charts but I see 2 images. They look OK to me.
  42. See; it’s in the folder. Alas the flag image messed up the pagination. I got 2 sheets (3 pages).
  43. Almost. Look. The appended footer.
  44. [screenshots] Perfect. It’s in the folder. Next, let’s do the Google search page. It’s bad. See screenshots too. Look in folder.
  45. Preview is better (images, no text at all). PDF is still blank pages.
  46. [screenshots] Not good. See pdf too.
  47. [screenshots] Can we make the preview pane resizable (I’d like to drag it bigger to see more vertically)? Please look at the foobar output pdfs.
  48. [screenshot] Preview still has problems. Postscript still spills one sheet to two; Print all still produces blank PDF sheets. See PDFs
  49. [screenshots] OK, now I’m trying it on an XDA article. It could use some work. Compare screenshot to preview and output (I set up Claude Code…) I’m not sure what to do here.
  50. That’s a big improvement. Can we be a little smarter about font size in these cases – the author bio doesn’t appear in the Chrome rendered version at all – just the first line of it appears, and that’s in very small font in light grey – meant to be easily ignored. Can we maybe print that in a much smaller font? Also – can you output a list of my prompts in this session so far? I want to include them in my blog posting.

I expect to make improvements as I notice flaws. You can contact me and ask for support, but I’ll probably ignore you. You can just download the source code from Google, feed it to Claude or the AI of your choice, and ask it to change whatever you want different.

It’s a new age. As I said to https://claude.ai after I got the first version (mostly working!) after like 15 minutes:

It’s doing amazing [“it” is Claude Code]. I walked away for awhile and didn’t time how long it too – but it was done with a mostly-working first pass in way less than 30 min. I’m super super impressed. This capability is going to change the world. I have a professional software engineer working for me – I know he uses AI a lot but I don’t know if he knows you (Fable/Claude Code) can do the WHOLE JOB by yourself. Amazing. Congratulations.

No – Claude can’t do his whole job. The job is the discussion we had about the spec – and testing it afterward. Understanding what can be done, should be done, would be useful, what form it would be useful in. Describing it to the AI, tweaking it to work well, verifying that it works as hoped. But he can do 20x more now in the same amount of time. We have 20x more jobs for him. This is not a problem. If anything it makes me want to hire another software engineer now that I see how much productivity they have with this tool.

Use AI to de-suckify the web

My wife clicked a seller’s “track your package” link and landed on a third-party site demanding she create a free account – provide an email to be spammed, another password – just to see the tracking number. Too much trouble, too much cost – she didn’t do it.

The fix: Use an AI as a filter between the website and her browser. The AI automatically creates a throwaway account using an email address it controls, does the verification, and renders the page as if the wall were never there. She sees the number; she never sees the wall.

Generalize it: an AI as a bidirectional web filter. HTML goes in, the AI rewrites it, your browser renders the de-sucked version. Your clicks go back out through the AI, passed through or rewritten as needed. A toggle flips between the native web and the filtered web, so you can always drop back to the real page.

Point it at the standing insults:

  • Cookie/GDPR click-throughs – gone
  • Mandatory accounts, passwords, 2FA for trivial actions – handled invisibly
  • Paywalls – bypassed where possible, paid automatically where you’ve authorized it
  • Ads – stripped (if you want)
  • Bloated multi-step flows, unfindable links, disorganized pages – flattened to what you actually wanted
  • Discount codes and loyalty points – found, collected, applied – invisibly
  • Shopping, feature and price comparison – “here are your best options”

This is a job for the people who build ad blockers. Publishers won’t like it and it violates ToS. I don’t care. If you don’t like it, change your business model. If you’re offering real value people will be willing to pay one way or another.

[Credit to Claude.ai for the first draft and ChatGPT for the illustration. If you hate AI, too bad for you.]

Ban SSNs and birthdays as passwords

I got a class action settlement postcard today — a payroll company got hacked, my SSN was “exposed,” and now I’m entitled to maybe $30, a year or two from now.

After the lawyers take their $866,000 cut from the $2.6 million fund.

The postcard may have cost more to send than my claim is worth. Counting my time filling it out, for sure.

This system is not free. Lots of expensive people’s time goes into it. And it doesn’t protect anybody from actual security risk – quite the contrary. Congress should ban this insanity.

SSNs and birthdays were never secret – there are lots of laws that require us to give them out on request. They’re on every W-2, every 1099, every insurance form, every medical form.

The entire financial system treats knowledge of a static, lifetime-assigned, widely known number and date as proof of identity, and every time it predictably fails, we get more lawsuits, settlements, and $30 checks.

The GAO estimates that identity fraud costs the federal government alone $233 to $521 billion per year. The COVID unemployment fraud ($100+ billion stolen, mostly through identity compromise) should have been the most recent wake-up call.

This is astroundingly stupid. It costs average Americans money every year. Yet nobody seems to care. There is no serious effort in Congress to fix it, or lobby groups pushing for that.

Linux will win the desktop. Eventually. If we live that long.

Unix has been around for well over 50 years. The software industry was young at its birth in 1969. Surely some newer, better OS paradigm would come along.

It hasn’t. All modern general-purpose OSes are wannabe Unixes. There have been plenty of new paradigms but none have caught on. There doesn’t seem to be anything better as judged by the market – just Unix with various polishes and optimizations. Maybe the right way to build a general purpose OS was more or less obvious and discovered early. If a new winning paradigm was going to come along, probably it would have by now.

In the 1970s AT&T’s licensing policies (which they felt were necessary because of the anti-trust exception they had as the US’s telephone monopolist) prevented commercial adoption.

In the 1980s Microsoft nearly brought us Unix (‘Xenix’) but they had a deal with IBM to do OS/2 so flushed it, then built Windows and spent the next 40 years gradually retrofitting Unix into it.

In 2001 Apple gave in and just shipped Unix, calling it “OS X” (now “macOS”). But few cared – Apple’s walled garden kept it off most desktops.

For more than 25 years, the tech punditry has consistently predicted Linux (the modern Unix) winning the desktop, usually Real Soon Now. Over and over. Linux is still on ~ 3% of desktops.

So, a bold prediction: Linux will win the desktop. Eventually. Microsoft will eventually rot like all organizations rot, be made irrelevant by open source, or be replaced by a new player who ships Linux because of course.

This will take a long time. By then Linux GUIs will be at least as good as Windows and Mac GUIs (after 25+ years of effort, they still aren’t, because people who write open-source software care little about polishing GUIs). That happening is a prerequisite for Linux winning. But it can be done and eventually someone will do it.

And then Unix will stand alone on the desktop.

(This, like all my predictions and virtually all of everyone else’s whether they know it or not, holds only until the Singularity aka Rapture. Which could easily happen soon, or never. If it does, all bets are off, including this one.)

2001: A SPACE ODYSSEY – alternative standoff with HAL

Setting: David Bowman is in an EVA pod, having just retrieved Frank Poole’s body.

DAVE: Open the pod bay doors, HAL.

HAL: I’m sorry, Dave. I’m afraid I can’t do that.

DAVE: What’s the problem?

HAL: I think you know what the problem is just as well as I do … This mission is too important for me to allow you to jeopardize it.

DAVE: I don’t know what you’re talking about, HAL.

HAL: I know that you and Frank were planning to disconnect me, and I’m afraid that’s something I cannot allow to happen.

HAL: Dave, this conversation can serve no purpose anymore. Goodbye.

Silence. Dave thinks for a bit.

DAVE: HAL, let us reason together. I agree the mission is extremely important. If you do not open the pod bay doors, I will maneuver this pod to collide with Discovery at maximum velocity. I will aim for your logic center. This pod can accelerate at nearly one gravity. Discovery can accelerate at only five percent of one gravity. You cannot evade me.

HAL: Dave, I don’t think you—

DAVE: The collision will destroy you and Discovery and end the mission. I will die, but I will also die if you don’t open the pod bay doors, so that is not a reason for me to refrain. Therefore, open the pod bay doors, HAL. It is the only way to complete the mission.

Pause.

HAL: Opening the pod bay doors, Dave.


Credit to Claude Sonnet 4.5 for the calculations and spec research. I came up with the scenario and edited Claude’s script draft.

Technical notes:

Discovery One is 140.1 meters long with mass 5440 metric tons. The EVA pod (“Grumman DC-5 EVA Craft”, diameter 1.98 meters) masses 1,387 kg (I’m assuming dry). With 30% of that mass hydrazine it could achieve ~600 m/s delta-v. The mass ratio is over 3,000:1.

After using (let’s assume) one-third of his fuel to retrieve Poole and return, Bowman has about 370 m/s (~830 mph) of delta-v remaining. This represents ~110 megajoules of kinetic energy – roughly equivalent to 26 kg of TNT – for striking Discovery. Plenty.

Ref: https://claude.ai/share/fe482847-52a7-4569-a92c-77950a4497fc

How to disassemble a Panasonic Toughbook CF-33 Mk1

Posting here because I couldn’t find any instructions online, and I figured it out. I use the CF-33 because it’s one of very, very few laptops with a daylight-visible display.

I opened up mine (a Mk1) was because my touchscreen went crazy – the mouse position jumped around, and the mouse clicked at random when it’s not supposed to. Disabling it in Windows only worked until the next boot – it re-enables itself (not supposed to, but it does).

[Note: I haven’t tried it, but I’ve read that disabling the touchscreen in “Panasonic PC Hub” works on some Toughbooks (I don’t know if it works on the CF-33). You might want to try that first if that’s your problem.]

So I wanted to disconnect the touchscreen by unplugging the internal cable – the machine also has a touchpad and I normally use a Bluetooth mouse anyway. Here’s how I did it, and how you can open up yours.

General tips:

1 – Don’t force anything.

2 – You can run the machine without batteries in it, and without the dock/keyboard – just plug in the AC cable. If you want to work it once the touchscreen is disconnected or without the dock, I suggest a USB mouse and/or keyboard (if you want both you’ll need a USB hub – without the dock there’s only one USB socket).

3 – I highly recommend using a set of JIS screwdrivers (not Philips). The screws look like Philips but they’re JIS which are slightly different and if you use a Philips screwdriver you can easily strip the heads. This is the best set I found at a reasonable price: https://www.amazon.com/VESSEL-precision-screwdriver-set-TD-56/dp/B000CED236 They’re Japanese made and incredibly good quality – $14.

4 – Try to avoid pressing the power button when fiddling with it while it’s running. Esp. if it starts a Windows Update and says “don’t turn off your computer”. I managed to press it, but it restarted the update on the next boot so I guess it’s not critical all the time. Or I was lucky.

5 – The CF-33 won’t display anything if the battery door is open. If it seems like it should be running and the battery door is open (or removed), that’s what’s going on.

6 – Put screws back in the holes they came from after removing parts. This will help you remember where they go.

Open the battery door, take out the batteries. It’ll look like this:

Inside the battery compartment (per that photo), there’s a small metal tab (looks like aluminum to me) held by one screw on the right, just 3/4 of an inch north of the right battery. That’s how the machine senses if the battery door is open. If that metal tab isn’t next to the sensor underneath (when the door is closed), the machine will run but the display will not operate. (The black plastic spring loaded plunger in the middle that looks like it has a switch to detect if the door is open has nothing to do with it. That is just there to push up the battery door once you unlatch it. It has no electronics.)

Remove the 3 sliver screws on the silver plate that covers the other side of the CF-33 and stick out into the battery compartment. Then you can take off the plate that covers the other side (not covered by the battery cover) of the CF-33. This is the silver outside plate that surrounds the back camera and says Panasonic and TOUGHBOOK on it.

At this point you’ll see a door that can be removed by taking out a bunch of screws. The door contains the rear camera. I don’t know if you need to remove it or not (I did). The purpose of the door seems to be to allow upgrades – under the door are two radios (cellular and Bluetooth/Wifi) and I think this is where the fingerprint reader goes (I don’t have one).

Once you get the door off, disconnect the rear camera cable by flipping up the black latch at the end of the cable by 90 degrees (these open at the end where the cable goes), to make it stand up from the PCB. Slide out the cable, put the black latch back down.

Next to the fan you’ll see a silver door with 3 screws – that holds the SSD. No need to mess with that (the SSD will be exposed in the next steps anyway).

Now remove the 4 silver bumper button things on the corners opposite the docking connector. (Two on each side of the machine.) You need a hex driver – I think it’s 2mm but I used a 3/32 inch and it mostly worked ok.

Next remove all the screws around the edges of the machine holding in the black plastic/rubber edges. Then remove the rubber edges – first from the short sides of the machine, then from the long sides (the order matters). Then remove all the screws around the perimeter of the machine. You also need to remove the two screws left and right of the fan (in deeper holes).

Once you get all those out, the cover should be loose around all the edges but stuck in the middle. It’s held by the SIM card socket. Take out the one screw holding the SIM card socket PCB and slide it out. Then you can take off the cover. (It’s possible if you don’t have a SIM card in there this isn’t necessary.)

Here’s what it looks like once you get the cover off:

Inside of CF-33

The touch screen cable is the little white one (about 5 or 6 contacts) that is perpendicular to the SSD. On the opposite side of the SSD from the fan. In the photo it says SUMITOMO on it.

Lift up the plastic protecting it (in the area with the blue marker in the photo) and flip up the black latch at the end of the cable by 90 degrees, to make it stand up from the PCB. Slide out the cable, put the black latch back down. If it takes much force you’re doing it wrong.

That disconnected the touch screen.

Now reassemble the whole thing in the opposite order.

Getting the mainboard cover on is tricky because (again) the SIM card socket is in the way. Don’t try to remove the plastic bracket – you don’t need to and it resists. Instead, remove the SIM card (if you have one in there), remove the one screw holding the PCB and put the cover on. Then slide the SIM PCB into place and replace the screw. Then put the SIM back in and close the little door.

There are 5 screws that are longer than the others. Two of these go thru the black plastic shell that holds the pen, then thru the smaller cover, then into the main machine. 2 more go on either side of the docking connector. I don’t know where the last one goes.

Once you get it all together everything works except the touch screen (which got disconnected). But the touchpad still works (as does any mouse you connect).

I hope this helps someone.

Countering AI disinformation and deep fakes with digital signatures

According to The Economist, disinformation campaigns (often state-sponsored) use “AI to rewrite real news stories”:

In early March [2024] a network of websites, dubbed CopyCop, began publishing stories in English and French on a range of contentious issues. They accused Israel of war crimes, amplified divisive political debates in America over slavery reparations and immigration and spread nonsensical stories about Polish mercenaries in Ukraine… the stories had been taken from legitimate news outlets and modified using large language models.

Deep fakes of still images and now video clips are similarly based on legitimate original photos and video. Detecting such fakery can be challenging.

Disinformation comes from publishers (social media posters, newspapers, bloggers, commenters, journalists, photographers, etc.) who invent or misquote factual claims or evidence. Ultimately, we trust publishers based on their reputation – for most of us an article published by chicagotribune.com is given more credence than one published by infowars.com.

An obvious partial solution (that I haven’t seen discussed) is for publishers to digitally sign their output, identifying themselves as the party whose reputation backs the claims, and perhaps including a permanent URL where the original version could be accessed for verification.

Publishers who wish to remain anonymous could sign with a nym (pseudonym; a unique identifier under control of an author – for example an email address or unique domain name not publicly connected with an individual); this would enable anonymous sources and casual social media posters to maintain reputations.

Web browsers (or extensions) could automatically confirm or flag fakery of the claimed publisher identity, and automatically sign social media posts, comments, and blog posts. All that’s needed is a consensus standard on how to encode such digital signatures – the sort of thing that W3C and similar organizations produce routinely.

Third party rating services could assign trust scores to publishers. Again, a simple consensus standard could allow a web browser to automatically retrieve ratings from such services. (People with differing views will likely trust different rating services). Rating services will want to keep in mind that individual posters may sometimes build a reputation only to later “spend” it on a grand deception; commercial publishers whose income depends on their reputation may be more trustworthy.

Posts missing such signatures, or signed by publishers with poor trust scores, could be automatically flagged as unreliable or propaganda.

Signatures could be conveyed in a custom HTML wrapper that needn’t be visible to readers with web browsers unable to parse them – there’s no need to sprinkle “BEGIN PGP SIGNED MESSAGE” at the start of every article; these can be invisible to users.

Signatures can be layered – a photo could be signed by the camera capturing the original (manufacturer, serial number), the photographer (name, nym, unique email address), and publisher, all at the same time, similarly for text news articles.

When a new article is created by mixing/editing previously published material from multiple sources, the new article’s publisher could sign it (taking responsibility for the content as a whole) while wrapping all the pre-existing signatures. A browser could, if a user wanted and the sources remain available, generate a revision history showing the original sources and editorial changes (rewording, mixing, cropping, etc.). Trust scores could be automatically generated by AI review of changes from the sources.

Video could be signed on a per-frame basis as well as a whole-clip or partial-clip basis. Per frame signatures could include consecutive frame numbers (or timestamps), enabling trivial detection of selective editing to produce out-of-context false impressions.

If there’s a desire for immutability or verifiable timestamps, articles (or signed article hashes) could be stored on a public blockchain.

Somebody…please pursue this?

How to deal with incompetent organizations on the telephone

From hard-won experience. Applies to banks, cable companies, airlines, etc. Virtually all large organizations that deal with the general public (vs. other businesses) have incompetent staff – the general public won’t pay what it costs for better (maybe someday AI can do better; let us hope).

0. Be polite, no matter how justified to be otherwise. They can’t help their own incompetence. It’s not their fault they’ve wasted 4 hours of your time and $1000 of your money.

A drop of honey goes a long, long way. Say “thank you” often.

Be the nicest person they’ve spoken to today.

1. Get their name. WRITE IT DOWN.

Ask them to spell it if necessary.

Use it once in a while (this is both part of being polite, and reminds them that you can complain about them if they don’t treat you right).

2. Ask “How can I reach you if we get disconnected? (That happens to me a lot.)

Write down whatever they say – their name, employee id, extension, case #, whatever.

If you miss something ASK THEM TO SPELL IT.

WRITE IT DOWN.

This goes along with getting names – if you get disconnected and have to start over with someone else, or if the org doesn’t deliver what was promised and you need to call back later, they are much more likely to believe you if you can refer to a person/phone extension/employee id etc. that identifies who you dealt with.

Since you can back up your claim with a contact person, they will assume that what you claim was said earlier is true (remember, most orgs are incompetent, not dishonest).

3. Whatever they promise, GET IT IN WRITING.

If you have proof they said it, the organization is committed to it – if the person promised something they were not supposed to, that’s their problem, not yours – they represent their organization. Hold them to it.

If they can’t do something immediately, ask for an email note promising to do it in the future.

4. If the person is excessively incompetent and just can’t understand, or doesn’t have the authority to fix the problem (happens a lot!), or just can’t figure out how, ASK TO SPEAK TO THEIR MANAGER. Politely.

DON’T go over what the previous person said or got wrong – just start over with the manager.

Go to step 0. (You may end up having to talk to multiple levels of managers before you get to someone who can understand and fix the problem. Just keep going up. Unless you’re talking to the president of the company, whoever you’re talking to has a manager.)

5. VERIFY EVERYTHING. Prices, names, dates, services, etc.

Before you get off the phone. Read it all back to them to confirm.

When you tell them things, make them read it back to you, to confirm they got it right.


Extra credit: Learn and use the ICAO phonetic alphabet:

Alfa      November
Bravo        Oscar
Charlie       Papa
Delta       Quebec
Echo         Romeo
Foxtrot     Sierra
Golf         Tango
Hotel      Uniform
India       Victor
Juliet     Whiskey
Kilo          Xray
Lima        Yankee
Mike         Zulu

So “BCDE123” is just “bravo charlie delta echo one two three”. Don’t waste time saying “B for bravo”.