سبد خرید شما خالی است.

آیا لینوکس ویروس میگیره؟

مقدمه

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

آیا لینوکس ویروس میگیره؟

آیا لینوکس ویروس میگیره؟

خب بریم سراغ اولین سوالی که برای خیلی از دوستان پیش میاد. آیا «لینوکس ویروس میگیره؟». در واقع لینوکس، کرنل یا هسته ی سیستم عامله که توسط لینوس تروالدز ساخته شده اما روی اون کرنل، کلی ابزار و محیط گرافیکی و چیزای دیگه سوار میشن. پس احتمالا منظور ما از این سوال اینه که آیا توزیع های گنو/لینوکسی مثل دبیان، اوبونتو، کالی و… به ویروس مبتلا میشن یا نه؟

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

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

کرنل لینوکس
کرنل لینوکس

اما جدای از خود کرنل که گفتیم بسیار امنه، ابزار های استاندارد لینوکس هم همینطور هستند. خصوصا که ما در لینوکس، پکیج ها (یا همون بسته های نرم افزاری) رو از مخازن (ریپازیتوری های) معتبر و پکیج منیجر هایی مثل snap که ubuntu software ازش استفاده میکنه و apt که در همه ی توزیع های دبیان بیس وجود داره می گیریم و خیلی خیلی کم پیش میاد که یه نرم افزار یا بسته ای توی این مخازن و مدیر بسته ها نباشه. حتی در اون موارد هم از منابعی مثل گیت هاب خود اون پروژه دانلود میکنیم. در نتیجه خطر و ریسکی برای درگیری با ویروس و بدافزارها از این راه ها وجود نداره.

همین دلایل باعث بسیار امن شدن لینوکس شده اند، اما باز چون اخیرا لینوکس خصوصا برای کاربران دسکتاپ، یه گزینه خوب و منطقی حساب میشه و خیلیا بسمتش اومدن، با ورود هر چه بیشتر کاربر ها هکر ها و برنامه نویس های Malware هم بیشتر سعی میکنن به این طرف هم نگاهی داشته باشند و یه کارهایی بکنند. اینجاست که میخوام خیال راحتتون رو یکمی ناراحت بکنم. چون لینوکس هم مثل هر سیستم عاملی امکان ویروس گرفتن رو داره. البته ویروس نهایتا یه نرم افزار بده که کارهای از نظر ما بدی رو انجام میده. توی لینوکس تا زمانیکه نرم افزار های امن رو از مخازن و منابع معتبر میگیریم که در اغلب اوقات اینطوریه خیالمون کاملا راحته از سمتی خود سیستم هم که گفتیم تا حد خیلی خیلی زیادی امنیت داره.

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

ویروس هایی برای لینوکس

با وجود اینکه تا الان تعدادی ویروس مهم برای لینوکس وجود داره اما در مقابل ویروس هایی که برای ویندوز وجود داره تقریبا صفر هست، خیلی خیلی کمتره. خب بزارین یکی از این ویروس ها رو معرفی کنم:

  • یه ویروسی اومده برای لینوکس هایی که از محیط گرافیکی Gnome استفاده میکنن. در واقع به شکل یه افزونه است اما کار های خطرناک زیادی رو پشت صحنه انجام میده. این ویروس به اسم Evil Gnome شناخته میشه و البته در مخازن معتبر و سایت Gnome-look که منبع اصلی دانلود اکستنشنهای مرتبط با این محیط گرافیکی هست وجود نداره و فقط تو یه سری سایت های غیر رسمی آپلود شده که باز این هشدار رو به ما میده که پکیج ها رو از منابع معتبرشون دانلود کنیم. برای هر چیزی توی لینوکس منبع و ریپازیتوری امن خودش وجود داره و همین موضوع نسبت به ویندوز ما رو از نظر امنیتی خیلی جلوتر میندازه. اما بزارید یه مقدار از کارای این ویروس براتون بگم.
    این ویروس از ابزار makeSelf استفاده کرده که با اجرای این فایل خودش عملیات استخراج فایلهای برنامه رو انجام میده و در واقع ویروس رو در مسیر زیر کپی میکنه.
    ~/.cache/gnome-software/gnome-shell-extensions/
    این ویروس میاد به طور دائم به سرورش وصل میشه و منتظر دریافت دستورات جدید و ورژن جدید ویروس میشه، میتونه اسکرین شات بگیره، عکس بگیره، صدا رو ضبط کنه، اطلاعات فایلها رو بدزده و همه ی اینها رو مرتب میتونه به سرورش بفرسته. یه تابع هم برای کی لاگینگ داره یعنی هر کلیدی که رو صفحه کلید فشار داده میشه رو بتونه ذخیره کنه.

چطوری در لینوکس امن بمونیم؟

هر توزیع لینوکسی ای معمولا یه راهنمای پایه برای حفظ امنیت کاربران داره. به عنوان مثال در اوبونتو رعایت هفت قانون زیر باعث امن موندن شما میشه:

  • هر وقت اعلان به روزرسانی امنیتی براتون اومد، بی درنگ نصبش کنین.
  • آنتی ویروس نصب نکنید چون توی لینوکس نیازی بهش ندارین، مگر مواقعی کی با ویندوز فایل به اشتراک میزارین
  • فایروال خودتون رو روشن کنید
  • جز در موارد ضروری، همیشه از مخازن معتبر دانلود کنید
  • جاوا رو بصورت پیش فرض در مرورگرتون خاموش کنید
  • در صورتی که از نرم افزار Wine استفاده میکنید، با حواس جمع اینکارو انجام بدین
  • مهم تر از همه: از عقل سلیم خود استفاده کنید، مهم ترین تهدید امنیتی معمولا بین کیبورد و صندلیه! 🙂

پیشنهاد میکنم سری به این لینک بزنید: https://wiki.ubuntu.com/BasicSecurity

برای لینوکس هم آنتی ویروس هایی وجود دارند که میتونید نصب و استفاده کنین. عمدتا از این نرم افزار ها برای اسکن USB-disk و دیسک های جانبی که ممکنه در محیط ویندوز آلوده باشند استفاده میکنیم اما در کل میتونیم با استفاده از این نرم افزار ها خود سیستم لینوکسی رو هم اسکن کنیم.

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

لینک مشاهده ویدیو

امیدوارم این پست یا ویدیو بدردتون بخوره و چیزی ازش یادگرفته باشین، لطفا نظرتون رو در مورد این ویدیو تو بخش کامنت ها برام بنویسید و اگر این ویدیو رو دوست داشتید لایک کنید تا در یوتیوب امتیاز بهتری بگیریم و این ویدیو برای دیگران هم پیشنهاد بشه. مرسی از همه ی شما که کانال من رو دنبال می کنید و دنبال یادگیری و توسعه دانش خودتون هستید.

