گیک فارسی

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

فایل‌های 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 میتونیم رزولوشن ایجاد شده را انتخاب و فعال کنیم.

فهرست فایل‌هایی که از یک تاریخ خاص توی 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 نداشته باشین) امکان پذیره و این خودش نشون میده بهتره زودتر مهاجرت کنین به لینوکس.

حل مشکل 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

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

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

میخواستم یکسری 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

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

پشتیبان گیری (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 (روی وب) پشتیبان بگیرین و …

دانلود همه فایل‌های یک وب سایت از طریق FTP

نویسنده:
۲۰ آذر ۹۵

اگه توسعه‌دهنده وب باشین خیلی مواقع پیش میاد که نیاز دارین همه فایل‌های یک وب سایت را دانلود کنین. اگه سایت مورد نظر روی میزبانی واقع باشه که Cpanel یا کلاً یک Filemanager داشته باشه میتونید یک نسخه Zip شده از فایل‌ها بگیرین.

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

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

wget -r -l 0 --user="username" --password="password" ftp://server.com/

نصب کتابخونه‌های وابسته یا همون Dependency های پکیج های DEB

نویسنده:
۸ آذر ۹۵

برای اینکه از طریق خط فرمان یک پکیج deb را نصب کنیم از دستور زیر استفاده میکنیم :

dpkg -i package.deb

اما گاهی پیش میاد که پکیج ، یکسری وابستگی داره و نصب نمیشه. در این شرایط نیاز نیست پیگیر نصب این وابستگی‌ها بشیم و با دستور زیر پس از بروز خطا همه اون ها نصب میشه و بعد از نصبشون میتونیم راحت پکیج Deb را نصب کنیم.

sudo apt-get -f install