Hi, I’m Mehdi Fekih
I am a Data Scientist. Data Engineer. Developer. Home Automation Specialist.My Blog
Awesome Public Datasets: A Treasure Map for Data-Driven Projects
If you have ever started a machine learning project, built a dashboard, written a research paper, or simply wanted to explore real-world data, you already know the hardest part is often not the code. It is finding a good dataset.
That is why the GitHub repository Awesome Public Datasets is such a valuable resource. It is a curated collection of public datasets organized by topic, making it easier for developers, researchers, analysts, students, and data enthusiasts to discover high-quality data sources without spending hours searching across the web.
Whether you are looking for climate records, economic indicators, social network graphs, image datasets, government data, healthcare resources, or machine learning benchmarks, this repository acts like a map to the public data ecosystem.
What Is Awesome Public Datasets?
Awesome Public Datasets is an “awesome list” dedicated to topic-centric public data sources. Like other awesome lists on GitHub, its goal is simple: collect useful links in one place and organize them so people can find what they need quickly.
The repository includes datasets from a wide range of domains, including agriculture, biology, chemistry, climate and weather, cybersecurity, economics, education, energy, finance, GIS and geospatial data, government, healthcare, image processing, machine learning, natural language processing, neuroscience, physics, social sciences, software, sports, time series, and transportation.
It also includes complementary collections, which can lead users to even more dataset repositories and archives. In short, it is not a single dataset. It is a gateway to hundreds of datasets.
Why This Repository Is So Useful
The internet is full of data, but not all data is easy to find, clean, documented, or usable. Many valuable datasets are buried inside university pages, government portals, academic archives, old project websites, or research labs.
Awesome Public Datasets helps solve that discovery problem. Instead of searching Google for “free public dataset for network analysis” or “open agriculture data,” you can browse a categorized list and quickly find relevant sources.
For example, the repository points to well-known resources such as the Stanford Large Network Dataset Collection for graph and network research, Open Food Facts for food product data, NBER Patent Citations for economics and innovation research, DIMACS Road Networks Collection for transportation and graph algorithms, and many climate, biology, finance, and machine learning datasets.
Each listing usually includes a short description and a link to the original data source. Many entries also include metadata links from the repository’s companion project, apd-core.
A Dataset Directory for Many Audiences

For Data Scientists
Data scientists can use it to find datasets for exploratory analysis, predictive modeling, visualization, and portfolio projects. Instead of working with the same few beginner datasets repeatedly, they can explore more specialized real-world data.
For Machine Learning Engineers
Machine learning engineers can find benchmarks and domain-specific data for experimenting with models. Categories like image processing, natural language, time series, and cybersecurity are especially useful for ML workflows.
For Researchers
Researchers can discover public data sources related to biology, physics, neuroscience, social sciences, climate, economics, and more. The repository can serve as a starting point for literature reviews, reproducible experiments, or interdisciplinary research.
For Students
Students learning Python, R, SQL, data visualization, or statistics can use the repo to find project ideas. Real datasets make learning more meaningful because they contain imperfections, surprises, and domain context.
For Journalists and Analysts
Data journalists and analysts can use the collection to locate public-interest datasets, especially in government, economics, transportation, education, healthcare, and climate.
What Makes It Better Than a Random List of Links?
The strength of Awesome Public Datasets is not just that it contains many links. It is the organization and curation.
The datasets are grouped by domain, so browsing feels natural. If you are interested in geospatial analysis, you can jump to GIS. If you are researching transportation networks, you can explore Transportation or Complex Networks. If you are looking for NLP resources, there is a Natural Language section.
The repository also uses status icons for entries. Some links are marked as healthy, while others are marked as needing attention. That is important because public dataset links often break over time. Seeing that maintenance status gives users a quick signal about whether a resource may need verification.
Another important detail: the README notes that the repository is automatically generated by apd-core. Contributors are asked not to edit the generated README directly, but to contribute through the appropriate metadata workflow. That makes the project more structured than a hand-edited list.
Great Project Ideas Using Awesome Public Datasets
- Build a climate dashboard: Use climate and weather datasets to visualize temperature changes, rainfall patterns, or extreme weather events over time.
- Analyze transportation networks: Explore road network datasets or public transport data to study shortest paths, congestion, or urban accessibility.
- Create a food product explorer: Use Open Food Facts or other agriculture and food datasets to analyze nutrition, ingredients, product origins, or labeling trends.
- Study social networks: Use graph datasets from the social networks or complex networks sections to learn network analysis, centrality, community detection, and graph visualization.
- Practice time series forecasting: Find time series datasets related to energy, finance, climate, or transportation and build forecasting models.
- Train an image classification model: Browse image processing datasets and experiment with computer vision techniques.
- Investigate public policy questions: Government, education, economics, healthcare, and social science datasets can support projects around inequality, public spending, population trends, or policy outcomes.
If you want help turning one of these datasets into a production-ready pipeline — ETL, storage, or a deployed model — check out my data engineering services or get in touch.
A Few Things to Keep in Mind

