گیک فارسی

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

نصب چاپگر (Printer) HP در دبیان و اوبونتو

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

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

از اونجا که عموما از چاپگر‌های HP استفاده میکنیم و مطلب جامعی برای نصبش روی وب پیدا نکردم میخوام طریقه نصب روی Debian و Ubuntu را بگذارم شاید یه روزی به کار کسی اومد.

بهترین راه برای نصب چاپگر‌های HP استفاده از hp-setup هست ، برای نصبش باید Package های زیر را نصب کنین:

sudo apt-fast install -y hplip hplip-gui

بعد از نصب هم دستور sudo hp-setup می‌زنید و مراحل را به صورت GUI پیش میرین ، حواستون باشه GUI مربوطه گاهی کنترل را به Terminal بر میگردونه و باید اونجا مراحل نصب را دنبال کنید.

اگه همه چیز به خوب پیش رفت که خوب خوش شانس هستین اما برای من اینطور نبود و در زمانی که پس از شناخت Printer خواست Plugin را نصب کنه به خطا‌های زیر خوردم:

file does not match its checksum. File may have been corrupted or altered

Plugin download failed with error code = 8

پس از کلی جستجو و بررسی کردن سایت‌ها متوجه شدم hp-plugin به دلایلی نمیتونه فایل Plugin مورد نظر را پیدا کنه و نصبش کنه و چاره‌ای پیدا نکردم جز اینکه خودم فایل مربوط را از سایت openprinting.org بگیرم. برای این کار باید دستور hp-plugin را بزنید و نسخه (همون Version) مربوط به hp-plugin را پیدا کنید ، در زمان نوشتن این راهنما نسخه من ۳٫۱۶٫۱۱ بود.

حالا version را توی آدرس زیر میگذاریم و فایلی با پسوند run. دانلود میکنیم:

https://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-3.17.6-plugin.run

حالا با زدن دستور hp-plugin توی ترمینال و باز شدن GUI مربوطه این بار به جای درخواست Download ، آدرس فایلی که خودمون Download کردیم را میدیم به برنامه و پس از یکسری تأیید ، Plugin مورد نظر نصب میشه.

پس از نصب Plugin کافیه دوباره hp-setup را توی ترمینال بزنیم و این بار مراحل را کامل کنیم تا چاپگر و Driver مورد نظر به راحتی نصب بشه.

نگاهی به تیم ملی ایران در جام ملت‌های آسیا ۲۰۱۹

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

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

اما موضوعات پیرامون تیم ملی توی این جام من را وادار کرده که حدود ۴ ساعت مانده به بازی با ژاپن مطالبی که به نظرم میاد را توی این پست با خوانندگان وبلاگم مطرح کنم.

آیا تیم ملی با کیروش پیشرفت داشته؟
خیلی باید آدم بی انصافی باشی که دو دوره صعود پشت سرهم و بی دردسر به جام جهانی و بازی قابل دفاع در مقابل تیم‌هایی مثل آرژانتین ، اسپانیا و پرتغال را دیده‌باشی و سیستم‌ متفاوت و فکر شده توی مسابقات مختلف را با تیم ملی تجربه کرده باشی و چندین سال متمادی توی قاره کهن در صدر جدول فیفا باشی و این همه موارد را نادیده بگیری و اظهار کنی که تیم ملی پیشرفت نکرده !!!

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

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

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

راه اندازی سرویس‌ دهنده شخصی Git

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

از وقتی با Git آشنا شدم خیلی علاقه‌ای به استفاده از Github و Gitlab و غیره حتی با توجه به آمار و امکانات جانبی که در اختیار میگذارن نداشتم و ترجیحم این بوده که Server اختصاصی خودم را داشته باشم. اینطوری بی‌نهایت پروژه با هر تنظیمات و امکاناتی که میخوام در اختیارم دارم. فقط موضوع هزینه هست که بعید می‌دونم حتی یک شرکت کوچیک مشکلی با ۳۰ یا ۵۰ هزار تومان هزینه در ماه برای خرید یک VPS خیلی عادی توی دیتاسنتر‌های داخلی داشته باشه! تا بدین شکل علاوه بر استفاده از Git بتونه سرویس‌های آنلاین دیگه‌ای را هم برای مجموعه خودش به صورت یک‌جا داشته باشه.

برای نصب Git روی سرویس دهنده دستور زیر را میزنیم:

sudo apt-get install git-core

حالا یک کاربر جدید برای Git ایجاد میکنیم:

sudo useradd git
passwd git

برای اینکه امنیت را در زمان استفاده از SSH بالا ببریم بهتره از طریق SSH Key Pairs روی سرویس دهنده خودمون Login کنیم. برای این کار با دستور زیر یک جفت Public Key و Private Key روی سیستم محلی خودمون میسازیم:

