گیک فارسی

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

وقتی گوگل بر اساس 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 ها را مسخره میکنه و موقعیت های طنز خیلی خوبی داره.

فیلم ضعیف «فروشنده» به کارگردانی اصغر فرهادی

نویسنده:
۲۷ دی ۹۵

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

من خودم توی بهار سال جاری به خاطر دریافت جایزه بهترین فیلمنامه و بهترین بازیگر مرد فیلم فروشنده توی جشنواره کن بسیار خرسند و مشتاق به دیدن فیلم بودم ولی به دلیل مشغله زیاد اصلاً نتونستم برم سینِما که کار را ببینم. بالاخره هفته گذشته فیلم به سینمای خانگی اومد و همون شب فیلم را دیدم.

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

حالا اگه یکسری میشینن فلسفه بافی میکنند و سعی دارند افتضاح را جمع کنند من کاری ندارم. به عنوان یک طرفدار سینمای فرهادی و نه در قامت شخصیتی به نام فراستی (که شاید این کار را پسندیده باشه و من ندونم !) این فیلم ضعیف ترین کار در کارنامه درخشان فرهادی هستش.

حق ابد و یک روز برای معرفی و دیده شدن در گلدن گلوب و اسکار خورده شد و حیف اندر حیف ! حتی اگه کوته بینانه توی همه ردش میکردند به حمایت مشکوک از این اثر مزخرف شرف داشت.

پی نوشت : فیلم امشب یعنی ۵ بهمن توی Oscar نامزد شد و خبر خوبی برای سینمای ایران هست اگرچه نظر منفی من را نسبت به فیلم عوض نمیکنه ! اما به هر حال به اصغر فرهادی و دست اندر کاران سینمای ایران تبریک میگم.

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

پشتیبان گیری (Backup) از پایگاه داده MySQL و MariaDB

نویسنده:
۲۷ دی ۹۵

برنامه نویس هایی که با پشتوانه ویندوزی و استفاده از MSSQL به لینوکس و PHP و پایگاه داده محبوب این محیط یعنی MySQL مهاجرت میکنن یا میخوان توی پروژه ای ازش استفاده کنند در زمان انتقال پروژه به سیستم دیگه ، روی وب یا کلاً زمان پشتیبان گیری سعی میکنند مثل MSSQL که یک فایل Database و Log داره و با کپی گرفتن ازش همه چیز حله با MySQL برخورد کنند و با کپی گرفتن از پوشه MySQL و جداول مربوطه خودشون را خلاص میکنند.

اما وقتی زمان بارگزاری مجدد و Restore کردن پروژه میشه تازه متوجه میشن یا اطلاعاتی را کپی نگرفتند یا MySQL فایل‌های پشتیبان را تشخیص نمیده و حواسشون به اینکه MyISAM بوده یا InnoDB نداشتند و حسابی گیر میوفتن.

راستش من از اول وقتی متوجه شدم MySQL ابزاری به نام MySQLDump داره کلاً درگیر کپی کردن فایل‌ها نشدم. خیلی راحت میشه با دستور زیر جداول و کل روال ها و توابع ایجاد شده را تر و تمیز پشتیبان گرفت :

mysqldump -e -R -h [Remote host or 127.0.0.1 or localhost] -u [Your username] --password=[Your password] [Database name] > [Filename to save backup]

توی ویندوز اسمش mysqldump.exe میشه البته. (امیدوارم تا حالا مهاجرت کرده باشین به لینوکس!)

برای بارگزاری مجدد یا Restore هم از دستورخود mysql استفاده کنید (mysql.exe ویندوز):

mysql -h [Remote host or 127.0.0.1 or localhost] -u [Your username] --password=[Your password] --default-character-set=utf8 --database=[Database name] < [Filename to load backup data]

این روش مزایای زیادی داره از جمله اینکه میتونید از پایگاه داده‌های Remote هم پشتیبان بگیرین و Restore کنین یا با یک Cronjob به صورت هفتگی از پایگاه های داده محلی یا Remote (روی وب) پشتیبان بگیرین و …