خب حالا بگید ببینم، آیا لینوکس ویروس میگیره؟ 🙂

همه چیز در مورد IP address

مقدمه

برای اینکه بتونیم بهتر با دستگاه های دیجیتال مثل کامپیوتر ها کار کنیم، نیازه که یه مقدار درک درستی از مفاهیم پایه و اساسی مرتبط با اون داشته باشیم. توی این سری ویدیو ها، ‌من قصد دارم این مفاهیم رو به شکل خیلی ساده و روون و از طرفی کوتاه، به شما آموزش بدم. پس ادامه ویدیو رو با من همراه باشید تا در مورد آدرس IP، چیز های مهم و کلیدی که شاید نمیدونستید رو بهتون بگم…

IP address چیه؟

ip address یه شناسه ی یکتاست که به هر دستگاه دیجیتالی که به یه شبکه کامپیوتری با پروتکل اینترنت وصل میشه، داده میشه برای اینکه بشه به این دستگاه ها مراجعه کرد. یه جورایی شبیه کدپستی تو کشور های درست درمونه که نظمی داره و با استفاده از اون کد، دقیقا یه خونه رو میشه مکان یابی کرد یا به اونجا پیام فرستاد.

آدرس IP رو میشه بر اساس چند معیار مختلف دسته بندی کرد، از جمله: ورژن، سطح دسترسی و متغیر بودن. از نظر ورژن IP، ما دو نسخه ی معروف و رایج داریم که امروزه استفاده میشه: v4, v6. از نظر سطح دسترسی ما آی پی های عمومی یا اصطلاحا Public IP و آی پی های خصوصی یا Private IP داریم. و اما سومین معیار دسته بندی که همون متغیر بودن هست. از این حیث ما آی پی آدرس های ثابت یا static داریم و آی پی های پویا یا همون Dynamic.

IP v4

آی پی ورژن چهار، رایج ترین ورژن آی پی در حال حاضر هست که در کل ۳۲ بیته و از چهار قسمت یا Octets که هر کدومش ۸ بیت هست و میتونه یه عدد از ۰ تا ۲۵۵ باشه تشکیل شده و بین این قسمت ها یه دات به عنوان جدا کننده قرار داره.

از اونجایی که آی پی ورژن چهار ۳۲ بیت طول داره و گفتیم آی پی آدرس ها باید یکتا یعنی غیر تکراری باشند، پس در کل ما فقط میتونیم ۲۳۲ آی پی یکتا داشته باشیم که میشه ۴,۲۹۴,۹۶۷,۲۹۶ یعنی حدود چهار میلیارد و اندی.

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

IP v6

با توجه به محدودیتی که در تعداد آی پی های ورژن چهار داشتیم، سازمان Internet Engineering Task Force (IETF) در دسامبر ۱۹۹۸ این نسخه رو به عنوان پیش نویس استاندارد ارایٔه داد و در ۱۴ ژوئیه ۲۰۱۷ به عنوان یه استاندارد اینترنتی تصویبش کرد.

S. Deering; R. Hinden (July 2017), “Internet Protocol, Version 6 (IPv6) Specification”, Ietf Request for Comments (RFC) Pages – TestInternet Engineering Task Force (IETF), ISSN2070-1721RFC8200 Obsoletes RFC 2460.
Siddiqui, Aftab (17 July 2017). “RFC 8200 – IPv6 has been standardized”. Internet Society. Retrieved 25 February 2018.

در نسخه ۶ استاندارد آی پی، ما با ساختار پیچیده تری مواجهیم. این نوع آی پی ها ۱۲۸ بیتی هستند و از ۸ بخش ۱۶ بیتی تشکیل شده اند و با علامت دو نقطه (:)، هر بخش از قسمت دیگه جدا میشه.

قبل از اینکه یک مثال از آی پی ورژن ۶ به شما بزنم، میخوام یه توضیح خیلی مختصری درباره پایه اعداد بدم که الان بکارمون میاد. در IPv4 که قبلا در موردش صحبت کردیم، اعداد بر مبنای ۱۰ بودند که ما بهشون اعداد دسیمال میگیم و در زندگی روزمره ازشون استفاده میکینم.

اما در این نوع آی پی (یعنی ورژن ۶) از اعداد در مبنای ۱۶ یعنی هگزادسیمال استفاده شده. در نتیجه ما علاوه بر اعداد در بازه ی ۰ تا ۹، یه سری حروف از A تا F هم داریم. پس هر بخش آی پی در این ورژن میتونه یه عدد بین ۰۰۰۰ تا FFFF باشه.

به عنوان مثال این یه آی پی ورژن ششه:

همونطور که تو تصویر میبینید این یه آی پی ورژن ۶ که با دو نقطه، هشت بخش مختلفش از هم جدا شده. حالا اینو ببینید:

عجیب شد نه؟ ما که گفتیم هشت بخش! چرا این یکی کمتره؟ جوابش سادست، هر وقت توی یکی از بخش های آی پی ورژن ۶، ۰ داشتیم میتونیم اون بخش رو نزاریم و حذفش کنیم. همین اتفاقی که تو این مثال ما افتاده.

اما حالا رسیدیم به بخش جالب ماجرا. قبلا گفتیم که در آی پی ورژن چهار، ما ۲۳۲ آی پی یکتا داریم که معادلش رو هم گفتیم میشه ۴,۲۹۴,۹۶۷,۲۹۶ اما در ipv6 ما ۲۱۲۸ آی پی یکتا داریم که میشه عددی خیلی خیلی خیلی بزرگ. در نتیجه حالا حالا ها نیازی به استاندارد جدید برای آی پی، حداقل از نظر تعداد نخواهیم داشت.

حالا برای اینکه این مطالبی که گفتیم، تو ذهنمون بمونه یه مرور خیلی سریع و کلی می کنیم:

…..

آی پی خصوصی (private)

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

شما وقتی به مودم خونتون وصل میشین، اون مودم به دستگاهی که باهاش به شبکه وصل شدین یه آی پی اختصاص میده و البته هر بار که از شبکه خارج میشید، دیگه اون آی پی رو دستگاهتون نیست، چون شما جزوی اون اون شبکه نیستید.
ممکنه هر بار که به مودم وصل بشین یه آی پی جدید از مودم بگیرین که البته این کار توسط پروتکل DHCP بصورت خودکار انجام میشه ولی شما میتونید روی سیستم خودتون تنظیماتی انجام بدین که یه آی پی خصوصی ثابت داشته باشین و هر بار تغییر نکنه.