Awesome Public Datasets is a directory, not a guarantee that every dataset is ready to use immediately.
Before starting a project, you should always check the dataset license, whether the data is free or requires payment, update frequency, file format, documentation quality, privacy or ethical considerations, whether the link is still active, and whether the dataset is suitable for commercial use.
The repository itself notes that most datasets are free, but some are not. That distinction matters, especially for production or commercial projects.
Also, because many datasets come from third-party sources, quality can vary. Some may be clean and well-documented, while others may require significant preprocessing.
Why Public Datasets Matter
Public datasets are one of the foundations of modern data work. They make research more transparent, help students learn by doing, allow developers to test ideas, and enable journalists and citizens to investigate important questions.
Open data also lowers the barrier to innovation. A student with a laptop can analyze climate trends. A developer can build a prototype with public transportation data. A researcher can compare results using shared benchmarks. A startup can validate an idea before collecting proprietary data.
Repositories like Awesome Public Datasets make that ecosystem easier to navigate.
Final Thoughts
Awesome Public Datasets is one of those GitHub repositories worth bookmarking immediately. It saves time, sparks ideas, and opens doors to data from dozens of fields.
If you are learning data science, building machine learning models, writing research, creating visualizations, or looking for your next portfolio project, this repository is an excellent place to start.
The next time you ask, “Where can I find a good dataset?”, start with Awesome Public Datasets. And if you need a hand turning that data into something real — a dashboard, a model, a pipeline — I do this for a living. Let’s talk.
Bitcoin and “Cyclicality”: Reassuring Myth or Serious Analysis?
For several years, much of the discussion around Bitcoin has rested on one central idea: cyclicality.
Halvings, four-year cycles, an “inevitable” bull run, and an equally expected bear market. The narrative is well-oiled, almost comforting.
But one question deserves to be asked plainly:
Can we really call it serious analysis when we are waiting for a phenomenon that is supposedly obvious and predictable?
What supporters of cyclicality argue
Defenders of this view mainly rely on three elements:
- Historical data: since 2012, the major bullish phases have followed halvings.
- Programmed scarcity: the reduction in issuance is supposed to mechanically influence price.
- The repetition of human behavior: euphoria, excess, correction, forgetting, then return.
Taken individually, these elements are not absurd. The problem begins when they are presented as an almost deterministic mechanism.

Where the reasoning becomes fragile
1. A ridiculously small statistical sample
Bitcoin has existed for just over fifteen years.
Speaking of robust cycles based on three or four occurrences is closer to storytelling than science.
In finance, no one would describe that as a usable time series with a high level of confidence.
2. Confusing correlation with causation
The fact that rallies followed halvings does not prove that:
- the halving is their main cause,
- or that the same pattern will repeat identically.
The markets of 2013, 2017, and 2021 had nothing in common in terms of liquidity, participants, regulation, or macroeconomics.
3. A self-fulfilling prophecy
The more an idea is repeated, the more it influences behavior.
- Investors buy “before the halving”
- The media amplify the narrative
- Flows become synchronized
The cycle then becomes a social artifact, not a market law.
It works… until the day it no longer does.
Technical analysis: tool or illusion of control?
Technical analysis is not useless in itself. It is effective for:
- reading collective behavior,
- identifying liquidity zones,
- managing short- or medium-term risk.
But it does not turn an asset as young, political, and narrative-driven as Bitcoin into a predictable metronome.
Believing otherwise means confusing reading the past with the ability to forecast.

