گیک فارسی

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

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

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

وقتی با سایت‌های بزرگ کار میکنی و حجم اطلاعات زیاد میشه نسخه پشتیبان گرفتن از فایل‌ها و اطلاعات پایگاه داده ناگزیر خواهد بود. قطعاً این فایل‌ها هم باید از روی سرویس دهنده اصلی دانلود و بر روی 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 ها مختلف از فونت‌های متناظر استفاده خواهد کرد.

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