پشت پرده حمله به آمار 30 میلیونی جان‌فدا/ چرا بعضی ها زار می‌زنند؟

به گزارش خبرنگار اجتماعی خبرگزاری تسنیم، چند روزی است که در شبکه‌های اجتماعی خبری پر سر و صدا منتشر شده است؛ شریفی زارچی، استاد دانشگاه فراری از کشور مدعی شده است که آمار 30 میلیونی ثبت‌نام‌کنندگان در پویش «جان‌فدا» دروغ است! به گفته این فرد معلوم الحال، تعداد واقعی افراد ثبت‌نام‌کرده کمتر از 4 میلیون نفر است!!

وی برای اثبات ادعای خود به خروجی یک API (رابط برنامه‌نویسی کاربردی) در سایت janfadaa.ir اشاره کرده و دستوری را هم برای راستی‌آزمایی ارائه داده است. 

اما آیا این ادعا از نظر فنی درست است؟ آیا با یک دستور ساده می‌توان به کل دیتابیس یک سایت بزرگ پی برد؟ در این گزارش، با زبانی ساده و با تکیه بر اصول مهندسی نرم‌افزار، نشان می‌دهیم که این استدلال دچار چه اشتباهات بنیادینی است.

در بخشی از این ادعاها آمده است:اگر شما در ترمینال کامپیوترتان دستور `curl` را به آدرس خاصی از سایت جانفدا بزنید، یک فایل JSON دریافت می‌کنید که در آن شناسه‌های کامنت‌ها (idها) همگی عددی کمتر از 4 میلیون هستند. پس تعداد کل ثبت‌نام‌کنندگان هم نمی‌تواند از 4 میلیون بیشتر باشد؛ چون هر کاربر که ثبت‌نام می‌کند یک شناسه می‌گیرد و این شناسه‌ها به ترتیب صادر می‌شوند.

در کنار تصویر زیر (خروجی API) نشان می‌دهد که آخرین id در آن لحظه حدود 3,913,777 بوده است. ظاهراً عدد 3.9 میلیون، مدرک ادعاست.

بررسی فنی ادعا 

برای رد این ادعا نیازی به دسترسی به سرورهای سایت نیست؛ همین تصاویر و اصول اولیه پایگاه‌داده کافی است.

 1. اشتباه اساسی: اشتباه گرفتن «شناسه کامنت» با «شناسه کاربر»

در تصویری که شده است (تصویر اول شما)، فیلد `id` که در کنار هر کامنت دیده می‌شود، شناسه خود کامنت است، نه شناسه کاربر\!  

در هر پایگاه داده استانداردی، هر کامنت یک رکورد مجزا دارد و id مخصوص خودش را می‌گیرد. یک کاربر می‌تواند چندین کامنت بگذارد و همچنین بسیاری از کاربران ممکن است اصلاً کامنت نگذارند.

به عبارت ساده:

فرض کنید 100 نفر در یک وب‌سایت ثبت‌نام کنند.
از این میان فقط 10 نفر نظر بدهند و هر کدام 3 نظر بنویسند.
در جدول کامنت‌ها 30 رکورد خواهیم داشت با idهایی از 1 تا 30.
آیا می‌توانیم بگوییم چون آخرین id کامنت 30 است، پس فقط 30 نفر ثبت‌نام کرده‌اند؟ خیر. 90 نفر دیگر کامنت نگذاشته‌اند.

وجود id نهایت 3.9 میلیون در جدول کامنت‌ها، حداکثر نشان می‌دهد که 3.9 میلیون نظر ثبت شده است، نه اینکه 3.9 میلیون کاربر وجود دارد. تعداد کاربران حتماً از این عدد بیشتر است (چون برخی کاربران چند کامنت دارند و برخی هیچ کامنتی ندارند).

2. اشتباه دوم: نادیده گرفتن صفحه‌بندی (Pagination)

دستوری که ارائه شده (`curl ... | jq`) فقط تعدادی کامنت اخیر را فراخوانی می‌کند، نه همه کامنت‌ها. در دنیای وب، هیچ API معقولی تمام رکوردهای یک جدول چند میلیونی را یکجا برنمی‌گرداند. این کار سرور را از کار می‌اندازد.

برای دیدن همه کامنت‌ها باید درخواست‌های متعدد با پارامترهای page یا offset ارسال کرد و سپس idهای یکتا را استخراج کرد. انجام این کار با یک دستور ساده غیرممکن است. بنابراین استناد به همان چند ردیف اول، یک خطای روش‌شناختی آشکار است.

3. اشتباه سوم: فرض پیوسته بودن شناسه‌ها

این فرد فرض کرده که idها کاملاً پشت سر هم و بدون شکاف صادر می‌شوند. در سیستم‌های واقعی با ترافیک بالا، این فرض غلط است. دلایل مختلفی برای شکاف بین idها وجود دارد:

