Efi's Demo Lab

Efi Pecani / the experiment collection

Ideas you can
get your hands on.

Fly a drone. Follow a learning agent. Look inside a language model experiment. A closer look at the things I build.

40
public repositories, individually explored

Working browser apps, real research artifacts, and small experiments that make the methods tangible.

Iron Tide
Live in your browser

Iron Tide

↗
Photo Studio
Live in your browser

Photo Studio

↗

Pick an experiment.

40 projects

Photo Studio preview
Play & createLive app

Photo Studio

A photography workspace with 24 desktop effects, foreground segmentation, and a browser playground.

PythonExplore project ↗
Iron Tide preview
Play & createLive app

Iron Tide

A Silent Hunter–inspired Atlantic patrol: find the convoy, line up the shot, and escape the escort.

DocumentationExplore project ↗
PROP//WASH preview
Play & createLive app

PROP//WASH

FPV drone flight over real satellite imagery and elevation, with race gates and a physics-driven battery model.

PythonExplore project ↗
Play & createLive app

Empathy CAPTCHA

A satirical human-or-replicant interrogation, told through escalating CAPTCHA challenges and behavioral signals.

TypeScriptExplore project ↗
Learning to land preview
Reinforcement learningRecorded agents

Learning to land

DQN and PPO agents learn controlled spacecraft landings in Gymnasium's LunarLander-v3.

Jupyter NotebookExplore project ↗
A drone learning to fly preview
Reinforcement learningRecorded agents

A drone learning to fly

A modular Gymnasium environment for quadrotor hover, waypoint tracking, obstacle navigation, and depth-camera perception.

PythonExplore project ↗
Finding the way through preview
Reinforcement learningRecorded agents

Finding the way through

Curriculum-trained PPO and Dueling Double DQN navigate two-, four-, and six-room MiniGrid mazes.

Jupyter NotebookExplore project ↗
Flappy Bird, trained preview
Reinforcement learningRecorded agents

Flappy Bird, trained

Q-learning and SARSA learn when to flap, then face narrower pipe gaps to test generalization.

Jupyter NotebookExplore project ↗
The right chart for the story preview
Data scienceInteractive explainer

The right chart for the story

Explore 62 chart examples organized by the nine relationships in the Financial Times Visual Vocabulary.

DocumentationExplore project ↗
A browser tool belt preview
SecurityInteractive explainer

A browser tool belt

An unofficial MCP bridge for Octo Browser profile lifecycle management and Playwright/CDP automation.

PythonExplore project ↗
Inside the auction preview
Data scienceResearch showcase

Inside the auction

A 249,000-impression real-time bidding analysis: click drivers, auction behavior, and calibrated win-rate pricing.

Jupyter NotebookExplore project ↗
Which language is this? preview
Language & retrievalInteractive explainer

Which language is this?

Character n-grams and perplexity turn language identification into a question of which model is least surprised.

Jupyter NotebookExplore project ↗
Language & retrievalInteractive explainer

A small poetry machine

Second-order Markov transitions assemble new lines one word at a time, with the previous two words as context.

Jupyter NotebookExplore project ↗
Language & retrievalInteractive explainer

Find evidence before answering

Wikipedia question answering combines BM25 and QLD retrieval, BGE reranking, and few-shot generation.

Jupyter NotebookExplore project ↗
What deserves the top result? preview
Language & retrievalInteractive explainer

What deserves the top result?

BM25, RM3 expansion, and QLD plus BGE reranking compete on the ROBUST04 news collection.

Jupyter NotebookExplore project ↗
Tiny memory, streaming signals preview
Language & retrievalInteractive explainer

Tiny memory, streaming signals

Five compact sketches monitor token-distribution changes as LLM output arrives.

Jupyter NotebookExplore project ↗
When training data changes the story preview
Language & retrievalResearch showcase

When training data changes the story

A literary model study separates style corruption from factual knowledge poisoning, using GPT-2 and Llama.

Jupyter NotebookExplore project ↗
Detecting attacks in a stream preview
SecurityInteractive explainer

Detecting attacks in a stream

Probabilistic sketches compress network-flow windows before attack classification on UNSW-NB15.

Jupyter NotebookExplore project ↗
Finding automated login patterns preview
SecurityResearch showcase

