وضعیت کرنل لینوکس در ۲۰۲۰

رسمی هست که بعضی‌ها هر سال وضعیت کرنل رو بررسی می‌کنم. منظورم وضعیت کد، فایل ها، کامیت‌ها و برنامه‌نویس هایی است که این کامیت‌ها رو انجام دادن. بر اساس آمار اولین روز ۲۰۲۰، کرنل لینوکس ۲۷میلیون و ۸۵۲هزار و ۱۴۸ خط است۷ شامل داکیومنت‌ها، کانفیگ ها، ابزارهای یوزر اسپیس و ..). این کرنل ۸۸۷هزار و ۹۲۵ کامیت داشته که محصول کار ۲۱۰۷۴ نفر آدمه. این ۲۷.۸ میلیون خط کد، در ۶۶هزار و ۴۹۲ فایل تقسیم شده.

در طول ۲۰۱۹، کرنل لینوکس ۷۴۷۵۴ کامیت دریافت کرده که از تاریخ ۲۰۱۳، پایین ترین رقم است! کامیت‌ها در سال‌ ۲۰۱۸ و ۲۰۱۷، حدود ۸۰هزار تا بوده و در ۲۰۱۶ حدود ۷۷هزار تا ودر سال های ۲۰۱۴ و ۲۰۱۵، ۷۵هزار. این کمتر شدن نویسندگان در مقایسه ۲۰۱۹ و ۲۰۱۸ هم وجود داشته. در ۲۰۱۹ تعداد نویسندگان ۴۱۸۹ بوده که کمی کمتر از عدد ۴۳۶۲ مربوط به سال ۲۰۱۸ است و البته بیشتر از عدد ۴۰۴۲ سال ۲۰۱۷. البته این کم تر شدن کامیت‌ها، در سطح کد تاثیر زیادی نداشته و با ۳میلیون و ۳۸۶هزار و ۳۴۷ خطی که امسال به کرنل اضافه شده (و البته ۱میلیون و ۶۹۶هزار و ۶۲۰ خط حذف شده)، میزان رشد کنترل تقریبا شبیه هر سال است.

از نظر فردی، بعد از خود توروالدز، دیوید اس میلر، کریس ویلسون، یوهابینینگ و کریستوفر هلویگ و توماس گلیزنر، بیشترین مشارکت رو در توسعه کرنل داشتن. در سطح شرکت‌ها هم مثل همیشه اینتل و ردهت فعالترین‌ها به آپ‌استریم بودن.

برای دیدن اطلاعات بیشتر می تونین به صفحه گیت استت نگاه کنین و برای درک بهتری از پروژه، این خروجی cloc است که کارش شمردن خطوط کد و نمایش آماری اون است. اگر count lines of code یا همون cloc رو روی کرنل اول ۲۰۲۰ رو اجرا کنیم، نتیجه اینه:

   66449 text files.
   66000 unique files.                                          
   11119 files ignored.

