گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

نگاهی به فیلم خوب ، بد ، جلف

نویسنده:
۴ شهریور ۹۶

زمان زیادی هست که در مورد فیلم‌ها ننوشتم و این ربطی به کمتر نوشتنم توی وبلاگ نداره ، شرایط زندگی داره به شکلی پیش میره که کلاً موفق به دیدن فیلم نشدم و فقط میرسم چند تا سریال خاص را دنبال کنم و بس !

توی جشنواره فجر ۹۵ یکی از فیلم‌هایی که خیلی ازش استقبال مردمی شد همین فیلم بود که در مقابل به کام برخی متقدین از جمله آقای درنیومده برنامه هفت ننشست و خیلی ازش انتقاد شد. البته از اون دست آدم‌ها نیستم که فیلمی را بر اساس نظر منتقدین یا مردم کوچه و خیابون ببینم و به نظرم بهتره شما هم به این موضوعات توجه نکنین و فیلم‌ها را بر اساس کارنامه کارگردان و بازیگران و با گوشه چشمی به نظرات مردم عادی ببینین نه منتقدین سینِما که مثلاً Eternal Sunshine of the Spotless Mind را فیلم خوبی میدونن ولی من و شما موقع دیدنش خمیازه میکشیم. اگه هم فکر میکنین انتظارات من از سینما سطح پایینی داره یه نگاهی به نقدهای من توی همین وبلاگ بندازین تا متوجه بشین اصلاً اینطور نیست.

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

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

در کل شب بسیار خوبی بود و کلی خندیدم. تنها چیزی که از این فیلم انتظار داشتم این بود که ۱ ساعت و خورده‌ای من را از دنیای پر هرج و مرج آزاد کنه و یک دل سیر بخندم که توی این کار بسیار موفق بود. توصیه میکنم دسته‌جمعی (ترجیحاً با چند تا دوست بذله گو یا همون لوده) فیلم را ببینید تا بیشتر لذت ببرین.

فهرست فایل‌هایی که از یک تاریخ خاص توی Git Repo پروژه تغییر کرده‌اند

نویسنده:
۲۶ تیر ۹۶

اگه برنامه نویس هستین و تا حالا از هیچ Source Control ی استفاده نکردین و همچنان روی کاغذ یا توی فایل‌ها ، وضعیت تغییر فایل‌های پروژه را یادداشت میکنین توصیه میکنم هر چه زودتر برای یادگیری Git که به نظر من بهترین Source Control هست وقت بگذارین و توی چند روز براحتی یاد بگیرینش.

نمیخوام در مورد همه امکانات Git براتون توضیح بدم اما فکر کنین یک هفته هست روی فایل‌های پروژه دارین کار میکنید و حالا میخواین منتقل کنین فایل‌ها را به FTP ، میتونین کل فایل‌ها را Zip کنین و هر بار با مشکلات بروزرسانی کل فایل‌های سایت طرف باشین یا تغییرات را جایی یادداشت کنین و با مشکلاتی مثل فراموش کردن نوشتن تغییر در فایلی روبرو بشین. حالا اگه چند نفری روی این پروژه کار کنین که امکان رخ دادن این مشکلات چندین برابر میشه.

اگه از Git استفاده کنین و تاریخ قبلی بروزرسانی فایل‌های آنلاین هفت روز پیش باشه:(یعنی از ۶ روز پیش را میخوایم)

git log --pretty=format: --name-only --since="6 days ago" | sort | uniq

نکته: برای since– میتونین هر عبارت معادل زمانی معتبری را بگذارین و حتی ساعت و دقیقه هم بدین.

نکته: دستورات sort و uniq و امکان pipe کردن هم فقط توی لینوکس (اگه روی ویندوز محیط Bash نداشته باشین) امکان پذیره و این خودش نشون میده بهتره زودتر مهاجرت کنین به لینوکس.

وقتی گوگل بر اساس IP جستجو میکنه و حالیش نیست تنظیمات شما روی English یا فارسیه !!!

