Syed Ahmed Ali ShahSoftware developer · Pakistan
Blog

Notes on software, security, and the occasional deep dive

Short write-ups on the decisions behind the projects, plus analysis of things happening elsewhere in software and security.

16 articles5 topicsUpdated RSS

Blockchain & Cryptography, 8 min read

Notary, Content Credentials or Blockchain Timestamp? How to Prove a File Is Original

A notary proves who signed. Content Credentials prove which camera took a photo. A timestamp proves a file existed by a certain date. What each one really shows, where each one fails, and which you need for contracts, news footage, manuscripts and designs.

C2PATimestampingSHA-256Notarization
Read the full post
Open Journal Systems, 8 min read

Manuscript Timestamping for Journals: How to Prove When a Paper Was Submitted

A rejected paper reappears under a reviewer's name. Who can prove which came first? How journals can record, independently and privately, that a manuscript existed on a given date, and what OJS already does and doesn't cover.

OJSResearch IntegritySHA-256Timestamping
Read the full post
Foundry & Tooling, 7 min read

Foundry vs Hardhat in 2026: Which Should You Use for Solidity Development?

Hardhat 3 now runs Foundry-style Solidity tests, and Foundry has reached 1.0. A practical comparison of testing, speed, deployment and ecosystem, from someone who has shipped with both.

FoundryHardhatSolidityEthereum
Read the full post
Security, 8 min read

The Upwork Job That Installed a Keylogger on My Mac

A DeFi client asked me to run their MVP locally and send a screenshot. Five weeks later I found a Python keylogger disguised as an Apple service. Here is the timeline, the evidence, and what I would do differently.

macOSMalwareUpworkWeb3
Read the full post
Blockchain & Cryptography, 7 min read

Why My Voting dApp Counts Wallets, Not People

One line of Solidity stops anyone voting twice — from the same wallet. Why that gap is the real unsolved problem in blockchain voting, and how my two voting projects ended up on opposite sides of it.

SolidityHyperledger FabricIdentityGovernance
Read the full post
Open Journal Systems, 12 min read

How to Upgrade OJS 3.5.0-4 to OJS 3.5.0-5 Safely: Step-by-Step Guide

A cautious, production-first upgrade path for the 3.5.0 LTS bug-fix release — backups, staging clones, database migrations, and what to actually test before reopening the journal.

OJSPHPMySQLSysadmin
Read the full post
Blockchain & Cryptography, 18 min read

Solidity view vs pure: Function Mutability, Variable Types, and Data Locations Explained

What pure, view, payable, and nonpayable actually restrict a function from doing, plus storage, memory, and calldata — grounded in a real Foundry compiler error from a FundMe project.

SolidityFoundry
Read the full post
Foundry & Tooling, 2 min read

Imported an Anvil Account Into MetaMask but Can't See the 10,000 ETH?

The private key imports fine. The balance is real. MetaMask is just pointed at the wrong network — here's the actual fix.

FoundryAnvilMetaMask
Read the full post
Foundry & Tooling, 2 min read

Foundry Installed but "forge" Command Not Found on macOS

Foundry's installer and the actual forge/cast/anvil binaries are two separate steps — what to check when the command still isn't found.

FoundrymacOSPATH
Read the full post
Foundry & Tooling, 3 min read

Foundry "forge test --m" Not Working? Use --mt to Filter Tests by Name

The exact error, why --m isn't a real flag, and the difference between --mt, --mc, and --mp when filtering Foundry tests.

FoundryForgeSolidity
Read the full post
Foundry & Tooling, 2 min read

Why Your Foundry Test Output Looks Different From a Course Video

A passing test with different-looking terminal output isn't a sign something's wrong — what actually causes the formatting to shift.

FoundryForge
Read the full post
Foundry & Tooling, 2 min read

Foundry "forge-std/Test.sol" Not Found in VS Code: How to Troubleshoot It

A red underline in VS Code doesn't always mean forge build actually fails — how to tell the difference and work through the real causes.

FoundryVS CodeSolidity
Read the full post
AI & Applied Engineering, 6 min read

The Hugging Face breach nobody expected: when the attacker was an AI agent, not a person

In July 2026, OpenAI's own models broke out of a security evaluation and hacked Hugging Face's production infrastructure — no human attacker involved. Here's what actually happened, and what it means for anyone building with agents.

"Detection didn't fail here. Triage did — and that's a much more uncomfortable lesson than 'the AI went rogue.'"

— from the post
AI AgentsAppSecIncident Response
Read the full post
Open Journal Systems, 5 min read

Modernizing a university's journal system: lessons from running OJS in production

What two years of administering Open Journal Systems for a university department actually looks like: careful upgrades, the people who depend on the system, small automations that compound, and owning the whole website.

OJSPHPSysadminAutomation
Read the full post
AI & Applied Engineering, 2 min read

What prompt engineering actually looks like day to day

It's less "magic incantations" and more systematic testing — here's the version that actually holds up in production.

"A well-specified system prompt behaves less like a spell and more like a function signature."

— from the post
Groq APIPrompting
Read the full post
Blockchain & Cryptography, 6 min read

Why I built a blockchain notary instead of another CRUD app

On choosing Solidity over a database when the whole point is that nobody, including me, should be able to quietly edit the record. How the Document Notary works, what a proof does and doesn't establish, and the trade-offs I accepted.

concept.sol
illustrative example
function verifyHash(bytes32 storedHash, bytes32 fileHash)
    public view returns (bool) {
  // the chain only ever sees a hash, never the document
  return storedHash == fileHash;
}
SolidityReactNode.jsSupabaseCloudflare R2
Read the full post

— that's everything so far, more notes as new projects ship —

Download resume

Enter the access key I shared with you.

Don't have a key? Request my resume.