ssh-keygen -t rsa

این دستور ابتدا سؤال میکنه که کلید ها را توی چه مسیری ایجاد کنه که عموما مسیر پیش فرض ssh./~ خوبه اما میتونین هر مسیر دیگه‌ای را بهش بدین (جالب نیست چون زمان ssh زدن مجبور میشین آدرس Public Key را به دستور ssh بدین). همچنین ازتون میخواد که یک گذرواژه روی کلیدها بگذارین که دلخواه هست اما بهتره این گذرواژه را هم وارد کنید.

Private Key روی سیستم محلی شما میمونه ولی باید Public Key را روی سرویس دهنده خودتون به فایل ssh/authorized_keys./~ کنید که با دستور زیر خودکار انجام خواهد شد:

cat ~/.ssh/id_rsa.pub | ssh git@remote-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

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

فرض میکنیم شما یک پروژه به نام myproject روی سیستم محلی دارین که میخواین اون را روی سرویس دهنده Push کنید.

با ssh از طریق نام کاربری git روی سرویس دهنده لاگین میکنیم (میتونین هم با root لاگین کنین و با دستور su کاربر را به git تغییر بدین.) و پوشه مخازن را در مسیر دلخواه ایجاد میکنید:

mkdir -p /home/git/repos

به پوشه ایجاد شده میریم:

cd /home/git/repos

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

git init --bare myproject.git

حالا روی سیستم محلی در مسیر پروژه myproject با دستور زیر این مخزن Remote را اضافه میکنیم(فرض بر این است که شما قبلاً مخزن محلی پروژه را ایجاد کرده‌اید و پروژه آماده Push شدن است):

git remote add origin ssh://git@remote-server-ip:port/home/git/myproject.git

در این مرحله با دستور زیر پروژه را روی مخزن Remote برای اولین بار اینطوری Push میکنیم:

git push -u origin master

سوئیچ u- به push میگه Tracking Information را Set کن تا در زمان Pull و Fetch نیاز به نام بردن از Branch نباشه. اگه توی دستوراتتون Branch را میزنین نیاز به این سوئیچ نیست.

زندگی و انتخاب‌های ما

نویسنده:
۹ آبان ۹۷

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

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

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

به نظرم توی زندگی آدم‌ها ۴ انتخاب خیلی مهم وجود داره که نباید سرسری گرفته بشه و باید با دقت و استفاده از تجربیات دیگران به بهترین نحو آن‌ها را مدیریت کرد و تصمیم درست گرفت.

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

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

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

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

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

امیدوارم همه شما سلامت ،‌ موفق و مسرور باشین.

دانلود فایل‌های حجیم همراه با Resume و تعیین زمان دانلود در لینوکس

نویسنده:
۱۴ مهر ۹۷

شاید یکی از مهمترین مشکلات کاربرانی که به تازگی به لینوکس مهاجرت کردند نبودن نرم افزاری مثل IDM یا همون Internet Download Manager باشه که امکان دانلود فایل‌های حجیم و تعیین زمان دانلود داره تا در بازه زمان شبانه که اینترنت رایگان میشه این دانلود‌ها انجام شوند.

این موضوع توی ذوق خیلی‌ها میزنه و حتی باعث میشه به ویندوز برگردند ،‌ این مورد یکی از مشکلات من در بدو مهاجرت به لینوکس بود و در ابتدا از پلاگین های Download Manager مرورگرهای Firefox و Chrome به نام های DownloadThem All و Chrono استفاده میکردم اما پس از مدتی که با ترمینال لینوکس و قدرتش بیشتر آشنا شدم بهترین روش برای دانلود فایل‌های بزرگ و دسته‌جمعی و مدیریت زمان را پیدا کردم.

یک نرم افزاری Command ی هست به نام Aria2 که توی Linux هم موجوده و با سرعت خیلی خوب و روون میشه باهاش فایل مستقیم ، از روی FTP و حتی Torrent دانلود کرد و توی مخازن Ubuntu و Debian هستش و براحتی با دستور زیر نصب میشه:

sudo apt-get install aria2

بعد از نصب کافیه یک فایل متنی توی مسیر Downloads/~ داشته باشیم و آدرس هر فایل را توی یک خط وارد کنیم و با دستور زیر با ۱۶ Connection و با محدودیت ۱ فایل در یک زمان فایل هامون را دانلود کنیم:

aria2c -c -x16 -s16 -i "~/Downloads/dl.txt" -d "~/Downloads/" -j 1

