من عاشق بوردگیمم، و عاشق تاریخ، و تلاقی بوردگیم و تاریخ برای من همیشه جذاب بوده و هست. البته نوع فانتزی شدهاش، که سنگ بگیر چوب بده و روم را بساز، یا خیلی غرق در جزییات مثل Wargame ها، یا تاریخچه شرکتهای حمل و نقل را هم دوست دارم، اما یک بازی شبیه Freedom: the underground railroad که به تاریخچه بردهداری میپردازد (و یک بار حتما دربارهاش مینویسم) و یا بازی مورد بحث امروز، Pax Pamir: Second Edition برای من بیش از آن چیزی که فکرش را بکنید جذاب است. ...
یک
چرا هنوز از من بدت میاد؟ بعد اینهمه زندگی؟ چرا هنوز نتونستم درکت کنم؟ سالها بعد از تمام شدن دوران احمقانه تحصیل دیدمش. وقتی که با یک رؤیای غیرقابل اجرا سراغم آمد. مدتها بحث کردیم، و در آخر هم توانست قانعم کند، هیچوقت نفهمیدم چطور. ایده ساده به نظر میآمد، به اشتراک گذاشتن توان پردازشی، مزرعه ای از پردازشگرها، اما نه در کنار هم. هر مشتری به طور بالقوه، میتواند یک سرویس دهنده هم باشد، نه برای کارهای همزمان، که باید سریع باشند و فاصله زمانی زیاد پردازشگر، عملاً باعث بیمعنی شدن قضیه میشود، برای کارهایی که نیاز به توان پردازشی بالا دارد، هر چند در صفی طولانی. چیزی شبیه به ماشینهای پانچ و کامپیوترهای قدیمی، اما در دنیای مدرن. پردازش سنگین خودت را به ما بسپار، و به جای سرعت بالا از تعداد زیادی پردازشگر استفاده کن.پیادهسازی سخت نبود، سالها تجربه به عنوان یک برنامه نویس کرنل داشتیم، و فقط چند هفته بعد سیستم آماده بود. تا مدتها نقدها را تحمل کردیم، نیاز مالی مطرح نبود، آخرین پروژه تا مدتها مرا بینیاز کرده بود، نیازی به کار کردن نداشتم و او هم که هیچوقت نفهمیدم چطور زندگی میکند.کاملاً مشخص بود که شرکتهای بزرگ ما را دوست نخواهند داشت. اولین گروهی که ما را جدی گرفتند، یک گروه دانش آموز ساده بودند که امکان پردازش توسط پردازشگرهای ما که به طعنه به ابرهای بیباران معروف شده بودند، را در بلندر اضافه کردند. یک تیم دانشجویی، یک انیمیشن حرفهای درست کرد، و تمام آنرا روی سیستمهای پردازشی ما ایجاد کرد، که از سر ناچاری به دانشجوها به صورت رایگان خدمات میدادیم. ( و البته برای این گروه خاص، همیشه کمکهای ناگهانی میرسید، با یک کارت کوچک از طرف ما) نتیجه حیرت آور بود، یک درخواست در چند شبکه اجتماعی «امشب میخوایم بیلدش کنیم، ابرای بی بارونتونو راه بندازید، ببینیم میتونیم گریشونو دربیاریم یانه؟» و کمی خرج از طرف ما که همه جا دیده شود، کلاینتهای ما روی نزدیک هفت میلیون دستگاه کوچک و بزرگ اجرا شد و انیمیشن ۴۲ دقیقهای، که فقط برای ۳ دقیقه اول سه روز روی قویترین پردازشگری که در دانشگاه در دسترس چند تا بچه دانشجو بود، دست و پا میزد، در ۷۹ دقیقه ساخته شد، با یک تست دیگر، با شبکهای سریعتر و پهنای باند بیشتر، این عدد به ۳۷ و بعدها به ۱۱ رسید. ما همیشه برای تست سیستم، از همان انیمیشن استفاده میکردیم ۴۲ همیشه پاسخ جذابی است. ...
تزریق! نسخه به باینری وقت کامپایل #Golang
بدنیست همیشه یه اطلاعاتی از نسخه برنامه تو دل خودش باشه. مدتهاست که من از Make برای کامپایل برنامه استفاده میکنم، و قبلترها، قبل از اینکه کامپایل کنم برنامه رو، یک فایل میساختم (به صورت اتوماتیک) مثلا با این محتوا : package main // this file is autogenerated var ( // Commit hash hash = "a5df371b88bc3f875f49a3b7e19b55c88cd31487" short = "a5df371" // commit date date = "2016-04-30 11:21:46 +0430 +0430" // build date build = "2016-04-30 11:21:46 +0430 +0430" // commit count count = "42" ) بعد قبل هر کامپایل این فایل مجددا ساخته میشه و متغیرهاش آپدیت میشن. خوبه، ولی نه به اندازه کافی. این فایل باید ignore بشه تو ورژن کنترل، کسی از کامند مناسب استفاده نکنه ساخته نمیشه و الی آخر. این شد که افتادم دنبال راه حل بهتر. ...
go web server on port 80
Golang یک کتابخانه عالی http داره که کلی قابلیت بهت میده. مثلا http2 و قابلیت ساپورت رنج روی فایل برای دانلود که تقریبا به سادگی آب خوردن پیاده میشه. من معمولا یه وب سرور میذاشتم سر راهش. یعنی پروکسیش میکردم. مثلا nginx و هنوزم خیلی وقتا اینکار رو میکنم. منتها یه وقتایی هست که کلا نمیخوای درگیر وب سرور خارجی بشی. دلیلش هر چی هست :) و میخوای از سرور خود Golang استفاده کنی. این کاملا با اون چیزی که توی پایتون و روبی و PHP به عنوان وب سرور به خوردمون دادن متفاوته. این یک سرور آماده برای کاره نه یک وب سرور برای محیط دولوپمنت. ...
یک راهنمای نسبتا مفصل GPG
مقدمه این مقدمه رو نزدیک به نه سال بعد از این نوشته اضافه میکنم. این نوشته من بیشترین بازدید این وبلاگ رو داره و من بارها کپی های مختلفی ازش دیدم. خودم کم و بیش از همین روش استفاده میکنم و دلم میخواست یک بار مرتبش کنم ولی خب، وقت و حسش نیست. این روزا دارم سعی میکنم که بیشتر بنویسم و برای همین یه دستی میخوام به سر و روی اینجا بکشم ولی بعید میدونم این نوشته به روز رسانی بشه. اینه که اگه دوست دارید کپیش کنید، بهترش کنید سادش کنید یا هرچی، اینکار رو بکنید و بازنشرش کنید. لزومی هم نیست که به این نوشته به خصوص لینک بدید، اگه دادید که چه بهتر ولی لازم هم نیست. خلاصه همین. ...
اولین کامیتهای پروژه Go
شوخ طبعی دولوپرها همیشه جالب بوده برام، چون اصولا ندارن و چیزهایی که براشون شوخی حساب میشه رو کسی جز خودشون براش بامزه حساب نمیشه. این شوخی تیم گو بوده که اولین کامیتهای گو رو اینطوری رقم زده : لینک اولین کامیت برای اونها که ممکنه شوخی رو نگرفته باشن، تاریخ و Author اون چهار تا کامیت اول رو ببینید. Brian Kernighan، کسی که اولین Hello World شناخته شده رو تو کتابش داره، تاریخ هم که خیلی قدیمیه، برمیگرده به قبل از زبان C حتی. ...