Forwarded from ASafaeirad
Someone actually used git blame on the Git source code... to blame the creator of Git itself :))
Nice article BTW
https://www.jonathancreamer.com/how-we-shrunk-our-git-repo-size-by-94-percent/
#article #git
Nice article BTW
https://www.jonathancreamer.com/how-we-shrunk-our-git-repo-size-by-94-percent/
#article #git
Forwarded from Linuxor ?
توی این پست لینوکسور درباره اینکه eBPF چیه صحبت کردیم
حالا اگه براتون سواله که چطوری یه برنامه eBPF نوشته میشه آقای prateak به صورت ساده یه برنامه پایتونی eBPF نوشته و اونو توی کرنل لود کرده.
https://prateek-singh.hashnode.dev/first-ebpf-program
🐧 @Linuxor
حالا اگه براتون سواله که چطوری یه برنامه eBPF نوشته میشه آقای prateak به صورت ساده یه برنامه پایتونی eBPF نوشته و اونو توی کرنل لود کرده.
https://prateek-singh.hashnode.dev/first-ebpf-program
🐧 @Linuxor
Forwarded from ⚝ (Amir Hossein "Amiria" Maher)
سرگرمیشان شده که دیپلماتها را در حین مذاکرات زیر فشار بگذارند که میز مذاکره را ترک کنند و نظامیان را در شرایط جنگی زیر فشار بگذارند که عملیات انجام دهند. اینها نه تخصصی در سیاست دارند، نه در امور نظامی. فقط به هیجان و آدرنالین اعتیاد دارند و ۹۰ میلیون نفر باید هزینهش را بدهند.
— علی نصری
#note #quote
@amiria703_channel
Forwarded from Rust for Python developers
یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژهام مینوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.
اما چندتا نکته (بر خلاف دنیای پایتون) :
۱- استفاده از اسم src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب میکنند پس app رو جای
اینکه این dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.
اما چندتا نکته (بر خلاف دنیای پایتون) :
۱- استفاده از اسم src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب میکنند پس app رو جای
Forwarded from ⚝ (Amir Hossein "Amiria" Maher)
آدمایی که شطرنج بازی میکنن، به وضعیّت مهرهها مثل چینش و داخل یا بیرون صفحه بودن، اهمیّتی نمیدن امّا مهرهها، با همدیگه، فقط برای اینکه داخل صفحهٔ بازی بیشتر بمونن و اینکه طرف خودشون ببره، میجنگن.
این بازی از اونی که به نظر میرسه، پلیدتره. مواظب خودتون باشید. 💟
#note
@amiria703_channel
این بازی از اونی که به نظر میرسه، پلیدتره. مواظب خودتون باشید. 💟
#note
@amiria703_channel
Forwarded from ⚝ (Amir Hossein "Amiria" Maher)
Forwarded from 🎄 یک برنامه نویس تنبل ( MΞ)
🔶 ابزار Extension.js
با این پروژه میتونید یه افزونه بنویسید و توی همه مرورگرها اجرا کنید!
قبل ازین پروژه نوشتن افزونهها دردسر خودشو داشت نمیتونستی افزونه کروم توی فایرفاکس بالا بیاری و بالعکس
در حالی که کدها یکی بودن فقط api هر مرورگر فرق داشت
از همه مهمتر که تایپ اسکریپت هم ساپورت میکنه و در ابتدا خودش یه ساختار خوبی از پروژه ایجاد میکنه دیگه نیازی به کانفیگ خاصی نیست خودش راحت بیلد میگیره 😍
https://github.com/extension-js/extension.js
#معرفی
@TheRaymondDev
با این پروژه میتونید یه افزونه بنویسید و توی همه مرورگرها اجرا کنید!
قبل ازین پروژه نوشتن افزونهها دردسر خودشو داشت نمیتونستی افزونه کروم توی فایرفاکس بالا بیاری و بالعکس
در حالی که کدها یکی بودن فقط api هر مرورگر فرق داشت
از همه مهمتر که تایپ اسکریپت هم ساپورت میکنه و در ابتدا خودش یه ساختار خوبی از پروژه ایجاد میکنه دیگه نیازی به کانفیگ خاصی نیست خودش راحت بیلد میگیره 😍
https://github.com/extension-js/extension.js
#معرفی
@TheRaymondDev
Forwarded from Rust for Python developers
یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژهام مینوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این
اما چندتا نکته (بر خلاف دنیای پایتون) :
۱- استفاده از اسم
۲- از
۲-۱: توی کد بالا من
۲-۲: توی همون شرایط و
۳- بجای استفاده از اداکر ایمیجهای معرفی شده توسط پروژه
۴- وقتی
۵- خیلی بهتره موقع استفاده از
—bin <appname>
استفاده کنم
نهایتا شد این :
اینکه این
dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.اما چندتا نکته (بر خلاف دنیای پایتون) :
۱- استفاده از اسم
src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب میکنند پس app رو جایگزین کردم ۲- از
cargo-chef استفاده کردم به ۲ دلیل :۲-۱: توی کد بالا من
compile انجام نمیدادم و فقط پکیجهارو دانلود میکردم؛ قصدم این بود توی استپ بعدی سراغش برم ولی خب توی بعضی شرایط خاص دردسرش زیاد میشه که الان فرصتش رو نداشتم.۲-۲: توی همون شرایط و
crate های خاص (که اتفاقا یکی از دوستان توی پروژهاش بهم نشون داد) باعث میشه قابلیت cache رو از دست بدید؛ دلیل اصلیش رو نمیدونم.۳- بجای استفاده از اداکر ایمیجهای معرفی شده توسط پروژه
cargo-chef از همون rust:1.82.0 استفاده کردم و فقط یک استیج بیشتر ساختم که دستورات زیر رو داشته باشه :RUN apt update && apt install lld clang -y && cargo install cargo-chef
۴- وقتی
sqlx رو توی پروژه دارم؛ توی استیج runtime حتما باید sqlx migrate runtime رو اجرا کنم. (برایحجم کمتر این مورد رو با migrate macro اجرا کردم.۵- خیلی بهتره موقع استفاده از
cargo build —release توی استیج builder باید از فلگ:—bin <appname>
استفاده کنم
نهایتا شد این :
FROM rust:1.82.0 AS chef
WORKDIR /app
RUN apt update && apt install lld clang -y && cargo install cargo-chef
FROM chef as planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json
FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
ENV SQLX_OFFLINE true
RUN cargo build --release --bin XYZ
FROM debian:bookworm-slim AS runtime
WORKDIR /app
RUN apt update -y \
&& apt install -y --no-install-recommends openssl ca-certificates \
&& apt autoremove -y \
&& apt clean -y \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/XYZ XYZ
COPY .env .env
ENTRYPOINT [ "./XYZ" ]
Forwarded from Gopher Academy
🔵 عنوان مقاله
Product for Engineers: A Newsletter Helping Flex Your Product Muscle
🟢 خلاصه مقاله:
مقاله "Product for Engineers" به بررسی مهارتها و استراتژیهای لازم برای مهندسین محصول میپردازد تا آنها در حرفهشان موفق شوند. در این مقاله، اهمیت ترکیب مهارتهای فنی با دانش مدیریت محصول تأکید شده است. مهندسین محصول باید نه تنها در فناوریهای مربوطه مهارت داشته باشند، بلکه باید قادر به درک نیازهای بازار و توسعه راه حلهای متناسب با این نیازها نیز باشند. مقاله همچنین بر اهمیت توانایی کار در تیمهای متقاطع و ارتباط موثر با سایر بخشهای شرکت، از جمله بازاریابی و فروش، تأکید میکند. نویسنده به مهندسین محصول توصیه میکند که برای موفقیت در نقشهای مدیریتی، باید مهارتهای رهبری و تصمیمگیری را نیز توسعه دهند. بهطور خلاصه، هدف اصلی مقاله تقویت درک مهندسین محصول از اصول اساسی مدیریت محصول و توسعه مهارتهای کلیدی مورد نیاز برای پیشرفت در این حرفه است.
🟣لینک مقاله:
https://golangweekly.com/link/160760/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Product for Engineers: A Newsletter Helping Flex Your Product Muscle
🟢 خلاصه مقاله:
مقاله "Product for Engineers" به بررسی مهارتها و استراتژیهای لازم برای مهندسین محصول میپردازد تا آنها در حرفهشان موفق شوند. در این مقاله، اهمیت ترکیب مهارتهای فنی با دانش مدیریت محصول تأکید شده است. مهندسین محصول باید نه تنها در فناوریهای مربوطه مهارت داشته باشند، بلکه باید قادر به درک نیازهای بازار و توسعه راه حلهای متناسب با این نیازها نیز باشند. مقاله همچنین بر اهمیت توانایی کار در تیمهای متقاطع و ارتباط موثر با سایر بخشهای شرکت، از جمله بازاریابی و فروش، تأکید میکند. نویسنده به مهندسین محصول توصیه میکند که برای موفقیت در نقشهای مدیریتی، باید مهارتهای رهبری و تصمیمگیری را نیز توسعه دهند. بهطور خلاصه، هدف اصلی مقاله تقویت درک مهندسین محصول از اصول اساسی مدیریت محصول و توسعه مهارتهای کلیدی مورد نیاز برای پیشرفت در این حرفه است.
🟣لینک مقاله:
https://golangweekly.com/link/160760/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Posthog
Product for Engineers | Substack
Helping engineers and founders flex their product muscles. Click to read Product for Engineers, a Substack publication with tens of thousands of subscribers.
Forwarded from IRCF | اینترنت آزاد برای همه
ابزار دریافت کانفیگ رایگان به تفکیک پروتکل/لوکیشن بروزرسانی شده و علاوهبر اضافهشدن یهسری پروتکل جدید، میتونین کانفیگهارو بر اساس IPv4/IPv6 دریافت کنین. اینابزار درحالحاضر به یک ریپازیتوری جدید متصل شده که اگر از استفادهکنندگان قدیمی هستین، لازمه مجدد لینک ساب رو اسکن کنید.
👉 ircfspace.github.io/tconfig
👉 ircfspace.github.io/location
🔍 ircf.space/tools
@ircfspace
👉 ircfspace.github.io/tconfig
👉 ircfspace.github.io/location
🔍 ircf.space/tools
@ircfspace
Forwarded from Mr Python | مستر پایتون (حسین)
📌سرفصل دروس دوره تست نفوذ وایرلس با پایتون
1️⃣ بخش اول : مفاهیم شبکه (رایگان)
۱ - شرح مدل OSI
۲ - پروتکل ARP
۳ - پروتکل اینترنت (IP)
۴ - پروتکل ICMP
۵ - کارگاه لایه شبکه
۶ - پروتکل UDP
۷ - پروتکل TCP
۸ - کارگاه لایه انتقال
۹ - پروتکل HTTP , HTTPS
۱۰ - کارگاه HTTP , HTTPS
۱۱ - پروتکل DNS
۱۲ - کارگاه DNS
۱۳ - پروتکل Telnet و SSH
۱۴ - کارگاه Telnet و SSH
۱۵ - پروتکل های انتقال فایل
۱۶ - کارگاه انتقال فایل
2️⃣ بخش دوم : مبانی Wi-Fi
۱ - مفهوم موج
۲ - استاندارد 802.11 و نسخه های آن
۳ - توپولوژی های وایرلس
۴ - فریم های 802.11 و ساختار آن ها
۵ - بررسی Mode های مختلف کارت های شبکه وایرلس
۶ - اسکن فعال و غیر فعال محیط
۷ - شنود بسته های 802.11 در وایرشارک
۸ - پروتکل امنیتی WEP
۹ - پروتکل امنیتی WPA
۱۰ - قابلیت WPS
3️⃣ بخش سوم : آموزش Scapy
۱ - آموزش نصب Scapy
۲ - ساخت بسته های شبکه در Scapy
۳ - ارسال و شنود بسته در Scapy
۴ - ساخت ابزار های Ping و Traceroute در Scapy
۵ - فریم های 802.11 در Scapy
4️⃣ بخش چهارم : تست نفوذ و ابزارنویسی
۱ - اسکن محیط با airodump-ng
۲ - ساخت اسکنر وای فای در پایتون
۳ - تشخیص SSID های مخفی در محیط
۴ - تشخیص دستگاه های موجود در محیط
۵ - دور زدن مک فیلترینگ
۶ - اجرای حمله Deauthentication با aireplay-ng
۷ - نوشتن اسکریپت Deauthentication در پایتون
۸ - چگونگی هک پسوورد WEP
۹ - هک پسوورد WEP با aircrack-ng
۱۰ - چگونگی کرک WPA بخش ۱
۱۱ - چگونگی کرک WPA بخش ۲
۱۲ - کرک WPA با استفاده از aircrack-ng
۱۳ - نوشتن اسکریپت شنود WPA Handshake در محیط
۱۴ - نوشتن کرکر WPA
۱۵ - نقاط دسترسی سرکش (Rogue AP)
۱۶ - سوییچ به محیط کالی لینوکس
۱۷ - انجام سناریو WPA AP-LESS Cracking
۱۸ - معرفی wifiphisher , wifipumpkin3
۱۹ - رمزگشایی بسته های محیط با airdecap-ng
۲۰ - نوشتن اسکریپت استخراج رمز وای فای های ذخیره شده
🆔 : @MrPythonBlog | BOOST
1️⃣ بخش اول : مفاهیم شبکه (رایگان)
۱ - شرح مدل OSI
۲ - پروتکل ARP
۳ - پروتکل اینترنت (IP)
۴ - پروتکل ICMP
۵ - کارگاه لایه شبکه
۶ - پروتکل UDP
۷ - پروتکل TCP
۸ - کارگاه لایه انتقال
۹ - پروتکل HTTP , HTTPS
۱۰ - کارگاه HTTP , HTTPS
۱۱ - پروتکل DNS
۱۲ - کارگاه DNS
۱۳ - پروتکل Telnet و SSH
۱۴ - کارگاه Telnet و SSH
۱۵ - پروتکل های انتقال فایل
۱۶ - کارگاه انتقال فایل
2️⃣ بخش دوم : مبانی Wi-Fi
۱ - مفهوم موج
۲ - استاندارد 802.11 و نسخه های آن
۳ - توپولوژی های وایرلس
۴ - فریم های 802.11 و ساختار آن ها
۵ - بررسی Mode های مختلف کارت های شبکه وایرلس
۶ - اسکن فعال و غیر فعال محیط
۷ - شنود بسته های 802.11 در وایرشارک
۸ - پروتکل امنیتی WEP
۹ - پروتکل امنیتی WPA
۱۰ - قابلیت WPS
3️⃣ بخش سوم : آموزش Scapy
۱ - آموزش نصب Scapy
۲ - ساخت بسته های شبکه در Scapy
۳ - ارسال و شنود بسته در Scapy
۴ - ساخت ابزار های Ping و Traceroute در Scapy
۵ - فریم های 802.11 در Scapy
4️⃣ بخش چهارم : تست نفوذ و ابزارنویسی
۱ - اسکن محیط با airodump-ng
۲ - ساخت اسکنر وای فای در پایتون
۳ - تشخیص SSID های مخفی در محیط
۴ - تشخیص دستگاه های موجود در محیط
۵ - دور زدن مک فیلترینگ
۶ - اجرای حمله Deauthentication با aireplay-ng
۷ - نوشتن اسکریپت Deauthentication در پایتون
۸ - چگونگی هک پسوورد WEP
۹ - هک پسوورد WEP با aircrack-ng
۱۰ - چگونگی کرک WPA بخش ۱
۱۱ - چگونگی کرک WPA بخش ۲
۱۲ - کرک WPA با استفاده از aircrack-ng
۱۳ - نوشتن اسکریپت شنود WPA Handshake در محیط
۱۴ - نوشتن کرکر WPA
۱۵ - نقاط دسترسی سرکش (Rogue AP)
۱۶ - سوییچ به محیط کالی لینوکس
۱۷ - انجام سناریو WPA AP-LESS Cracking
۱۸ - معرفی wifiphisher , wifipumpkin3
۱۹ - رمزگشایی بسته های محیط با airdecap-ng
۲۰ - نوشتن اسکریپت استخراج رمز وای فای های ذخیره شده
🆔 : @MrPythonBlog | BOOST
Forwarded from جادی | Jadi
langlang.webm
2.2 MB
قطعه جدیدی از شوپن
چند وقت قبل رابینسون مککلن در حال مرتب کردن بخشی از آرشیو موزه کتابخانه مورگان در منهتن بود که یه دستنوشته قدیمی کوچیک که گوشهاش اسم شوپن نوشته بود توجهاش رو جلب کرد.
اون از دستنوشته عکس گرفت و برای جفری کالبرگ که متخصص شوپن است فرستاد و ... و حالا جفری کالبرگ به تایمز گفته «فکم افتاد! هرگز این رو ندیده بودم».
حالا بعد از بررسی دقیق کاغذ، جوهر، دستخط و سبک موسیقی، کارشناسان معتقد هستن که این یکی از آثار گمشده شوپن است. این والتز احتمالا وقتی شوپن در دهه سوم زندگیش بوده نوشته شده و اینجا لنگ لنگ نوازنده چینی اجراش کرده و منم اینجا می ذارم که یه دقیقه آرامش بخش بشه برامون.
#هنر
چند وقت قبل رابینسون مککلن در حال مرتب کردن بخشی از آرشیو موزه کتابخانه مورگان در منهتن بود که یه دستنوشته قدیمی کوچیک که گوشهاش اسم شوپن نوشته بود توجهاش رو جلب کرد.
اون از دستنوشته عکس گرفت و برای جفری کالبرگ که متخصص شوپن است فرستاد و ... و حالا جفری کالبرگ به تایمز گفته «فکم افتاد! هرگز این رو ندیده بودم».
حالا بعد از بررسی دقیق کاغذ، جوهر، دستخط و سبک موسیقی، کارشناسان معتقد هستن که این یکی از آثار گمشده شوپن است. این والتز احتمالا وقتی شوپن در دهه سوم زندگیش بوده نوشته شده و اینجا لنگ لنگ نوازنده چینی اجراش کرده و منم اینجا می ذارم که یه دقیقه آرامش بخش بشه برامون.
#هنر
Forwarded from Syntax | سینتکس (Daimon)
این آقا خیلی تو لینکدین فارسی سروصدا به پا کرده و تو کتابخونه tensorflow کانتریبیوت کرده.
چند روز پیش تو یه کانال دیگم اشاره کرده بودن اما اینبار تو لینکدین خودمم پستشو دیدم.
هزارو خورده ای ری اکشن با کلی کامنت
اما قسمت دارک ماجرا زمانیه که محتویات کانتریبیوتش رو میبینیم که کلا یدونه کلمه از کامنت رو تغییر داده
واقعا لینکدین خیلی عجیبه
#fun
@Syntax_fa
چند روز پیش تو یه کانال دیگم اشاره کرده بودن اما اینبار تو لینکدین خودمم پستشو دیدم.
هزارو خورده ای ری اکشن با کلی کامنت
اما قسمت دارک ماجرا زمانیه که محتویات کانتریبیوتش رو میبینیم که کلا یدونه کلمه از کامنت رو تغییر داده
واقعا لینکدین خیلی عجیبه
#fun
@Syntax_fa
Forwarded from جادی | Jadi
This media is not supported in your browser
VIEW IN TELEGRAM
قطعه جدیدی از شوپن
چند وقت قبل رابینسون مککلن در حال مرتب کردن بخشی از آرشیو موزه کتابخانه مورگان در منهتن بود که یه دستنوشته قدیمی کوچیک که گوشهاش اسم شوپن نوشته بود توجهاش رو جلب کرد.
اون از دستنوشته عکس گرفت و برای جفری کالبرگ که متخصص شوپن است فرستاد و ... و حالا جفری کالبرگ به تایمز گفته «فکم افتاد! هرگز این رو ندیده بودم».
حالا بعد از بررسی دقیق کاغذ، جوهر، دستخط و سبک موسیقی، کارشناسان معتقد هستن که این یکی از آثار گمشده شوپن است. این والتز احتمالا وقتی شوپن در دهه سوم زندگیش بوده نوشته شده و اینجا لنگ لنگ نوازنده چینی اجراش کرده و منم اینجا می ذارم که یه دقیقه آرامش بخش بشه برامون.
#هنر
پ.ن. ظاهرا به خاطر فرمت در گوشیها درست پخش نمیشد؛ دوباره گذاشتم
چند وقت قبل رابینسون مککلن در حال مرتب کردن بخشی از آرشیو موزه کتابخانه مورگان در منهتن بود که یه دستنوشته قدیمی کوچیک که گوشهاش اسم شوپن نوشته بود توجهاش رو جلب کرد.
اون از دستنوشته عکس گرفت و برای جفری کالبرگ که متخصص شوپن است فرستاد و ... و حالا جفری کالبرگ به تایمز گفته «فکم افتاد! هرگز این رو ندیده بودم».
حالا بعد از بررسی دقیق کاغذ، جوهر، دستخط و سبک موسیقی، کارشناسان معتقد هستن که این یکی از آثار گمشده شوپن است. این والتز احتمالا وقتی شوپن در دهه سوم زندگیش بوده نوشته شده و اینجا لنگ لنگ نوازنده چینی اجراش کرده و منم اینجا می ذارم که یه دقیقه آرامش بخش بشه برامون.
#هنر
پ.ن. ظاهرا به خاطر فرمت در گوشیها درست پخش نمیشد؛ دوباره گذاشتم
Forwarded from Linuxor ?
در نهایت هرچیزی بسازین مردم عادی اونو با front و ظاهرش قضاوتش میکنن؛
این ریپو کلی کامپوننت UI رایگان رو جمع آوری کرده و میتونید توی Web App هاتون استفاده کنید :
https://github.com/karthikmudunuri/eldoraui
🐧 @Linuxor
این ریپو کلی کامپوننت UI رایگان رو جمع آوری کرده و میتونید توی Web App هاتون استفاده کنید :
https://github.com/karthikmudunuri/eldoraui
🐧 @Linuxor
Forwarded from Go Casts 🚀
آپدیت تیمسازی + فیدبک یکی از دوستان نسبت به دوره
این هفته ها با بچه های تیمسازی ۳ بیشتر مشغول solution design و آماده کردن code structure برای پروژه ای هستیم که یه پلتفرم برای رستوران و کافه ها باشه، و سعی کردیم با جدا کردن domain های بیزینسی یه سری microservice رو توسعه بدیم.
هر چند که به شخصه دغدغه ای بابت monolith یا microservice بودن ندارم و دلایلم رو در دوره روی کد گفتم که چرا این سوال اون قدرها هم سوال مهمی نیست، هر چند که microserivce بودن overheadهای خودشو داره.
تخفیف پاییز «دوره +تیمسازی» در آبان ماه هم پابرجاست
دوره + تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان
https://survey.porsline.ir/s/PISsWn7f
همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.iss.one/gocasts/434
تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.iss.one/gocasts/441
دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4
@gocasts
این هفته ها با بچه های تیمسازی ۳ بیشتر مشغول solution design و آماده کردن code structure برای پروژه ای هستیم که یه پلتفرم برای رستوران و کافه ها باشه، و سعی کردیم با جدا کردن domain های بیزینسی یه سری microservice رو توسعه بدیم.
هر چند که به شخصه دغدغه ای بابت monolith یا microservice بودن ندارم و دلایلم رو در دوره روی کد گفتم که چرا این سوال اون قدرها هم سوال مهمی نیست، هر چند که microserivce بودن overheadهای خودشو داره.
تخفیف پاییز «دوره +تیمسازی» در آبان ماه هم پابرجاست
دوره + تیمسازی بکند و گولنگ Go Casts
لینک خرید دوره + تیمسازی با ۵۰ درصد تخفیف به مبلغ ۴ میلیون و ۵۰۰ هزار تومان
https://survey.porsline.ir/s/PISsWn7f
همه چیز در مورد دوره و تیمسازی در این پست توضیح داده شده
https://t.iss.one/gocasts/434
تو این پست هم میتونید فیدبک های دوره و تیمسازی و استخدام بچه هارو بخونید
https://t.iss.one/gocasts/441
دوستانی که در خرید دوره تردید دارند میتونن برای مشاوره کوتاه تلفنی، فرم زیر رو پر کنند که باهاشون تماس بگیرم
https://survey.porsline.ir/s/ATeQL4b4
@gocasts
Forwarded from DevTwitter | توییت برنامه نویسی
خواهشا ردیس را به عنوان Primary Database استفاده نکنید!
یکی از جذابترین ریفکتور هایی که در اکالا انجام دادم، به ریلیز کردن ۴۰ گیگابایت رم ردیس برای استفاده در سبد خرید و سفارشها مربوط میشه. در این فرآیند، موفق شدم تنها از ۴۰۰ مگابایت رم استفاده کنم!
در شروع کار، به این فکر میکردم که چگونه میتوانم ۴۰ گیگابایت رم را آزاد کنم. اولین راهحلی که به ذهنم رسید، فشردهسازی دادهها بود. اما هیچ کامپرسوری نمیتوانست به اندازه کافی این حجم داده را فشرده کند، و هزینهی Decompress کردن آن بخاطر لود بالای سیستم، بسیار بالا بود.
هر کلید ما حاوی حدود ۱-۲ کیلوبایت JSON بود و مجبور بودیم که هر محصول را بدون TTL در Redis نگه داریم، زیرا Round Trip ما به Redis در لحظه به حدود ۳۰K میرسید و Redis ۴۰ گیگابایتی را مصرف میکرد. هیچ اپلیکیشنی نمیتوانست این حجم Request را با منابع پایین و زمان پاسخدهی ۱۰ میلیثانیه انجام دهد!
در ادامه، وقتی وارد فضای حل مسئله شدم:
پاکسازی دادههای اضافی: اولین قدم ما حذف کلی دادههای غیرضروری بود که هر کلید را به حدوداً ۵۰۰ بایت تبدیل کرد.
استفاده از Protobuf: به این فکر کردم که چرا از JSON استفاده کنیم؟ با استفاده از deserializer و serializer قدرتمندی مثل Protobuf، میتوانستیم حجم دادهها را به طور چشمگیری کاهش دهیم. با تبدیل دادهها به باینری و ذخیره آن، حجم هر کلید به حدود ۳۰۰ بایت کاهش یافت، که به معنای کاهش ۸۰ درصدی مصرف رم بود. با این حال، کیفیت و سرعت بالا در اکالا برای ما بسیار مهم بود.
شکستن کلیدها: کلیدها را به دو بخش تقسیم کردم:
اطلاعات محصول (شامل نام، بارکد، آدرس عکس و...) در یک کلید با حجم تقریباً ۲۰۰ بایت.
موجودی هر محصول در فروشگاهها در کلیدی دیگر با حجم حدود ۱۰۰ بایت.
در روش قبلی، اگر یک میلیون کالا داشتیم، مصرف حدود ۲۸۶ مگابایت بود. اما در روش جدید، فرض کنیم از یک میلیون تا 2000 محصول داریم و برای یک میلیون کالا موجودی در استور های مختلف، حدود ۹۵ مگابایت مصرف میشد!
کش کردن محصولات: همچنین، کالاهای اضافهشده به سبد خرید مشتریان را به مدت ۴ روز کش کردم. به جای استفاده از Redis به عنوان Primary Database و بدون TTL، هرگاه دادهای نداشتیم، از منبع اصلی اطلاعات را میگرفتیم و دوباره به مدت ۴ روز کش میکردیم. اگر کاربری همان کالا را دوباره به سبد خرید اضافه میکرد، TTL آن به صورت Sliding افزایش مییافت.
در نهایت، با همین ۴۰۰ مگابایت، همه چیز به خوبی به هم رسید و ما توانستیم پرفورمنس و سرعت را بدون هیچ افت کیفیتی حفظ کنیم!
@DevTwitter | <Hassan Arab borzo/>
یکی از جذابترین ریفکتور هایی که در اکالا انجام دادم، به ریلیز کردن ۴۰ گیگابایت رم ردیس برای استفاده در سبد خرید و سفارشها مربوط میشه. در این فرآیند، موفق شدم تنها از ۴۰۰ مگابایت رم استفاده کنم!
در شروع کار، به این فکر میکردم که چگونه میتوانم ۴۰ گیگابایت رم را آزاد کنم. اولین راهحلی که به ذهنم رسید، فشردهسازی دادهها بود. اما هیچ کامپرسوری نمیتوانست به اندازه کافی این حجم داده را فشرده کند، و هزینهی Decompress کردن آن بخاطر لود بالای سیستم، بسیار بالا بود.
هر کلید ما حاوی حدود ۱-۲ کیلوبایت JSON بود و مجبور بودیم که هر محصول را بدون TTL در Redis نگه داریم، زیرا Round Trip ما به Redis در لحظه به حدود ۳۰K میرسید و Redis ۴۰ گیگابایتی را مصرف میکرد. هیچ اپلیکیشنی نمیتوانست این حجم Request را با منابع پایین و زمان پاسخدهی ۱۰ میلیثانیه انجام دهد!
در ادامه، وقتی وارد فضای حل مسئله شدم:
پاکسازی دادههای اضافی: اولین قدم ما حذف کلی دادههای غیرضروری بود که هر کلید را به حدوداً ۵۰۰ بایت تبدیل کرد.
استفاده از Protobuf: به این فکر کردم که چرا از JSON استفاده کنیم؟ با استفاده از deserializer و serializer قدرتمندی مثل Protobuf، میتوانستیم حجم دادهها را به طور چشمگیری کاهش دهیم. با تبدیل دادهها به باینری و ذخیره آن، حجم هر کلید به حدود ۳۰۰ بایت کاهش یافت، که به معنای کاهش ۸۰ درصدی مصرف رم بود. با این حال، کیفیت و سرعت بالا در اکالا برای ما بسیار مهم بود.
شکستن کلیدها: کلیدها را به دو بخش تقسیم کردم:
اطلاعات محصول (شامل نام، بارکد، آدرس عکس و...) در یک کلید با حجم تقریباً ۲۰۰ بایت.
موجودی هر محصول در فروشگاهها در کلیدی دیگر با حجم حدود ۱۰۰ بایت.
در روش قبلی، اگر یک میلیون کالا داشتیم، مصرف حدود ۲۸۶ مگابایت بود. اما در روش جدید، فرض کنیم از یک میلیون تا 2000 محصول داریم و برای یک میلیون کالا موجودی در استور های مختلف، حدود ۹۵ مگابایت مصرف میشد!
کش کردن محصولات: همچنین، کالاهای اضافهشده به سبد خرید مشتریان را به مدت ۴ روز کش کردم. به جای استفاده از Redis به عنوان Primary Database و بدون TTL، هرگاه دادهای نداشتیم، از منبع اصلی اطلاعات را میگرفتیم و دوباره به مدت ۴ روز کش میکردیم. اگر کاربری همان کالا را دوباره به سبد خرید اضافه میکرد، TTL آن به صورت Sliding افزایش مییافت.
در نهایت، با همین ۴۰۰ مگابایت، همه چیز به خوبی به هم رسید و ما توانستیم پرفورمنس و سرعت را بدون هیچ افت کیفیتی حفظ کنیم!
@DevTwitter | <Hassan Arab borzo/>
Forwarded from Code Module | کد ماژول (𔓙)
درود ماژولیتیای گل💙
دوستان گروه از چنل بنا به یک سری دلایل جدا شده. دلیل اصلیش هم نظم دادن به گروه بود و الان با داشتن تاپیکهای لازم، دیگه سوال کسی این وسط گم نمیشه و دسترسیتون به پیام ها خیلی راحت تر خواهد بود.
در صورت داشتن هر گونه سوال، انتقاد و ... میتونید توی گروهمون جوین باشید👇🏻
@CodeModuleGap
دوستان گروه از چنل بنا به یک سری دلایل جدا شده. دلیل اصلیش هم نظم دادن به گروه بود و الان با داشتن تاپیکهای لازم، دیگه سوال کسی این وسط گم نمیشه و دسترسیتون به پیام ها خیلی راحت تر خواهد بود.
در صورت داشتن هر گونه سوال، انتقاد و ... میتونید توی گروهمون جوین باشید👇🏻
@CodeModuleGap