github.com/AlDanial/cloc v 1.82  T=67.33 s (822.2 files/s, 388799.5 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
C                                    27961        2761653        2292505       14061980
C/C++ Header                         19875         531782         956091        4300989
reStructuredText                      2153         101820          53725         270579
Assembly                              1320          46971         101470         230117
JSON                                   273              0              0         161955
Bourne Shell                           577          13299           9690          52817
make                                  2531           9485          10644          41766
SVG                                     58            117           1364          36216
Perl                                    59           6021           4422          30642
Python                                 118           4987           4588          26256
YAML                                   325           5205           1449          25529
yacc                                     9            697            359           4810
PO File                                  5            791            918           3077
lex                                      8            326            300           2015
C++                                     10            320            129           1933
Bourne Again Shell                      51            356            297           1765
awk                                     10            140            116           1060
Glade                                    1             58              0            603
NAnt script                              2            146              0            551
Cucumber                                 1             28             50            174
Windows Module Definition                2             15              0            109
m4                                       1             15              1             95
CSS                                      1             28             29             80
XSLT                                     5             13             26             61
vim script                               1              3             12             27
Ruby                                     1              4              0             25
INI                                      1              1              0              6
sed                                      1              2              5              5
---------------------------------------------------------------------------------------
SUM:                                 55360        3484283        3438190       19255242
---------------------------------------------------------------------------------------

اگر هم دوست دارین کرنل رو درک کنین۷ این کتاب قدیمی شروع خوبیه «درک کرنل لینوکس / لینک آمازون.

منبع اصلی

توسعه دهنده مایکروسافت فاش کرد که حتی روی آژر هم لینوکس بیشتر از ویندوز سرور استفاده می شه

سه سال و نیم قبل، سی تی او آژر – کلاود مایکروسافت – گفته بود که «یک چهارم ماشین های آژر لینوکس هستند». بعد توی سال ۲۰۱۷ مایکروسافت گفت که ۴۰٪ ماشین های مجازی ساخته شده روی آژر، لینوکس هستند. در ۲۰۱۸ اعلام شد که این عدد تقریبا نصف ماشین ها است و حالا ساشا لوین که توسعه دهنده کرنل لینوکس در مایکروسافت است، در درخواست خودش برای عضویت مایکروسافت در لیست سکیوریتی کرنل لینوکس، نوشته که «استفاده از لینوکس در کلاود ما از ویندوز بیشتر شده».

البته این کاملا قابل پیش بینی بود اما کماکان اتفاق افتادنش جالبه. لینوکس به هرحال اکثریت اینترنت رو می‌چرخونه و استفاده از سرور ویندوز هم همه این سال‌ها در حال افول بوده.

معاون رییس اجرایی مایکروسافت اسکات گوتهری می گه که لینوکس هر ماه داره بالاتر میاد و برخی از سرویس های آژر اصولا با لینوکس درست شدن. اون می گه از ده سال قبل که ASP.NET بازمتن شد، فهمیدن که هر توسعه دهنده ای می تونه از بازمتن بهره ببره،‌نه به عنوان چیزی خوب که به عنوان موضوعی لازم. اون می گه این بحث کد نیست، بحث جامعه است. در نهایت هم اضافه می کنه که به اعتقادش الان مایکروسافت بزرگترین پشتیبان پروژه بازمتن در جهان است.

منبع

شروع نظر سنجی بزرگ وضعیت کار و زندگی برنامه نویسان و مدیر سیستم های ایران در سال ۹۷

سلام دوستان. یکبار دیگه آخر سال شد و خوشحالم که سومین سال متوالی است که داریم نظر سنجی بزرگ وضعیت کار و زندگی خودمون رو برگزار می کنیم. این نظر سنجی طولانی است ولی امیدوارم بامزه هم باشه (:

در سال گذشته حدودا دو هزار نفر بهش جواب دادن و نتایج تجمیعی و البته ریز منتشر کردیم. اهمیت این نظر سنجی اینها است:

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

اینه که خیلی عالیه اگر امسال هم چند دقیقه ای وقت بذارین و با رفتن به http://bit.ly/irprogrammers یا لینک کاملش https://docs.google.com/forms/d/e/1FAIpQLSdntC_H6ySUvW9iQwn-cFmQCEb6vdX0e0MgIr7XscHeZXA31Q/viewform به سوال ها جواب بدین تا ببینیم با خودمون چند چندیم. احتمالا ترکیب نتایج با سال گذشته می تونه ایده خوبی به اکثر آدم ها بده سر حقوق باید چجوری چونه بزنن و چه تکنولوژی هایی رو باید یاد بگیرن.

برای دیدن نتایج سال گذشته به نتایج این سرچ نگاه کنید و بهترین مشارکت شما هم این خواهد بود که لینک و درخواست مشارکت در این نظر سنجی رو برای بقیه برنامه نویس ها بفرستین تا مخاطبین فقط محدود به خودمون نباشن و بچه هایی که تا حالا اسم جادی.نت رو هم نشنیدن هم توش شرکت کنن تا نتایج واقعی تر بشه.

برای شر کردن می تونین از این لینک ها استفاده کنید:

https://docs.google.com/forms/d/e/1FAIpQLSdntC_H6ySUvW9iQwn-cFmQCEb6vdX0e0MgIr7XscHeZXA31Q/viewform

http://bit.ly/irprogrammers

در نظر سنجی بزرگ برنامه نویسان و مدیر سیستم های ایران در سال ۹۷ با انتشار آزاد نتایج برای استفاده همگان شرکت کنید تا در مورد زنگدی خودمون بیشتر بدونیم و قدرت چونه زنی بهتری داشته باشیم.

رادیوگیک ۰۸۵ – جوراب شلواری ۰۵ – خودارضایی

به رادیوگیک شماره ۸۵ رسیدیم که می شه رادیوجوراب شلواری شماره ۵! در این شماره به چیزی می پردازیم که طبق یکی از آمارها، ۹۴٪ مردها و ۸۴٪ زن ها انجامش می دن ولی معمولا نه فقط ازش حرف نمی زنن که انکارش می کنن یا ازش شرمگین می شن. چیزی طبیعی ولی خاموش. این شماره در مورد خودارضایی حرف می زنیم از منظر علم.

با این لینک‌ها مشترک رادیوگیک بشین

در ابتدا کمی از آمارها می گیم و در جلوتر از خطرات، فواید و هر چیزی که از علم پیدا کردیم.

موسیقی

  • آکولاد – شهر قصه
  • گوگوش – چوب می زنی
  • محسن نامجو – خط بکش
  • خورشید سیاه – آقای رییس جمهور
  • ماکان اشکوری – طعنه
  • آواز مریخیها
  • رضا کولغانی – مغزهای کوچک زنگ زده

نتایج نظرسنجی وضعیت شغلی و زندگی مدیرسیستم‌ها و برنامه نویسان ایران در ۱۳۹۵

با تشکر از ۱۳۷۴ نفری که توی نظر سنجی وضعیت زندگی و شغل برنامه نویس ها و مدیر سیستم های ایران شرکت کردن، حالا نتایج آماده شده. این نظر سنجی همون طور که قرار بود، سوال های زیادی در مورد کار،‌ شرایط کار، زندگی، علاقمندی ها، سوال های دموگرافیک (جمعیت شناختی؟) و موارد مشابه داره. هدف اصلی اون اینه که ما درکی از همدیگه داشته باشیم. اینکه چطوری کار می کنیم و چی دوست داریم و اصولا کی هستیم و از اون بالاتر، چقدر حقوق و مزایا می گیریم به ازای چه سطحی از دانش و سواد و تجربه مون!

دلیل شروع این پروژه این بود و هست که لازمه ما قدرت چونه زنی بهتری داشته باشیم و وقتی می ریم سر کار بدونیم که یک آدم مشابه ما تقریبا چقدر حقوق می گیره. همچنین بدونیم که چه چیزهایی عادی است که ما اصلا ازش خبر نداریم و از چه چیزهاییمون باید خوشحال باشیم. چنین کاری رو منطقا یک انجمن صنفی متخصصان کامپیوتر باید انجام بده ولی خب فعلا چنین انجمن های صنفی ای امکان شکل گیری ندارن و به همین پرسشنامه ها بسنده می کنیم.

به هرحال.. این شما و این لینک نتایج خام نظر سنجی زندگی و وضعیت شغلی برنامه نویسان ایران تو سال ۱۳۹۵. مطمئنا باید روش تحلیل های زیادی بشه و امیدوارم کسی اینکار رو بکنه. البته خودم هم تا حدی می کنم قدم به قدم. حداقل قسمت هایی که برای خودم مهمه از جمله رابطه درآمد با زبون و تجربه و این تیپ چیزها.

فعلا در سطح خروجی استاندارد گوگل می تونین درصدها و آمار کلی بررسی وضعیت شغلی برنامه نویسان و مدیر سیستم_های ایران – 1395 رو به شکل پی دی اف دانلود کنین و نگاهی بندازین. نکات بسیار جالب و عجیبی توش داشت که نمودار بدترینش رو این بالا گذاشته ام. اگر سوالی به نظرتون جا مونده یا نکته ای هست خوبه توی کامنت ها بگین که اصلاح کنیم برای سال دیگه، البته به جز اینکه «این بایاس به سمت خواننده های تو است». این رو می دونم و بیشتر تلاش دوستان در پخش کردن پرسشنامه است که باعث می شه اینطوری نباشه.

همچنین اگر کسی تحلیلی کرد بسیار خوشحال می شم برام بفرسته که به لینک ها اضافه کنم که بتونیم دید بهتری از دنیامون داشته باشیم. خوش باشین و خرم؛ چه ویندوز باشین چه مایکروسافت،‌ چه تو تم تیره بنویسین چه تو تم روشن، چه مجرد باشین چه در رابطه، چه کت شلوار بپوشین چه تی شرت، چه شال چه چادر، چه قهوه بنوشین،‌ چه چایی و چه تب بزنین، چه اسپیس (:

جاوا، زبان برنامه نویسی سال ۲۰۱۵

toibe

معیار TIOBE هر ماه رده بندی‌ای از محبوب‌ترین زبان‌ها و در آخر هر سال یک زبان برنامه نویسی سال معرفی می‌کنه. برنده عنوان زبان برنامه نویسی سال ۲۰۱۵، جاوا است؛ به خاطر رشد خیلی زیادش در این سال. امسال جاوا به شکل اعجاب آوری ۵.۹۴٪ رشد داشته که برای یک زبون قدیمی بسیار عجیبه. تعقیب کنندگان بعدی رشد ویژوال بیسیک دات نت و پایتون هستن. همچنین جاوا وی بک‌اند و اندروید هم سریعا در حال رشده و همه اینها باعث شده شاخص تیوب(؟) جایزه امسالش رو درست مثل ده سال قبل، به جاوا بده.

بیشترین سقوط امسال مربوط به آبجکتیو سی بوده ( ٪۵.۸۸- )‌ که برنامه نویسی اپلیکیشن‌های سیستم‌های شرکت اپل استفاده می‌شده و قراره با swift جایگزین بشه.

پیش‌بینی می‌شه در سال ۲۰۱۶ جاوا در صدر بمونه و با ارائه پی.اچ.پی. ۷، این زبون هم رشد زیادی بکنه. همچنین جاوااسکریپت و سوئیفت نیز احتمالا در جمع ده زبان خواهند بود و سی و سی پلاس پلاس و سی شارپ و پایتون هم تا حد زیادی جاشون رو حفظ می‌کنن.

منبع

کشورهایی با بیشترین فارغ التحصیلی مهندسی در سال:‌ ایران سوم

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

تعداد فارغ التحصیلان مهندسی ایران

مهملترین کاری که ممکنه این هفته با پایتون، پردازش تصویر، آر و آمار استنباطی انجام بدین: بررسی کبریت‌های توکلی

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

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

ایده خبیثانه جالبیه ولی چرا اصولا از اول کبریت های کمتری توی جعبه نذاریم؟ اصولا اگر می شه اینجوری پول درآورد مطمئنا کشور ما جای بسیار مناسبی براشه.

من به کبریت مشکوکم

برای بررسی این مساله به مغازه می ریم و یک بسته ده تایی کبریت توکلی که ظاهرا تنها بازیگر بزرگ کبریت در ایرانه رو می خریم. اونو به خونه می‌یاریم. ملحفه سبزمون رو رو زمین پهن می کنیم و به عنوان یک تنبل واقعی، فقط قسمتی که قراره تو عکس باشه رو اتو می کنیم:

بسته ده تایی کبریت

و بعد می ریم سراغ ده تا جعبه کبریتی که خریدیم و پشتشون مدعی است که تعداد متوسط کبریت‌های هر جعبه چهل تا است:

کبریت توکلی

هر جعبه کبریت رو جدا جدا روی قسمت اتو شده و صاف خالی کرده، عکس می گیریم:

تصویر اولیه کبریت ها

اینکار رو برای هر ده تا جعبه کبریت انجام می دیم و اتاق پر از کبریت رو به قصد نشستن پشت کامپیوتر ترک میکنیم.

جعبه های کبریت

اول نیازمند یک برنامه هستیم که بتونه در یک عکس کبریت ها رو بشمره. بعد با یک اسکریپت این برنامه رو برای همه عکس ها اجرا خواهیم کرد. من برای اینکار اول کتابخونه‌های cv2 رو امتحان کردم ولی با numpy نتیجه بهتر و قشنگ تری گرفتم. در قدم اول کافیه عکس رو بخونیم، اون ۱ به کتابخونه می گه عکس رو بعد از خوندن خاکستری کنه که کار ما رو راحتتر می کنه:

kebrit = scipy.misc.imread(fileName, 1) # gray-scale image

و خروجی چیز شبیه این است:

تصویر کبریت قبل از پردازش تصویر

اینکه تصویر رنگی است به خاطر اینه که به شکل پیش فرض از پالت jet برای نمایش استفاده کرده ایم که تصویر رو به صورت حرارتی نشون می ده. می گن این برای کارهای علمی راحتتر از خاکستری است. به راحتی می بینین که چیزی که می خونیم با اینکه در سبز معمولی یا خاکستری به نظر یکدست می‌یاد ولی پر از تیزی و نقطه نقطه است. مثل هر عکس دوربینی دیگه. برای حل این مشکل تصویر رو اسموت می کنیم. اسموت کردن در پردازش تصویر معمولا با استفاده از فیلتر گاوس به دست می یاد که کانولوشن گرفتنی است بین این ورودی و تابع گاوس. البته نگران نباشین، من چون سه بار معادلات دیفرانسیل رو افتادم و آخرش هم یکی دیگه به جام امتحان داد، پایه ام قوی شده (:

kebrit_smooth = ndimage.gaussian_filter(kebrit, 6)

حالا متغیر kebrit_smooth یک تصویر نرم شده از تصویر اصلی است:

تصویر با فیلتر گاوسی پردازش تصویر

قدم بعدی اینه که من بیام و یک ترش‌هولد روی ورودی بذارم و بگم بیخیال هر چیزی بشه که از این عدد خاص کوچکتر است. این عدد با کمی تجربه و کمی سعی خطا به دست اومده. دستور طبیعی باید این می بود:

tresh = 120
labeled, objectsNum = ndimage.label(kebrit_smooth < tresh)

تابع ndimage.label ورودی خودش رو بررسی می کنه و تعداد اجسام به هم پیوسته توی اون رو می شمره. اما مشکل اینه که حتی تک پیکسل های منفرد هم شمرده می شن. برای جلوگیری از این امر من بهش یک ساختار می دم که شکلم حداقل لازمه چنین ساختاری داشته باشه:

tresh = 120
removeOnes = np.ones((3,3), dtype="bool8")
labeled, objectsNum = ndimage.label(kebrit_smooth < tresh, structure=removeOnes)

دقت کنین که اون استراکچر در اصل می گه حداقل تصویر قابل تشخیص من باید این باشه:

array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True,  True]], dtype=bool)

و نتیجه اش این می شه که نقطه های منفرد دیگه شمرده نشن. البته انتظارم اینه که با اسموت کردن مرحله قبل این نقطه ها به حداقل رسیده باشن. نتیجه این ترکیب چنین تصویری است:

پردازش تصویر نهایی نوک کبریت ها

و خب چنین خروجی متنی ای:

10boxes/IMG_2608.JPG , 29

حالا کافیه یک اسکریپت ساده، همه ده تا فایل رو به اون برنامه بده:

#!/bin/bash

for f in *JPG
do
    ../count.py $f
done

و به خروجی زیر برسیم:

$ ./doall.sh 
IMG_2606.JPG , 35
IMG_2607.JPG , 30
IMG_2608.JPG , 29
IMG_2609.JPG , 32
IMG_2610.JPG , 29
IMG_2611.JPG , 33
IMG_2612.JPG , 36
IMG_2613.JPG , 38
IMG_2614.JPG , 37
IMG_2615.JPG , 38

وقتشه سراغ زبون مورد علاقمون R بریم. یک زبان تخصصی برای کارهای آماری و وررفتن با اعداد و ماتریس ها و رفیق رفقاشون. فایل رو می خونیم و بخش مورد نظر رو جدا می کنیم:

> tavakoli <- read.csv(file="results.csv",head=FALSE,sep=",")
> matches <- tavakoli[2]$V2

حالا اطلاعات هر جعبه کبریت رو دارم. بذارین یک نگاه سریع بهش بندازیم:

> summary (matches)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  29.00   30.50   34.00   33.70   36.75   38.00 

بعله. می بینیم که میزان متوسط پایینتر از ۳۴ است. یعنی تعداد متوسط این ده قوطی کبریت ۶ تا کمتر از چیزی است که ادعا شده یا به بیان صحیح‌تر ۱۵٪ کمتر به ما جنس فروختن. جالبیش اینه حتی یک جعبه از این ده جعبه هم به چیزی که ادعا می شد میانگین است نرسیده. بذارین جلوتر بریم:

> hist(matches, xlim=c(28,42), ylim=c(0,4), main="هیستوگرام تعداد کبریت های توکلی در هر جعبه", sub="www.jadi.net", breaks=8)
> curve(dnorm(x, mean=mean(matches), sd=sd(matches))*10, add=TRUE, col="red", lwd=2) 

و روی این نمودار با کمی آمار احتمالات می تونیم احتمال اینکه در یک جعبه کبریت اتفاقی توکلی که خریده‌ایم و مدعی داشتن ۴۰ کبریت است، چهل یا بیشتر کبریت وجود داشته باشد را حساب کنیم:

> 1-pnorm(40, mean=mean(matches), sd=sd(matches)) #یک منهای سمت چپ نمودار نرمال در نقطه ۴۰ کبریت
[1] 0.03970968

بله. با اینکه کبریت توکلی مدعی است در هر جعبه اش تقریبا ۴۰ کبریت وجود داره، برنامه پردازش تصویر و نمودارهای نرمال ما نشون می دن که احتمال اینکه واقعا در یک جعبه کبریت توکلی چهل یا بیشتر کبریت باشه، سه صدم درصد بیشتر نیست

آمار شیرین است

نتیجه‌ها

۰- موسسه استاندارد و حقوق مصرف کننده خاصی نداریم یا هنوز این مساله رو ندیدن
۱- راکفلر باید بیاد پیش تولید کننده‌های ما لنگ بندازه
۲- آمار شیرین و فان است
۳- می تونیم با کارهای علمی بامزه هم تفریح کنیم هم چیز یاد بگیریم

مرتبط

و البته مثل همیشه هر جاییش ممکنه اشتباه داشته باشه. خوشحال می شم دوستان حرفه ای اصلاح کنن یا توسعه بدن و به این فکر کنیم که کاش آمار رو اینطوری به ما درس می دادن (: