هیچ محصولی در سبد خرید نیست.

ثبت‌نام

دسته بندی: فناوری اطلاعات

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

مقدمه

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

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

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

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

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

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

https://www.youtube.com/watch?v=oBtpY7NIgdg
لینک مشاهده ویدیو

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

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

همه چیز در مورد 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) در دسامبر 1998 این نسخه رو به عنوان پیش نویس استاندارد ارائه داد و در 14 ژوئیه 2017 به عنوان یه استاندارد اینترنتی تصویبش کرد.

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 هم داریم. پس هر بخش آی پی در این ورژن میتونه یه عدد بین 0000 تا FFFF باشه.

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

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

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

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

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

…..

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

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

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

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

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

192.168.0.0 – 192.168.255.255
172.16.0.0 – 172.31.255.255
10.0.0.0 – 10.255.255.255

آی پی عمومی (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 سال 1994 منتشر شده و یه جورایی سال هاست که سر دسته زبان های بک اند برای توسعه هست و الانی که دارم این اپیزود رو ضبط میکنم ورژن 8.0.2 هم ریلیز شده و در دسترسه.

خب حالا بریم سراغ اصل مطلب یعنی بررسی تغییرات 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){
    0 => 'شنبه',
    1 => 'یکشنبه',
    ,...
};
// نتیجه این کد نمایش "شنبه" هست

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!

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

اعتیاد به فضای مجازی و راهکاری های مقابله با آن

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

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

نحوه برخورد ما با تکنولوژی مهم است!

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

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

ماهیت فضای مجازی

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

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

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

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

نکات مثبت و منفی فضای مجازی

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

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

نکات مثبت

۱. شبکه سازی و توسعه روابط اجتماعی

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

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

Social media gives the illusion of providing real relationships, but without the real life benefits: the feeling of being known and understood; the joy of laughing together; the comfort of being held by a friend when you’re suffering.

منبع: Salt.london

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

۲. در «جریان اطلاعات» جدید قرارگرفتن

برای خیلی از ما که در حوزه های تکنولوژی کار می کنیم بسیار اهمیت داره که بتونیم از جدیدترین اخبار و اطلاعات خبر دار بشیم و Social Medial رو جای راحت و راه درستی می بینیم برای دسترسی به این هدفمون.

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

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

۳. بازاریابی کسب و کار

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

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

نکات منفی

۱. زمان بر و اعتیاد آور

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

همه و همه ی این رویکرد های برنامه ریزی شده توسط شرکت هایی مثل فیسبوک که یکی از بزرگترین غول های نرم افزاری جهان به شمار می رود؛ به صورتی پیاده سازی شده که اصطلاحا User-friendly یا کاربر پسند باشد.