حذف برخی رکوردها (مثلاً کامنت‌های تکراری یا اسپم)
ثبت‌نام‌های ناموفق یا ناقص
استفاده از روش‌های تخصیص دسته‌ای (مثل Hi/Lo algorithm)

بنابراین حتی اگر ما به فرض محال، idها مربوط به کاربران بودند، باز هم نمی‌توانستیم از روی عدد آخرین id، تعداد کاربران را تخمین بزنیم. ممکن است بین id 1 و 4 میلیون، صدها هزار شکاف وجود داشته باشد.

4. مشکل عدم قابلیت بازتولید (تکرارپذیری)

یکی از اصول اصلی علم و فکت‌چکینگ این است که هر کسی بتواند در هر زمان با همان دستور به همان نتیجه برسد. اما اکنون اگر همان دستور را اجرا کنید، سرور خطای 403 یا 404 برمی‌گرداند. یعنی اندپوینت مورد نظر دیگر فعال نیست یا مسدود شده است.

استناد به یک خروجی که در گذشته گرفته شده و امروز قابل راستی‌آزمایی مستقل نیست، از نظر علمی فاقد اعتبار است. شاید آن API اصلاً طوری طراحی شده بود که فقط کامنت‌های تأییدشده یا یک بازه خاص را نشان می‌داد. بدون مستندات معماری سرور، نمی‌توان از روی آن نتیجه قطعی گرفت.

تصاویر موجود چه چیزی را نشان می‌دهند؟

تصویر اول (خروجی JSON): صرفاً چند کامنت با idهای کمتر از 4 میلیون را نشان می‌دهد. همانطور که گفتیم، این idها متعلق به کامنت هستند، نه به کاربر.

تصویر دوم (نظرات و تب Network): نشان می‌دهد که یک درخواست Ajax به آدرس `ajax` با action=getComments ارسال شده است. این تصویر هم تأیید می‌کند که خروجی برگشتی شامل همان idهای کامنت است.

هیچ یک از این تصاویر دال بر این نیست که idها مربوط به کاربران هستند یا اینکه همه کاربران در آن خروجی دیده می‌شوند.

این فرد تعداد کامنت‌ها را با تعداد کاربران اشتباه گرفته است. او یک API عمومی را که فقط چند کامنت آخر را نشان می‌دهد، به عنوان کل دیتابیس کاربران فرض کرده و فراموش کرده که خیلی از کاربران اصلاً نظر نمی‌دهند و برخی هم چندین نظر می‌دهند. از نظر مهندسی نرم‌افزار، این ادعا از پایه غلط است.

ادعای «کمتر از 4 میلیون» با شواهد موجود نه تنها اثبات نمی‌شود، بلکه به دلیل اشتباه فاحش در تشخیص فیلد id، یک "ادعای نادرست از نظر فنی" محسوب می‌شود؛  استدلال شریفی زارچی یک «خطای تعمیم» و «خلط مبحث» است و نمی‌تواند مبنایی برای رد آمار رسمی قرار گیرد.

در حالی که ایران عزیز تحت فشارهای خارجی و تهدیدهای بیگانگان قرار دارد و ملت بزرگ ایران با ثبت‌نام بی‌سابقه 30 میلیونی در پویش «جان‌فدا»، صف‌آرایی مقتدرانه‌ای را در برابر دشمنان به نمایش گذاشته‌اند، اقدام ناشیانه یک استاد فراری در خارج از کشور برای زیر سوال بردن این حرکت ملی، نشانی از شکاف عمیق میان ادعای وطن‌پرستی و واقعیتِ هم‌صدایی با بیگانه است.

جای تأسف است که در چنین بزنگاه تاریخی، فردی که سال‌ها از سفره این ملت و اعتبار دانشگاه‌های ایران بهره برده، به جای ایستادن در کنار مردم و تقویت جبهه خودی، با ابزار قرار دادن تخصص خود و جعل حقایق فنی، در نقش پیاده‌نظامِ جنگ روانی دشمن ظاهر می‌شود تا از اهمیت این اتحاد ملی بکاهد.

این هجمه‌های رسانه‌ای در حالی صورت می‌گیرد که موج همبستگی ملی همچنان در جریان است و با وجود مشارکت خیره‌کننده فعلی، هنوز بخش وسیعی از هموطنان غیور ما به دلیل ترافیک سنگین و محدودیت‌های دسترسی موفق به ثبت‌نام در سایت نشده‌اند.

آمار 30 میلیونی فعلی، تنها لایه‌ی نخست از ارتش میلیونی جان‌فدایان است و پیش‌بینی می‌شود شاهد جهش چشمگیرتری در اعداد باشیم؛ واقعیتی که خواب را از چشم بدخواهان ربوده و آن‌ها را به پناه بردن به آمارهای دروغین و فریب‌های مهندسی‌شده واداشته است.

انتهای پیام/