گیک فارسی

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

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

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

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

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

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

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

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

ابد و یک روز

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

وقتی توی جشنواره فجر پارسال «ابد و یک روز» ۷ تا جایزه و شاخص ترین ها را هم برد به دنبال اکران و دیدن فیلم توی سینِما بودم اما متأسفانه به خاطر مشکلات زیاد زندگی توی سال جاری نتونستم فیلم را توی سینِما ببینم و ناچار منتظر نسخه DVD بودم که هفته پیش بالاخره فیلم را همون شب پخش دیدم.

ابد و یک روز

عجب فیلم خوبی ، به جرأت میتونم بگم در کنار و حتی بهتر از «جدایی نادر از سیمین» و «درباره الی» بود. فیلمنامه که محشر بود و با اجرای منحصر به فرد دیالوگ هاش خیلی راحت سیمرغ جشنواره را مال خودش کرد و جای تبریک داره به «سعید روستایی» که نشون داد خیلی توی چنتش داره و باید حتماً پیگیر کارهاش بود.

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

اگه اصلاً سینمای ایران را دنبال نمیکنید توصیه میکنم حتماً «ابد و یک روز» را ببینید که قطعاً در آینده از این فیلم در تاریخ سینمای ایران بیشتر خواهید شنید.

درس آدم‌شناسی

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

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

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

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

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

باز هم تکرار میکنم که قرار نیست یکنفر صددرصد کامل و بی‌عیب باشه اما شعور ، ادب و درک شرایط و مسئولیت‌پذیری موضوعاتی نیستند که بشه قربانی هوس ،‌ ظاهر ، وضعیت مالی ، وضعیت فنی و … در شروع یک رابطه انسانی کرد.

اما مهمترین نکته در زمانی که احساس میکنید یک رابطه آینده نداره این هست که فوراً در نطفه خفش کنین و خودتون را گول نزنین که طرف را تغییر میدین یا آدمش میکنین و از این حرفا ، با‌ گذشت زمان و دست و پا زدنتون شما بیشتر توی باتلاق روابطتتون فرو میرین. پس زود تمومش کنین و یادتون باشه شما فقط یکبار زندگی میکنید.

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

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

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

dpkg -i package.deb

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

sudo apt-get -f install