Finding automated login patterns

Analyze login velocity, tools, network types, and status codes to investigate credential stuffing.

Jupyter NotebookExplore project ↗
A policy-aware email pipeline preview
SecurityResearch showcase

A policy-aware email pipeline

Rule-based policy checks, TF-IDF topic analysis, and XGBoost explore data loss prevention in the Enron corpus.

Jupyter NotebookExplore project ↗
Images and words, together preview
Language & retrievalResearch showcase

Images and words, together

Compare image and text branches, then test eight fusion strategies for harmful-meme classification.

Jupyter NotebookExplore project ↗
Language & retrievalResearch showcase

Two routes to multimodal understanding

Compare OCR plus BLIP-2 captioning with a CLIP-based approach to harmful-content detection.

Jupyter NotebookExplore project ↗
What did the diner mean? preview
Language & retrievalResearch showcase

What did the diner mean?

Bag-of-Words features feed Random Forest and Naive Bayes classifiers for restaurant review sentiment.

Jupyter NotebookExplore project ↗
The language of a crisis preview
Language & retrievalResearch showcase

The language of a crisis

Survey text explores Israeli entrepreneurs' sentiment during COVID-19, including simulated non-crisis responses.

Jupyter NotebookExplore project ↗
When is a mobile user active? preview
Data scienceResearch showcase

When is a mobile user active?

Movement, geohashes, and daily activity form criteria for qualified monthly active users.

Jupyter NotebookExplore project ↗
Drawing the separating margin preview
Data scienceInteractive explainer

Drawing the separating margin

A compact SVM classification study from a machine-learning course, presented with its saved notebook figures.

Jupyter NotebookExplore project ↗
From browsing time to spending preview
Data scienceInteractive explainer

From browsing time to spending

Linear regression relates customer behavior on web and app channels to yearly spending.

Jupyter NotebookExplore project ↗
Grouping countries by response preview
Data scienceInteractive explainer

Grouping countries by response

A K-means exploration of COVID-19 data and country response patterns.

Jupyter NotebookExplore project ↗
Three assets, many portfolios preview
Data scienceInteractive explainer

Three assets, many portfolios

An R experiment maps portfolio weights to expected return and volatility using a covariance matrix.

RExplore project ↗
Learning from promotion data preview
Data scienceResearch showcase

Learning from promotion data

A machine-learning study of employee promotion labels, with original charts and presentation material.

Jupyter NotebookExplore project ↗
Evaluating a health classifier preview
Data scienceInteractive explainer

Evaluating a health classifier

A historical classification exercise using heart-disease dataset features and multiple machine-learning algorithms.

Jupyter NotebookExplore project ↗
Reading the shape of an economy preview
Data scienceInteractive explainer

Reading the shape of an economy

R exercises explore GDP, interest rates, income distributions, and inequality using statistical data.

RExplore project ↗
An R analysis for Trenario preview
Data scienceResearch showcase

An R analysis for Trenario

An independently collected dataset becomes an R analysis with exploratory charts and a final report.

RExplore project ↗
Names in the monarchy preview
Language & retrievalResearch showcase

Names in the monarchy

NLP compares names and gender mentions in Wikipedia pages about French and Russian monarchies.

Jupyter NotebookExplore project ↗
Language & retrievalInteractive explainer

A word, counted

A small Python utility counts words per line and occurrences of Dorian in an input text file.

PythonExplore project ↗
The original photo editor preview
ArchiveArchive

The original photo editor

The Python/Tkinter photo editor Efi wrote entirely by hand in 2018, preserved beside its modern successor.

PythonExplore project ↗
The profile behind the projects preview
ArchiveArchive

The profile behind the projects

The GitHub profile README: a curated introduction to Efi's research, tools, and interactive experiments.

HTMLExplore project ↗
ArchiveArchive

Fuzzer: an early web sketch

A small HTML repository with a welcome page and a separate fuzzer-named document.

HTMLExplore project ↗
ArchiveArchive

A one-file web draft

A repository containing an HTML-like email-project draft inside README.md.

DocumentationExplore project ↗
ArchiveArchive

Query clustering: a reserved idea

A repository reserved for clustering user search queries, with no committed implementation to demonstrate yet.

DocumentationExplore project ↗