آنها تیم هایی متخصص برای طراحی (UI (User Interface یا همان ظاهر نرم افزار هایشان دارند همچنین افرادی متخصص در زمینه ی UX یا همان تجربه کاربری که تمام سعیشان این است که شما هیچ مشکلی با استفاده از نرم افزار نداشته باشید و… .

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

متاسفانه معمولا ما از انجام این ارزیابی برای خودمان غفلت می کنیم.

you want to return and it’s difficult to leave. And that’s exactly how they designed it

ترجمه: شما میخواهید برگردید (از برنامه خارج بشید)، اما سخته. و این دقیقا شکلیه که برنامه براش طراحی شده. (یعنی شما رو نگه میداره!)

منبع: وب سایت Salt.landon

۲. ایده آلیسم و دپرس کنندگی!

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

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

در نتیجه ی همه ی این اتفاقاتی که میفته ما آدم ها خودمون رو دستی دستی تو یه حلقه ی بینهایتی از مقایسه ها و تفکرات ایده آلیستی میندازیم!

۳. مصرف گرایی

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

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

۴. فیک نیوز ها و اخبار در فضای مجازی

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

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

داستان من و فضای مجازی

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

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

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

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

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

عملا اطلاعات مفیدی که از این دسته بندی از اطلاعات در میاد بسیار کمتر از حجم نامناسب (بر اساس معیار های خودم) اطلاعاتیه که پیشنهاد میشه.

تصمیم گرفتم دیگه تو فضای مجازی فعالیت نکنم!

تصمیم سختی بود؛ اوایل با این وجود که از روی گوشیم حذف کرده بودم هی روی سیستم بالا میاوردم؛ دایرک رو چک میکردم (معمولا پیامی جدیدی نبود 🙂 ) پیچ دوستان و دنبال شوندگان مورد علاقم رو چک میکردم و کلی سرچ میکردم توی Explore …

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

راهکاری هایی برای استفاده مفید از فضای مجازی

در زمان حال زندگی کنید

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

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

بقول شاعر:

از دی که گذشت هیچ ازو یاد مکن فردا که نیامده ست فریاد مکن

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

مدام مقایسه نکنید

وقتی دائم خودمون رو با بقیه مقایسه می کنیم احساس ناخرسندی می کنیم. در دراز مدت با بیشتر و بیشتر شدن این نارضایتی درونی، دچار شناختی «فیلتر ذهنی» میشیم و همچنین خود کم بینی به لیست اشتباهاتمون اضافه میشه.

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

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

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

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

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

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

با خود قرار بگزارید

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

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

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

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

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

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

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

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

https://youtu.be/O0YZSfB8qYE

 

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

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

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

مقدمه

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

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

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

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

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

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

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

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

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

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

Laravel

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

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

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

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

CodeIgniter

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

Symfony

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

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

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

CakePHP

برای نصب این فریمورک همین کافیه که فایلهاش رو روی هاستتون کپی کنید. آخرین ورژن این فریمورک تا الان (مرداد 1399) 4.0 هستش که تغییرات زیادی رو اعمال کرده. کیک پی اچ پی دارای مستندات خیلی خوب و روونیه که اگر نیاز داشتید میتونید از وب سایت رسمیش به قسمت Documentation مراجعه کنید.

جمع بندی

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

 

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

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

ساختار کامپایلر چگونه است؟ کامپایلر چطوری کار میکنه؟

مقدمه

قبل از اینکه در مورد ساختار کامپایلر (Compiler) و روش کار کردنش براتون بگم بزارید یکم در مورد اینکه اصلا کامپایلر چیه بیشتر براتون بنویسم.

کامپایلر چیه؟

کامپایلر نرم افزاری که سورس کد رو از یه زبانی به زبان دیگه تبدیل میکنه که غالبا منظور ما نرم افزاریه که از زبان های سطح بالا (High level Programming language) به زبان هایی سطح پایین مثل اسمبلی ترجمه می کنند.

In computing, a compiler is a computer program that translates computer code written in one programming language (the source language) into another language (the target language).

منبع: PC Mag Staff (28 February 2019). “Encyclopedia: Definition of Compiler”. PCMag.com. Retrieved 28 February 2017.

انواع کامپایلر ها

  • اگر برنامه ی کامپایل شده را بتوان در سستیمی با CPU متفاوت از سیستمی که برنامه در آن کامپایل شده اجرا کرد به آن نوع کامپایلر میگیم Cross-Compiler.
  • De-compiler برنامه ایه که میتونید باهاش برنامه ای رو از زبان سطح پایین به یک زبان سطح بالا ترجمه کنید (یعنی بر عکس مترجم های عادی مرسوم)
  • Source to Source Compiler یا Trans-compiler ها یکی از انوع کامپایلر ها هستند که امکان ترجمه یک کد زبان High level به زبان High level دیگه رو به ما میدن.
  • و…

ساختار کامپایلر ها

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

Lexical Analyzer

Lexical Analyzer در واقع به معنی واژه یابه و بهش scanner هم میگن که فاز ابتدایی کامپایلر هست. در این مرحله یک سری از خطاها هم که خطاهای Syntax هستند کشف میشن. کامنت ها و فواصل اضافی هم در همین مرحله کاملا حذف میشن و نتیجه میره به مرحله بعد. تو این مرحله کد های از سمت چپ به راست کاراکتر به کاراکتر خونده میشن و به شکل یک سری توکن معنی دار در میان که به مراحل بعد کار کامپایلر کمک می کنند.

کار های اصلی که در این مرحله اتفاق میفته:

  • کامنت ها و فواصل اضافی رو حذف میکنه
  • شناسایی کلمات بر اساس متن سورس کد ورودی
  • دسته بندی کلمات به شناسه های از پیش رزرو شده (مثل if)، ثوابت و…
  • توکن هایی که جزو زبان نیستند رو تشخیص میده

مثال: فرض کنید به کامپایلر کد زیر رو به عنوان ورودی رو بدیم:

;int y = 10

خروجی ما در مرحله اول کامپایلر به این شکله:

Keyword int
Identifier y
Assignment Operator =
Number 10
مثالی از توکن ها
Token name Sample token values
identifier x, color, UP
keyword if, while, return
separator }, (, ;
operator +, <, =
literal true, 6.02e23, "music"
comment /* Retrieves user data */, // must be negative

Syntax Analyzer

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

با کمک توکن های ساخته شده در مرحله قبل، بر اساس یک سری قوانین که برای هر زبان برنامه نویسی ممکنه متفاوت باشه Parse Tree رو میسازه.

یک مثال از Parse Tree

کار های اصلی که در این مرحله اتفاق میفته:

  • گرفتن توکن ها از Lexical Analyzer
  • بررسی صحت کد از جنبه ی Syntax
  • گزارش دادن ارور های سینتکس
  • ساختن یک درخت سلسله مراتبی به اسم Parse Tree

Semantic Analyzer

سمانتیک انالایزر معنی دار بودن Parse Tree رو بررسی میکنه و اگر مشکلی نداشت اصطلاحا Parse Tree رو Verify میکنه. یه سری کار های دیگه هم از جمله Type cheeking, label checking انجام میده. برای اینکه بهتر کار Semantic analyzer رو درک کنید اینطوری در نظر بگیرید که تو این مرحله کامپایلر اون درختی که شکلش رو تو مرحله قبل دیدیم بررسی میکنه و بهش از جنبه معنایی نگاه میکنه. اگر مشکلی وجود داشته خطا میده در غیر اینصورت ما رو به مرحله بعدی هدایت میکنه.

کار های اصلی که در این مرحله اتفاق میفته:

  • ذخیره سازی نوع داده ها در Parse Tree یا Symbol Table
  • بررسی نوع داده ها و در صورت عدم تطابق داده و نوع داده (اگر قابل Cast کردن نباشه) ارور Semantic نمایش داده میشه.

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

;float x = 10.5
;float y = x * 2

احتمالا متوجه شدید که در مثال بالا عدد 2 که یک عدد صحیح یا Integer هست قبل از عملیات ضرب به صورت خودکار به یک Float یا عدد اعشار تبدیل میشه. پس اون خط چیزی شبیه این میشه:

;float y = x * 2.0

Intermediate Code Generator

Intermediate Code Generator یعنی سازنده کد میانی (سطح میانی). تا اینجای کار کامپایلر برای همه ی ماشین ها یکسانه و تفاوتی نداره. کد میانی در واقع یک کد انتزاعیه بین زبان برنامه نویسی سطح بالا و زبان ماشین.خوبی این مرحله اینه که کار رو برای ترجمه کد ها به زبان ماشین خیلی ساده تر میکنه.

کار های اصلی که در این مرحله اتفاق میفته:

  • بر اساس Semantic یک برنامه، کد سطح میانی تولید میشه
  • مقادیر رو طی فرایند ترجمه نگه میداره
  • به ترجمه کد به زبان مقصد کمک میکنه
  • حفظ ترتیب و اولویت هایی که در زبان مبدا وجود داشت

به عنوان مثال:

total = count + rate * 5

به کمک Address Code نتیجه میشه:

t1 := int_to_float(5) 
t2 := rate * t1 
t3 := count + t2
total := t3

Code Optimizer

در این پروسه، کد های میانی بهینه میشن (از نظر سرعت، کوتاه تر شدن کد ها، قدرت کم تر خواستن و… ) و خط های اضافی به نحوی حذف میشه و کد ها فشرده تر میشن. (منظور از خط های اضافی خطوط خالی و… نیست اونها که در مراحل قبل حذف شدن). این پروسه باعث میشه کد های کمتر بشن و تا حد ممکن سرعت اجرا بالاتر بره.

Target Code Generator

در این مرحله کد خروجی که برای ماشین قابل خوندنه بر اساس کد سطح میانی که یک کد غیر وابسته به نوع سخت افزار بود تولید میشه. اما کد خروجی زبان مقصد به نوع ماشین (CPU) وابسته است.

منابع

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

لینک حمایت از آموزش ها و پروژه های متن باز

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

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

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

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

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

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

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

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

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

این قضیه موقع انتشار ورژن 7 گفته شد و تاکید شد که حتما به این ورژن سوییچ کنید. (البته در نظر داشته باشید که یه سری چیز ها هم 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) رو تعیین کنیم.

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

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

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

پشتیبانی از اعداد صحیح 64 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 یا مقایسه ی ترکیبی یعنی چی و چه کاری برای ما انجام میده؟!

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

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

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

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

مثال:

<?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 که میشه یه چیزی شبیه <% و غیره که میتونید اینجا ببیندشون.

منابع:

 

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

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

بررسی اوبونتو نسخه ی 20.04

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

کتابخانه پایتون mypassmaker برای ایجاد رمز عبور امن

این مطلب مرتب به روز رسانی میشه؛ پس میتونید هر ازگاهی یه سری به اینجا بزنید.

سلامُ وقت بخیر؛ ادریس رنجبر هستم و امروز میخوام یه کتابخونه ساخت رمز عبور امن با پایتون به اسم mypassmaker رو به شما معرفی بکنم که خودم نوشتم و دارم توسعش میدم. این کتابخونه یا پکیج یا ماژول یا هرچی 🙂 کارش اینه که میاد به اندازه ی یک طول دلخواه که ما بهش میدیم برامون رشته ای حاوی کاراکتر های حروفی و عددی و کاراکتر های ویژه مثل +ـ()*،×٪٫!٬ میسازه و با هم ترکیبشون میکنه.

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

نسخه ۱.۲ منتشر شد

ویزگی های این نسخه:

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

نحوه نصب mypassmaker

برای نصب این کتابخونه با استفاده از مدیر بسته ی pip میتونید از دستور زیر استفاده کنید:

pip install mypassmaker

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

برای نصب هم کافیه از –upgrade استفاده کنید. اگر ورژن جدید منتشر کرده باشم براتون میاد.

اگر هم میخواید سورس رو ببینید میتونید به گیت هاب پروژه سری بزنید.

نحوه استفاده

from mypassmaker import Password
my_password = Password.generate(length=10)
Password.send_email(gmail_user="", gmail_password="", sent_from="", send_to="", my_password=my_password)

 

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

برای حمایت مالی از پروژه ها و آموزش های رایگان می تونید از طریق لینک زیر ارقدام کنید.
https://zarinp.al/@edrisranjbar

حل مشکل ریستارت مودم ایرانسل با پایتون

یه اسکریپت کوچولو نوشتم که با یه دستور ساده کار ریستارت مودم ایرانسل منو برام انجام میده.

حل مشکل تاچ پد HP elite-book ها در لینوکس

حل مشکل تاچ پد HP elite-book ها در لینوکس

این مشکل تاچ پد رو چند روزیه که دارم. امروز فکر کردم بیام درستش کنم. بعد از یه مقدار جست و جو کردن در فروم HP فردی گفته بود که آرچ گفته شما باید ماژول i2c_hid رو به بلک لیست اضافه کنید تا اون درایور لود نشه و باعث این خرابکاری نشه (یا همچین چیزی). گفتم خب یه تست می کنیم ضرر که نداره. یه کرنل داریم و کلی درایور که عیبی هم نداره یه دقیقه حذفش کنیم ببینیم مشکل درست میشه یا نه. در واقع درست شد. اینم دستوری که من زدم.

sudo rmmod i2c_hid

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

/etc/modbrobe.d

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

blacklist driver-name

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

جدید ترین مقالات

کانال آپارات من 

کانال یوتیوب

#iguru_soc_icon_wrap_6381e697c7ca1 a{ background: transparent; }#iguru_soc_icon_wrap_6381e697c7ca1 a:hover{ background: transparent; border-color: #00bda6; }#iguru_soc_icon_wrap_6381e697c7ca1 a{ color: #acacae; }#iguru_soc_icon_wrap_6381e697c7ca1 a:hover{ color: #ffffff; }