Syntax | سینتکس
رفتن به کانال در Telegram
Focus: Web Lan: Python & Go Website: https://syntaxfa.ir Quick connect: https://quick-connect.syntaxfa.ir Github: https://github.com/syntaxfa Group: https://t.me/Syntax_fa_group
نمایش بیشتر3 185
مشترکین
-124 ساعت
-17 روز
+1930 روز
آرشیو پست ها
3 185
اگه برای سرویس یا محصول تون به دنبال یه سرویس search engine هستید که کاربر بتونه باهاش product search کنه یا autocomplete و in-app search داشته باشه به جای راه اندازی دردسردار elasticsearch میتونید از meilisearch استفاده کنید.
الاستیک خیلی قابلیت ها داره که متفاوته با ابزاری که معرفی کردم، ولی برای مواردی که عرض کردم میتونه راه اندازی الاستیک و نگهداری ش بیش از حد سنگین باشه.
ابزار meilisearch با rust نوشته شده و زمان پاسخگویی ش خیلی پایینه (زیر ۵۰ میلی ثانیه) و تقریبا real-time آپدیت میکنه (۱ ثانیه تاخیر حدودا)
البته اعدادی که گفتم بسته به نحوه استفاده و داده شما و کانفیگ سرور میتونه متفاوت باشه
همچنین meilisearch قابلیت های فیلتر کردن ساده رو صرفا پشتیبانی میکنه اما facet search داره که فکر میکنم برای کاربردهای مذکور کافی باشه
بنظرم اگه لازم دارید چنین چیزی رو به امتحان کردنش میارزه.
Source:
LinkedIn
#meilisearch
@Syntax_fa
3 185
انواع لایسنسهای اپنسورس
1. MIT License
- ویژگیها:
- بسیار ساده و خلاصه است.
- به کاربران اجازه میدهد که کد را بدون محدودیت برای هر هدفی (تجاری یا غیرتجاری) استفاده کنند.
- نیازی نیست که تغییرات یا منبع کد به اشتراک گذاشته شود، هرچند که ذکر لایسنس اصلی اجباری است.
- مناسب برای: پروژههایی که میخواهند بیشترین آزادی را به کاربران بدهند.
2. Apache License 2.0
- ویژگیها:
- به کاربران اجازه استفاده، تغییر، و توزیع کد را میدهد، حتی برای اهداف تجاری.
- از کاربران میخواهد که حقوق مالکیت معنوی (patents) را تضمین کنند.
- تغییرات باید با ذکر لایسنس اصلی منتشر شوند.
- مناسب برای: پروژههایی که میخواهند کاربران آزادی زیادی داشته باشند و در عین حال از کد در برابر مشکلات مربوط به پتنت محافظت کنند.
3. GPL (GNU General Public License)
- ویژگیها:
- بسیار محافظهکار است.
- اگر کسی از کد شما استفاده کند و تغییراتی ایجاد کند، موظف است این تغییرات را نیز اپنسورس کند.
- مناسب برای پروژههایی که میخواهند مطمئن شوند که کدشان همیشه آزاد باقی میماند.
- مناسب برای: پروژههایی که نمیخواهند کسی از کد آنها در پروژههای اختصاصی (proprietary) استفاده کند.
4. LGPL (Lesser General Public License)
- ویژگیها:
- مشابه GPL است، اما انعطافپذیرتر.
- اگر از کتابخانه شما (SDK یا API) در یک پروژه دیگر استفاده شود، نیازی نیست که کل پروژه اپنسورس شود؛ فقط تغییرات روی کتابخانه شما باید اپنسورس شوند.
- مناسب برای: پروژههایی که شامل کتابخانهها یا SDKها هستند و میخواهند کاربران بتوانند آنها را در پروژههای اختصاصی استفاده کنند.
5. BSD License
- ویژگیها:
- شبیه MIT است، اما کمی محدودتر.
- نیازمند ذکر اعتبار (attribution) است و نمیگذارد نام نویسندگان اصلی برای تبلیغات استفاده شود.
- مناسب برای: پروژههای ساده که به محدودیتهای اندکی نیاز دارند.
6. Creative Commons Licenses (CC)
- ویژگیها:
- بیشتر برای محتوا (مثل اسناد، تصاویر، یا طراحیها) استفاده میشود.
- معمولاً برای کد کاربرد ندارد، اما اگر پروژه شما شامل مستندات یا محتوای غیرکدی است، میتواند مناسب باشد.
#Licence #open_source
@Syntax_fa
3 185
کلمه پر کاربر Bottleneck به چه معنیه؟
تصور کن یه بطری آب داری (bottle)، و میخوای خیلی سریع آب داخلش رو خالی کنی.
اما چون دهانهی بطری باریکه (neck)، سرعت خالی شدن آب کم میشه.
این قسمت باریک شده که جلوی سرعت رو میگیره، میگن bottleneck.
تو برنامهنویسی:
Bottleneck
یعنی بخشی از برنامه که باعث کند شدن کل عملکرد میشه.
مهم نیست بقیهی سیستم چقدر سریع باشن، تا وقتی bottleneck وجود داره، کار کل سیستم لنگ میمونه.
با Instrumentation میفهمی Bottleneck کجاست
مثلاً با Tracing:
میبینی یه درخواست API کل سیستم رو سریع رد میکنه، ولی توی مرحلهی `FindUser()`، یهو ۸ ثانیه مکث میکنه → Bottleneck همینه!
یا با Metrics:
نمودار نشون میده که وقتی درخواستها زیاد میشن، مصرف CPU میره بالا، اما فقط برای یه سرویس خاص.
چرا باید Bottleneck رو پیدا کنی؟
چون بهت میگه:
* کجا باید بهینهسازی کنی
* کدوم سرویس باید scale بشه
* چه منابعی داری هدر میدی
#Bottleneck
@Syntax_fa
3 185
تو tracing مفهوم spans و traces چیه؟
وقتی در مورد tracing حرف میزنیم، دو مفهوم اساسی وجود داره که باید بدونی: Spans و Traces
اسپنها (Spans)
یک span نمایانگر یک واحد کار (unit of work) هست که توسط یک درخواست انجام میشه. این واحد کار میتونه شامل اتفاقهایی مثل یک انشعاب (fork) در جریان اجرا یا یک انتقال (hop) در شبکه باشه، وقتی که درخواست در سیستم پخش میشه:
هر span ویژگیهای زیر رو داره:
- اسم مشخص
- زمان شروع
- مدت زمان اجرا
معمولاً spanها به صورت تو در تو (nested) و مرتبط با ترتیب زمانی هستن، تا بتونن روابط (causal relationships) رو نشون بدن.
تریسها (Traces)
یه trace رو میتونیم یک کار کامل در نظر بگیریم. وقتی چند تا span کار های unit رو انجام میدن و در نهایت به یک ریسپانسی میرسه کل این flow یک trace هستش.
میشه یه trace رو به عنوان یک گراف بدون چرخش جهتدار (Directed Acyclic Graph یا DAG) از spanها تصور کرد. یا حتی سادهتر، بهش به چشم یه استک تریس (stack trace) نگاه کرد که هر span توش نشوندهنده کاری هست که توسط یه کامپوننت انجام شده.
رابطه بین Trace و Spans
این رابطه به این شکله که یه trace مجموعهای از spanها رو شامل میشه که مسیر یک درخواست رو در سیستم نشون میده.
تو شکل بالا دو روش مختلف برای نمایش یک trace که شامل پنج span هست رو میبینیم. این درخواست از پنج سرویس مختلف عبور میکنه و در هر سرویس یه span جدید ایجاد میشه.
- سمت چپ: trace به صورت یک DAG نشون داده شده.
- سمت راست: trace به صورت یک نمودار میلهای (bar diagram) نمایش داده شده که محور زمان رو هم نشون میده.
ایجاد Root Span و ID اختصاصی
وقتی یه درخواست از اولین سرویس (که بهش edge service میگن) شروع میشه، root span ایجاد میشه. این root span تبدیل میشه به اولین گره (node) در trace.
ویژگی root span:
- بهش یه Trace ID یکتا و گولالی (globally unique trace ID) اختصاص داده میشه.
- این Trace ID به همراه هر hop بعدی در طول عمر درخواست منتقل میشه.
ایجاد Spanهای جدید در هر Hop
هر بار که درخواست به نقطهای از سیستم که ابزار tracing در اون فعال شده میرسه:
1. یه span جدید با Trace ID موجود ایجاد میشه.
2. ممکنه متادیتا (metadata) به درخواست اضافه بشه.
3. ا Trace ID دوباره به همراه درخواست به hop بعدی ارسال میشه.
ثبت و ارسال دادهها (Instrumentation)
وقتی جریان اجرا به یک نقطه instrumented میرسه:
- یه رکورد (record) همراه با متادیتا ثبت میشه.
- این رکورد معمولاً به صورت asynchronously در دیسک ثبت میشه.
- بعد از اون، این رکورد به یک collector ارسال میشه که جریان اجرا رو از روی رکوردهای ثبتشده بازسازی میکنه.
source:
Cloud native go Book
#tracing
@Syntax_fa
3 185
معرفی پروژه Quick Connect
فرقی نمیکنه اپلیکیشن شما تو چه دسته ای قرار میگیره در هر صورت به این قابلیت ها نیاز داره:
- کاربر ها بتونن به شکلی ساده و خوشایند با پشتیبانی تماس برقرار کنن.
- اپلیکیشن شما بتونه به خوبی با بازدید کننده ها، تعامل برقرار کنه.
کوئیک کانکت قراره همه این دغدغه هارو حل کنه اونم بصورت رایگان و اپن سورس!
با کوئیک کانکت مثل ابزار Crisp و یا تو ایران «گفتینو»، می تونید به پروژتون چت آنلاین رو اضافه کنید.
اگه دقت کرده باشید وب سایت های پربازدید مثل digikala و filimo و zoomit قابلیتی شبیه به استوری اینستاگرام اضافه کردن که باعث افزایش تعامل با کاربر میشه. همچنین کوئیک کانکت هم، قابلیت جذاب استوری رو قراره داشته باشه.
پروژه سبک و قابل مقیاس هستش. زبان مورد استفاده سمت بک اند گولنگه و برای داشبورد از react استفاده می کنیم
اگه توانایی کانتریبیوت کردن دارید، خوشحال میشیم جوین بشید.«برای نحوه کانتریبیوت به گیتهاب پروژه مراجعه کنید»
منتظر حمایت و استار شما هستیم تا بهمون انگیزه بده این پروژه جذابو پیش ببریم.
لینک پروژه:
https://github.com/syntaxfa/quick-connect
#quick_connect
@Syntax_fa
3 185
پلتفرم کارزار: پلتفرم مستقل برای مطالبهگری مردمی!؟
آنچه در روزهای اخیر پیرامون کارزار درخواست لغو حکم اعدام امیرتتلو رخ داد، بار دیگر نشان داد که فضای مطالبهگری مردمی در ایران تا چه حد محدود است. این کارزار که توانست در مدت کوتاهی حدود ۶۰۰ هزار امضا جمعآوری کند، نشاندهنده یک واقعیت اجتماعی مهم بود: مردم، حتی در سختترین شرایط، همچنان به امیدی برای تغییر و تعامل با ساختارهای قانونی کشور دل بستهاند
متن این کارزار نه تنها حاوی هیچگونه توهین، تهدید یا حتی انتقادی نبود، بلکه با زبانی کاملاً محترمانه و مطابق با اصول قانونی و اخلاقی نوشته شده بود. درخواست آنها ساده و انسانی بود: لغو حکم اعدام و دادن فرصتی دوباره نه به خاطر تایید اشتباهات او بلکه برای نشان دادن رأفت اسلامی و تکیه بر آموزههای دینی که همواره بر بخشش و پذیرش توبه تاکید داشتند
اما داستان این کارزار، علیرغم استقبال گسترده با پایانی تلخ مواجه شد. مسدود شدن این کارزار به دستور نهادهای قضایی، نه تنها به این مطالبه مردمی پایان داد، بلکه پیام ناامیدکنندهای به جامعه ارسال کرد: حتی در فضایی شفاف و قانونی نیز صداهای مسالمتآمیز خاموش می شوند
3 185
بس کن ایرانی!
درباره پروژه:
بس کن ایرانی یک پروژهی متنباز و مردمی است که با هدف افزایش آگاهی اجتماعی و نقد رفتارهای اشتباه در جامعه طراحی شده. هدف ما ایجاد فضایی برای گفتگو، آموزش و تحول فرهنگیست.
باحال بود دیدم شما هم ببینید😁
#fun
@Syntax_fa
3 185
بچه ها میخوام بهتون روحیه بدم حتما این کلیپو ببینید نتیجه فقط یه سال تلاش شبانه روزیه
#fun
@Syntax_fa
3 185
چطور تبدیل به شت کدر بشیم؟؟
1. هیچ قانونی نداشته باش!
بذار هرکی هرجوری دلش خواست کد بزنه.
2. کیفیت؟ این دیگه چه مزخرفیه؟
فقط سریع باش! وقتت رو حرومه بررسی و تست نکن. هرچی زودتر تحویل بدی بهتره!
3. امنیت؟ 😂
هرکی اومد، همه چی رو بهش بده. رمز نمیخواد، ورود نمیخواد، اعتبارسنجی؟ چی هست اصن؟ همه چیز آزاده! چرا سخت میگیری تو دنیای آزاد، آزادانه رفتار کن
4. کد تکراری ؟ اشکال نداره!
یه تیکه کد نوشتی؟ صدبار کپیش کن توو جاهای مختلف. چرا زحمت بکشی تابع درست کنی؟
5. به سرعت لاکپشت وفادار باش!
نه کشی، نه بهینهسازی، نه تست عملکرد. بذار برنامت در حد اینترنت دایل آپ اجرا بشه!
6. کیفیت برای دیگران؟ نه بابا!
فقط رو سیستم خودت تست کن اونم فقط با chrome. اگه کسی با سیستم یا مرورگره دیگهای وارد شد، مشکل خودشونه! شما که خودت همه چیز رو دیدی!
7. پروژهتو توی غار بنویس!
نه فیدبک بگیر، نه دمو بده...
8. ا(observability) حسش نیس!
صبر کن کاربر خودش زنگ بزنه و بگه: «سایتتون به فنا رفته!» بعد تازه بپرسی: چی دیدی؟ چه اروری بود؟ چی زدی؟!
📌 اگه میخوای یه نرمافزار ضعیف بسازی، فقط کافیه این دستورالعملها همیشه اولویتت باشه!
source
#fun
@syntax_fa
3 185
معرفی اپ گیتهابی Renovate – خودکارسازی مدیریت وابستگیها
بهروز نگه داشتن وابستگیها (dependencies) یکی از مهمترین و در عین حال خستهکنندهترین وظایف تیمهای فنیه. هر روز ممکنه یک نسخه جدید از کتابخونهای که استفاده میکنید منتشر بشه — آیا لازمه آپدیتش کنید؟ آیا تغییراتش سازگار با پروژه شماست؟ آیا آسیبپذیری امنیتی داره؟
اینجاست که اپ Renovate این بار رو از روی دوش شما برمیداره.
Renovate چیه؟
Renovate یک ابزار اپنسورس از شرکت Mend هست که به صورت خودکار:
- آپدیتهای جدید کتابخانهها، ابزارها و وابستگیهای پروژه رو شناسایی میکنه.
- Pull Request (یا Merge Request) میسازه با نسخه جدید و changelog.
- میتونه براساس قوانین دلخواه، آپدیتها رو اتوماتیک merge یا review کنه.
- از زبانهای مختلف مثل Go, JavaScript/TypeScript, Python, Docker, GitHub Actions و... پشتیبانی میکنه.
نمونه کاربرد: پروژه Go
برای پروژههایی که با Go توسعه داده شدن، Renovate میتونه فایل
go.mod رو بررسی کنه و نسخههای جدید پکیجها رو پیشنهاد بده. حتی میتونه نسخهی Go خود پروژه رو هم بررسی کنه (در صورت فعالسازی).
ما تو پروژه quick connect از Renovate استفاده کردیم:
https://github.com/syntaxfa/quick-connect/blob/main/renovate.json5
نکته:
فایل enovate.json میتونه توی .github هم باشه اگه دوست ندارید تو روت پروژه قرارش بدید.
چند تا نکته:
- برای پروژههایی که CI/CD دارند، میشه آپدیتهای GitHub Actions رو هم خودکار مدیریت کرد.
- میتونید از labels، commit convention، یا حتی محدودیت در تعداد PRها استفاده کنید.
- با فعالسازی vulnerability alerts، بدون نیاز به منتظر بودن برای PR، از آسیبپذیریها مطلع میشید.
#renovate
@Syntax_fa3 185
امروز یه باگ بامزه تو پروژه Django خورد تو صورتم که گفتم باهاتون درمیون بذارم، شاید یه روزی به دادتون برسه!
اگه بعد از ساختن یه آبجکت توی ویو (مثلاً با متد create) بلافاصله آیدی اون رو بدی به یه تسک Celery، ممکنه توی محیط پروداکشن با ارور DoesNotExist مواجه بشی — در حالی که لوکال همه چیز درست کار میکنه!
چرا این اتفاق میافته؟
چون وقتی تنظیماتی مثل ATOMIC_REQUESTS = True فعال باشه، Django تا زمانی که ریکوئست کامل نشه، اطلاعات رو به دیتابیس commit نمیکنه.
از اون طرف Celery تسک رو بلافاصله بعد از پاسخ 201 اجرا میکنه؛ یعنی قبل از اینکه دیتابیس واقعاً اطلاعات رو ذخیره کرده باشه.
راهحل درست و اصولی:
به جای اینکه تسک رو همون لحظه اجرا کنیم، باید صبر کنیم تا commit تموم بشه.
و Django خودش این ابزار رو بهمون داده:
transaction.on_commit(lambda: my_task.delay(obj_id))
این خط یعنی: «بعد از اینکه commit شد، حالا برو سراغ تسک.»
یه نکته ساده ولی حیاتی که میتونه جلوی کلی باگ دردسرساز رو بگیره — مخصوصاً وقتی کد رو از dev میبریم روی production!
Source
#django
@Syntax_fa
3 185
کیا پایه انجام پروژه اپن سورس بک اند پایتونی هستید؟
ایده رو بگید استارتشو بزنیم. هر چی پر چالش تر بهتر
3 185
مهارت تمام کردن کار ها (task completion skills)
مهارت شروع کردن همیشه به عنوان یک ویژگی جذاب مطرحه. همهی ما دوست داریم کارها و پروژه هامونو با انرژی و اشتیاق زیاد شروع کنیم. اما نکتهای که شاید کمتر بهش توجه می کنیم اینه که مهارت تموم کردن، حتی از مهارت شروع کردنم مهمتره!
توانایی به پایان رسوندن کارها نه تنها نشون دهنده نظم و پشتکار هستش، بلکه باعث رشد واقعی و ایجاد اعتماد به نفس میشه.
شروع کردن آسونه، تموم کردن چالش واقعیه!
همهی پروژهها تو روزهای اول خیلی جذاب و دلبرن. ایدههای نو، انرژی اولیه، و هیجان برای شروع چیزی جدید باعث میشه احساس کنیم تو مسیر درستی قرار داریم. اما چند هفته یا چند ماه که میگذره اشتیاق اولیه کمرنگ میشه و کار به بخشهای چالشبرانگیز میرسه. اینجاست که تمایل به رها کردن کار یا درجا زدن به وجود میاد.
یادگیری واقعی موقع تموم کردن
وقتی کاری رو تموم می کنیم، تازه متوجه میشویم که چه چیزهایی یاد گرفتیم. از فاز ایدهپردازی تا اجرا و از حل چالشها تا نتیجهگیری، تموم این مراحل در پایان کار شکل واقعی پیدا می کنن. اگه پروژه رو نیمهکاره رها کنیم، از بخش مهمی از یادگیری محروم میشیم.
اعتماد به نفس از "فرام اسکرچ تا پروداکشن" میاد!
انجام یه پروژه از صفر تا صد، به شما نشون میده که توانایی تبدیل یک ایده به یک محصول واقعی رو دارید که باعث میشه اعتماد به نفس شما، به شدت افزایش پیدا کنه که میتونید کارهای بزرگتری رو هم انجام بدید.
بعضی چالش های میونه راه مشخص میشه:
- کارهای جزیرهای و گسسته
طول یک پروژه یا تسک طولانی، گاهی کارهایی انجام میدیم که تو لحظه به نظر میرسه ارتباط مستقیمی با نتیجه نهایی نداره. بعد چند وقت، این کارهای جزیرهای انباشته میشن و نمیدونیم چطور اون هارو کنار هم قرار بدیم تا پروژه به نتیجه برسه. اینجاست که نیاز به برنامهریزی دقیق و اولویتبندی اهمیت پیدا میکنه.
- کاهش اشتیاق
اشتیاق اولیه معمولا بعد از مدتی کاهش پیدا میکنه و پروژه فعلی برامون جذابیتش رو از دست میده. درست تو همین لحظه هاست که باید انگیزه هامون رو بیشتر کنیم و ادامه بدیم.
چطور میشه مهارت تموم کنندگیمون رو افزایش بدیم؟
از کوچک شروع کنید و قدم به قدم پیش برید
پروژههای بزرگ رو به بخشهای کوچیک تر تقسیم کنید. اگه بخواید همون اول کار به تموم چالش ها و مشکلاتی که باهاش قراره مواجه بشید فکر کنید، هیچوقت نمیتونید دست به کار بشید. پس پروژه رو به بخش های مختلف تقسیم کنید و یک بخش رو تموم کنید بعد برید سراغ بعدی.
برنامهریزی
بدون برنامه مشخص، احتمالا وسطاش راه خونتون رو هم گم می کنید اینقدر که همه چی بی نظم و نچسب میشه. پس با تعیین ددلاین و اهداف مشخص، میتونید کاری کنید پروژه فقط همون اول راه خوب و جذاب نباشه.
#soft_skill
@Syntax_fa
3 185
وب سایت Excalidraw خیلی خوشگل مشگله برای دیزاین پیشنهادش میدم
https://excalidraw.com/
@Syntax_fa