What Bitcoin really is
Bitcoin is not:
- a stock with cash flows,
- a traditional commodity,
- a mature asset.
It is all at once:
- a technological object,
- an experimental monetary asset,
- an ideological symbol,
- a field for global speculation.
Reducing all of that to a simple cyclical curve is intellectually comfortable, but analytically poor.
So, is skepticism a mistake?
No.
Being skeptical of cyclicality presented as obvious is, on the contrary, a way to:
- reject overly neat narratives,
- avoid lazy certainties,
- maintain an open analytical stance.
The real danger is not doubting cycles.
The real danger is mistaking them for natural laws.
Conclusion
Bitcoin cyclicality is a useful narrative, sometimes effective, but never guaranteed.
It helps structure expectations, not predict the future.
In a market this young and shifting, the only truly rational position remains intellectual caution.
The day the “obvious” cycle fails, it will not be an anomaly.
It will simply be the market reminding us that it owes nothing to our charts.
Configuring Amazon S3 Access Keys Securely for UpdraftPlus (WordPress)
Using Amazon Web Services S3 as remote storage for UpdraftPlus is a common and reliable approach for backing up a WordPress site.
However, many users are confused when AWS warns against long-term access keys and suggests alternative authentication methods.
This article explains the correct and secure way to configure S3 access for UpdraftPlus, why AWS shows those warnings, and what best practices actually apply in a real WordPress environment.
Why AWS Warns About Long-Term Access Keys
AWS strongly encourages modern authentication mechanisms such as:
- IAM Roles
- Temporary credentials (STS)
- Workload identity federation
These are excellent practices when your application runs inside AWS (EC2, ECS, Lambda).
However, classic WordPress hosting does not support IAM roles.
If your WordPress site runs on:
- Shared hosting
- A VPS (DigitalOcean, OVH, Hetzner, etc.)
- On-premise infrastructure
then access keys are the only supported and correct solution.
AWS warnings are contextual, not prohibitions.
The Correct AWS Use Case for UpdraftPlus
When creating an access key in IAM, AWS asks you to select a use case.
✅ Correct choice:
Application running outside AWS
This matches the reality:
- UpdraftPlus is a third-party PHP application
- It runs outside AWS
- It only needs programmatic access to S3
Selecting this option does not weaken security and does not change how credentials work.
It simply helps AWS categorize usage internally.
Secure Architecture Overview
WordPress
└─ UpdraftPlus
└─ IAM User (restricted)
└─ S3 Bucket (private)
Key principle: least privilege.
Step 1 – Create a Dedicated S3 Bucket
Best practices:
- Private bucket (Block all public access)
- Dedicated to backups only
- Optional versioning enabled
- Optional lifecycle rules (auto-delete old backups)
Example bucket name:
my-wp-backups-prod
Step 2 – Create a Dedicated IAM User
Never use:
- Root credentials
- A shared IAM user
- Broad policies like
AmazonS3FullAccess
Create a single-purpose IAM user, for example:
updraftplus-wordpress
Programmatic access only.
Step 3 – Attach a Minimal IAM Policy
This policy allows only what UpdraftPlus needs:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UpdraftPlusS3Access",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-wp-backups-prod",
"arn:aws:s3:::my-wp-backups-prod/*"
]
}
]
}
This prevents:
- Access to other buckets
- Account-wide damage if credentials leak
Step 4 – Generate Access Keys
Generate:
- Access Key ID
- Secret Access Key
Store them securely and never commit them to Git.
Add a description such as: UpdraftPlus – production backups
Step 5 – Configure UpdraftPlus
In WordPress:
- Settings → UpdraftPlus → Settings
- Select Amazon S3
- Enter:
- Access Key ID
- Secret Access Key
- Bucket name
- Region
- Set a bucket subpath (recommended):
wordpress/site-prod/
- Save and test the connection
If it fails, the cause is almost always:
- Wrong region
- Incorrect IAM policy
- Typo in bucket name
Optional Hardening (Recommended)
Lifecycle Rules
Automatically delete old backups:
- Daily: keep 14 days
- Monthly: keep 6 months
This avoids silent storage cost growth.
Server-Side Encryption
Enable default SSE-S3 (AES-256).
No code changes required.
IP Restriction (Advanced)
If your hosting provider has a static IP, you can restrict IAM access to that IP range.
Common Mistakes to Avoid
- Using root access keys
- Granting
AmazonS3FullAccess - Making the bucket public
- Skipping lifecycle rules
- Reusing credentials across multiple sites
Final Verdict
For WordPress + UpdraftPlus:
- Long-term access keys are normal
- AWS warnings are generic
- Least-privilege IAM policies are what actually matter
Used correctly, this setup is secure, stable, and industry-standard.
Aliexpress : The Bundle Deal Problem
Aliexpress : The Bundle Deal Problem
Tired of AliExpress forcing you into “Bundle Deals” when you just want to buy a single item? This free userscript intercepts those sneaky links and redirects you straight to the actual product page.
The Bundle Deal Problem
AliExpress has been increasingly pushing shoppers toward “Bundle Deals” — grouped offers that look attractive but prevent you from purchasing a single item at its regular price. When you click on a product from search results, you land on an intermediate page that pressures you into adding more items to your cart.
Here’s what a bundle link looks like:
aliexpress.com/ssr/300000512/BundleDeals2?productIds=1005008154245742...
Instead of the direct product link:
aliexpress.com/item/1005008154245742.html
This dark pattern wastes your time and tricks you into spending more than you intended. Let’s fix that.
The Solution: AliExpress Bundle Bypass
This userscript automatically detects Bundle Deal links and converts them into direct product page links. No more hunting for workarounds — the script handles everything silently in the background.
Features
- Instant redirect — If you land on a Bundle page, you’re immediately redirected to the actual product
- Link rewriting — Bundle links in search results are converted in real-time as the page loads
- Click interception — Even if a link wasn’t converted, clicks are caught and redirected
- Debug panel — A visual overlay shows how many links were detected and fixed
- Visual indicators — Converted links get a green outline for confirmation
Installation Guide
The script works with any userscript manager extension. Follow the instructions for your browser below.
🟡 Google Chrome
- Install Tampermonkey from the Chrome Web Store
- Click the Tampermonkey icon in your browser toolbar
- Select “Create a new script…”
- Delete the default template code
- Paste the script code (see below)
- Press Ctrl+S (or Cmd+S on Mac) to save
- Refresh AliExpress — the debug panel should appear in the top-right corner
🟠 Mozilla Firefox
- Install Violentmonkey or Greasemonkey from Firefox Add-ons
- Click the extension icon in your toolbar
- Click the “+” button to create a new script
- Paste the script code
- Save with Ctrl+S
- Navigate to AliExpress and test it out
🔵 Microsoft Edge
- Install Tampermonkey for Edge from the Microsoft Edge Add-ons store
- Click the Tampermonkey icon
- Select “Create a new script…”
- Paste the code and save
🦁 Brave Browser
Brave is Chromium-based, so the process is identical to Chrome. Install Tampermonkey from the Chrome Web Store — it’s fully compatible with Brave.
🍎 Safari (macOS)
Safari requires a paid extension for userscripts. Your options are:
- Userscripts (free, open-source)
- Tampermonkey for Safari (paid)
The Script
Copy the entire code below and paste it into your userscript manager:
// ==UserScript==
// @name AliExpress Bundle Bypass
// @namespace https://github.com/user/aliexpress-bundle-bypass
// @version 3.1.0
// @description Bypass bundle deals and go directly to product pages
// @author Community
// @match *://*.aliexpress.com/*
// @match *://*.aliexpress.ru/*
// @match *://*.aliexpress.us/*
// @grant GM_addStyle
// @run-at document-end
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const processedLinks = new WeakSet();
let isScanning = false;
let scanTimeout = null;
let scannedCount = 0;
let foundCount = 0;
let convertedCount = 0;
// Debug panel
function createDebugPanel() {
const panel = document.createElement('div');
panel.id = 'bundle-bypass-debug';
panel.innerHTML = `
<div style="
position: fixed;
top: 10px;
right: 10px;
background: #1a1a2e;
color: #0f0;
font-family: monospace;
font-size: 12px;
padding: 10px 15px;
border-radius: 8px;
z-index: 999999;
max-width: 350px;
box-shadow: 0 4px 20px rgba(0,255,0,0.3);
border: 1px solid #0f0;
">
<div style="font-weight: bold; margin-bottom: 8px; color: #0ff;">
⚡ BUNDLE BYPASS v3.1
</div>
<div id="bb-status">Active ✓</div>
<div id="bb-stats" style="margin-top: 8px;">
Scanned: <span id="bb-scanned">0</span> |
Bundles: <span id="bb-found">0</span> |
Fixed: <span id="bb-converted">0</span>
</div>
<button id="bb-close" style="position: absolute; top: 5px; right: 10px; background: none; border: none; color: #f00; cursor: pointer;">✕</button>
</div>
`;
return panel;
}
function updateStats() {
const el1 = document.getElementById('bb-scanned');
const el2 = document.getElementById('bb-found');
const el3 = document.getElementById('bb-converted');
if (el1) el1.textContent = scannedCount;
if (el2) el2.textContent = foundCount;
if (el3) el3.textContent = convertedCount;
}
// Redirect if already on a bundle page
const currentUrl = window.location.href;
if (currentUrl.includes('BundleDeals')) {
const match = currentUrl.match(/productIds=(\d+)/);
if (match) {
window.location.replace(`https://www.aliexpress.com/item/${match[1]}.html`);
return;
}
}
function extractProductId(url) {
let match = url.match(/productIds=(\d+)/);
if (match) return match[1];
match = url.match(/x_object_id[%3A:]+(\d+)/i);
if (match) return match[1];
return null;
}
function scanLinks() {
if (isScanning) return;
isScanning = true;
document.querySelectorAll('a[href*="BundleDeals"]').forEach(link => {
if (processedLinks.has(link)) return;
processedLinks.add(link);
scannedCount++;
const productId = extractProductId(link.href);
if (productId) {
foundCount++;
link.dataset.originalBundle = link.href;
link.href = `https://www.aliexpress.com/item/${productId}.html`;
link.classList.add('bb-converted');
convertedCount++;
}
});
updateStats();
isScanning = false;
}
function debouncedScan() {
if (scanTimeout) clearTimeout(scanTimeout);
scanTimeout = setTimeout(scanLinks, 200);
}
// Click interceptor as fallback
document.addEventListener('click', function(e) {
const link = e.target.closest('a');
if (!link || !link.href.includes('BundleDeals')) return;
const productId = extractProductId(link.href);
if (productId) {
e.preventDefault();
e.stopPropagation();
const url = `https://www.aliexpress.com/item/${productId}.html`;
link.target === '_blank' ? window.open(url, '_blank') : window.location.href = url;
}
}, true);
// Mutation observer for dynamically loaded content
const observer = new MutationObserver(mutations => {
if (mutations.some(m => m.target.closest('#bundle-bypass-debug'))) return;
debouncedScan();
});
// Inject CSS for visual feedback
const style = document.createElement('style');
style.textContent = `
a.bb-converted { outline: 3px solid #0f0 !important; outline-offset: 2px !important; }
a[href*="BundleDeals"]:not(.bb-converted) { outline: 3px dashed #ff0 !important; }
`;
document.head.appendChild(style);
// Initialize
function init() {
document.body.appendChild(createDebugPanel());
document.getElementById('bb-close').onclick = () =>
document.getElementById('bundle-bypass-debug').remove();
scanLinks();
observer.observe(document.body, { childList: true, subtree: true });
let polls = 0;
const id = setInterval(() => { scanLinks(); if (++polls >= 5) clearInterval(id); }, 2000);
}
document.readyState === 'loading'
? document.addEventListener('DOMContentLoaded', init)
: init();
})();
How to Use
Once installed, the script runs automatically on all AliExpress pages. You’ll notice:
- A debug panel in the top-right corner showing real-time statistics
- A green outline around links that have been successfully converted
- A yellow dashed outline around Bundle links that haven’t been processed yet (rare)
You can close the debug panel by clicking the red ✕ button. The script will continue running in the background.
Troubleshooting
The debug panel doesn’t appear
- Make sure the script is enabled in your userscript manager
- Hard refresh the page with Ctrl+Shift+R (or Cmd+Shift+R on Mac)
- Check that the script is set to run on
aliexpress.com
Counters stay at 0
This is normal if the current page doesn’t contain any Bundle links. Try searching for a product to see the script in action — Bundle Deals typically appear in search results.
The script stopped working
AliExpress frequently updates their website. If the script breaks, open DevTools (F12), inspect a product card link, and check if they still use the BundleDeals pattern in URLs. If the format changed, the script will need to be updated.
Disabling the Debug Panel
If you find the overlay distracting after confirming the script works, you can disable it permanently:
- Open the script in your userscript manager
- Find the
init()function near the bottom - Delete or comment out this line:
document.body.appendChild(createDebugPanel()); - Save the script
How It Works
The script uses three layers of protection to ensure Bundle links are bypassed:
- Instant redirect — If you’re already on a Bundle page, it extracts the product ID and redirects immediately
- DOM scanning — It scans all links on the page and rewrites Bundle URLs to direct product URLs
- Click interception — As a fallback, it captures clicks on Bundle links and redirects them
A MutationObserver watches for dynamically loaded content (infinite scroll, lazy loading) and processes new links as they appear.
Contributing
Found a bug or want to improve the script? Feel free to fork, modify, and share. If AliExpress changes their URL patterns, the key function to update is extractProductId().
Tested on Chrome 120+, Firefox 121+, Edge 120+, Brave 1.61+, and Safari 17+. Last updated: January 2025. Licensed under MIT.
Artificial Intelligence and the Personal Computer: A Valid Comparison, but an Incomplete One
As artificial intelligence (AI) systems rapidly improve and spread across industries, a common argument emerges: the AI shift is comparable to the rise of the personal computer (PC) in the 1980s and 1990s. According to this view, AI represents another technological wave—initially disruptive, eventually normalized—requiring adaptation rather than concern.
While this comparison is not without merit, it has clear limitations. A closer examination reveals that, although the two transformations share similarities, the nature and implications of the AI shift may be fundamentally different.
1. Shared characteristics between the PC and AI revolutions
There are legitimate reasons why the comparison persists.
- General-purpose technologies: Both the PC and AI are applicable across a wide range of sectors.
- Productivity gains: Each promises efficiency improvements through automation and digitalization.
- Initial anxiety: Both sparked fears about job losses and skill obsolescence.
- Learning curve: Adoption in both cases requires new competencies and changes in workflows.
From this perspective, viewing AI as part of a recurring historical pattern is understandable.
2. Passive tools versus active systems
A key difference lies in the nature of the technology itself.
- The personal computer is fundamentally a passive tool. It executes explicit instructions provided by a human user.
- Modern AI systems function as active systems. They generate content, infer patterns, and can operate semi-autonomously.
This distinction reshapes the human role. While PCs extend human capabilities, AI systems can, in some cases, perform tasks independently from end to end.
3. The type of work affected
Earlier waves of automation primarily targeted:
- physical labor,
- repetitive administrative tasks.
AI increasingly impacts work traditionally associated with human cognition:
- writing,
- analysis,
- software development,
- translation,
- design.
The PC required human judgment to interpret and apply information. AI systems increasingly operate within that interpretive layer, raising different questions about task allocation.
4. Speed of change and adoption
The tempo of transformation also differs significantly.
- Personal computers spread gradually over several decades.
- AI systems evolve through rapid iteration cycles, with noticeable capability jumps in months rather than years.
This acceleration compresses the time available for workers, institutions, and education systems to adapt incrementally.
5. Access, infrastructure, and concentration
The PC contributed to a broad democratization of computing:
- relatively affordable hardware,
- open development ecosystems,
- decentralized innovation.
Contemporary AI relies more heavily on:
- large-scale infrastructure,
- massive datasets,
- substantial capital investment.
As a result, questions about centralization of technological and economic power play a more prominent role than they did during the PC era.
6. Rethinking the idea of “adaptation”
The claim that one can simply “adapt” assumes that skills, once acquired, remain valuable long enough to justify the investment.
In the context of AI:
- certain skills may become obsolete quickly,
- continuous learning becomes less stable and more fragmented.
Adaptation remains possible, but it may no longer offer the same long-term security it once did.
7. A helpful analogy—with limits
Comparing AI to the personal computer can help reduce panic and situate innovation within historical precedent. However, the analogy becomes insufficient when examining deeper structural effects.
The PC reshaped how people worked.
AI increasingly challenges which tasks require human involvement at all.
Conclusion
The comparison between artificial intelligence and the personal computer is neither entirely wrong nor fully adequate. It highlights shared dynamics of technological adoption while obscuring meaningful differences in system behavior, speed of change, and economic structure.
Rather than viewing AI as a simple repetition of past technological shifts, it may be more accurate to see it as a transformation whose long-term implications—for work, skills, and value creation—are still unfolding.
SIPO and PISO shift registers with Arduino and ESP (ESP8266 / ESP32)
When working with Arduino, ESP8266 or ESP32, you quickly hit a simple limit: not enough GPIO pins.
Instead of stacking boards or using complex expanders, there is a very clean and proven solution: shift registers.
The two main types are:
- SIPO – Serial In, Parallel Out
- PISO – Parallel In, Serial Out
Why use shift registers?
- Save GPIO pins
- Clean wiring
- Easy to scale
- Very cheap
- Used everywhere in real hardware (industry, vending, panels)
With only 3 pins, you can manage 8, 16, 32+ inputs or outputs.
SIPO – Serial In, Parallel Out