نویسنده:
۱ تیر ۹۶

بنا به خیلی از دلایل ممکنه ما از گوگل توقع داشته باشیم که جستجوش را بر اساس زبان انگلیسی انجام بده و مثلاً وقتی در مورد تابع sprintf جستجو میکنیم کاری نداشته باشه که IP ما از کشور آلمان هست و باید نسخه php.net/de از اسناد مرتبط با تابع مذکور را نشون بده.

اما گوگل حتی اگه شما توی تنظیمات بگین عزیز جان جستجو را بر روی محتوای English انجام بده باز هم موضوع IP را دخیل میکنه و موارد نمایشی را بر اساس Location شما فهرست میکنه که این موضوع خیلی موقع توی اینترنت گردی اذیت میکنه.

حالا راه حل سادش این هست که گوگل را با آدرس google.com/ncr فراخوانی کنیم که ncr هم مخفف No Country Redirect هست و به گوگل میگه نتایج را بر اساس Location و زبان کشور جستجو کننده نمایش نده. نکته جالبش اینه که اگه یکبار این فراخونی را انجام بدین گوگل با ثبت Cookie روی مرورگرتون حماقت قبلی را تکرار نمیکنه.

خطای عدم دسترسی به کاربر root در نسخه های جدید mariadb

نویسنده:
۱۰ خرداد ۹۶

اگه هنوز به جای استفاده از MariaDB دارین از MySQL استفاده میکنید باید بگم خیلی در اشتباه هستین و بهتره خیلی زود به فکر مهاجرت باشین که البته این مهاجرت اصلاً سخت نیست و سازگاری خوبی بین MySQL و MariaDB وجود داره.

اخیراً بعد از نصب MariaDB روی یک سرور توی مراحل نصب پرسشی مبنی بر انتخاب گذرواژه برای root نکرد و بعد از نصب هم وقتی میخواستم با دستور mysql -u root -p ارتباط با سرور برقرار کنم خطای عدم دسترسی کاربر root میداد.

اول فکر کردم شاید گذرواژه ست نشده و با روش‌ skip-grant-tables– وارد شدم و گذرواژه را توی جدول user پایگاه mysql ست کردم اما بعد از اتمام کار متوجه شدم خیر باز هم اجازه برقراری ارتباط نمیده. خیلی شانسی متوجه شدم داره بی دردسر اجازه میده با sudo و بدون گذرواژه ارتباط برقرار کنم که با کمی جستجو متوجه شدم MariaDB داره به صورت پیش‌فرض برای کاربر root از unix_socket plugin استفاده میکنه و این plugin اجازه دسترسی از طریق socket را به کاربر متناظر سیستم میده.

خوب ایده جالبی بود چون کلاً توی محیط های production بهتره ارتباط با root برقرار نباشه و این پلاگین خیلی هم در تأمین امنیت کاربردی هست ولی اگه ارتباط از طریق root خیلی مهمه میتونید با ساختن یک کاربر دیگه مثلاً admin و دادن دسترسی های root بهش از برنامه‌های دیگه ارتباط بزنید. دوستانی هم که ترجیح میدن مثل گذشته کاربر root گذرواژه بگیره کافیه Query زیر را بزنن :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your password'

حل مشکل Resolving Host در اوبونتو

نویسنده:
۱ خرداد ۹۶

یک مدت بود که بعد از کمی کار کردن با سیستم مروگر خطای Resolving Host میداد و گاه و بی گاه رفع و دوباره تکرار میشد. اولش به DNS های ISP شک کردم و توی NetworkManager از DNS های OpenDNS و Google استفاده کردم اما باز هم مشکل تکرار میشد که با بررسی های بیشتر متوجه شدم اصلاً درخواست Resolve به DNS ارسال نمیشه و یه چیزی توی خود سیستم عامل داره مانع میشه.

تا دلتون بخواد جستجو کردم و ساعت‌ها جستجو نتیجه‌ای در بر نداشت ، البته مشکل اینجا بود که دنبال راه حل‌هایی بودم که دوستان تأیید کرده بودن جواب میده و راه حل‌هایی که برای دیگران جواب نداده بود را بررسی نمیکردم. یکی از موارد که اصلاً فکرم بهش خطور نمیکرد این بود که افرادی توصیه کرده بودن dnsmasq که یک DNS Forwarder و DHCP Server هست را غیر فعال کنیم.

خیلی شانسی توی یک وبلاگ کسی توضیح داده بود که dnsmasq که گویا از Ubuntu 16.04 پیش‌فرض نصب و فعال هست میتونه به دلایلی که جاش در این متن نمیگنجه باعث مشکلات Resolve بشه. خوب گفتم کار پیچیده‌ای نیست و کافیه حذفش کنیم و تویetc/NetworkManager/NetworkManager.conf/ هم غیر فعالش کنیم ببینیم چی میشه :

[main]
plugins=ifupdown,keyfile,ofono
#dns=dnsmasq

[ifupdown]
managed=false

بعدش هم NetworkManager را Restart کنیم :

sudo service network-manager restart

و در نهایت تعجب مشکل حل شد !!!!
به اندازه‌ای اعصابم از این مشکل خورد بود که حوصله کنکاش بیشتر نداشتم اما گفتم تجربش را توی وبلاگ بگذارم و در زمان مقتضی حتماً مفصل بررسیش کنم.

پردازش و نمایش سخت افزاری ویدئو (Hardware Video Acceleration) با کارت گرافیکی اینتل

نویسنده:
۱۴ فروردین ۹۶

اگه اهل فیلم و سریال باشین و به توزیع‌های لینوکسی مهاجرت کنین ، یکی از مواردی که خیلی توی ذوق میزنه کیفیت پایین پخش فایل‌های ویدئویی در لینوکس هست. عموما دوستان دنبال رفع مشکلات نصب کارت گرافیکی خودشون میگردند در صورتی که کارت گرافیک به درستی نصب شده اما فیلم‌ها با کیفیت پایینی نمایش داده میشوند.

البته توجه داشته باشین که کارت گرافیکی شما باید توانایی نمایش سخت افزاری را داشته باشه تا CPU درگیر نمایش ویدئو نشه و بهترین کیفیت ممکن نمایش داده بشه. من توی این پست به خاطر استفاده از کارت گرافیکی Intel فقط در مورد این کارت گرافیکی صحبت میکنم و توی مجال دیگری که بتونم NVIDIA را هم بررسی کنم در مورد اون هم خواهم نوشت.

من توی لینوکس برای نمایش فیلم‌ها از VLC استفاده میکنم. VLC برای پخش سخت افزاری از VDPAU استفاده میکنه که متأسفانه برای Intel به صورت Generic وجود نداره اما یک پکیج به نام libvdpau-va-gl موجود هست که به کمک OpenGL امکان استفاده کارت گرافیکی هایی که VDPAU را پشتیبانی نمیکنند فراهم میکنه. برای نصب این پکیج میتونید دستور زیر را بزنید :

sudo apt-get install  libvdpau-va-gl1 vdpauinfo

اما متأسفانه من نتونستم از طریق این پکیج و با استفاده از کارت گرافیکی Intel خودم و گذاشتن خروجی ویدئوی VLC روی VDPAU جواب بگیرم و VLC میگه که نمیتونه Library مورد نظرش را پیدا کنه و خطاهایی میده که روی نت هم نتونستم پاسخی صریح براش پیدا کنم و نیاز به بررسی خیلی بیشتر داشت.

با این حال در حین جستجو ها متوجه شدم که میشه همین پکیج libvdpau-va-gl را به شکل دیگه‌ای روی VLC پیاده‌سازی کرد. به این صورت که کافیه یک VIDEO ACCELERATION API نصب کنیم و از طریق OpenGL روی VLC نمایش سخت افزاری داشته باشیم.

پس ابتدا با دستور زیر پکیج های مورد نظر را نصب میکنیم :

sudo apt-get install i965-va-driver vainfo

حالا کافیه خروجی ویدئو را توی VLC بگذاریم روی OpenGL GLX Video Output و توی Input/Codecs هم Hardware-Accelerated decoding را بگذرایم روی VA-API Video Decoder via X11 و تمام. حالا اگه یک فیلم یا سریال را باز کنید از نتیجه متحیر میشین.(مخصوصا در مورد فیلم‌های HD)

زمانی که من این موارد را بررسی و گزارش میکردم از توزیع Debian و میزکار Cinnamon بهره میبردم و Tearing نداشتم. اما روی اوبونتو و سایر میز کارها به شرطی که مشکل Tearing را حل کرده باشین مورد خاصی نباید باشه.

Track کردن پوشه های خالی در یک ساختار درختی در Git

نویسنده:
۲ فروردین ۹۶

Git از جمله موضوعاتی هست که من باید خیلی دربار‌ه‌ش بنویسم اما خوب واقعاً نشده اما صد در صد در موردش خواهم نوشت. در مورد این نوشته خاص باید توضیح بدم که اصولاً Git پوشه ها را Track نمیکنه و فایل‌ها را Track میکنه. در نتیجه اگه یک پوشه خالی باشه اصولاً Git بی خیالش میشه و شما هم نمیتونین توی Stage بیارینش.

راه حلی که خیلی مورد استفاده قرار میگیره این هست که یک فایل خالی با عنوان keep. یا gitkeep. توی اون پوشه مورد نظر ایجاد میکنند تا Git اون ها را توی پروسه Track و Stage بیاره. اگه هم پوشه ای باشه که خودش ignore شده باشه توی gitignore. از طریق کد زیر درخواست عدم نادیده گرفتن فایل gitkeep. را میدیم :

!.gitkeep

حالا یکی از سناریو هایی که معمولاً توی ساختار‌های نسبتاً ضعیف دیده میشه یک پوشه و مجموعه فرزندانش توی چند سطح هست که به فایل‌هاشون نیاز نیست و توی gitignore. نادیده گرفته میشن اما پوشه ها باید با همون منطق gitkeep. حفظ بشن مثل نمونه زیر :

folder
 sub1
   sub1-1
   sub1-2
 sub2

توجه: توی همه پوشه ها هم فایل gitkeep. داریم.

توی gitignore. داریم :

