فکت: ویندوز حتی در صورتی که روی Airplane mode هم باشید، باز هم از اینترنتتون برای مقاصد کثیف خودش استفاده میکنه. آپدیت دانلود میکنه و بعضی کارهای دیگه. اگه مثلا با ویندوز بیستهزارتومنی رفتید خارج و نخواستید مشکلی براتون پیش بیاد، کلا کانکشن رو قطع کنید چون Airplane mode برای خود ویندوز مانع نیست.
👍2
این مقاله جالب رو راجع به فانکشن ()empty توی PHP از دست ندید:
https://localheinz.com/articles/2023/05/10/avoiding-empty-in-php/
https://localheinz.com/articles/2023/05/10/avoiding-empty-in-php/
Andreas Möller
Avoiding empty() in PHP
The language construct empty() appears rather versatile. Do you really have a scenario where using it makes sense?
😁2🤔1
The Go team went to great lengths to solve the problems facing software developers today. Developers have to make an uncomfortable choice between rapid development and performance when choosing a language for their projects. Languages like C and C++ offer fast execution, whereas languages like Ruby and Python offer rapid development. Go bridges these competing worlds and offers a high-performance language with features that make development fast.
#GoInAction
#GoInAction
👍1
از مدیر فنی سابق یکی از شرکتهایی که باهاشون کار میکردم و آدم خفنیه، پرسیدم که به نظرت Go یاد بگیرم یا Symfony؟
چون جوابش خیلی برام جالب بود، خواستم با شما هم شیر کنم؛ گفت:
تو که PHP/Laravel بلدی، یادگرفتن Symfony ارزش زیادی بهت اضافه نمیکنه و اگه شرکتی با Symfony کار کنه، با تجربهای که تو توی Laravel داری میتونه به رزومهات توجه کنه. اما اگه Go یاد بگیری، قطعا چیزهای خیلی جدیدی یاد گرفتی و با مفاهیم جدیدی آشنا شدی. شانس اینکه رزومهات دیده بشه هم بیشتره. از طرف دیگه این شرکتها که از Go استفاده میکنند احتمالا از معماری Microservice استفاده میکنند و احتمالا تیمهای بزرگتری هم دارند و احتمالا چالشهای بیشتری سر کار وجود داره. البته مشکلش اینه که اگه تجربه کاری واقعی با Go نداشته باشی، اونقدر برای گرفتن کار جدید بهت کمک نمیکنه، مگه اینکه پروژه اوپنسورس خوبی باهاش بنویسی.
چون جوابش خیلی برام جالب بود، خواستم با شما هم شیر کنم؛ گفت:
تو که PHP/Laravel بلدی، یادگرفتن Symfony ارزش زیادی بهت اضافه نمیکنه و اگه شرکتی با Symfony کار کنه، با تجربهای که تو توی Laravel داری میتونه به رزومهات توجه کنه. اما اگه Go یاد بگیری، قطعا چیزهای خیلی جدیدی یاد گرفتی و با مفاهیم جدیدی آشنا شدی. شانس اینکه رزومهات دیده بشه هم بیشتره. از طرف دیگه این شرکتها که از Go استفاده میکنند احتمالا از معماری Microservice استفاده میکنند و احتمالا تیمهای بزرگتری هم دارند و احتمالا چالشهای بیشتری سر کار وجود داره. البته مشکلش اینه که اگه تجربه کاری واقعی با Go نداشته باشی، اونقدر برای گرفتن کار جدید بهت کمک نمیکنه، مگه اینکه پروژه اوپنسورس خوبی باهاش بنویسی.
🔥4
قدیمها به این فکر کرده بودم که اگه کسی url فایل ربات تلگرامی روی سرورمون رو بدونه، میتونه آپدیتهای فیک براش بفرسته و خیلی کارها کنه. جوابم هم این بود که کسی قرار نیست url رو بدونه. ختم جلسه.
اما خب تلگرام اومده و یه ایده خوب برای پیشگیری از این مشکل ارائه کرده. یه پارامتر جدید به متد setWebhook به اسم secret_token اضافه شده که بعدا همین رو توی header براتون میفرسته تا از اعتبار آپدیت مطمئن بشید. این secret token رو هم میتونید پیش خودتون (مثلا اگه حرفهای هستید توی فایل env و اگه نوب هستید هاردکدشده) داشته باشید تا با هر ریکوست این اعتبارسنجی انجام بشه.
https://core.telegram.org/bots/api#setwebhook
یه کاربر روی Gituhb زحمت کشید و این رو به عنوان pull request برای پروژه TeleBot فرستاد:
https://github.com/muhammadmp97/TeleBot/pull/6
بعدش خودم دردسر شدیدی کشیدم تا برای این قابلیت جدید تست بنویسم که باعث شد کد خود پکیج رو تغییر بدم و به جای
https://github.com/muhammadmp97/TeleBot/commit/4ca12eba865476869887705446fb2e11c95889fd
انشاءالله همین روزها یه مقاله درباره این مشکل که نمیشه برای
اما خب تلگرام اومده و یه ایده خوب برای پیشگیری از این مشکل ارائه کرده. یه پارامتر جدید به متد setWebhook به اسم secret_token اضافه شده که بعدا همین رو توی header براتون میفرسته تا از اعتبار آپدیت مطمئن بشید. این secret token رو هم میتونید پیش خودتون (مثلا اگه حرفهای هستید توی فایل env و اگه نوب هستید هاردکدشده) داشته باشید تا با هر ریکوست این اعتبارسنجی انجام بشه.
https://core.telegram.org/bots/api#setwebhook
یه کاربر روی Gituhb زحمت کشید و این رو به عنوان pull request برای پروژه TeleBot فرستاد:
https://github.com/muhammadmp97/TeleBot/pull/6
بعدش خودم دردسر شدیدی کشیدم تا برای این قابلیت جدید تست بنویسم که باعث شد کد خود پکیج رو تغییر بدم و به جای
()die از exceptionها استفاده کنم:https://github.com/muhammadmp97/TeleBot/commit/4ca12eba865476869887705446fb2e11c95889fd
انشاءالله همین روزها یه مقاله درباره این مشکل که نمیشه برای
()die تست نوشت مینویسم و راهحلهایی که چک کردم رو به همراه معایبشون میگم. به پکیج TeleBot ستاره بدید و حتما ازش برای توسعه رباتهاتون استفاده کنید. برای خونه خودمون هم از همین بردم.🔥4😁2👍1
package main
type Duration int64
func main() {
var dur Duration
dur = int64(1000)
}
این کد توی Go ارور میده. از بس سر تایپ سختگیره!
حالا کوروش کمپانی فرار کرد ولی یه پنج تومن به من بدید، اگه رفتم و یه زمانی دیدمش، پولتون رو ازش میگیرم. هیچ چشمداشت مادی هم ندارم و این کار رو برای کشور عزیزم ایران انجام میدم. 🇮🇷❤️
۷۶
۷۶
😁10
برای یکی از مشتریها شک داشتم HTML/CSS تکراری بنویسم یا اینکه کمی وقت بذارم و قضیه رو اتوماتیک کنم. تصور کنید یه سری سرویس وجود داره که هر کدوم قیمت جدایی دارند. توی ویو، میشد برای هر کدوم یه سکشن درست کنم و...
الآن که درخواست ادیت دادند و خیلی چیزها تغییر کرد، مطمئن شدم که تصمیمم درست بوده. این تصمیم رو گرفتم، چون مطمئن بودم سرویسها تغییر خواهند کرد. انعطاف پیچیدگی میاره، پس تصمیم اینکه انعطاف رو ترجیح بدید دشواره.
الآن که درخواست ادیت دادند و خیلی چیزها تغییر کرد، مطمئن شدم که تصمیمم درست بوده. این تصمیم رو گرفتم، چون مطمئن بودم سرویسها تغییر خواهند کرد. انعطاف پیچیدگی میاره، پس تصمیم اینکه انعطاف رو ترجیح بدید دشواره.
👍3
میخوایید هر وقت روی ریپازیتوریتون Issue/PR خورد، توی تلگرام براتون نوتیفیکیشن بیاد؟ از این اکشن که تازگی نوشتم استفاده کنید:
https://github.com/marketplace/actions/blue-octocat
https://github.com/marketplace/actions/blue-octocat
GitHub
Blue Octocat - GitHub Marketplace
Github action for getting Telegram notifications
🤩4👍2
Philocode
میخوایید هر وقت روی ریپازیتوریتون Issue/PR خورد، توی تلگرام براتون نوتیفیکیشن بیاد؟ از این اکشن که تازگی نوشتم استفاده کنید: https://github.com/marketplace/actions/blue-octocat
خیلی درگیر این بودم تا اینکه مشکلاتش رو رفع کردم و فایل readme هم آپدیت شد. اگه خواستید به ریپازیتوریتون ادش کنید و بلد نبودید، توی کامنت یا پیوی بگید تا راهنمایی کنم. 😍🍓
❤2
از مصاحبه بر میگردم... نتیجه اخلاقی بازم اینه که انگلیسیتون رو هرچی قوی کنید کمه. 😂
اون آخرش یه جمله گفت توش recap داشت، امیدوارم جواب پرت نداده باشم. 😂
اون آخرش یه جمله گفت توش recap داشت، امیدوارم جواب پرت نداده باشم. 😂
😁2
کانفیگهای لاراول چطوری به دست ما میرسه؟
public/index.php
خب الآن بریم سراغ متد handle:
Illuminate\Foundation\Http\Kernel
بعد بریم سراغ متد sendRequestThroughRouter:
حالا بریم سراغ این یکی متد:
اینجا میبینیم روی app که در واقع instance از کلاس Application بوده، متد bootstrapWith رو صدا میزنه و یه آرایه رو بهشون پاس میده که لیست bootstrapperهاست که یکیشون اینه: LoadConfiguration.
حالا توی این کلاس هم یه متد bootstrap هست که صدا زده میشه، و داخل این متد، متد loadConfigurationFiles صدا زده میشه که اصل اتفاق میافته؛ فایلهای کانفیگ رو لیست میکنه و بعد یکی یکی محتواشون رو توی Repository ست میکنه. به require هم دقت کنید. کد:
Illuminate\Foundation\Bootstrap\LoadConfiguration
این هم از متد set:
Illuminate\Config\Repository
حالا نخواستم وارد جزئیات بشم، چون نخواستم طولانی بشه و خودتون میتونید دقیقتر نگاه کنید.
سوالی هم داشتید میتونید بپرسید.
$response = $kernel->handle(
$request = Request::capture()
)->send();
public/index.php
خب الآن بریم سراغ متد handle:
$response = $this->sendRequestThroughRouter($request);
Illuminate\Foundation\Http\Kernel
بعد بریم سراغ متد sendRequestThroughRouter:
$this->bootstrap();
حالا بریم سراغ این یکی متد:
if (! $this->app->hasBeenBootstrapped()) {
$this->app->bootstrapWith($this->bootstrappers());
}اینجا میبینیم روی app که در واقع instance از کلاس Application بوده، متد bootstrapWith رو صدا میزنه و یه آرایه رو بهشون پاس میده که لیست bootstrapperهاست که یکیشون اینه: LoadConfiguration.
حالا توی این کلاس هم یه متد bootstrap هست که صدا زده میشه، و داخل این متد، متد loadConfigurationFiles صدا زده میشه که اصل اتفاق میافته؛ فایلهای کانفیگ رو لیست میکنه و بعد یکی یکی محتواشون رو توی Repository ست میکنه. به require هم دقت کنید. کد:
$files = $this->getConfigurationFiles($app);
if (! isset($files['app'])) {
throw new Exception('Unable to load the "app" configuration file.');
}
foreach ($files as $key => $path) {
$repository->set($key, require $path);
}
Illuminate\Foundation\Bootstrap\LoadConfiguration
این هم از متد set:
$keys = is_array($key) ? $key : [$key => $value];
foreach ($keys as $key => $value) {
Arr::set($this->items, $key, $value);
}
Illuminate\Config\Repository
حالا نخواستم وارد جزئیات بشم، چون نخواستم طولانی بشه و خودتون میتونید دقیقتر نگاه کنید.
سوالی هم داشتید میتونید بپرسید.
👍1🤩1