What it does
You send data bit by bit (serial), and the chip exposes them all at once on parallel outputs.
Common chip
74HC595
- 8 digital outputs
- Can be daisy-chained
- Very reliable
- Fast enough for almost any project
Important pins
| Pin | Role |
|---|---|
| DS | Serial data |
| SH_CP | Clock |
| ST_CP | Latch |
| Q0–Q7 | Outputs |
| OE | Output enable (optional) |
| MR | Reset (optional) |
Arduino example – driving 8 LEDs
int dataPin = 11;
int clockPin = 13;
int latchPin = 10;
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
}
void loop() {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B10101010);
digitalWrite(latchPin, HIGH);
delay(500);
}
Typical SIPO use cases
- LEDs
- Relays
- MOSFET boards
- 7-segment displays
- Control panels
- Power boards
PISO – Parallel In, Serial Out

What it does
Reads many inputs at once, then sends their state serially to the microcontroller.
Common chip
74HC165
- 8 digital inputs
- Can be chained
- Very simple timing
Important pins
| Pin | Role |
|---|---|
| PL | Parallel load |
| CP | Clock |
| Q7 | Serial output |
| D0–D7 | Inputs |
Arduino example – reading 8 buttons
int loadPin = 8;
int clockPin = 12;
int dataPin = 11;
void setup() {
pinMode(loadPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
}
byte readInputs() {
digitalWrite(loadPin, LOW);
delayMicroseconds(5);
digitalWrite(loadPin, HIGH);
return shiftIn(dataPin, clockPin, MSBFIRST);
}
void loop() {
byte buttons = readInputs();
}
SIPO vs PISO
| Feature | SIPO (74HC595) | PISO (74HC165) |
|---|---|---|
| Direction | Output | Input |
| GPIO needed | 3 | 3 |
| Chainable | Yes | Yes |
| Speed | High | High |
| Typical use | LEDs, relays | Buttons, switches |
Arduino vs ESP considerations
Arduino (5V)
- Works perfectly with HC / HCT chips
- Very forgiving
ESP8266 / ESP32 (3.3V)
- Prefer 74HCT or power the chip at 3.3V
- Avoid floating OE / MR pins
- Logic levels matter more
In practice, 74HC often works, but it’s not guaranteed in all cases.
Daisy-chaining
You can chain registers easily:
- Q7’ → DS for SIPO
- Q7 → DS for PISO
- Same clock and latch
Examples:
- 4 × 74HC595 → 32 outputs
- 2 × 74HC165 → 16 inputs
Alternatives
| Chip | Type | Why use it |
|---|---|---|
| MCP23017 | I²C GPIO | Interrupts |
| PCF8574 | I²C GPIO | Very simple |
| TLC5940 | PWM LED | Brightness control |
| ULN2003 | Driver | Current handling |
Still, SIPO / PISO are hard to beat for simplicity and reliability.
When SIPO / PISO are the right choice
Good choice if you want:
- Simple hardware
- Deterministic timing
- No complex bus
- Easy scaling
Not ideal if you need:
- Analog inputs
- Per-pin interrupts
- Complex feedback
Conclusion
SIPO and PISO shift registers are basic but extremely powerful tools.
They are cheap, fast, reliable, and perfectly suited for Arduino and ESP projects.
If you are building:
- a custom board
- a control panel
- a vending machine
- home automation hardware
This should be one of your first tools.
What I Can Do For You
Data Science
Unlocking insights and driving business growth through data analysis and visualization as a freelance data scientist.
Data Analysis
Helping businesses make informed decisions through insightful data analysis as a freelance data analyst.
Website Development
Bringing your online presence to life with customized website development solutions as a freelance developer.
Home Automation
Transforming your living space into a smart home with custom home automation solutions as a freelance home automation expert.
Docker & Server
Optimizing your software development and deployment with Docker and server management as a freelance expert
Consultancy
Identification of scope, assessment of feasibility, cleaning and preparation of data, selection of tools and algorithms.
My Portfolio
My Resume
Education
Msc Data Science And Artificial Intelligence
2022 - 2023Training in data science & artificial intelligence methods, emphasizing mathematical and computer science perspectives.
Master In Management
EDHEC Business School (2005 - 2009)English Track Program - Major in Entrepreneurship.
BSc in Applied Mathematics and Social Sciences
University Paris 7 Denis Diderot (2006)General university studies with a focus on applied mathematics and social sciences.
Education
Higher School Preparatory Classes
Lycée Jacques Decour - Paris (2002 - 2004)Classe préparatoire aux Grandes Écoles de Commerce. Science path.
Scientific Baccalaureate
1999 - 2002Mathematics Major
Data Science
Python
SQL
Machine learning libraries
Data visualization tools
DESIGBig Data (Spark, Hive)
Data Analysis
Spreadsheet software
Data visualization tools (Tableau, PowerBI, and Matplotlib)
Statistical software (SAS, SPSS)
SAP Business Objects
Database management systems (SQL, MySQL)
Development
HTML
CSS
JAVASCRIPT
SOFTWARE
Version Control Systems
MLOps
CI/CD
Docker and Kubernetes
AutoML
Model serving frameworks
Prometheus, Grafana
Job Experience
Consulting, Automation and Security
(2019 - Present)Implementation of automated reporting tools via SAP Business Objects, Processing and securing sensitive data (data wrangling, encryption, redundancy), Remote monitoring management solutions via connected objects (IoT) and image processing, Internal pentesting and network security consulting, VPN implementation, Outsourcing of servers
Consulting, E-commerce and Digital Marketing
(2017 - 2019)Consulting in e-commerce and digital marketing (Bangkok area), Booking.com, Airbnb, Agoda online booking management for third parties, SEO in the hotel industry.
Consulting, internal company network
(2016 - 2017)Implementation of corporate networks and virtualization solutions (rack cabling, firewalls, proxmox virtualization), Management of firewalls and internal networks. (pfSense)
Entrepreneurship Experience
Founder, web developer
(2015 - 2020)Programming and maintenance of websites and web applications, Consulting in digitalization and process optimization for local SMEs, Implementation of turnkey e-commerce solutions.
Corporate Banking
Assistant Fund Manager
Credit Portfolio Management - CALYON - 2008● Preparation of committee notes for new ABS/CDO credit derivative investments ● Calculation and measurement of portfolio risk (Value-at-Risk, exotic and vanilla ABS, SWAP, liquidity lines) ● Daily monitoring of credit derivatives portfolio structures (Mark-to-Market, P&L, re-financing) ● Design of risk measurement and decision support tools in VBA.
Credit Risk Analyst
Risk and Controls Department – NATIXIS – ParisStudy of financing files for review by the credit committee (structured finance, commodity trade finance, and car manufacturers) ● Financial analysis, rating, and credit risk analysis of a portfolio of companies ● Financing files studied: from €1m to €1000m
Retail Banking
Assistant Business Account Manager
BNP Paribas - 2006● Writing reports on business plans for small SMEs ● Risk and feasibility Analysis and Decision making ● Negotiation of financing xpackages with applicants
Pierre Toul
Chief Technical OfficerData & Process Automation
Jan. 2025 – Sep. 2025Mehdi a su rapidement comprendre nos processus métiers et transformer des outils Excel/VBA existants en solutions Python plus robustes et maintenables. Son autonomie, sa rigueur et son attention portée aux utilisateurs ont facilité l'intégration et l'adoption des nouveaux outils.
Arkadus Romitry
Engineering Data LeadData Engineering & Analytics
Sep. 2024 – Jan. 2025Mehdi a mené une analyse complexe sur plusieurs années de données techniques et a su en extraire des tendances utiles aux équipes métier. Il combine efficacement maîtrise technique, rigueur analytique et capacité à restituer des résultats complexes de manière claire.
Contact Me
Mehdi Fekih
Data Scientist.I am available for freelance work. Connect with me via this contact form or feel free to send me an email.
Phone: +33 (0) 7 82 90 60 71 Email: mehdi.fekih@edhec.com