Forwarded from محتوای آزاد سهراب
به صورت کلی، اگر Dracut رو در پارچ پیادهسازی کنیم، میشه پشتیبانی از TPM2 و همینطور Unified Kernel Image رو راحتتر آورد.
علت تأخیر در رلیز جدید هم همین موضوع هستش، پروفایل پارچ دستخوش تغییرات زیادی داره میشه و یکمی زمانبر میشه این مورد.
https://wiki.archlinux.org/title/Unified_kernel_image
@SohrabContents
علت تأخیر در رلیز جدید هم همین موضوع هستش، پروفایل پارچ دستخوش تغییرات زیادی داره میشه و یکمی زمانبر میشه این مورد.
https://wiki.archlinux.org/title/Unified_kernel_image
@SohrabContents
Forwarded from محتوای آزاد سهراب
حالا این مورد پیادهسازی سکیوربوت هم راحتتر میکنه چون کلا یک فایل هستش که باید امضا بشه :)
@SohrabContents
@SohrabContents
Forwarded from Linuxor ?
نوشتن کدهای مدرن جاوااسکریپت با سینتکس جدید همیشه یه ریسک داره: چی میشه اگه مرورگر کاربر ازش پشتیبانی نکنه؟ Babel دقیقاً برای همینه. کدهای جدید رو میگیره، تبدیل میکنه به نسخهای که تو همهی مرورگرها جواب میده. خیالراحتکن برای کسایی که روی مرورگرهای قدیمی هم حساب باز کردن.
github.com/babel/babel
@Linuxor
github.com/babel/babel
@Linuxor
Forwarded from Linuxor ?
نوشتن کدهای مدرن جاوااسکریپت با سینتکس جدید همیشه یه ریسک داره: چی میشه اگه مرورگر کاربر ازش پشتیبانی نکنه؟ Babel دقیقاً برای همینه. کدهای جدید رو میگیره، تبدیل میکنه به نسخهای که تو همهی مرورگرها جواب میده. خیالراحتکن برای کسایی که روی مرورگرهای قدیمی هم حساب باز کردن.
github.com/babel/babel
@Linuxor
github.com/babel/babel
@Linuxor
Forwarded from Laravel News
Laravel's Rule::contains() for Fluent Array Validation https://laravel-news.com/rule-contains
Laravel News
Laravel's Rule::contains() for Fluent Array Validation - Laravel News
Laravel's Rule::contains() method provides fluent array validation syntax, replacing string concatenation with clean, readable rules. Maintain consistency with Laravel's validation patterns while improving code maintainability and developer experience.
Forwarded from laravel-news
“انسانها به صورت دستهبندی شده فکر میکنن، کد ما نیز باید بازتابی از همین موضوع باشه”
#book #laravel_beyond_crud
#book #laravel_beyond_crud
Forwarded from Linuxor ?
وقتی گیت وقتی اشتباه پیش میره، بدجوری داغون میشی. مخصوصاً وسط یه پروژه مهم یا توی ددلاین. ریپوی git-flight-rules یه راهنمای بحرانمحور برای کار با گیته. شبیه یه checklist برای خلبانهاست که وسط طوفان باید تصمیم بگیرن. مناسب همه، از تازهکار تا سینیور
github.com/k88hudson/git-flight-rules
@Linuxor
github.com/k88hudson/git-flight-rules
@Linuxor
Forwarded from Gopher Academy
🔴قابلیت `T.Attr`, `B.Attr`, و `F.Attr`. ویژگی های جدید گولنگ نسخه 1.25
در Go نسخه 1.25**، سه متد جدید به پکیج `testing` اضافه شدهاند: `T.Attr`, `B.Attr`, و `F.Attr`. اینها به شما اجازه میدهند **اتریبیوتهای دلخواه (کلید–مقدار) را مستقیماً به خروجی لاگ تست ارسال کنید.
---
🏷 چه کاری انجام میدهند؟
با استفاده از
* برای تستها: از
* برای بنچمارکها: از
* برای فریمورکهای fuzzing: از
---
✅ چرا مفید هستند؟
* دنبال کردن metadata مرتبط با تستها، مثل نسخه پکیج، وضعیت کانفیگ، دادههای ورودی خاص
* مناسب برای تولید خروجی قابلپردازش با
* واضح و مستقیم، بدون نیاز به استفاده از
---
🌟 مثال ساده
خروجی هنگام اجرای
---
📊 ترکیب با
اگر خروجی را با
---
🛠 مثال برای بنچمارکها
خروجی:
---
✅ جمعبندی
*این
* بهبود خوانایی لاگ و قابلیت تجزیهی ساختیافته در ابزارهای خودکار.
* بسیار سبک و بدون overhead، یک ویژگی جزئی ولی کاربردی برای ردیابی و دیباگ.
در Go نسخه 1.25**، سه متد جدید به پکیج `testing` اضافه شدهاند: `T.Attr`, `B.Attr`, و `F.Attr`. اینها به شما اجازه میدهند **اتریبیوتهای دلخواه (کلید–مقدار) را مستقیماً به خروجی لاگ تست ارسال کنید.
---
🏷 چه کاری انجام میدهند؟
با استفاده از
T.Attr(key, value) میتوانید بهسادگی یک attribute با کلید key و مقدار value اضافه کنید و این در لاگ تست خواهد آمد:=== ATTR TestMyFeat myKey someValue
* برای تستها: از
T.Attr* برای بنچمارکها: از
B.Attr* برای فریمورکهای fuzzing: از
F.Attr---
✅ چرا مفید هستند؟
* دنبال کردن metadata مرتبط با تستها، مثل نسخه پکیج، وضعیت کانفیگ، دادههای ورودی خاص
* مناسب برای تولید خروجی قابلپردازش با
test2json* واضح و مستقیم، بدون نیاز به استفاده از
Log یا fmt---
🌟 مثال ساده
package mypkg_test
import "testing"
func TestSomething(t *testing.T) {
t.Attr("db", "postgres")
t.Attr("featureFlag", "enabled")
t.Log("running test with attributes")
// ... انجام تست اصلی ...
}
خروجی هنگام اجرای
go test:=== RUN TestSomething
=== ATTR TestSomething db postgres
=== ATTR TestSomething featureFlag enabled
mypkg_test.go:10: running test with attributes
--- PASS: TestSomething (0.00s)
---
📊 ترکیب با
test2jsonاگر خروجی را با
go test -json یا test2json بگیرد، این اتریبیوتها بهصورت structured میروند و ابزارهای CI/CD یا داشبوردها میتوانند آنها را بخوانند.---
🛠 مثال برای بنچمارکها
func BenchmarkMyOp(b *testing.B) {
b.Attr("iterations", b.N)
for i := 0; i < b.N; i++ {
// عملیات اصلی ...
}
}خروجی:
=== BENCH: BenchmarkMyOp
=== ATTR BenchmarkMyOp iterations 1000
...
---
✅ جمعبندی
*این
T.Attr (و معادلهای آن برای benchmark/fuzz) روشی ساده برای اضافه کردن metadata به تستها هستند.* بهبود خوانایی لاگ و قابلیت تجزیهی ساختیافته در ابزارهای خودکار.
* بسیار سبک و بدون overhead، یک ویژگی جزئی ولی کاربردی برای ردیابی و دیباگ.
Forwarded from Linuxor ?
وقتی تیم بزرگ مثل گوگل میگه "این سبک کدنویسی خوبه"،باید بی چون و چرا گوش بدید،
این یه مرجع برای نوشتن کدی که هم خوانا باشه، هم قابل نگهداری، مخصوصاً وقتی با تیمهای بزرگ کار میکنی هستش
از Python گرفته تا C++ و JavaScript، همه رو پوشش داده
google.github.io/styleguide
@Linuxor
این یه مرجع برای نوشتن کدی که هم خوانا باشه، هم قابل نگهداری، مخصوصاً وقتی با تیمهای بزرگ کار میکنی هستش
از Python گرفته تا C++ و JavaScript، همه رو پوشش داده
google.github.io/styleguide
@Linuxor
Forwarded from Gopher Academy
🎯 ویژگی های جدید گولنگ نسخه 1.25 رو از اینجا بخونید
🔵synctest
🟢https://t.iss.one/gopher_academy/3910
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 json/v2
🟢https://t.iss.one/gopher_academy/3913
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 Container-aware GOMAXPROCS
🟢https://t.iss.one/gopher_academy/3922
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵New GC
🟢 https://t.iss.one/gopher_academy/3925
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵Anti-CSRF
🟢https://t.iss.one/gopher_academy/3937
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵WaitGroup.Go
🟢https://t.iss.one/gopher_academy/3943
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵FlightRecorder
🟢https://t.iss.one/gopher_academy/3939
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵os.Root
🟢https://t.iss.one/gopher_academy/3952
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵reflect.TypeAssert
🟢https://t.iss.one/gopher_academy/3947
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵T.Attr
🟢https://t.iss.one/gopher_academy/3956
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵slog.GroupAttrs
🟢https://t.iss.one/gopher_academy/3951
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵hash.Cloner
🟢https://t.iss.one/gopher_academy/3946
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵synctest
🟢https://t.iss.one/gopher_academy/3910
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 json/v2
🟢https://t.iss.one/gopher_academy/3913
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵 Container-aware GOMAXPROCS
🟢https://t.iss.one/gopher_academy/3922
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵New GC
🟢 https://t.iss.one/gopher_academy/3925
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵Anti-CSRF
🟢https://t.iss.one/gopher_academy/3937
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵WaitGroup.Go
🟢https://t.iss.one/gopher_academy/3943
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵FlightRecorder
🟢https://t.iss.one/gopher_academy/3939
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵os.Root
🟢https://t.iss.one/gopher_academy/3952
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵reflect.TypeAssert
🟢https://t.iss.one/gopher_academy/3947
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵T.Attr
🟢https://t.iss.one/gopher_academy/3956
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵slog.GroupAttrs
🟢https://t.iss.one/gopher_academy/3951
▫️▪️▫️▪️▫️▪️▫️▪️▫️
🔵hash.Cloner
🟢https://t.iss.one/gopher_academy/3946
▫️▪️▫️▪️▫️▪️▫️▪️▫️
❤1
Forwarded from Aniis
🔹پنجمین دورهمی فعالان حوزه امبدد و اینترنت اشیا، فرصتی برای ارتقا دانش و تعامل با متخصصان
باحضور : مدیرعامل و تیم فنی شرکت کرمان صنعت
• تاریـــخ: ۲۵ تیرماه ۱۴۰۴
• ساعت: ۱۷ الــــی ۱۹
• مکــان: کارخانه نوآوری کرمان، بلوار جمهوری اسلامی، خیابان صادقیه، قبل از صادقیه۳
🔸️منتظر حضور ارزشمند شما هستیم.
لینک ثبت نام
شرکت راهکار صنعت آواپرداز
باحضور : مدیرعامل و تیم فنی شرکت کرمان صنعت
• تاریـــخ: ۲۵ تیرماه ۱۴۰۴
• ساعت: ۱۷ الــــی ۱۹
• مکــان: کارخانه نوآوری کرمان، بلوار جمهوری اسلامی، خیابان صادقیه، قبل از صادقیه۳
🔸️منتظر حضور ارزشمند شما هستیم.
لینک ثبت نام
شرکت راهکار صنعت آواپرداز
👎1
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔰خروج خودکار از ترمینال (bash):
با استفاده از دستور TMOUT میتوانید، برحسب زمان داده شده(ثانیه) از شل جاری به صورت اتوماتیک خارج شوید.( منظورم در اینجا بسته شدن شل است که در ترمینال جاری باز است.)
🔹در دستور زیر بعد از 10 ثانیه شل جاری خارج میشود.
خوب برای کسانی که همیشه حساسیت دارند.میتونید درکدهای شل اسکریپت هم این دستور را استفاده کنید.
نکته آخر: نیاز به وارد کردن sudo قبل دستور نیست.
———————————————————-
نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
@linuxtnt
با استفاده از دستور TMOUT میتوانید، برحسب زمان داده شده(ثانیه) از شل جاری به صورت اتوماتیک خارج شوید.( منظورم در اینجا بسته شدن شل است که در ترمینال جاری باز است.)
🔹در دستور زیر بعد از 10 ثانیه شل جاری خارج میشود.
export TMOUT=10خوب برای کسانی که همیشه حساسیت دارند.میتونید درکدهای شل اسکریپت هم این دستور را استفاده کنید.
نکته آخر: نیاز به وارد کردن sudo قبل دستور نیست.
———————————————————-
نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
@linuxtnt
Forwarded from محتوای آزاد سهراب
سوالی که پیش اومده برای من در این چندماه اخیر اینه که «فایدش چیه؟» عملاً حتی زمانی که شوقی باقی نمیمونه.
و چیزیه که مثل یک
توی ذهن ایجاد میشه و از بین نمیره.
هرکسی از من تجربه بخواد در این زمینه، جواب من بهش نکن عه. حتی برای رزومه هم ارزش نداره. خیلی کارهای بهتری میشه کرد :)
#موقت
و چیزیه که مثل یک
:(){ :|:& };:توی ذهن ایجاد میشه و از بین نمیره.
هرکسی از من تجربه بخواد در این زمینه، جواب من بهش نکن عه. حتی برای رزومه هم ارزش نداره. خیلی کارهای بهتری میشه کرد :)
#موقت
Forwarded from متخصص وردپرس | پوینا
هوش مصنوعی آفلاین
https://github.com/deepseek-ai/DeepSeek-V3
وقتی اینترنت ملی میشه کافیه DeepSeek نسخه آفلاین رو نصب کنید تا بتونید بدون اینترنت از هوش مصنوعی استفاده کنید
فقط باید 500 گیگ تا یک ترا فضا داشته باشید و تقریبا 32 گیگ رمم نیاز دارید
خوبیش اینه که همه چیزو خلاصه شده توی خودش داره
و اگر سرورم داشته باشید روی سرور نصب کنید که عالیه
@poinair پوینا
https://github.com/deepseek-ai/DeepSeek-V3
وقتی اینترنت ملی میشه کافیه DeepSeek نسخه آفلاین رو نصب کنید تا بتونید بدون اینترنت از هوش مصنوعی استفاده کنید
فقط باید 500 گیگ تا یک ترا فضا داشته باشید و تقریبا 32 گیگ رمم نیاز دارید
خوبیش اینه که همه چیزو خلاصه شده توی خودش داره
و اگر سرورم داشته باشید روی سرور نصب کنید که عالیه
@poinair پوینا
Forwarded from نوشتههای ترمینالی
اگه به گوشتون نخورده، ردیس نسخه ۸ اومده. و تغییرات خیلی خوبی داشته.
هم از سمت فنی قابلیت های جدید (مثل کار با Json) هم بهبود پرفورمنسی و توانایی استفاده بهتر از تردهای بیشتر رو داره.
هم از سمت لایسنس، ماژول ها و چیزهای close source رو اوپن سورس کردن و همه رو مرج کردن در قالب لایسنس درست و حسابی منتشر کردن.
اگه کاربر ردیس هستین، بلاگ پست خودشون رو به نگاهی بندازید به نظرم.
https://redis.io/blog/redis-8-ga/
هم از سمت فنی قابلیت های جدید (مثل کار با Json) هم بهبود پرفورمنسی و توانایی استفاده بهتر از تردهای بیشتر رو داره.
هم از سمت لایسنس، ماژول ها و چیزهای close source رو اوپن سورس کردن و همه رو مرج کردن در قالب لایسنس درست و حسابی منتشر کردن.
اگه کاربر ردیس هستین، بلاگ پست خودشون رو به نگاهی بندازید به نظرم.
https://redis.io/blog/redis-8-ga/
Redis
Redis 8 is now GA, loaded with new features and more than 30 performance improvements | Redis
Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.
Forwarded from a.bakhshaee
علت اصلی مرگ: استقرار لیوم روی دیتاسنتر هتزنر آلمان
سرورهای لیوم در دیتاسنتر هتزنر آلمان قرار داشتند. ما ابتدا تلاش کردیم سرورها را در آلمان نگه داریم، چون اپلیکیشن هنوز پایدار بود و دنبال راهکارهایی مثل پروکسی کردن بودیم تا مشکل را حل کنیم.
اما دو سرویس اصلی ما یعنی زرینپال و کاوهنگار دچار اختلال جدی شدند.
- درگاه بانکی (زرینپال)
زرینپال خیلی زود از دسترس خارج شد، حتی قبل از قطع کامل ارتباط ایران با خارج. ابتدا به زیبال مهاجرت کردیم، اما بهدلیل سیاستهای سختگیرانه، در نهایت یک سرور داخلی راه انداختیم و با پروکسی کردن آن از همان زرین پال استفاده کردیم.
درسآموخته: همیشه چند مسیر برای پرداخت فراهم کن.
- کاوهنگار
برای استفاده از کاوهنگار هم یک سرور ایرانی را پروکسی کردیم. خوشبختانه بهدلیل داشتن راههای مختلف ثبتنام (مهمان، با نام کاربری و ...)، آسیب زیادی ندیدیم.
درسآموخته: همیشه چند مسیر برای ثبتنام فراهم کن.
⚠️ قطع کامل اینترنت بینالملل
بعد از حل این مشکلات، متاسفانه به طور کامل دسترسی ما با خارج از ایران قطع شد. با قطع کامل ارتباط، پروکسیها هم بیاثر شدند و لیوم کاملاً قطع شد.
مجبور شدیم انتقال کامل سرورها به ایران را جدی بگیریم، اما با مشکلات جدی مواجه شدیم.
۱- سرور ایرانی آروان؛ دردسر نصب ابزارها
پس از مهاجرت به سرور ابری آروان، دسترسی به خارج کاملاً بسته بود و نصب هیچ ابزاری (apt، Nginx، Node.js و ...) ممکن نبود.
راه حل: فایلها را دستی دانلود و روی سرور ایرانی بارگذاری کردیم و با روشهای ابتدایی نصب انجام دادیم.
۲- مشکل نصب دیتابیس Elastic
نصب الستیکسرچ با روش بالا ممکن نبود. همروش ایمیج میرور را داشت و ما هم نمیخواستیم DevOps الستیک را خودمان انجام دهیم.
بنابراین elastic را روی همروش راهاندازی کردیم.
درسآموخته: خدمات زیرساختی حساس را تا جای ممکن به سرویسهای تخصصی بسپارید.
۳- مشکل Plasmic و GitHub
متاسفانه Plasmic برای push به GitHub وابسته بود. با قطع ارتباط، نه فیلترشکن جواب داد و نه GitHub در دسترس بود؛ هیچ دیپلوی ممکن نبود.
راه حل: پروژهها را به همگیت (سرویس Git داخلی همروش) منتقل کردیم و با clone و push دستی، تغییرات جزئی انجام دادیم.
۴- اعلانهای تلگرامی
اطلاعرسانیهایی که دیزاین کرده بودیم بر اساس ایونتهای خاص برای ما در تلگرام ارسال شود، دیگر کار نمیکرد.
راه حل: اعلانها را به پیامرسان بله منتقل کردیم بهخاطر شباهت API با تلگرام. همچنین یک سرور خارجی را برای این کار پروکسی کردیم.
۵- مشکل فایربیس
وقتی روی سرور ایران آمدیم، امکان استفاده از سرویسهای فایربیس نبود و اطلاع رسانی ها به کاربر با مشکل مواجه شده بود.
راه حل: ابتدا یک سرور خارجی را پروکسی کردیم و بعد از فیلد شدن این سناریو تصمیم گرفتیم با استفاده از ترمینال سیستم خودمان و curl، وبسرویسهای فایربیس را صدا بزنیم و به کاربران اطلاعرسانی کنیم که سرویس نوتیفیکیشن از کار افتاده است
۶- متیس و GPT
بخشهایی از لیوم به GPT و متیس وابسته بودند که با اختلال اینترنت کاملاً از کار افتادند. تنها راه، اعلام اختلال به کاربران بود.
درسآموخته: همیشه یک دیزاین در پروداکت پیشبینی کنیم که بتوانیم بهراحتی سرویس را به حالت تعلیق دربیاریم. برای مشکلات غیرقابل پیشبینی یا حتی تعمیرات زیرساختی، این امکان خیلی حیاتی است.
۷− امکان ثبت نام کاربران با جیمیل
هیچ راهحلی برای رفع این قطعی نداشتیم و دکمه ورود با جیمیل را موقتاً حذف کردیم.
درسآموخته: راههای متنوع برای ثبتنام قرار دهید تا بتوانید در صورت نیاز یکی از متدهای ثبتنام را از دسترس خارج کنید.
۸- مشکل با SSL و CDN
پس از مهاجرت به ایران، همچنان از CDN کلادفلر استفاده میکردیم اما اختلال داشتیم. با خاموش کردن حالت ابری (Proxy)، مشکل سرویسها حل شد اما گواهی SSL غیرفعال شد.
آروان و لیارا هم در آن زمان نتوانستند SSL بدهند.
راه حل: با Certbot یک گواهی SSL موقت ۶۰ روزه صادر کردیم.
۹- مشکل با Postman
Postman هم کار نمیکرد و جایگزینی پیدا نشد که کار بکند.
راه حل: با ترمینال و Curl کارها را پیش بردیم.
۱۰- مشکل دیتابیس سنگین
در این بحران متوجه شدیم بسیاری از لاگها لازم نبود نگهداری شوند؛ پس حذف شدند. دادههای خیلی قدیمی خلاصهسازی شدند. برخی دادهها را باید به سرویسهای آتریبیوشن منتقل میکردیم که بعداً انجام شد.
حالا حجم دیتابیس کاهش یافته و با ابتداییترین روش من تقل شد.
درسآموخته: بیدلیل یا با دلیل کمارزش چیزی را ذخیره نکنید و تا حد امکان از سرویسهای دیگر استفاده کنید.
سرورهای لیوم در دیتاسنتر هتزنر آلمان قرار داشتند. ما ابتدا تلاش کردیم سرورها را در آلمان نگه داریم، چون اپلیکیشن هنوز پایدار بود و دنبال راهکارهایی مثل پروکسی کردن بودیم تا مشکل را حل کنیم.
اما دو سرویس اصلی ما یعنی زرینپال و کاوهنگار دچار اختلال جدی شدند.
- درگاه بانکی (زرینپال)
زرینپال خیلی زود از دسترس خارج شد، حتی قبل از قطع کامل ارتباط ایران با خارج. ابتدا به زیبال مهاجرت کردیم، اما بهدلیل سیاستهای سختگیرانه، در نهایت یک سرور داخلی راه انداختیم و با پروکسی کردن آن از همان زرین پال استفاده کردیم.
درسآموخته: همیشه چند مسیر برای پرداخت فراهم کن.
- کاوهنگار
برای استفاده از کاوهنگار هم یک سرور ایرانی را پروکسی کردیم. خوشبختانه بهدلیل داشتن راههای مختلف ثبتنام (مهمان، با نام کاربری و ...)، آسیب زیادی ندیدیم.
درسآموخته: همیشه چند مسیر برای ثبتنام فراهم کن.
⚠️ قطع کامل اینترنت بینالملل
بعد از حل این مشکلات، متاسفانه به طور کامل دسترسی ما با خارج از ایران قطع شد. با قطع کامل ارتباط، پروکسیها هم بیاثر شدند و لیوم کاملاً قطع شد.
مجبور شدیم انتقال کامل سرورها به ایران را جدی بگیریم، اما با مشکلات جدی مواجه شدیم.
۱- سرور ایرانی آروان؛ دردسر نصب ابزارها
پس از مهاجرت به سرور ابری آروان، دسترسی به خارج کاملاً بسته بود و نصب هیچ ابزاری (apt، Nginx، Node.js و ...) ممکن نبود.
راه حل: فایلها را دستی دانلود و روی سرور ایرانی بارگذاری کردیم و با روشهای ابتدایی نصب انجام دادیم.
۲- مشکل نصب دیتابیس Elastic
نصب الستیکسرچ با روش بالا ممکن نبود. همروش ایمیج میرور را داشت و ما هم نمیخواستیم DevOps الستیک را خودمان انجام دهیم.
بنابراین elastic را روی همروش راهاندازی کردیم.
درسآموخته: خدمات زیرساختی حساس را تا جای ممکن به سرویسهای تخصصی بسپارید.
۳- مشکل Plasmic و GitHub
متاسفانه Plasmic برای push به GitHub وابسته بود. با قطع ارتباط، نه فیلترشکن جواب داد و نه GitHub در دسترس بود؛ هیچ دیپلوی ممکن نبود.
راه حل: پروژهها را به همگیت (سرویس Git داخلی همروش) منتقل کردیم و با clone و push دستی، تغییرات جزئی انجام دادیم.
۴- اعلانهای تلگرامی
اطلاعرسانیهایی که دیزاین کرده بودیم بر اساس ایونتهای خاص برای ما در تلگرام ارسال شود، دیگر کار نمیکرد.
راه حل: اعلانها را به پیامرسان بله منتقل کردیم بهخاطر شباهت API با تلگرام. همچنین یک سرور خارجی را برای این کار پروکسی کردیم.
۵- مشکل فایربیس
وقتی روی سرور ایران آمدیم، امکان استفاده از سرویسهای فایربیس نبود و اطلاع رسانی ها به کاربر با مشکل مواجه شده بود.
راه حل: ابتدا یک سرور خارجی را پروکسی کردیم و بعد از فیلد شدن این سناریو تصمیم گرفتیم با استفاده از ترمینال سیستم خودمان و curl، وبسرویسهای فایربیس را صدا بزنیم و به کاربران اطلاعرسانی کنیم که سرویس نوتیفیکیشن از کار افتاده است
۶- متیس و GPT
بخشهایی از لیوم به GPT و متیس وابسته بودند که با اختلال اینترنت کاملاً از کار افتادند. تنها راه، اعلام اختلال به کاربران بود.
درسآموخته: همیشه یک دیزاین در پروداکت پیشبینی کنیم که بتوانیم بهراحتی سرویس را به حالت تعلیق دربیاریم. برای مشکلات غیرقابل پیشبینی یا حتی تعمیرات زیرساختی، این امکان خیلی حیاتی است.
۷− امکان ثبت نام کاربران با جیمیل
هیچ راهحلی برای رفع این قطعی نداشتیم و دکمه ورود با جیمیل را موقتاً حذف کردیم.
درسآموخته: راههای متنوع برای ثبتنام قرار دهید تا بتوانید در صورت نیاز یکی از متدهای ثبتنام را از دسترس خارج کنید.
۸- مشکل با SSL و CDN
پس از مهاجرت به ایران، همچنان از CDN کلادفلر استفاده میکردیم اما اختلال داشتیم. با خاموش کردن حالت ابری (Proxy)، مشکل سرویسها حل شد اما گواهی SSL غیرفعال شد.
آروان و لیارا هم در آن زمان نتوانستند SSL بدهند.
راه حل: با Certbot یک گواهی SSL موقت ۶۰ روزه صادر کردیم.
۹- مشکل با Postman
Postman هم کار نمیکرد و جایگزینی پیدا نشد که کار بکند.
راه حل: با ترمینال و Curl کارها را پیش بردیم.
۱۰- مشکل دیتابیس سنگین
در این بحران متوجه شدیم بسیاری از لاگها لازم نبود نگهداری شوند؛ پس حذف شدند. دادههای خیلی قدیمی خلاصهسازی شدند. برخی دادهها را باید به سرویسهای آتریبیوشن منتقل میکردیم که بعداً انجام شد.
حالا حجم دیتابیس کاهش یافته و با ابتداییترین روش من تقل شد.
درسآموخته: بیدلیل یا با دلیل کمارزش چیزی را ذخیره نکنید و تا حد امکان از سرویسهای دیگر استفاده کنید.
Forwarded from a.bakhshaee
سلام،
در میانهی جنگ همگی ما، علاوه بر درد و غم تجاوز به خاکمان، با یک درد مضاعف هم روبهرو شدیم، محصول ما برای شرایط محدودیت اینترنت آماده نبود. این چالش، در کنار سایر مشکلات، واقعاً طاقتفرسا بود.
به پیشنهاد آقای حمیدی، تصمیم گرفتیم بهجای تسلیم شدن، کالبدشکافی دقیقی از محصول داشته باشیم تا دلایل شکست را بیابیم و نگذاریم پس از احیا، دوباره همین اتفاق تکرار شود.
⚠️ هدف من از نوشتن این متن دادن سرنخ برای مشکلاتی هست که ممکنه شما هم با اون برخورد کرده باشید، برای اینکه طولانی نشه، کوتاه نوشتم پس در صورت نیاز پی وی در خدمت هستم و خوشحال میشم کمکی کرده باشم.
در میانهی جنگ همگی ما، علاوه بر درد و غم تجاوز به خاکمان، با یک درد مضاعف هم روبهرو شدیم، محصول ما برای شرایط محدودیت اینترنت آماده نبود. این چالش، در کنار سایر مشکلات، واقعاً طاقتفرسا بود.
به پیشنهاد آقای حمیدی، تصمیم گرفتیم بهجای تسلیم شدن، کالبدشکافی دقیقی از محصول داشته باشیم تا دلایل شکست را بیابیم و نگذاریم پس از احیا، دوباره همین اتفاق تکرار شود.
⚠️ هدف من از نوشتن این متن دادن سرنخ برای مشکلاتی هست که ممکنه شما هم با اون برخورد کرده باشید، برای اینکه طولانی نشه، کوتاه نوشتم پس در صورت نیاز پی وی در خدمت هستم و خوشحال میشم کمکی کرده باشم.
Forwarded from Golden Code (علی 🇨🇴)
در زمان اجرای یک درخواست HTTP در لاراول، عملیات Route Model Binding دقیقاً در چه مرحلهای انجام میشه؟
Anonymous Quiz
20%
قبل از اجرای middleware ها
40%
بعد از اجرای middleware ها و قبل از اجرای کنترلر
16%
همزمان با resolve شدن کنترلر
25%
هنگام boot شدن سرویسها در AppServiceProvider
❤1