گیک فارسی

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

فایل‌های desktop. و روش ایجاد و استفاده از اونها

نویسنده:
۲۵ آبان ۹۶

اصولاً برنامه‌هایی که شما از طریق یک فایل deb یا دستورات apt نصب میکنید خیلی راحت از طریق Launcher میزکار شما قابل دسترسی هستند اما مواقعی هم پیش میاد که برنامه مورد استفاده شده به صورت اسکریپتی یا یک فایل اجرایی مستقل از داخل یک پوشه اجرا میشه و کلاً همه فایل‌های برنامه را از یک فایل آرشیوی خارج کردین و نصب هم در کار نبوده.

احتمال هم داره شما یک توسعه‌دهنده هستین و نیاز دارین برنامتون توی سیستم کاربری به شکلی نصب بشه که کاربر بتونه از طریق Launcher با زدن اسمش اون را پیدا کنه و اجرا بگیره.

اینکه برای دسترسی به برنامه هر بار به پوشه مورد نظر بریم و برنامه را اجرا کنیم خیلی رو اعصابه و ساختن یک Link توی Desktop از برنامه هم همیشه بهترین گزینه نیست. در چنین مواردی توی لینوکس میشه از فایل‌هایی با پسوند desktop. استفاده کرد. مثلاً من برای نرم‌افزار Aptana یک فایل با نام aptana.desktop توی مسیر زیر میسازم:

~/.local/share/applications/aptana.desktop

و محتوای زیر را هم داخلش قرار میدم:

[Desktop Entry]
Name=Aptana
Type=Application
Comment=The world's most powerful open-source web development IDE
Categories=Development;
Path=~/Applications/Aptana_Studio_3/
Exec=~/Applications/Aptana_Studio_3/AptanaStudio3
Icon=AptanaStudio3

تنها نکته‌ای که در مورد اطلاعات بالا ممکنه گیج‌کننده باشه موضوع icon هست که خوب حالا میزکار از کجا متوجه بشه icon را از کجا پیدا کنه !؟ و جوابش هم گذاشتن فایل icon با پسوند مناسب (بهتره از png استفاده کنید) در مسیر زیر هستش:

~/.local/share/icons

بعد از ایجاد و ذخیره فایل و انتقال آیکون میتونین خیلی راحت از طریق Launcher یا هر Application Searcher ی که روی میزکارتون دارین برنامه را اجرا کنین.

استفاده از یک رزولوشن (Resolution) تعریف نشده برای Display

نویسنده:
۱۲ آبان ۹۶

امروز یک مانیتور ۲۲ اینچ را به یک سیستم وصل کردم و با تعجب بسیار متوجه شدم توی Display رزولوشن مورد نظر من یعنی ۱۰۸۰ × ۱۹۲۰ وجود نداره ! خوب بار اول بود با چنین مشکلی روبرو میشدم و بعد از کمی جستجو به یک Wiki رسیدم که راه حل را ارائه کرده بود و بعد از تست و پاسخ گرفتن تصیمیم گرفتم توی وبلاگ یک پست را بهش اختصاص بدم.

شما ابتدا باید Resolution Mode مورد نظر را به دست بیارین (mode را برای ۱۹۲۰ پیکسل افقی و ۱۰۸۰ پیکسل عمودی با Refresh Rate برابر با ۶۰ هرتز نیاز داریم):

sudo cvt 1920 1080 60

این دستور یک Modeline شبیه خروجی زیر میده:

Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync

درمرحله دوم با دستور xrandr این mode را به سیستم شناسایی میکنیم:

sudo xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync

حالا نیاز داریم تا Mode ثبت شده را به نمایشگر مورد نظر اضافه کنیم ، چون ممکنه نام نمایشگر را ندونیم از دستور زیر استفاده میکنیم و نام نمایشگر را به دست میاریم (که مثلاً برای سیستم من DP1 هستش):

sudo xrandr -q

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

sudo xrandr --addmode DP1 1920x1080_60.00

در آخر هم توی تنظیمات Display میتونیم رزولوشن ایجاد شده را انتخاب و فعال کنیم.

در وصف سریال Halt And Catch Fire

نویسنده:
۱ آبان ۹۶

از اون دسته از آدم‌هایی هستم که اگه دوستان چند صفحه از وبلاگم را بخونن متوجه میشن اهل سریال هستم و سلیقه نسبتاً سختگیرانه‌ای هم در انتخاب سریال دارم. وقتی سال ۹۴ سریال Halt And Catch Fire را برای بار اول دیدم به خاطر موضوع سریال و نزدیکی بسیار زیاد شخصیت‌ها و روایت اون به زندگی و کار خودم به شدت عاشقش شدم جدا از نقد‌های اسکریپتی و بازی کاراکترها و تولید و فیلمبرداری و …

توی این ۴ فصلی که AMC سر این سریال پایداری کرد و با وجود مخاطب محدودش باز هم به تولیدش وفادار بود شخصاً خیلی مسرور بودم تا اینکه متأسفانه فصل ۴ به عنوان آخرین فصل ارائه شد و لذت در کنار شخصیت‌ها و حال و هوای سال‌های طلایی ۸۰ و ۹۰ علوم کامپیوتر و پیشرفت‌های اون سال‌ها از سال آینده دیگه وجود نخواهد داشت.

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

حرف حساب در مورد PHP و Framework ها و Design Pattern ها

نویسنده:
۲۱ مهر ۹۶

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

میخوام شما را لینک بدم به مقاله‌ای که حرف‌هایی که میزنه حرف دل منه و به نظرم خیلی مهمه برای هر برنامه نویس PHP که این مقاله را بخونه. پس برای خوندنش عجله کنید و امروز و فردا نکنید :

لینک به مطلب اصلی
دانلود نسخه PDF ی که من برای اولین بار خوندمش برای حفظ سند

توهم بزرگ استقلالی‌ها و پرسپولیسی‌ها در آسیا

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

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

نکته اصلی اینجاست که قهرمانی های استقلال و حضور در فینال باشگاهی آسیا مربوط به دوران «مسابقات باشگاهی قهرمانی آسیا از ۱۹۶۷ تا ۱۹۷۲» و «جام باشگاه‌های آسیا از ۱۹۸۵ تا ۲۰۰۲» میشه.

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

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

پرافتخار ترین تیم ایران در لیگ قهرمانان آسیا سپاهان هست که نائب قهرمانی در سال ۲۰۰۷ داره و در جام باشگاه های جهان هم شرکت کرده. ذوب‌آهن هم دیگر تیم ایرانی هستش که در سال ۲۰۱۰ نائب قهرمان شده.

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

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

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

توی جشنواره فجر ۹۵ یکی از فیلم‌هایی که خیلی ازش استقبال مردمی شد همین فیلم بود که در مقابل به کام برخی متقدین از جمله آقای درنیومده برنامه هفت ننشست و خیلی ازش انتقاد شد. البته از اون دست آدم‌ها نیستم که فیلمی را بر اساس نظر منتقدین یا مردم کوچه و خیابون ببینم و به نظرم بهتره شما هم به این موضوعات توجه نکنین و فیلم‌ها را بر اساس کارنامه کارگردان و بازیگران و با گوشه چشمی به نظرات مردم عادی ببینین نه منتقدین سینِما که مثلاً 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

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