folder/*

اما مشکل اینجاست که Git تا نسخه‌ای که در زمان نوشتن این مطلب منتشر شده فقط مجوز Track کردن همون سطح اول پوشه ها را میده (یعنی folder) و باقی را نادیده میگیره (یعنی sub1 و sub2 و همه فرزندانش) و به اصطلاح Recursive عمل نمیکنه.

من راه حلی از طریق Git پیدا نکردم جز اینکه یکی یکی پوشه ها را ignore کنی یا با git-add -f با اعمال قدرت از Git بخوای که فایل‌های gitkeep. را Track کنه! فقط توی این حالت دوم بعد از ساخت فایل‌های gitkeep. دستور زیر کمک میکنه که دستی اون ها را Add نکنیم (دستور را توی root پروژه میزنیم) :

find . -name '.gitkeep' | xargs git add -f

در نظرسنجی برنامه نویسان شرکت کنید

نویسنده:
۲۰ اسفند ۹۵

یکی از موضوعاتی که همیشه ذهن من و شاید خیلی از شما را درگیر به خودش کرده باشه این هست که همکارهام و به طور کلی بازار کار رشته نرم‌افزار توی زمینه‌های مختلف چه مسیری را میره. به عنوان مثال چه زبان‌هایی محبوب هستند ، چه Framework ها و تکنولوژی هایی مورد توجه قرار دارن ، از چه سیستم عاملی استفاده میکنند و به طور میانگین دوستان چقدر حقوق میگیرن و یا چه انتظاری از محیط کار باید داشت یا حتی اگه کمی فوضول باشم شاید برام جالب باشه چی میپوشن و از چه گجت هایی استفاده میکنند.

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

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

پس بشتابید به سوی نظرسنجی برنامه نویسان و مدیران سیستم (برای من ۵ دقیقه هم‌زمان نبرد پس تنبلی نکنید.)

بازیابی لینوکس بعد از نصب ویندوز یا سیستم عامل دیگر

نویسنده:
۷ بهمن ۹۵

میخواستم یکسری Game قدیمی را دوباره بازی کنم و حوصله سر و کله زدن با Patch هاشون توی Windows 7 را نداشتم و برعکس همیشه که لینوکس را بعد از ویندوز بی دردسر نصب میکردم و Grub همه چیز را تر و تمیز Dual Boot میکرد. اینبار باید Windows XP را در حالی که لینوکس نصب بود Setup میکردم.

وقتی ویندوز را بعد از لینوکس نصب میکنید ، چون ویندوز کلاً لینوکس را تشخیص نمیده و Boot Loader خودش را جایگزین Grub توی MBR میکنه در نتیجه به هیچ وجه نمیتونید سیستم را با لینوکس بوت کنید. و سیستم از Dual Boot خارج میشه. اما بازیابی Grub خیلی هم کار سختی نیست.

کافیه Live CD مربوط به توزیع لینوکس را بگذارین و لینوکس را بیارین بالا. حالا با دستور sudo fdisk -l باید ببینید لینوکس روی کدوم پارتیشن نصب شده. مثلاً روی سیستم من sda5 بود. حالا با دستور زیر پارتیشن را mount میکینم:

sudo mount /dev/sda5 /mnt

حالا دستور زیر را برای محکم کاری بزنین تا موارد مورد نظر mound بشن :

for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done

توی این مرحله که پارتیشن مربوطه را mount کردیم باید chroot کنیم :

sudo chroot /mnt

حالا grub را روی دیسک مرتبط با پارتیشن لینوکس نصب میکنیم. دیسک من میشه sda:

grub-install /dev/sda

حالا باید Grub را update کنیم که ویندوز را شناسایی کنه:

update-grub

حالا از chroot خارج میشیم و سیستم را ریست میکنیم و تمام :

exit
sudo reboot

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

سریال Silicon Valley و نکته‌های ریز و درشت برای تجارت های آنلاین

نویسنده:
۶ بهمن ۹۵

مدتی میشه دوباره سعی میکنم شبها حتماً یک سریال را دنبال کنم. برای شروع دوباره داشتم دنبال سریالی میگشتم که چند فصل ازش گذشته باشه و به سلیقه من هم بخوره و خیلی هم داستان پیچیده و سنگینی نداشته باشه. با توجه به اینکه آخرین سریالی که میدیدم Mr. Robot بود و سابقه خوبی که این تیپ سریال های مرتبط با کار خودم از جمله Halt And Catch Fire توی ذهنم داشت به دنبال سریالی شبیه بودم که به Silicon Valley برخوردم.

توی imdb.com در نگاه اول یک سریال کمدی با داستانی مربوط به استارت آپ های Silicon Valley بود و خیلی رقبتی به سریال های کمدی با زمان کوتاه هم نبود اما خوب گفتم یکی دو قسمت می‌بینم بعدش قضاوت میکنم. بعد از دیدن دو قسمت اطمینان پیدا کردم که سریال خوبیه و باید ادامش داد.

سریال سه تا نکته داره که میتونه برای بیننده جالب باشه. یکی اینکه موضوع سریال در مورد یکسری Geek و Nerd هست و میتونه با روحیه آدمهایی مثل من و احتمالاً خوانندگان وبلاگم سازگار باشه. دوم اینکه داستان سریال خیلی خوب مشکلات و دردسر هایی راه اندازی یک کسب و کار اینترنتی و پاسخ خیلی سؤالات را در خودش داره و میتونه برای افرادی که در این زمینه فعالیت میکنن هیجان انگیز باشه. نکته سوم هم اینه که سریال واقعاً خنده داره و عجیب Geek ها را مسخره میکنه و موقعیت های طنز خیلی خوبی داره.