| Erfan's Notes |
Photo
پروژه KPHP به شما اجازه میده که کد هایی که با سینتکس PHP نوشتید رو به زبان CPP ترنسپایل کنید و بعدش به کد ماشین کامپایل کنید
این پروژه چیز جدیدی نیست و از چند سال پیش وجود داشته، در واقع توسط VK.com توسعه داده شده برای استفاده شخصی خودشون داخل سایت و من بار ها میخواستم امتحان کنم ولی فرصت نمیشد، تا اینکه امروز بالاخره امتحانش کردم و بنچمارکی که گرفتم رو هم داخل تصویر قرار دادم
در تصویر بالا، در سمت راست بنچمارک سرور OpenSwoole هست و در سمت چپ بنچمارک سرور KPHP هست، کدی که برای بنچمارک استفاده کردم در واقع echo کردن عبارت "Hello World" بوده و میتونید ببینید که OpenSwoole به لحاظ RPS حتی بهتر از کد کامپایل شده وبسرور KPHP عمل کرده!
البته که بنچمارک من جنبه عمومی نداره و صرفا در سادهترین حالت تست وبسرور انجام شده، طبیعتا یک کد کامپایل شده میتونه دهها یا حتی صدها برابر سریعتر از نسخه تفسیری باشه
اگر بخواهیم KPHP رو با خود PHP عادی مقایسه کنیم، طبیعتا پرفرمنس چند برابری رو با KPHP تجربه میکنیم با توجه به کامپایل شدن کد، ولی خب استفاده از KPHP محدودیت های خیلی زیادی رو به فرایند توسعهمون اضافه میکنه
در حالت کلی به نظر من، این پروژه مختص خود VK.com نوشته شده و نمیارزه که بقیه هم از اون استفاده کنند، با استفاده از PHP های نسخه جدید و OpenSwoole و بهرهگیری از OPCache و JIT میتونیم یک پرفرمنس حداکثری از خود PHP با کلی قابلیتهای دیگه بگیریم
این پروژه چیز جدیدی نیست و از چند سال پیش وجود داشته، در واقع توسط VK.com توسعه داده شده برای استفاده شخصی خودشون داخل سایت و من بار ها میخواستم امتحان کنم ولی فرصت نمیشد، تا اینکه امروز بالاخره امتحانش کردم و بنچمارکی که گرفتم رو هم داخل تصویر قرار دادم
در تصویر بالا، در سمت راست بنچمارک سرور OpenSwoole هست و در سمت چپ بنچمارک سرور KPHP هست، کدی که برای بنچمارک استفاده کردم در واقع echo کردن عبارت "Hello World" بوده و میتونید ببینید که OpenSwoole به لحاظ RPS حتی بهتر از کد کامپایل شده وبسرور KPHP عمل کرده!
البته که بنچمارک من جنبه عمومی نداره و صرفا در سادهترین حالت تست وبسرور انجام شده، طبیعتا یک کد کامپایل شده میتونه دهها یا حتی صدها برابر سریعتر از نسخه تفسیری باشه
اگر بخواهیم KPHP رو با خود PHP عادی مقایسه کنیم، طبیعتا پرفرمنس چند برابری رو با KPHP تجربه میکنیم با توجه به کامپایل شدن کد، ولی خب استفاده از KPHP محدودیت های خیلی زیادی رو به فرایند توسعهمون اضافه میکنه
در حالت کلی به نظر من، این پروژه مختص خود VK.com نوشته شده و نمیارزه که بقیه هم از اون استفاده کنند، با استفاده از PHP های نسخه جدید و OpenSwoole و بهرهگیری از OPCache و JIT میتونیم یک پرفرمنس حداکثری از خود PHP با کلی قابلیتهای دیگه بگیریم
vkcom.github.io
KPHP — a PHP compiler · KPHP compiles a limited subset of PHP, making it run faster than plain PHP
KPHP — a PHP compiler GitHub page KPHP is a PHP compiler. It compiles a limited subset of PHP to a native binary running faster than PHP. KPHP take...
🔥7
یکی از مباحث جالبی که باهاش میتونید وارد دنیای سهبعدی توی محیط وب بشید، ساخت دریا هست
سمپلی که در این لینک هست به صورت واضح این مبحث رو به تصویر کشیده
روال کار به این صورت هست که در دنیای سه بعدی، تمامی Geometry ها از چندضلعیهایی مثل مثلث تشکیل شدند
برای ساخت یک دریا کافی هست که یک Plane بزرگ ایجاد کنیم که متشکل از تعداد زیادی از مثلث هست، بعدش کافی هست که راس های مثلث رو به صورت x و y و z تغییر بدیم تا افکت موج و دریا به وجود بیاد
سمپلی که در این لینک هست به صورت واضح این مبحث رو به تصویر کشیده
روال کار به این صورت هست که در دنیای سه بعدی، تمامی Geometry ها از چندضلعیهایی مثل مثلث تشکیل شدند
برای ساخت یک دریا کافی هست که یک Plane بزرگ ایجاد کنیم که متشکل از تعداد زیادی از مثلث هست، بعدش کافی هست که راس های مثلث رو به صورت x و y و z تغییر بدیم تا افکت موج و دریا به وجود بیاد
🔥5
| Erfan's Notes |
یکی از مباحث جالبی که باهاش میتونید وارد دنیای سهبعدی توی محیط وب بشید، ساخت دریا هست سمپلی که در این لینک هست به صورت واضح این مبحث رو به تصویر کشیده روال کار به این صورت هست که در دنیای سه بعدی، تمامی Geometry ها از چندضلعیهایی مثل مثلث تشکیل شدند …
و البته که در این صفحه میتونید مثالهایی از تمامی قابلیت های ThreeJS ببینید و به قدرتش پی ببرید
یادگیری WebGL و ThreeJS یا حداقل استفاده از ابزار های آماده برای طراحی سهبعدی در محیط وب، الان یک "باید" محسوب میشه برای کسی که خودش رو فرانتکار میدونه
https://threejs.org/examples/
یادگیری WebGL و ThreeJS یا حداقل استفاده از ابزار های آماده برای طراحی سهبعدی در محیط وب، الان یک "باید" محسوب میشه برای کسی که خودش رو فرانتکار میدونه
https://threejs.org/examples/
🔥2
موافق ایجاد یک گروه فارسی برای وب سهبعدی (Spline، ThreeJS، …) هستید؟
Anonymous Poll
75%
موافق هستم
25%
!(موافق هستم)
و اینکه چه سبک مطالبی رو بیشتر میپسندید؟
Anonymous Poll
35%
مطالب مربوط به فرانتاند
46%
مطالب مربوط به بکاند
33%
مطالب مربوط به گنو/لینوکس و سرور
40%
سبک ترکیبی فعلی
| Erfan's Notes |
موافق ایجاد یک گروه فارسی برای وب سهبعدی (Spline، ThreeJS، …) هستید؟
خب، طبق نتایج نظرسنجی دوستانی که علاقهمند بودند میتونند داخل @SplineGP عضو بشن
در حال حاضر محتوای خاصی نداره ولی سعی میکنم بهزودی یکسری ویدیو درمورد طراحی سهبعدی در وب ضبط کنم و داخل گروه و یوتیوب قرار بدم
و البته تاکید بر پرمحتوا بودن گروه نیست، صرفا وجود یک کامیونیتی هرچند کوچیک ایرانی، مایه دلگرمی توی هر حوزهای هست
درمورد نتایج نظرسنجی دوم هم، بیشتر جنبه آگاهی داشت و تاثیر مستقیمی در روند ارسال مطلب داخل کانال نداره، داخل کانال هرچیزی که ارزش اشتراکگذاری داشته باشه، قرار میگیره
در حال حاضر محتوای خاصی نداره ولی سعی میکنم بهزودی یکسری ویدیو درمورد طراحی سهبعدی در وب ضبط کنم و داخل گروه و یوتیوب قرار بدم
و البته تاکید بر پرمحتوا بودن گروه نیست، صرفا وجود یک کامیونیتی هرچند کوچیک ایرانی، مایه دلگرمی توی هر حوزهای هست
درمورد نتایج نظرسنجی دوم هم، بیشتر جنبه آگاهی داشت و تاثیر مستقیمی در روند ارسال مطلب داخل کانال نداره، داخل کانال هرچیزی که ارزش اشتراکگذاری داشته باشه، قرار میگیره
🔥5
Forwarded from Milad Nouri(ツ) میلاد نوری
چند روز پیش توی کنفرانس LaraConUS، نیتیو پیاچپی معرفی شد.
امروز قصد داشتم این ابزار رو تست کنم و یک اپ ساده با اون بنویسم.
وسط کار به ذهنم رسید برنامهای بنویسم که متن رو از ما بگیره و یکسری ایرادهای اون مثل رعایت نیمفاصله، تبدیل حروف عربی به فارسی و... رو رفع کنه.
خروجی آخر روز نسبتا قابل قبول شد.
هم زمان نسخه اندروید هم شروع کردم ☺️
اینکه این برنامه به درد کسی بخوره یا نه رو نمیدونم. اما حداقل باعث شد من امروز یه ابزار جدید (NativePHP) رو تست کنم.
قابلیتهای جالبی داره و اگه لاراول بلدید، باعث میشه خیلی سریع به خروجی برسید.
آیا NativePHP برای نوشتن اپ دسکتاپ گزینه خوبیه؟ کلمه خوب نسبیه. قطعا برای کسی که قراره از اول برنامهنویسی اپ دسکتاپ با هر زبان یا ابزاری رو یاد بگیره یا کسی که خودش جاوااسکریپت و الکترون و... بلده، نه.
اما برای بکند دولوپری که لاراول بلده و میخواد برای پروژهش خیلی سریع یک اپ دسکتاپ برای مک و ویندوز و لینوکس هم داشته باشه، چرا که نه.
این هم از جمعهای که گذشت.
اگه دوست داشتید، توییتهای مرتبطی که امروز نوشتم رو بخونید.
📝 @MiladNouriChannel
چند روز پیش توی کنفرانس LaraConUS، نیتیو پیاچپی معرفی شد.
امروز قصد داشتم این ابزار رو تست کنم و یک اپ ساده با اون بنویسم.
وسط کار به ذهنم رسید برنامهای بنویسم که متن رو از ما بگیره و یکسری ایرادهای اون مثل رعایت نیمفاصله، تبدیل حروف عربی به فارسی و... رو رفع کنه.
خروجی آخر روز نسبتا قابل قبول شد.
هم زمان نسخه اندروید هم شروع کردم ☺️
اینکه این برنامه به درد کسی بخوره یا نه رو نمیدونم. اما حداقل باعث شد من امروز یه ابزار جدید (NativePHP) رو تست کنم.
قابلیتهای جالبی داره و اگه لاراول بلدید، باعث میشه خیلی سریع به خروجی برسید.
آیا NativePHP برای نوشتن اپ دسکتاپ گزینه خوبیه؟ کلمه خوب نسبیه. قطعا برای کسی که قراره از اول برنامهنویسی اپ دسکتاپ با هر زبان یا ابزاری رو یاد بگیره یا کسی که خودش جاوااسکریپت و الکترون و... بلده، نه.
اما برای بکند دولوپری که لاراول بلده و میخواد برای پروژهش خیلی سریع یک اپ دسکتاپ برای مک و ویندوز و لینوکس هم داشته باشه، چرا که نه.
این هم از جمعهای که گذشت.
اگه دوست داشتید، توییتهای مرتبطی که امروز نوشتم رو بخونید.
📝 @MiladNouriChannel
🔥4
Media is too big
VIEW IN TELEGRAM
یکی از سهبعدیترین پروژه هایی که پیاده کردم، نسخه جدید سایت دولوپیکس هست که دموی ویدیوییاش رو میتونید ببینید
خود سایت رو هم تست کنید و اگر مشکلی دیدید اطلاع بدید
خود سایت رو هم تست کنید و اگر مشکلی دیدید اطلاع بدید
🔥9
این ریپوزیتوری ابزارهای خوبی برای زبان فارسی داره، از جمله DatePicker شمسی و تبدیل تاریخ و اعداد و ...، توصیه میکنم ببینید
https://github.com/persian-tools
https://github.com/persian-tools
GitHub
Persian Tools
PersianTools is a standalone, library-agnostic that enables some of the Persian features for use in Javanoscript, Go, Python, Java, etc... - Persian Tools
🔥5
یکی از جالبترین پروژههایی که تا به الان وجود داشته و بیخبر بودم ازش، پروژه JA3 هست که در حوزه پروفایلینگ SSL و TLS هست
اگر مدیر سرور هستید، احتمالا شناسایی کاربرانی که IP عوض میکنند یا با تغییر User Agent و پورت و ... سعی در دور زدن سیستم های امنیتیتون دارند، یک معضل همیشگی بوده و هست
یکی از جالبترین راهکار هایی که JA3 در اختیارتون قرار میده، امکان ایجاد Fingerprint از SSL/TLS کاربر هست که با عوض کردن IP و Port و UA هم باز میتونید کاربر مد نظر رو شناسایی کنید
مثلا فینگرپرینت یک کلاینت استاندارد Tor مشابه زیر هست:
e7d705a3286e19ea42f587b344ee6865
💠 اینجا میتونید لیست بیشتری از FingerPrint هایی معروف رو ببینید
⭕️ https://github.com/salesforce/ja3
💡 مقاله کامل این مبحث رو هم میتونید اینجا بخونید
اگر مدیر سرور هستید، احتمالا شناسایی کاربرانی که IP عوض میکنند یا با تغییر User Agent و پورت و ... سعی در دور زدن سیستم های امنیتیتون دارند، یک معضل همیشگی بوده و هست
یکی از جالبترین راهکار هایی که JA3 در اختیارتون قرار میده، امکان ایجاد Fingerprint از SSL/TLS کاربر هست که با عوض کردن IP و Port و UA هم باز میتونید کاربر مد نظر رو شناسایی کنید
مثلا فینگرپرینت یک کلاینت استاندارد Tor مشابه زیر هست:
e7d705a3286e19ea42f587b344ee6865
💠 اینجا میتونید لیست بیشتری از FingerPrint هایی معروف رو ببینید
⭕️ https://github.com/salesforce/ja3
💡 مقاله کامل این مبحث رو هم میتونید اینجا بخونید
GitHub
GitHub - salesforce/ja3: JA3 is a standard for creating SSL client fingerprints in an easy to produce and shareable way.
JA3 is a standard for creating SSL client fingerprints in an easy to produce and shareable way. - salesforce/ja3
🔥4
یکی از بهترین و سریعترین کتابخونههایی که برای Post Processing برای ThreeJS دیدم، این کتابخونه هست
قابلیت های خیلی خوب و جالبی هم داره و فیلترها و افکت های زیبا
البته که "سریع بودن" نسبی هست، اگر از افکتهای سنگینی استفاده کنید طبیعتا فریمریت پایینتر میاد و تعداد Call های بیشتری به WebGL میشه و پرفرمنس پایین میاد
💠 مشاهده دموها
⭕️ https://github.com/pmndrs/postprocessing
قابلیت های خیلی خوب و جالبی هم داره و فیلترها و افکت های زیبا
البته که "سریع بودن" نسبی هست، اگر از افکتهای سنگینی استفاده کنید طبیعتا فریمریت پایینتر میاد و تعداد Call های بیشتری به WebGL میشه و پرفرمنس پایین میاد
💠 مشاهده دموها
⭕️ https://github.com/pmndrs/postprocessing
GitHub
GitHub - pmndrs/postprocessing: A post processing library for three.js.
A post processing library for three.js. Contribute to pmndrs/postprocessing development by creating an account on GitHub.
🔥5
اگر علاقه به نوشتن برنامههای PHP بهصورت Portable تر دارید، توصیه میکنم با پروژه PHP Runtime آشنا بشید
من هم جدیدا آشنا شدم و حرف زیادی ندارم درموردش بزنم، صرفا درمورد کاربردش میتونم بهتون بگم که:
فرض کنید یک وبسایت با PHP نوشتید و تصمیم میگیرید که سایت رو بیارید روی OpenSwoole، مجبور هستید حداقل 20 درصد از کد های پروژه رو بازنویسی کنید تا مشکل متغیر های Global و ساختاریای مثل _GET و _POST و … رو حل کنید
حالا فرض کنید از OpenSwoole خوشتون نیومده و میرید سمت RoadRunner یا ReactPHP یا AMPHP و دوباره مجبور هستید بخش هایی از پروژه که مختص به فریمورک هستند رو بازنویسی کنید
کاربرد PHP Runtime برای حل این مشکل هست و در واقع برنامهتون رو بهشکل BlackBoxed مینویسید که بتونید بدون زحمت تغییر در کد، با یک ساختار واحد، داخل OpenSwoole یا RoadRunner یا ReactPHP و … پروژهتون رو اجرا کنید
https://github.com/php-runtime/runtime
من هم جدیدا آشنا شدم و حرف زیادی ندارم درموردش بزنم، صرفا درمورد کاربردش میتونم بهتون بگم که:
فرض کنید یک وبسایت با PHP نوشتید و تصمیم میگیرید که سایت رو بیارید روی OpenSwoole، مجبور هستید حداقل 20 درصد از کد های پروژه رو بازنویسی کنید تا مشکل متغیر های Global و ساختاریای مثل _GET و _POST و … رو حل کنید
حالا فرض کنید از OpenSwoole خوشتون نیومده و میرید سمت RoadRunner یا ReactPHP یا AMPHP و دوباره مجبور هستید بخش هایی از پروژه که مختص به فریمورک هستند رو بازنویسی کنید
کاربرد PHP Runtime برای حل این مشکل هست و در واقع برنامهتون رو بهشکل BlackBoxed مینویسید که بتونید بدون زحمت تغییر در کد، با یک ساختار واحد، داخل OpenSwoole یا RoadRunner یا ReactPHP و … پروژهتون رو اجرا کنید
https://github.com/php-runtime/runtime
GitHub
GitHub - php-runtime/runtime: A home for runtimes.
A home for runtimes. . Contribute to php-runtime/runtime development by creating an account on GitHub.
🔥3
این زبان عجیب و غریب رو توصیه میکنم ببینید و همین صفحه گیتهابش رو تا انتها بخونید تا با ویژگیهای خندهدارش آشنا باشید
چیزی به اسم حلقه هم نداره چون معتقد هست حلقهها منسوخ هستند!
به جای سمیکالن از ! استفاده میکنه و به جای not از سمیکالن استفاده میکنه
مقدار Boolean اش سه حالت بله و خیر و «شاید» هست
آرایههاش نه از صفر و نه از یک، بلکه از منفی یک شروع میشه
میتونید بگید که 5 مساوی 4 هست و از اون به بعد هرجای برنامه 5 استفاده کنید، مقدار 4 نمایش داده میشه (هر چیزی رو در زبان میتونید مقدار دهی کنید و عوض کنید کاربردش رو)
و کلی قابلیت عجیب و غیرمنتظره دیگه، که بیشتر جنبه فان و شوخی با زبان های برنامهنویسی رو داره
https://github.com/TodePond/C
چیزی به اسم حلقه هم نداره چون معتقد هست حلقهها منسوخ هستند!
به جای سمیکالن از ! استفاده میکنه و به جای not از سمیکالن استفاده میکنه
مقدار Boolean اش سه حالت بله و خیر و «شاید» هست
آرایههاش نه از صفر و نه از یک، بلکه از منفی یک شروع میشه
میتونید بگید که 5 مساوی 4 هست و از اون به بعد هرجای برنامه 5 استفاده کنید، مقدار 4 نمایش داده میشه (هر چیزی رو در زبان میتونید مقدار دهی کنید و عوض کنید کاربردش رو)
و کلی قابلیت عجیب و غیرمنتظره دیگه، که بیشتر جنبه فان و شوخی با زبان های برنامهنویسی رو داره
https://github.com/TodePond/C
🔥9
نسخه r156 کتابخونه ThreeJS هم اخیرا ریلیز شده و تغییراتش رو میتونید از اینجا ببینید و آپدیت کنید به نسخه جدید
https://threejs.org/changelog/?r156
https://threejs.org/changelog/?r156
یکسری توضیحاتی درمورد trade off ها در زبانهای برنامهنویسی دادم که توصیه میکنم این پیام و دنبالهاش رو بخونید
https://news.1rj.ru/str/IRDevelopersGP/1780109
https://news.1rj.ru/str/IRDevelopersGP/1780109
Telegram
Erfan Mola in گفتگوی توسعهدهندگان ایرانی
هیچ چیز در دنیا کامل نیست و هرچیزی trade off هایی داره
باید بشناسید trade off ها ها رو
اینکه چه چیزی رو از دست میدید در قبال اینکه چه چیزی رو به دست میارید
مثل کفه های ترازو میمونه
مثلا وقتی استخدام میشید، روزی ۸ ساعت وقت از دست میدید و در ازاش حقوق…
باید بشناسید trade off ها ها رو
اینکه چه چیزی رو از دست میدید در قبال اینکه چه چیزی رو به دست میارید
مثل کفه های ترازو میمونه
مثلا وقتی استخدام میشید، روزی ۸ ساعت وقت از دست میدید و در ازاش حقوق…
🔥7
| Erfan's Notes |
این عکس تایم تقریبی یکسری عملیاتهای مهم توی سیستمهای کامپیوتری رو نوشته، قابل توجه کسانی هست که پرفرمنس و میلیثانیهها براشون مهمه بهصورت خلاصه عملیاتهای CPU و RAM و نتورک Local خیلی سریع هستند و عملیاتهای Disk و IO و نتورک Remote گلوگاه یا همون…
در ادامه بحث پرفرمنس، این هم نمودار خیلی زیبا در مقایسه ارتباط بین پرفرمنس و انواع روشهای concurrency هست
داغونترین حالت تعلق میگیره به fork کردن پروسس جدید
حالت thread هم یک حد میانی محسوب میشه
حالتهای pre forked و pre threaded و epoll در ابتدا نزدیک هستند ولی با بیشتر شدن concurrency نزولی میشن
در نهایت، مکانیسم epoll لینوکس در صدر میمونه و میتازه (:
نکته اول: این مقایسه برای requests per second یک وبسرور هست و الزاما در هر نوع concurrency اینطور نیست
نکته دوم: اگر علاقهمند به مطالعه درمورد epoll در لینوکس بودید، این صفحه رو ببینید
نکته سوم: در openswoole برای event loop از epoll استفاده میشه
داغونترین حالت تعلق میگیره به fork کردن پروسس جدید
حالت thread هم یک حد میانی محسوب میشه
حالتهای pre forked و pre threaded و epoll در ابتدا نزدیک هستند ولی با بیشتر شدن concurrency نزولی میشن
در نهایت، مکانیسم epoll لینوکس در صدر میمونه و میتازه (:
نکته اول: این مقایسه برای requests per second یک وبسرور هست و الزاما در هر نوع concurrency اینطور نیست
نکته دوم: اگر علاقهمند به مطالعه درمورد epoll در لینوکس بودید، این صفحه رو ببینید
نکته سوم: در openswoole برای event loop از epoll استفاده میشه
🔥6
نسخه v1 رانتایم Bun هم منتشر شد، میتونید دانلود کنید و تست کنید (تا به الان در حالت بتا بود)
طبق ادعا هایی که میکنه، ۵-۶ برابر سریعتر از NodeJS هست، ولی آیا صحت داره؟ من خودم بنچمارک نکردمشون ولی چشمبسته میتونم قبول کنم که واقعیت داره
چون میدونم که ساختار NodeJS واقعا ایدهآل نیست و خیلی نقاط ضعف ساختاری میشه داخلش پیدا کرد
ولی آیا باید به Bun مهاجرت کنیم؟ فکر نمیکنم، چون هنوز اول راه هست و تقریبا هیچ چیز درست و حسابیای که توی NodeJS استفاده میکردیم باهاش سازگاری کامل نداره
https://bun.sh
طبق ادعا هایی که میکنه، ۵-۶ برابر سریعتر از NodeJS هست، ولی آیا صحت داره؟ من خودم بنچمارک نکردمشون ولی چشمبسته میتونم قبول کنم که واقعیت داره
چون میدونم که ساختار NodeJS واقعا ایدهآل نیست و خیلی نقاط ضعف ساختاری میشه داخلش پیدا کرد
ولی آیا باید به Bun مهاجرت کنیم؟ فکر نمیکنم، چون هنوز اول راه هست و تقریبا هیچ چیز درست و حسابیای که توی NodeJS استفاده میکردیم باهاش سازگاری کامل نداره
https://bun.sh
Bun
Bun — A fast all-in-one JavaScript runtime
Bundle, install, and run JavaScript & TypeScript — all in Bun. Bun is a new JavaScript runtime with a native bundler, transpiler, task runner, and npm client built-in.
🔥6