حالا برای اینکه ساعت ۲ شب این دانلود‌ها شروع بشوند و ساعت ۶ صبح هم کامپیوتر خاموش بشه میتونی پس از زدن crontab -e دو خط زیر را وراد کنید:

۰۰ ۰۲ * * * aria2c -c -x16 -s16 -i "~/Downloads/dl.txt" -d "~/Downloads/" -j 1
۰۰ ۰۶ * * * echo "your password here"|sudo -S shutdown -h now

توجه: برای خاموش کردن سیستم نیاز به دستور SUDO و ذخیره گذرواژه توی فایل Cron داریم که از نظر امنیتی برای سیستم‌های خاصی اصلاً درست نیست (برای یک سیستم خونگی که اهمیتی نداره). میتونین از طریق این پست برای دستور shutdown بدون گذرواژه اقدام کنین.

به همین راحتی مشکل دانلود شبانه توی لینوکس با سرعت خوب حل میشه.

حل مشکل ساعت اشتباه Windows Server حتی با تنظیم NTP و Timezone

نویسنده:
۲۳ تیر ۹۷

یکی از مشتری‌های قدیمی حسابی شاکی بود از اینکه چرا ساعت Server درست نیست و دچار مشکل شدن ، من که مطمئن بودم حتمی TimeZone گذاشتم و NTP هم تنظیم کردم که Automatic تاریخ و ساعت را Sync کنه و DST هم درست باید باشه بعد از Login و اطمینان از تنظیمات درست متوجه شدم ایشون درست میگن و چند دقیقه بعد از اینکه زمان درست Sync میشه ویندوز اتوماتیک زمان را بر میگردونه روی یک Timezone دیگری.

بعد از بررسی خیلی موارد که توی ویندوز بهش بر خورده بودم و تجربه داشتم ممکنه اختلال ایجاد کنه و حل نشدنش رفتم سراغ Google و با جستجو متوجه شدم روی سیستم‌های مجازی و VM گاهی تنظیمات به شکلی انجام میشه که سیستم عامل ساعتش را با مجازی ساز خودش Sync میکنه. البته برخی حالت‌های دیگه هم بود که مربوط به مشکلات سخت افزاری بود و من بعید میدونستم سخت‌افزار های چنین Data center معتبری مشکل داشته باشه.

بعد از کمی جستجوی بیشتر متوجه شدم باید NTP را تنظیم کنم که فقط از Manual Peer List زمان را Sync کنه و نه Domain Controller :

w32tm /config /manualpeerlist:"0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org",0x8 /syncfromflags:MANUAL
w32tm /config /update
net stop w32time
net start w32time
w32tm /resync /nowait

به این شکل مشکل حل شد و امیدوارم دیگه درگیر ویندوز نشم.

دسترسی به فایل‌های iphone از طریق اوبونتو (لینوکس)

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

امروز چک کردم و حجم فایل‌های گوشیم زیاد شده بود و میخواستم بریزمشون روی هارد اکسترنال ، خیلی شیک USB گوشی را زدم به لپ تاپ و یک دیالوگ اومد که به این کامپیوتر اعتماد داری ؟! بعد از زدن Trust از توی Filemanaer اومدم Monted Device که به نام IPhone بود را باز کنم و در نهایت تعجب خالی بود.

بعد از بررسی LOG ها و مطالعه روی اینترنت متوجه شدم یک ابزاری هست به نام ifuse که به فایل سیستم fuse روی IOS Device ها دسترسی میده. خودش و ملحقات روی Repository بود و با خوشحالی نصبش کردم و با دستوراتی که در ادامه میگم Pair هم شد ولی تا اومدم Mount بگیرم خطای زیر را میداد:

Failed to connect to lockdownd service on the device.Try again. If it still fails try rebooting your device.

بعد از بررسی بیشتر متوجه شدم نرم افزار‌های مورد نیاز نصب شده از روی Repository بروز نیستن و تغییراتی از نسخه ۱۰ IOS به بالا بوده که نرم‌افزار نصب شده امکان برقراری ارتباط را پیدا نمیکنه و باید از Source نصب کنم !!!

خوب یکی دو تا برنامه نبود و باید کلی زمان میگذاشتم که خوشبختانه با کمی جستجو متوجه شدم یک انسان با فرهنگ کل پروسه را توی Github توضیح داده (نسخه PDF آموزش) و با انجام دادن کل مراحل از جمله بخش bashrc. که خیلی مهمه (به زحمت ۵ دقیقه طول میکشه) به راحتی با چند تا دستور زیر کار راه افتاد.

حتماً یادتون نره وقتی گوشی را به Usb میزنید خود IOS ازتون میپرسه به این سیستم اعتماد دارین که باید Trust را بزنین.