البته در مورد ثابت بودن و متغیر بودن آی پی ها و مزایا و معایب هر کدوم بعدا بیشتر صحبت می کنیم و نکاتی رو به صورت عملی نشونتون میدم.

برای اینکه بفهمیم یه آی پی از نوع خصوصیه یا نه، کافیه بدونید یه بازه ای از آی پی ها برای شبکه های خصوصی در نظر گرفته شده. اگر با این بازه آی پی ها آشنا باشید میتونید به راحتی این موضوع رو تشخیص بدین!

۱۹۲٫۱۶۸٫۰٫۰ – ۱۹۲٫۱۶۸٫۲۵۵٫۲۵۵
۱۷۲٫۱۶٫۰٫۰ – ۱۷۲٫۳۱٫۲۵۵٫۲۵۵
۱۰٫۰٫۰٫۰ – ۱۰٫۲۵۵٫۲۵۵٫۲۵۵

آی پی عمومی (public)

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

در واقع هر کسی که این آی پی رو داشته باشه در صورتی که سیستم شما حتی یه در ورود و آسیب پذیری یا همون Vulnerability داشته باشه هم میتونه به سیستم شما نفوذ کنه،‌از دسترسی به فایلها، میکروفون و وبکم بگیر تا شنود دیتا و… . الان بحثمون در مورد امنیت نیست در نتیجه زیاد وارد جزییات این مسٔله نمیشم اما فقط میخواد بدونید که IP public خودتون رو به هر کسی ندین و حتما فایروالتون رو روشن بزارید و یه سری کار دیگه که باعث میشه امنیت بیشتری داشته باشید ولی از اونجایی که با موضوع اصلی ویدیو زاویه داره پس تو یه ویدیو دیگه در آینده درموردش حرف میزنیم.

آی پی ثابت (static)

static ip یا آی پی ثابت که بعضی وقت ها بهش IP valid هم میگن یه نوع آی پیه که همیشه ثابت میمونه و حتی شما اگر دستگاهتون رو خاموش و روشن کنید یا از شبکه خارج بشید و برگردین، حتی بعد از گذشت روزها، ماه ها و حتی سالها… البته به شرطی که به همون شبکه وصل شین! یعنی چی؟ بزارین با یه مثال قضیه رو روشن کنیم. فرض کنیم شما برای شبکه خونتون آی پی ثابت خریدین، خب منطقا هر وقت به اون شبکه وصل بشین، همون آی پی آدرس ثابت رو خواهید داشت اما وقتی لپ تاپت رو برمیداری و میری بیرون مثلا تو یه کافه ای به شبکه اونجا وصل میشی، دیگه اون آی پی ثابت رو روی لپ تاپت رو نخواهی داشت!

اینم بگم که ISP ها آی پی ثابت ارائه نمیدن مگر اینکه خودتون با هزینه خودتون بیاید ازشون آی پی ثابت بخرین.

اما استفاده از این نوع آی پی چه مزایایی داره؟

  • راه اندازی سرور، هاست وب سایت و…
  • دسترسی از راه دور
  • راه اندازی FTP و…

آی پی پویا (dynamic ip)

غالبا آی پی ها از این نوع هستند، خصوصا تا جایی که میدونیم ISP های ما آی پی های داینامیک یا پویا به کاربرانشون میدن و خرید آی پی ثابت معمولا هزینه ای جداگانه داره. در این نوع آی پی شما وقتی به یه شبکه وصل میشین، پروتکل DHCP یا Dynamic Host Configuration Protocol یه آی پی به شما اختصاص میده که قاعدتا هر بار میتونه متفاوت باشه.

چطور ip address خودمون رو پیدا کنیم؟

اول از همه قاعدتا باید دونید که وقتی میگیم آدرس آی پی خودمون رو در بیاریم منظورمون هر دو نوع Public و Private هست. برای هر کدومش هم راه های مختلفی هست که من سعی میکنم چند تاش رو بگم.

فهمیدن آدرس آی پی خصوصی

اگر از ویندوز استفاده می کنید، با استفاده از دستور ipconfig میتونید آدرس آی پی خودتون در شبکه محلی که بهش Private IP address میگن رو در بیارید. اما اگر از سیستم عامل های یونیکس بیس مثل لینوکس و مک استفاده می کنید میتونید با استفاده از دستور ifconfig یا ip addr show این کار رو انجام بدین. البته از طریق پنل تنظیمات مودم هم آی پی تک به تک دستگاه های متصل به مودم شما و یه سری جزئیات دیگه ازشون قابل مشاهده و مدیریته!

فهمیدن آدرس آی پی عمومی

راه های مختلفی برای بدست آوردن آدرس آی پی هر دستگاه وجود داره از جمله اینکه توی گوگل سرچ کنیم what is my ip و معمولا خود گوگل نتیجه یکی از سایت ها رو در کادر اول صفحه نشون میده. اما سایت هایی هم هستند که مخصوص انجام این کارند و حتی جزییات بیشتری از جمله اینکه به چه سرویس دهنده اینترنتی وصل هستید و موقعیت جغرافیایی نسبی رو بهتون میدن. از جمله میشه به سایت whatismyipaddress.com و whatismyip.com اشاره کرد.

چطوری IP ثابت داشته باشیم؟


تنظیم آی پی ثابت در ویندوز و لینوکس متفاوته، پس در هر دو سیستم عامل نشونتون میدم چطوری این کار رو انجام بدین.
اول بریم سراغ لینوکس چون من بیشتر دوستش دارم 🙂

برای تنظیم آی پی ثابت در لینوکس میتونید از بخش تنظیمات wifi، روی دکمه تنظیمات وای فای مورد نظر کلیک کنید و از قسمت IPv4 متد رو روی manual تنظیم کرده و آدرس آی پی مورد نظرتون رو وارد کنید. فراموش نکنید که Gateway رو اگر درست وارد نکنید به مشکل میخورید.

در ویندوز هم این کار به سادگی قابل انجامه، کافیه از منوی استارت، Control Panel رو باز کنید، به بخش Network and Internet برید، روی Network and Sharing Center کلیک کنید، روی Change adapter settings کلیک کنید و سپس روی Wi-Fi یا Local Area Connection مورد نظر کلیک راست کنید و Properties رو انتخاب کنید.
گزینه Internet Protocol Version 4 (TCP/IPv4) رو انتخاب کرده و گزینه Properties رو بزنید. بعدش روی Use the following IP address بزنید و اطلاعات IP، Net Mask و Gate Way خودتون رو وارد کنید.

بررسی تغییرات php8

دوستان و همراهان عزیز به قسمت هفتم جت کد کست خوش اومدین، این قسمت میخوایم به بررسی تغییرات ورژن جدید PHP یعنی PHP8 بپردازیم. همونطور که سایت خود PHP هم گفته، این نسخه، یه Major Update هست که تغییرات زیادی شامل امکانات جدید و بهینه سازی رو در بر میگیره.

قبل از اینکه بخوایم شروع کنیم به بررسی این تغییرات، بزارین یه توضیح خیلی مختصر راجع به خود این زبان برنامه نویسی ارائه بدیم برای دوستانی که آشنایی ندارن. PHP که مخفف PHP Hypertext Processor هست، یه زبان برنامه نویسی از نوع اسکریپتی و مفسریه و برای بک اند وب هست که با C نوشته شده و توسط Rasmus Lerdorf سال ۱۹۹۴ منتشر شده و یه جورایی سال هاست که سر دسته زبان های بک اند برای توسعه هست و الانی که دارم این اپیزود رو ضبط میکنم ورژن ۸٫۰٫۲ هم ریلیز شده و در دسترسه.

خب حالا بریم سراغ اصل مطلب یعنی بررسی تغییرات PHP8. تو این ورژن ما شاهد تغییرات زیادی در هسته این زبان هستیم که منطقیه چون همونطور که کمی قبل گفتم این یه Major update هست.

از جمله این تغییرات میشه به:

Union Type، NamedArguments, Match Expressions، constructor Property Promotion، Nullsafe Operator, Weak Maps Just In Time Compilation که اهمیت فوق العاده ای در بهینه شدن سرعت این ورژن پی اچ پی داره و حتما بهش می پردازیم.

Named arguments

خب بیاین با Named arguments شروع کنیم. اول از همه بگم که احتمالا میدونید این چه فیچریه چون تو پایتون هم ما داشتیم. در واقع Named arguments همون Keyword parameter هست که ما توی توابعمون میتونیم تعریف کنیم هر آرگومان یا پارامتر چه اسمی داره و بعد موقع صدا زدن اون تابع، مقدایر آرگومان ها رو جلو اسمشون می نویسم.

این فیچر واقعا Life Saver هست و من نمیدونم چرا قبلا اینو نداشتیم. برای من یکی که این قابلیت به تنهایی کافیه برای اینکه پروژه رو به سمت PHP8 هل بدم جلو. چون میدونید دیگه مثلا یه تابع سه تا آرگومان داره که وسطیش اختیاریه! قبلا موقع صدا زدن همچین تابعی باید هر سه آرگومان رو وارد میکردیم و مثلا وسطی رو میتونستیم Null یا Empty String بزنیم و تو فانکشن اینو هندل میکردیم. اما الان میشه آرگومان های اختیاری رو اصلا وارد نکرد و به اصلاح به جای Positional Argument که میگه باید پارامتر ها رو به ترتیب وارد کنی، از روش Named arguments استفاده میکنیم.

مثال PHP7:

htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);

مثال PHP8:

htmlspecialchars($string, double_encode: false);

Constructor property promotion

Constructor property promotion چیه؟ این قابلیت به ما این امکان رو میده که ویژگی های یک کلاس رو با کد کمتری تعریف و مقدار دهی کنیم. به عنوان مثال فرض کنید ما یه کلاس User داریم که یک ویژگی داره به اسم isAdmin و میخوایم پیش فرض false باشه اما اگر موقع ساختن نمونه از کلاس مقداری برای آرگومان isAdmin وارد شده بود، اون مقدار در پراپرتی isAdmin ذخیره بشه.

مثال PHP7:

class User {
  public bool $isAdmin;

  public function __construct(
    bool $isAdmin = false
  ) {
    $this->isAdmin = $isAdmin;
  }
}

مثال PHP8:

class User {
  public function __construct(
    public bool $isAdmin = false
  ) {}
}

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

Union types

به کمک این ویژگی جدید میتونیم چند نوع داده برای یک متغیر تعریف کنیم و اگر نوع داده ی اون متغیر هیچ کدوم از اونها نبود، خطای از نوع Type Error میده. البته قبلا هم میتونستیم این کار رو انجام بدیم اما با استفاده از PHPDoc annotation. الان میشه خیلی راحت میشه از این قابلیت استفاده کرد. چطوری؟ فرض کنید میخایم ویژگی وزن در کلاس User از نوع Int یا Float باشه، برای اینکار میایم از این سینتکس استفاده می کنیم:

class User {
  public function __construct(
    private int|float $weight
  ) {}
}

Match expression

مچ اکسپرشن ها تقریبا شبیه همون Switch ها هستند اما با یه سری تفاوت. شما میتونید رو یه چیزی سوییچ کنید و بگید اگر مقدارش فلان چیز بود این چیز رو برگردون. اما دیگه break نمیخواد و اینکه به ازای هر مچ فقط میتونید یک خط کد بنویسید. اما این خیلی جا ها بدرد میخوره. یه مقال واضحش تبدیل روز های هفته از عدد به متنه. یادتون نره که خروجی این تابع match رو میشه echo کرد، توی یه متغیر ریخت و یا return کرد، چون این یک expression حساب میشه.

echo match(0){
    ۰ => 'شنبه',
    ۱ => 'یکشنبه',
    ,...
};
// نتیجه این کد نمایش "شنبه" هست

Nullsafe operator

عملگر نال سیف یکی از فیچر هاییه که کار رو برای توسعه دهنده ها راحت میکنه. فرض کنید شما میخواهید کشور زندگی کاربر رو بگیرید، قبلا برای اینکار اول چک می کردیم آیا $user نال هست یا نه، اگر نال نبود حالا اگر فیلد کشور داخلش هم نال نبود از متغیر $user، آدرس رو و از آدرس، کشور رو میگرفتیم.

مثال PHP7:

if ($user !== null) {
    $address = $user->getAddress();

    if ($address !== null) {
      $country = $address->country;
    }
  }

مثال PHP8:

$country = $user?->getAddress()?->country;

Non-capturing catches

تا قبل از PHP8 اگر میخواستیم به Exception رو بگیری باید توی یه متغیر میریختی مثلا به اسم $error یا $exception، حتی اگر از اون متغیر استفاده هم نمیکردی و صرفا برای هندل کردن خطا بوده. اما الان با استفاده از قابلیت Non-capturing catches این امکان وجود داره که اگر نخواستی اون متغیر رو نسازی.

مثال PHP7:

try {
    // Something goes wrong
} catch (MySpecialException $exception) {
    Log::error("Something went wrong");
}

مثال PHP8:

try {
    // Something goes wrong
} catch (MySpecialException) {
    Log::error("Something went wrong");
}

Trailing comma in parameter lists

از این به بعد میتونید بعد از آخرین آرگومان داخل تابع هم یه کاما بزارین. چیز خاصی نیست اما خوبه که باشه. تو زبان های دیگه مثل پایتون هم ما همچین چیزی رو داریم.

public function add(
    string $name,
    int $age,
) {
    // کد های بدنه تابع
}

تابع str_contains

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

if (str_contains('Test Hello World Test', 'Hello')) { echo "Found!" }

تابع str_starts_with() و str_ends_with()

با استفاده از تابع str_starts_with() میتونیم چک کنیم ابتدای یک رشته، با یه رشته خاصی شروع میشه یا نه. و تابع str_ends_with() هم این کار رو به نسبت آخر یک رشته انجام میده. خروجی این دو تابع Boolean هست و میتونید ازش توی دستورات شرطی و… استفاده کنید.

مثال PHP8:

str_starts_with('haystack', 'hay'); // true
str_ends_with('haystack', 'stack'); // true

از اونجایی که لیست تغییرات این نسخه خصوصا چیزای جزیی زیادن، به سری از تغییرات جزیی و بهبود ها رو به صورت لیست وار مرور میکنیم:

  • Stable sorting
  • Saner string to number comparisons
  • Saner numeric strings
  • Stricter type checks for arithmetic and bitwise operators
  • Concatenation precedence
  • The @ operator no longer silences fatal errors
    روی پروداکشن اگر display_errors=Off رو تنظیم کنید تا اگر قبلا خطایی با @ مخفی شده بوده، الان هم نمایش داده نشه!
  • Consistent type errors
  • New mixed type
  • New static return type

خب از اونجاییکه حرفمون یکم طولانی شد، یه break بدیم و برگردیم راجع به JIT صحبت کنیم.

JIT (The Just in Time Compiler)

JIT یه تکنولوژیه که مثل یه مفسر عادی در زمان اجرا کد ها رو به زبان ماشین تبدیل میکنه اما با این تفاوت که اگر دید یه تیکه کدی چند بار فراخوانی شده سعی میکنه اون رو کش کنه تا پروفرمنس بهتری داشته باشیم و این فرایند بهینه بشه. در نتیجه تکه کد های از قبل کامپایل شده رو در صورتی که تغییر نکرده باشند در زمان اجرا استفاده می کنه.

ظاهرا JIT قراره پروفرمنس بهتری داشته باشه اما در عمل برای نرم افزارهای تحت وب مثل وردپرس، تفاوت چشمگیری در سرعتشون دیده نمیشه. اما JIT بخاطر ساختارش مزایای دیگه ای هم داره و در آبنده میتونه فرصت های خیلی خوبی رو برای زبانی مثل PHP ایجاد کنه. از جمله اینکه Cross platform هست و از این جهت که PHP ادعا میکنه General Purpose هست خب میتونه برای مفید باشه و بتونه از این طریق برای فضای خارج از وب هم خودش رو بهینه تر کنه.

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

امیدوارم مطالب این پادکست و مقاله به کارتون بیاد. مواظب خودتون باشین و پیش به سوی PHP8!

لینک ها و منابع

«من» و جریان متلاطم زندگی

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

اما «من» شاید ثابت ترین موجودی است که نفی کردنش دشوار تر از اثباتش است. چیزی که در طول تمام وجودمان، به اندازه ی تمامی لحظاتی که بوده ایم و شاید خواهیم بود جان گرفته و اکنون قد علم کرده است. ما از «من»ِ خویش چه می دانیم. من وقتی از خودشناسی حرف می زنم منظورم شناخت همین «من» است.

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

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

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

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

گاهی چنان شتاب می گیرم که دیگر لذتی نمی ماند از تجربه کردن لحظات زندگی. همه اش را مات و تار میبینیم. همیشه عجله داریم که به جایی برسیم و غافل از مسیر فقط به مقصد فکر میکنیم. به نتیجه فکر میکنیم و همین اذیتمان می کند.

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

سبک زندگی مورد علاقه من

Digital Nomad رو میتونیم یه سبک زندگی تعریف کنیم که آدم ها با تخصص ها مبتنی بر دنیای دیجیتال (برنامه نویسی و…) میتونن کار ریموت داشته باشن یا فریلنسر باشند و درآمدشون منوط به کار در یک محیط خاص در زمان خاصی نباشه.

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

تقریبا از سال ۱۳۹۸ کار فریلنسری رو شروع کردم. اوایل هر چند ما فقط یکی دو تا پروژه پیش میومد که کفایت نمی کرد اما ادامه دادم. الان راضیم اما هنوز خیلی راه دارم تا به اون هدفم که جریان داشتن در زندگی و Carpe Diem هست برسم. اما معتقدم رسیدن به مقصد به کنار؛ خود مسیر رشد و پیشرفت و چالش هایی که داره خودش یه چیز دیگست.

حالا جدای از ماجرای خودم و آرمان هایی که برای زندگیم دارم و یجورایی برای خیلی از اطرافیانم اصلا قابل قبول نیست (But i don’t care 🙁 ) میریم سراغ خود بحث Digital Nomad که چیه و به چه شکل کار میکنه 🙂 .

چند نکته مهم که در ویدیوها هم به وضوح دیده میشه:

  • قرار نیست همیشه خیلی راحت باشیم
  • برای بدست آوردن زندگی مورد علاقمون باید تلاش بکنیم
  • شما یه لپ تاپ و اینترنت میخوای + مهارت هایی که داری و کار ریموت. ممکنه کارتو از دست بدی و نیاز باشه کار دیگه ای بدست بیاری. (بنظرم قبل از شروع باید یه رزومه قابل قبول شامل نمونه کار و تجربیات خوب داشت تا بشه راحت در هر جای دنیا کار پیدا کرد).
  • هوش اجتماعی خوبی باید داشته باشیم. در کل با جامعه ارتباط خوبی بتونیم برقرار بکنیم و خیلی مهمه که به یادگیری زبان ها علاقه مند باشیم. فرهنگ های مختلف رو بتونیم بررسی بکنیم و برامون قابل قبول باشه. (منطورم لزوما درست پنداشتن نیست بلکه اساسا سعی کنیم در یک فضایی باشیم که زیاد قضاوت نکنیم و بیشتر ورودی داشته باشیم)
  • هوش مالی
    لازمه که بتونیم برای امنیت مالی و دوام داشتن کارمون برنامه ریزی بکنیم و به عنوان مثال ورودی مالیمون رو یه ارز دیجیتال بکنیم و از اون طریق هم بتونیم سود داشته باشیم یا کشور های مقصدمون رو بر اساس شرایط خودمون و شرایط اقتصادی و… آن محل انتخاب کنیم. مثلا کشور های آسیایی خیلی ارزون تر هست برای فردی که در آمد دلاری یا یورو داره.
  • داشتن نگاه مثبت و تفکر خلاقانه
    چیزی که آدم ها رو به زندگی کردن تشویق میکنه.

اینم در نظر داشته باشید که وقتی همچنین ترم هایی رو توی یوتیوب یا جا های دیگه جست و جو کنیم خیلی وقت ها آدم ها میخوان شو آف بدن که ما اینیم و داریم کیف میکنیم و… و نکات منفی و سختی ها رو نمیگن.

همه ی شرایط رو باید در نظر گرفت؛ آمادگی داشت و کم کم جلو رفت.

امیدوارم با یه لایف استایل ادریس پسند 🙂 آشنا شده باشید.

کاربرد واقعی   در HTML

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

None Breaking Space یعنی فاصله ای که نمیشکنه یه این معنا که وقتی از &;nbsp; بین دو کلمه استفاده می کنیم؛ اگر برای یه کلمه جا نشد هر دو کلمه با هم میرن خط بعد. کاربرد خیلی زیادی داره خصوصا برای جاهایی که دو کلمه با هم خیلی ربط دارند مثل ۱۰ KM که اگر KM بره خط بعد ما در لحظه اول شاید نفهمیم چی به چیه و نیازه این ها کنار هم باشند. پس میایم از   استفاده می کنیم تا اگر صفحه کوچیکتر شد یا به هر دلیل دیگری جا برای یه کلمه نبود اون کلمه دوم هم همراهش باشه و بره خط بعدی.

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

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

اگر دوست داشتین خوشحال میکنم با اشتراک گذاری لینک این صفحه یا حمایت مالی به من برای ادامه این آموزش های رایگان انرژی بدین.

بهترین فریمورک های PHP در سال ۲۰۲۰

مقدمه

در این مقاله میخوایم به معرفی بهترین فریمورک های زبان PHP بپردازیم. این رو در نظر داشته باشید که وقتی میگیم بهترین، در واقع به معرفترین و رایج ترین ها اشاره داریم. در این بین سعی می کنیم به داده های آماری و منابع موثق در این حوزه استناد کنیم.

بد نیست بدونید که PHP یکی از معروفترین و بهترین زبان های برنامه نویسی تحت وبه. سابقه ی طولانی و درخشانی هم داره و توسط Rasmus Lerdorf سال ۱۹۹۴ ساخته شده.

فریمورک (Framework) چیست؟

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

تفاوت فریمورک و کتابخانه (Library)

بعدا به صورت مفصل تر در یه مقاله مجزا در این مورد صحبت می کنیم اما الان بصورت مختصر میتونیم بگیم کتابخونه ها و فریمورک ها جفتشون کد هایی هستند که توسط برنامه نویس های دیگه نوشته شده اند و قابلیت استفاده مجدد دارند اما بینشون تفاوت هم هست. یکی از مهم ترین تفاوت های بیت Framework و Library اینه که کتابخونه ها رو شما صدا میزنید و از توابع و کلاس هایی که دارند استفاده می کنید اما فریمورک یک چارچوبه که شما کد های خودتون رو توش قرارمی دین و باید قوانین (Convension) ها و پترن های اون فریمورک خاص رو رعایت کنید.

چرا باید از فریمورک ها استفاده کنیم؟

دلایل زیادی وجود داره که شما رو به عنوان یک برنامه نویس مجاب میکنه به سمت استفاده از فریمورک ها برین از جمله این دلایل به موارد زیر میتونیم اشاره بکنیم:

  • رعایت اصول یک Design Pattern خاص
  • استفاده از یک معماری مناسب
  • کد نویسی تمیز و توسعه پذیری بالا و سریعتر
  • سرعت و امنیت بهینه تر

بهترین فریمورک های PHP کدامند؟

Laravel

لاراول بهترین و معروفترین فریمورک PHP در سالهای اخیره که توسط Teylor Otwell در سال ۲۰۱۱ معرفی شده و اکنون بیشترین امتیاز رو در بین فریمورک های PHP در گیت هاب داره. از جمله دلایل محبوبیت زیاد لاراول میتونیم به سرعت، امنیت، توانایی هندل کردن نرم افزار های بزرگ و سادگی پیاده سازی عملیات و ویژگی هایی مانند Routing، پیاده سازی سیستم احراز هویت، Caching و کار با Session هاست.

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

با استفاده از ابزار Google trends فریمورک های معروف PHP رو با هم مقایسه کردیم و نتیجه رو شما در عکس بالا میتونید مشاهده کنید. همونطور که می بینید Laravel در پنج سال گذشته رشد چشمگیری داشته.
لینک به منبع

امروز که دارم این مقاله رو برای شما می نویسم ریپازیتوری این فریمورک در گیت هاب بیش از ۶٫۶K ستاره داره.
لینک منبع

CodeIgniter

کدایگنایتر هم یکی از فریمورک متن باز و معروف PHP هستش که به سبک بودنش معروفه (کلا حدود ۲ مگابایت حجم داره) و کارکردن باهاش سادست. از جمله مهم ترین ویژگی های این فریمورک سریع بودن و داشتن مستندات خوبه که خصوصا برای افرادی که میخوان تازه شروع بکنن عالیه.

Symfony

سیمفونی قدیمی ترین فریمورک این لیسته که سال ۲۰۰۵ توسط Fabien Potencier منتشر شده. این فریمورک از معماری (MVC(Model View Controller استفاده می کنه و استاندارد های PHP رو رعایت میکنه.

نصب و راه اندازی آسان سیمفونی یکی از مزایاش بحساب میاد، همچنین برای راه اندازی وب سایت ها و نرم افزار های تحت وب بزرگ مناسبه. جالبه بدونید که سیمفونی و لاراول خصوصیات مشترک زیادی با هم دارند.

نکته: بنظرمیاد درحالیکه Laravel توجهش رو به ساده کردن پروسه ها حتی برای توسعه دهنده های حرفه ای داده؛ Symfony یک مقدار برای توسعه دهنده های مبتدی سخت تر باشه.

CakePHP

برای نصب این فریمورک همین کافیه که فایلهاش رو روی هاستتون کپی کنید. آخرین ورژن این فریمورک تا الان (مرداد ۱۳۹۹) ۴٫۰ هستش که تغییرات زیادی رو اعمال کرده. کیک پی اچ پی دارای مستندات خیلی خوب و روونیه که اگر نیاز داشتید میتونید از وب سایت رسمیش به قسمت Documentation مراجعه کنید.

جمع بندی

در کل هر فریمورکی مزایای خودش رو داره و اگر به اندازه کافی بشناسیمشون میتونیم در پروژه ی مناسب خودش ازش استفاده کنیم اما یادمون نره که لاراول تقریبا معروفترین و محبوبترین فریمورک برای php که نشون دهنده قدرت و برتری اونه.

امیدوارم این مقاله براتون مفید واقع بشه. اگر نظری یا پیشنهادی داشتید میتونید در قسمت نظرات مطرح کنید یا به ایمیل من به نشانی edris.qeshm2@gmail.com بفرستید.

برای مشاهده ی مقالات مشابه به صفحه ی مقالات وب سایت مراجعه کنید.

گرفتن قیمت دلار با پایتون

امروز با استفاده از پایتون و کتابخونه ی selenium یک اسکریپت برای web scrapping و گرفتن قیمت دلار با پایتون به صورت لحظه ای می نویسیم. این اسکریپت رو میتونید روی یک کرون جاب بزارید تا هر چند وقت یکبار اجرا بشه و نتیجه ی فایل خروجی که حاوی قیمت هست به روز رسانی بشه یا اینکه کل کد ها رو یه حلقه ی بی نهایت بزارین و بعد از هر بار اجرا sleep بزارین تا برنامه چند لحظه مکث بکنه.

از این اسکریپت برای گرفتن قیمت دلار با پایتون میتونید استفاده کنید اما پیشنهاد میکنم اگر بصورت جدی میخواین ازش استفاده کنین در یه جایی که نیازه هر دقیقه قیمت به روز بشه بهتره از یک api خوب استفاده کنین که خیلی سریعتره یا اینکه یه طوری مرورگر رو headless بالا بیارین و جاوا اسکریپت و css ها و کل asset های دیگه رو بارگزاری نکنه و سریع لود بشه.

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

زندگی؛ کرونا؛ قرنطینه و یک عدد برنامه نویس

یکمی درباره ی زندگی در زمان ویروس کرونا و قرنطینه

زندگی نزیسته؛ چیستی و چگونگی گزاره ی زندگی کردن

مقدمه

زندگی نزیسته یعنی زمانی که ما در حال به صورت آگاهانه و برای خویشتن سپری نکرده ایم. این تعریف خودم از «زندگی نزیسته» است هرچند فکر می کنم چندان نیازی به ارائه ی یک تعریف دقیق برای یک همچنین موضوعی که بشدت نسبی است مثل خیلی چیز های دیگر ضروری نیست.

فکر میکنم بسیار زیاد است همچنین زمان هایی. زمان هایی که مرده اند مثل همین حالا. کلا شاد بودنُ لبخند زدن و دوست داشتن و این جور چیز ها نمیگم بدن نه وا؛ خیلی هم خوبن و هم نیاز هستند و هم بر طبق معتقدات ما (یا به تعبیری من) هستند اما زندگی کردن را و شیوه ی درست زندگی کردن را باید بیاموزیم.

اما چگونه و از چه کسی؟

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

وقتی میگویم زندگی زیسته که بر خلاف عبارت «زندگی نزیسته است» منظورم لزوما یک زندگی ایده آل یا کامیابانه (سعی کردم یه کلمه از خودم دربیارم) از دیدگاه متعارف جامعه ی اطراف نیست. اما خیلی وقت ها مثل الان به این مسئله فکر میکنم که چه چیزی انسان را به خوشبختی نزدیکتر می کند.

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

Carpe Diem یه جمله ی لاتینه که تقریبا معنیش میشه یه چیزی تو مایه های در لحظه زندگی کن یا دم را غنیمت بشمر اینم بگم که این جمله رو از کتاب انجمن شاعران مرده کاری از اچ ان کلاین بام یادمه. کتاب جالبی بود. خب این جمله یکی دیگه از پایه های مهم معنای زندگی زیسته یا معنی زندگی کردنه.

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

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

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

آموزگاران زندگی:

  • خودِ تربیت شده
  • کتاب های خوبِ خوب خوانده شده
  • دوست های خوبی که بشود کنارشان نشست و به دور دست ها نگاه کرد و دقایق زیادی سکوت کرد. کسانی که سکوت را بفهمند و ارزش بنهند.
  • روش و چارچوبی برای زندگی: باید جامع و قابل اتکا باشد.

در مورد زندگی نزیسته و چگونه زیستن بعدا در مطلبی دیگر بیشتر مینویسم.

زندگی کنید…

چرا باید به php7 مهاجرت کنیم؟

مهاجرت به php7 از نون شب براتون واجب تر نیست اما بالاخره مهم که هست 🙂 امروز یا امشب (نمیدونم کی میخونینش پس…) میخوایم بار و بندیلمونو برداریم بریم سمت php7 اما اگه آماده نیستید مساله ای نیست چون اولش کلی دلیل میاریم که چرا باید بریم اون سمتی.

خب بزارین با یه داستان یا همچین چیزی بحث رو شروع کنیم…

چند وقت پیش داشتم روی یه پروژه ی تحت وب به عنوان فریلنسر کار می کردم. بک اندش رو با PHP نوشتم در کل بر اساس استاندارد های php7 کد ها رو نوشتم اما روی هاست با PHP5.3 اجرا می شد.

یکی از مشکلاتی که برخوردیم بحث سرعت پردازش بود. با توجه به نوع پروژه (حسابداری تحت وب | صندوقداری) بود، نیاز بود که الگوریتم های محاسباتی داشته باشه و وقتی روی پروداکشن داشتیم با یه سری داده های تستی برای کنترل و آزمایش نرم افزار کار می کردیم متوجه شدیم که سرعت اجرای نرم افزار خیلی کنده.

حتی بعضی وقتا (خصوصا قسمتی که الگوریتم محاسبات روی تعداد زیادی Entry اپلای می شد) سایت time out میداد که مشکلات زیادی درست میکرد.

اولش با بالا برن execution_time توی تنظیمات php.ini هاست دایرکت ادمین تونستیم مقداری قضیه رو بهتر کنیم اما هنوز مسأله سر جاش بود.

راه حل؟ اولش اومدم یکبار الگوریتم رو بررسی کردم تا ببینم میشه کاری کرد که سریعتر اجرا بشه. دیدم چیزی در نیومد.
رفتم سراغ تنظیمات دایرکت ادمین و دیدم که گزینه ای داره برای انتخاب ورژن PHP، ورژن php رو روی ۷٫۳ قرار دادم (الان که مقاله روی مینویسم تا ۷٫۴٫۵ هم اومده که یه سری باگ فیکس و مشکلات امنیتی بوده اما هنوز شرکت روی سرورش نصب نکرده). نتیجه فوق العاده بود.

سرعت اجرا تا حدود ۵۰% بیشتر شد. یعنی دو برابر!

این قضیه موقع انتشار ورژن ۷ گفته شد و تاکید شد که حتما به این ورژن سوییچ کنید. (البته در نظر داشته باشید که یه سری چیز ها هم deprecate شدن و شما باید کدتون رو ریفکتور کنین).

حالا بریم یه سری به تغییرات php7 نسبت به php5 بزنیم.

php7

برخی از ویژگی های php7

Performance بیشتر

یکی از مهم ترین تغییرات این نسخه در مورد پروفرمنس بیشتر این نسخه هیچ شکی نیست و میتونید یه سرچی بزنید و خودتون ببینید که واقعا چقدر نسبت به ورژن قبلی پیشرفت داشته. دلیلش هم استفاده از ورژن جدید Zend Engine هست. اگر نمیدونید Zend Engine چیه اینجا کلیک کنید.

یعنی همین که شما از interpretter جدید تر php استفاده می کنید باعث میشه سرعت سایت یا وب اپلیکیشنتون بره بالا.

As per Zend Technologies, the performance improvement is huge!! Just upgrading to PHP 7 gives enormous performance upgrades. Hence, PHP 7 is often termed PHPNG (PHP – Next Gen) taking the performance of your code to a whole new level.

وب سایت geeksforgeeks

Scalar Type Hints

یعنی شما میتونید به آرگومان های تابع یا متودتون نوع بدین و بگین حتما باید از این نوع باشن. اگر خط زیر رو اول فایلتون بنویسید strict_type فعال میشه و اگر نوع داده ی ورودی با نوع داده ی آرگومان تابع شما همخوانی نداشته باشه خطا میده.

بزارین یه مثال بزنیم. فرض کنید میخوایم یه تابع داشته باشیم برای جمع کردن دو تا عدد صحیح.

<?php
declare(strict_types = 1);
function sum(int $x, int $y)
{
 return $x + $y;
}
$sum = sum("10","20");
?>

از اونجایی که من تعیین کردم که php حساس و سخت گیر باشه در نتیجه به من خطا میده. چون من گفتم ارگومان های a , b باید integer باشن اما خودم رشته بهش دادم. پس ارور میده. در واقع خطایی که بهتون نشون میده چیزی شبیه اینه:

Uncaught TypeError: Argument 1 passed to sum() must be of the type int, string given

تعریف نوع داده ی بازگشتی

اگر با php کار کردین میدونید که توی نسخه ی های قدیمی تر امکان تعریف یک نوع داده بازگشتی برای یه تابع یا متد وجود نداشت و این گاها میتونست یه سری دردسر هایی برای برنامه نویس ها ایجاد بکنه. خوشبختانه توی نسخه ی جدید این امکان وجود داره که نوع داده ای که از یه تابع بر میگرده (return value) رو تعیین کنیم.

به عنوان مثال توی تابع زیر سن رو (یه عد صحیح) میگیریم و چک میکنیم اگر ۱۸ یا بالاتر بود نتیحه رو true بر میگردونیم در غیر اینصورت false برگشت داده میشه:

<?php
function isValid(int $age):bool{
    if($age >= 18){
        return true;
    }
    else{
        return false;
    }
}
?>

در واقع شما میتونید از چهار نوع داده bool, int, string, and float برای return کردن استفاده کنید.

پشتیبانی از اعداد صحیح ۶۴ bit

مدیریت خطا (Error handling)

PHP 7 changes how most errors are reported by PHP. Instead of reporting errors through the traditional error reporting mechanism used by PHP 5, most errors are now reported by throwing Error exceptions.

php.net

طبق گفته ی سایت رسمی خود php؛ شیوه ی گزارش خیلی از خطاها تغییر کرده اند. بجای گزارش ارور ها به شکل قدیمی که تو نسخه های php5 و… میدیدیم؛ بیشتر خطا ها توسط Exception ها میان بالا (به عبارتی).

در این مورد اینجا هم توضیحات خوبی داده شده.

Anonymous Class

کلاس های Anonymous یا ناشناس کلاس هایی هستند که اسم ندارند. تو php7 این امکان وجود داره که با استفاده از کلمه کلیدی new class یه کلاس ناشناس بسازیم.
برای مثال و فهمیدم عمیق این موضوع مقاله ی زیر رو پیشنهاد میکنم:
https://blog.eduonix.com/web-programming-tutorials/learn-working-anonymous-classes-php-7/

عملگر های جدید

عملگر < = > یا space ship operator یه عملگر جدید توی php7 هست و قبلا توی php نداشتیمش. از اونجایی که یه چیز جدیده (جدید به نسبت نسخه های قبل) یکم بیشتر توضیح میدم. بقول خودشون کارش مقایسه ی ترکیبیه. حالا پرسش ما اینه که اساسا combined comparison یا مقایسه ی ترکیبی یعنی چی و چه کاری برای ما انجام میده؟!

نحوه ی کار به این شکله:

اگر هر مقادیر دو سمت (یعنی عملوند ها) با هم برابر بودند ۰ بر میگردونه

اگر مقدار سمت چپ بزرگتر بود ۱ رو بر میگردونه

اگر مقدار سمت راست بزرگتر بود ۱- بر میگردونه

مثال:

<?php
 // Comparing Integers
echo 1 <=> 1; // outputs 0
echo 3 <=> 4; // outputs -1
echo 4 <=> 3; // outputs 1

// String Comparison
echo "a" <=> "a"; // outputs 0 
echo "m" <=> "y"; // outputs -1
echo "y" <=> "c"; // outputs 1
?>

در آخر اینم بگم که یه سری چیز ها بطور کلی از php7 حذف شده اند. مثلا یه سری تگ شبیه asp که میشه یه چیزی شبیه <% و غیره که میتونید اینجا ببیندشون.

منابع:

اگر دوست داشتین میتونید از دسته بندی برنامه نویسی چیز های بیشتری در این باره بخونید یا آموزش هایی رو ببینید.

برای حمایت میتونید کلیک کنید.

بررسی اوبونتو نسخه ی ۲۰٫۰۴

امروز میخوایم در مورد نسخه ی جدید ۲۰.۰۴ اوبونتو صحبت کنیم و به بررسی اجمالی تغییرات و ویژگی های جدیدش بپردازیم.