
u/denzuko

How I "hacked" the telecom system at 14 with a Nokia 3210, and why I just came full circle 26 years later.
The Full Circle of My 333 Prefix: Confessions of a 2000s Mobile Telecom "Hacker"
There is a small detail on my iPhone 13 screen that means more to me than any technical specification: the TIM carrier logo sitting right next to my original phone number starting with 333.
To anyone else, it’s just a random sequence of digits. To me, it represents a 26-year time-travel journey—a nostalgic circle that has finally closed in the most satisfying way possible.
It all started in the summer of 2000. I was 14 years old with no internet connection, no computer, and no online forums to consult. All I had was a legendary, indestructibleb blu-monochrome Nokia 3210, my hands on its rubber keypad, and an overwhelming curiosity to figure out how things worked under the hood.
Back then, mobile telephony in Italy was in its wild west phase. TIM offered a base plan called Autoricarica 190—designed to make users spend money, but possessing a massive logical loophole when combined with their limited-time summer promos. Analyzing the rules entirely on my own, I discovered the "loophole": I activated the Summer Edition promo (which gave you unlimited SMS for a small flat fee) and started running my own text and missed-call routine.
My tactic was as simple as it was devious: I’d call random TIM numbers, let them ring once, and wait for people to call back out of curiosity. Once they picked up, I did everything in my power to keep them on the phone as long as possible—inventing excuses, wrong-number small talk, or random stories—just to rack up incoming call minutes. Reaching 100 incoming minutes unlocked the maximum auto-top-up bonus on my plan.
The result? I spent 5,000 Italian Lire on the summer promo and ended up with 100,000 Lire of free credit sitting on my Nokia display. For a 14-year-old in the year 2000, checking my balance via *123# and seeing a six-figure sum felt like holding a chest of gold. It was the ultimate victory of logic over the system.
I kept that plan active for nearly a decade. Eventually, around 2008, the carrier patched the exploits, capped the bonuses, and prices began to creep up. I finally left TIM carrying a half-wrecked Siemens M-series phone (the one with the iconic rubberized keypad guard) after years of heavy use. I said goodbye to the network and began a 15-year journey across various competitors, always carrying that original 333 prefix—a badge of honor from the 90s GSM era—wherever I went.
Now, the story has closed with a poetic twist.
I just switched back to TIM through a hyper-competitive win-back offer: 201 GB in 5G for just €4.99 a month, which I now use to power my home Wi-Fi router. No more missed-call tricks to farm incoming minutes, no more calculating SMS costs down to the cent.
Looking at my iPhone 13 today, connected to 5G under the exact same 333 number I used in the summer of 2000, brings a huge smile to my face. It reminds me of an irreplaceable era when all you needed was a monochrome screen, a rubber keypad, and a bit of ingenuity to feel like you owned the world. Everything is finally back where it belongs.
I am gob smacked we don't have this already.. https://matrix.to/#/#hope2026:hope.net
Get in the Discord and Matrix servers peps its HOPE time.
Found the o'reilly in san pedro near florence Payphone.
Thanks /u/ChrisBoden for (https://www.youtube.com/watch?v=28Vr7MH8gRA) for this 'tism hunt.
10 real bugs found by actually running a Common Lisp deploy script, not just reading it
Alongside ongoing work updating c-mera and modernizing Common Lisp tooling for SecDevOps and OT environments, I recently set out to evaluate whether a pure Lisp stack could replace our external infrastructure and database tooling (specifically Vagrant and Redgate).
The goal was to integrate Consfigurator (declarative OS deployment) with cl-migratum (database migrations).
To test this, I authored a Roswell script that provisions a rootless Podman quadlet running PostgREST and deploys a small HTMX todo app against PostgreSQL. The setup uses:
- SXQL for SQL schema generation
- Spinneret for HTML generation
- CL-inix for systemd unit file generation
- FiveAM for integration testing
- 40ants/doc for self-documenting executable scripts
In the sandbox environment, Roswell provisions a ZFS dataset, configures a dedicated system user, spins up PostgreSQL and PostgREST, and applies the database migrations directly from memory.
Running this end-to-end surfaced ten real bugs across the ecosystem (reproduction steps and full list are inFINDINGS.md).
A few notable issues worth calling out:
- In-memory DCL with
cl-migratum:cl-migratumexpects file-based DDL/DML out of the box and doesn't handle in-memorysxqlexpressions cleanly. I had to write a custom in-memory driver using its driver API and extend it to handle DCL (Data Control Language) statements. - System naming gotcha:
cl-migratum-driver-pgdoesn't exist under that system name. When pulling viaqlot, the actual system iscl-migratum.driver.postmodern-postgresql. - Spinneret compile-time attribute quoting: Spinneret decides whether to quote HTML attribute values at macro expansion time based on literal string characteristics, not runtime values. A
class="%s"placeholder compiles down fine, but breaks silently at runtime the second a substituted string contains spaces. Spinneret provides*always-quote*to handle this, but it requires a globalSETFprior to compilation rather than a dynamicLETbinding at runtime. I've opened a PR to document and address this:spinneret#114. - Idempotency in PostgreSQL schema definitions: Neither
CREATE ROLEnorCREATE DOMAINsupportIF NOT EXISTSin Postgres. Because cluster-level roles and domains survive dropping and recreating a database, subsequent deployments failed immediately on schema re-application. - Undocumented C library dependencies:
Consfiguratordepends on native headers (libacl1-dev,libcap-dev) that aren't noted in the build requirements. I sent a patch upstream viagit send-emailfollowing their contribution guidelines.
Full code and reproduction notes:https://github.com/denzuko/todo-app-deploy
mlisp — the Mailing List Processor alpha release is live
mlisp is a mailing list manager done as production-grade, compiled Common Lisp baseed replacement for smartlist and Mailman 2 in a procmail-based MTA environment. Every message processes through a single-binary delivery pipeline with no daemon required. CAN-SPAM, GDPR, and CASL compliance are baked in.
Yes one can use this with a repl or typical procmailrc process. Current version also adds a procmail-dsl, gnu bugs replacement, milter plugins, neural.sh (openai shell pipe) intergration, subscriber commands, BITNET search, AllFix files, DKIM/RFC8058/DMARC, rate-limit, embargo, subgroups, and more.
https://github.com/denzuko/mlisp/releases/tag/v0.8.0
#foss #selfhosted #infrastructure #privacy
CMMC Phase 2 November 2026: two readings of SR.1 — C3PAOs are applying the one that requires a verifiable chain, not just a file
Generating an SBOM satisfies SR.1 as a checkbox. Demonstrating a verifiable chain of custody satisfies it as a control. If your program does the former and assessors are applying the latter, you have a five-month window.
CMMC Phase 2 mandatory C3PAO assessments start November 2026 — the SBOM requirement has two valid interpretations and assessors are using the stricter one
SR.1 can be satisfied by generating an SBOM file or by demonstrating a verifiable chain of custody. Phase 1 C3PAO assessors are applying the chain interpretation. SLSA Level 2 or 3 attestation in the build pipeline, Sigstore signing, SBOM traveling with the artifact rather than living in a separate document store.
CMMC Phase 2 November 2026: two readings of SR.1 — C3PAOs are applying the one that requires a verifiable chain, not just a file
Generating an SBOM satisfies SR.1 as a checkbox. Demonstrating a verifiable chain of custody satisfies it as a control. If your program does the former and assessors are applying the latter, you have a five-month window.
Article: Rules, Types, and Glue — Evaluating Prolog, Coalton, and CL (SBCL/ECL) for Game Simulation Engines
Hey everyone,
I wanted to share a technical write-up and domain exercise I’ve been working on that explores a multi-paradigm approach to game simulation architecture within the Lisp ecosystem.
The core of the article focuses on isolating system responsibilities to prevent integration plumbing from destroying runtime performance, using three specific layers:
Rules: Using Prolog for declarative knowledge representation, symbolic reasoning, and handling complex entity relationship queries.
Types: Utilizing Coalton to inject strict, ML-style static type safety and compile-time invariants directly inline where data boundaries need rigor.
Glue: Leveraging Common Lisp as the high-performance runtime, compiler orchestration layer, and dynamic tissue holding it all together.
Beyond the design philosophy, I wanted to see how this holds up under load, so the article includes baseline performance evaluations and benchmarks comparing SBCL (leveraging native compilation) and ECL (for potential C-embeddability scenarios) when driving these high-throughput simulation loops.
Full post is here: https://dwightaspencer.com/posts/03-rules-types-and-glue/
I'd love to get the community's perspective on this approach—particularly regarding how you handle boundaries between embedded logic engines and the underlying CL image, or any nuances you've run into when scaling Coalton boundaries alongside standard ANSI CL code.
Yes you heard right. Cannot find much on C*NET, PhreakNET, or TandmX projects and yes I'm aware of Connections Museum in Seattle but my understanding they mainly have PacTel stuff and physical equipment.
I'm building something that's a NYNEX CO specific and ties back to Bell Labs, Fidonet, BBS hacking scene and Dial up ISPs of the 80's/90's. (because of the fun of it and its cool).
So any leads on audio files would be amazing. If you guys know of any please share