حالا با دستورات زیر گوشی را pair و mount میکنیم :

idevicepair pair
mkdir -p ~/usr/mnt
ifuse ~/usr/mnt/

حالا میتونین با Filemanager محبوبتون فایل‌ها را منتقل کنین و برای unmount بزنین:

fusermount -u ~/usr/mnt

به همین راحتی بدون نیاز به ویندوز Storage گوشی iphone شما قابل دسترس هست.

شکستن فایل‌های حجیم به فایل‌های کوچکتر در لینوکس

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

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

هرچقدر حجم فایل‌ها بزرگ باشه برای دانلود مشکلات دو چندان میشه و امکان Resume نشدن و کلاً دانلود مجدد وجود داره ، اگه هم نیاز باشه فایل‌ها را روی سرویس های Cloud Storage مجزا از سرویس دهنده اصلی ذخیره کنیم ، محدودیت حجمی ارسال و دریافت فایل روی خیلی از خدمات وجود داره.

راه حل این هست که فایل‌های بزرگ را به قطعات کوچیکتر تقسیم کنیم و هر زمان بهشون نیاز داشتیم اون ها را به هم متصل و از فایل اصلی استفاده کنیم. برای این کار لینوکس ابزار بسیار خوبی داره به نام Split ، مثلاً با دستور زیر میشه یک فایل ۱۰ گیگابایتی را به ۱۰ فایل ۱ گیگابایتی تقسیم کرد:

split -b 1000M backup.zip backup.

این دستور فایل‌های ۱ گیگابایتی با نام هایی مثل backup.aa و backup.ab و … خواهد ساخت. حالا هر زمان احتیاج داشتیم فایل اصلی یعنی backup.zip را داشته باشیم با دستور زیر فایل اصلی را بازسازی میکنیم:

cat backup.a? > backup.zip

گیت (Git) و مشکل تغییر Permission ها و نیاز به Staged کردن دوباره فایل ها

نویسنده:
۱۴ بهمن ۹۶

من از Git و مخازنم (Repo ها) در مکان‌های مختلفی استفاده میکنم و Permission ها و تغییرات توی دسترسی فایل‌ها سیستم به سیستم متفاوت هست. اخیراً متوجه شدم برخی مواقع وقتی میخوام Pull کنم یکسری فایل که تغییری هم نداشتن به عنوان تغییر یافته نیاز به Staged شدن توسط Git گزارش میشه که خیلی این موضوع برام عجیب بود.

بعد از استفاده از git diff و خروجی که به صورت Old Mode و New Mode بود متوجه شدم به خاطر تغییر Permission هست که Git اعلام تغییر میکنه و میخواد فایل دوباره Staged بشه.

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

git config core.filemode false

اگه هم مثل من میخواین روی کل Repo ها اعمال بشه Global غیر فعال کنین :

git config --global core.filemode false

استفاده از فونت هایی که Style هاشون متفاوت و تو چند تا فایل ایجاد شده

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

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

یک مشکلی که شاید خیلی‌ها بهش بر خورده باشن این هست که برخی فونت‌ها برای استایل های Bold یا Italic و حتی ترکیب این دو Style ، فایل‌های متفاوت دارن ولی طراح چون نمیخواسته توی CSS بیاد و خودش را درگیر عنوان های متفاوت از font-face برای یک فونت بکنه عموما از نسخه Regular استفاده میکرده و تغییر Style را به عهده مرورگر میگذاشته !

خودم اخیراً توی پروژه ای نیاز به این کار داشتم و گفتم بیام یک پست بگذارم روی وبلاگ تا دوستان دیگه هم استفاده کنن:

@font-face {
	font-family: 'DroidNaskh';
	src: url('/assets/fonts/DroidNaskh-Regular.ttf') format('truetype');
	font-weight: normal;
	font-style: normal;
}
@font-face {
	font-family: 'DroidNaskh';
	src: url('/assets/fonts/DroidNaskh-Italic.ttf') format('truetype');
	font-weight: normal;
	font-style: italic;
 }
@font-face {
	font-family: 'DroidNaskh';
	src: url('/assets/fonts/DroidNaskh-Bold.ttf') format('truetype');
	font-weight: bold;
	font-style: normal;
}
@font-face {
	font-family: 'DroidNaskh';
	src: url('/assets/fonts/DroidNaskh-Italic-Bold.ttf') format('truetype');
	font-weight: bold;
	font-style: italic;
}

حالا کافیه از همون DroidNaskh استفاده کنیم و مرورگر به صورت خودکار خودش برای Style ها مختلف از فونت‌های متناظر استفاده خواهد کرد.