Dev Perfects
41 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from a pessimistic researcher (Kc)
یه چیز خیلی جالبی که بهش برخوردم اینه که تعدادی از مقالات خوب این حوزه توی یک کنفرانسی چاپ شدن به اسم CHARME که من هیچ اسمی ازش نشنیده بودم. خلاصه نظرم رو جلب کرد و یکم پی‌اش رو گرفتم. متوجه شدم که کنفرانس CHARME یا همون Advanced Research Working Conference on Correct Hardware Design and Verification Methods اولین بار سال ۱۹۹۳ توی شهر Arles فرانسه برگزار شده و بعد از اون هر سه چهار سال یک بار توی اروپا برگزار میشده. نکته جالبی که خیلی نظرم رو جلب کرد به خودش این بود که آدمای خیلی خفن و مقالات خیلی کلیدی‌ توی این سری از کنفرانس‌ها چاپ شدن و خیلی‌هاشونم در مورد وریفیکیشن سافتور بودن، منتهی چون اون زمان برای اینکه بتونی ایده‌های وریفیکیشنی رو بفروشی می‌باید می‌چسبوندیش به هاردور، اینا هم اومدن و مقالاتشون رو اینجا چاپ کردن. این کنفرانس آخرین بار سال ۲۰۰۵ توی شهر خودمون Saarbrücken برگزار شد و دیگه خبری ازش نشد.

ما از این دست کنفرانس‌ها زیاد داریم که مثلا اون موقع یه چیزی روی بورس بوده و اومدن اسم کنفرانس‌ رو بر اساس اون انتخاب کردن ولی چون خیلی اعتبار گرفته نیومدن اسمش رو تغییر بدن ولی مورد کاربریش رو چرا. یه مثال خوب کنفرانس OOPSLA هستش که مخفف Object-Oriented Programming, Systems, Languages & Applications هستش ولی خب الان یکی از کنفرانس‌های تاپ حوزه‌ی PL/FM هستش و شاید فقط ۵ درصد مقالاتش مربوط به OOP باشه.

روپاک هم توی CHARME مقاله چاپ کرده. از مراکش که برگشت باید ازش بپرسم که چرا CHARME دیگه تموم شد و ادامه‌اش ندادن. شاید اطلاع داشت.
حالا که دارین با پروژه هاتون فلکس میکنین منم اینو اضاف کنم:

نصب کوبر به صورت production ready
https://github.com/ramed6273/k8s-production-ready

@DevTwitter | <بوم بر بوم به/>
Forwarded from Syntax | سینتکس (alireza-fa)
image-1746985558205.png
783.8 KB
دعوت به مشارکت در پروژه Quick Connect

اگر دنبال یه پروژه‌ی مدرن، متن‌باز، با ساختار تمیز و چالش‌های جذاب می‌گردی که بتونی هم یاد بگیری هم یچیز بدرد بخور بسازیم، بیا سمت Quick Connect

درباره کوئیک کانکت
پلتفرمی سبک، مقیاس‌پذیر و کلاد نیتیو برای ارتباط بهتر با کاربران اپلیکیشن‌ها
با قابلیت‌هایی مثل:
- چت آنلاین
- داشبورد مدیریتی
- نوتیفیکیشن‌ها
- استوری‌های کاربرمحور

کیا میتونن مشارکت کنن؟

1. فرانت‌اند دولوپرهایی که بتونن با WebSocket، ارتباطات real-time و رابط کاربری جذاب کار کنن.
اگر با React، Vue یا هر ابزار فرانت مدرنی راحتی، اوکیه

2. طراح UI/UX
به سلیقه‌ت نیاز داریم

3. و البته بک‌اند دولوپرهای Go هم اگر خیلی مشتاق باشن و خوب کد بزنن.

پروژه به صورت Monorepo توسعه داده می‌شه و کل ساختار کد، مستندات، و ابزارهای توسعه توی یه ریپو جمع شدن (به جز SDK).

اگه علاقه‌مندی به مشارکت، پیوی پیام بده:

@ayeef

@Syntax_fa
Forwarded from Syntax | سینتکس (alireza-fa)
دعوت به مشارکت در پروژه Quick Connect

اگر دنبال یه پروژه‌ی مدرن، متن‌باز، با ساختار تمیز و چالش‌های جذاب می‌گردی که بتونی هم یاد بگیری هم یچیز بدرد بخور با هم بسازیم، بیا سمت Quick Connect

درباره کوئیک کانکت
پلتفرمی سبک، مقیاس‌پذیر و کلاد نیتیو برای ارتباط بهتر با کاربران اپلیکیشن‌ها
با قابلیت‌هایی مثل:
- چت آنلاین
- داشبورد مدیریتی
- نوتیفیکیشن‌ها
- استوری‌های کاربرمحور

کیا میتونن مشارکت کنن؟

1. فرانت‌اند دولوپرهایی که بتونن با WebSocket، ارتباطات real-time و رابط کاربری جذاب کار کنن.
اگر با React، Vue یا هر ابزار فرانت مدرنی راحتی، اوکیه

2. طراح UI/UX
به سلیقه‌ت نیاز داریم

3. و البته بک‌اند دولوپرهای Go هم اگر خیلی مشتاق باشن و خوب کد بزنن.

پروژه به صورت Monorepo توسعه داده می‌شه و کل ساختار کد، مستندات، و ابزارهای توسعه توی یه ریپو جمع شدن (به جز SDK).

اگه علاقه‌مندی به مشارکت، پیوی پیام بده:

@ayeef

#quick_connect

@Syntax_fa
Forwarded from cyru55 unofficial channel (cyru55)
Because the wheel did not turn to the taste of a wise man
If you want to count the world as seven, or even eight
While you must die and put down all your wishes
Whether ants eat you at the grave, whether wolves at the plain

👤Khayyam
Forwarded from AI Pulse (Mohammad)
گوگل در کنفرانس دیشب از  Gemini Diffusion رونمایی کرد. یه مدل آزمایشی که به‌جای پیش‌بینی کلمه‌به‌کلمه، از تکنیک "دیفیوژن" (پخش تدریجی) برای تولید متن استفاده می‌کنه. این سیستم دقیقا مشابه چیزیه که قبلا در مدل های خانواده Mercury دیده بودیم.

برخلاف مدل‌های زبانی سنتی که متن رو کلمه‌به‌کلمه تولید می‌کنن، Gemini Diffusion از روشی الهام‌گرفته از تولید تصویر استفاده می‌کنه: اصلاح نویز طی چند مرحله.

این سیستم با یه سری نویز تصادفی شروع می‌کنه و کم‌کم اون‌ رو به بخش‌های کامل و منسجم متن تبدیل می‌کنه. این روش اجازه می‌ده در میانه‌ی مسیر، اصلاحات انجام بشه و کنترل بیشتری روی خروجی داشت. به گفته‌ی دیپ‌مایند، این کار باعث می‌شه خروجی‌ها منسجم‌تر و از نظر منطقی، مرتبط‌تر باشن؛ چیزی که مخصوصاً برای کارهایی مثل تولید کد و ویرایش متن خیلی مؤثره، چون دقت، انسجام و امکان بازبینی تو این حوزه‌ها خیلی مهمه.


‏Gemini Diffusion به‌جای اینکه متن رو از چپ به راست و به‌صورت خطی تولید کنه، یک‌باره بخش‌های کامل از متن رو تولید می‌کنه — و این کار رو خیلی سریع‌تر از مدل‌های سنتی انجام می‌ده. دیپ‌مایند گفته این سیستم می‌تونه با سرعت ۱۴۷۹ توکن بر ثانیه (بدون احتساب سربار سیستم) کار کنه و تأخیر اولیه‌ی اون فقط ۰.۸۴ ثانیه‌ست.

به‌گفته‌ی «برندن اوداناهیو»، پژوهشگر دیپ‌مایند، این مدل توی کارهای برنامه‌نویسی حتی می‌تونه به سرعت ۲۰۰۰ توکن در ثانیه هم برسه، حتی وقتی سربارهایی مثل توکنیزیشن، آماده‌سازی و بررسی‌های ایمنی رو هم در نظر بگیریم.

«اوریول وینیالز»، معاون پژوهش دیپ‌مایند و یکی از مدیران پروژه Gemini، عرضه‌ی این مدل جدید رو یه دستاورد شخصی توصیف کرده و گفته: «همیشه آرزو داشتم بتونم نیاز به تولید متن از چپ به راست رو حذف کنم.» توی نسخه‌ی نمایشی مدل، سرعت خروجی اون‌قدری بالا بوده که برای دیدن عملکردش، مجبور شدن ویدیو رو آهسته پخش کنن.

در آزمون‌ها، Gemini Diffusion عملکردی تقریباً برابر با نسخه‌ی Gemini 2.0 Flash Lite داشته. توی وظایف برنامه‌نویسی مثل HumanEval (با دقت ۸۹.۶٪ در مقابل ۹۰.۲٪) و MBPP (۷۶٪ در مقابل ۷۵.۸٪) نتایج تقریباً مساوی بوده.

حتی توی برخی آزمون‌ها مثل LiveCodeBench (۳۰.۹٪ در مقابل ۲۸.۵٪) و LBPP (۵۶.۸٪ در مقابل ۵۶٪)، Gemini Diffusion کمی بهتر ظاهر شده. با این حال، توی حوزه‌هایی مثل استدلال علمی (GPQA Diamond) و آزمون چندزبانه‌ی Global MMLU Lite ضعیف‌تر عمل کرده و به‌ترتیب امتیازهای ۴۰.۴٪ و ۶۹.۱٪ رو گرفته، در حالی که مدل Flash Lite امتیازهای بالاتری به‌دست آورده (۵۶.۵٪ و ۷۹٪).

به این ترتیب، برای اولین‌بار یه مدل زبانی مبتنی بر تکنیک دیفیوژن تونسته به سطح عملکرد مدل‌های رایج فعلی برسه — حتی با وجود اینکه Gemini 2.0 Flash-Lite یه مدل اقتصادی‌تر و قدیمی‌تر از گوگله.

«جک ری»، دانشمند ارشد دیپ‌مایند، این دستاورد رو یه «لحظه‌ی تاریخی» دونسته. تا پیش از این، مدل‌های خودبازگشتی (autoregressive) همیشه توی کیفیت متن عملکرد بهتری داشتن و مشخص نبود که مدل‌های دیفیوشن بتونن بهشون برسن. ری این موفقیت رو نتیجه‌ی تحقیقات متمرکز و حل «تعداد زیادی» از چالش‌های فنی دونسته.

@aipulse24
Forwarded from AI Pulse (Mohammad)
مدل
Devstral: the best open source model for coding agents

با ۲۴ میلیارد پارامتر روی ollama اضافه شد.


Ollama

حجم بسیار کم، نتایج بسیار عالی (بنچمارک) از ویژگی‌های این مدل هست.
Forwarded from Linuxor ?
سمنتیک یو آی یه فریم‌ورک UI مثل Bootstrap ولی با کلاس‌های قابل خواناتر. مثلاً به‌جای btn-primary، مینویسی ui primary button — خود جمله‌ست.

خودت بخونش، راحت‌تر درکش می‌کنی.

برای ساخت سریع UI تمیز و قابل کاستوم، تو پروژه‌های MVP یا دمو واقعاً می‌درخشه.

github.com/Semantic-Org/Semantic-UI

@Linuxor
Forwarded from cyru55 unofficial channel (cyru55)
🔻برنامه‌نویسی، هک، لینوکس، ربات، هوش و...

👥 @WhatIsProgramming

🙄
Forwarded from Syntax | سینتکس (alireza-fa)
نمونه‌برداری و کاهش چشمگیر هزینه‌ها در Tracing بدون از دست دادن Visibility

قبل اینکه بریم سراغ sampling توضیح کوتاهی درباره trace و span بخونیم:
یک trace رو می‌تونیم به‌عنوان نماینده‌ ی یک کار کامل تو سیستم در نظر بگیریم. مثلا وقتی کاربر درخواست ثبت سبد خرید میده، این عملیات به‌صورت کامل یک Trace حساب می‌شه.

هر Span یک بخش کوچک از اون Trace هست. مثلاً برای ثبت سبد خرید، ممکنه چند سرویس درگیر بشن (مثل بررسی موجودی، محاسبه‌ی تخفیف، ثبت در پایگاه داده و ...) که هر کدوم از این مراحل می‌تونه یک Span جدا باشه. در نهایت، این Spanها کنار هم قرار می‌گیرن و یک کار کامل یعنی trace رو تشکیل می‌دن.

پس با استفاده از traces (یا همون ردپاها)، می‌تونید با دقت بررسی کنید یک درخواست از کجا شروع شده، به کدوم سرویس‌ها رفته، و حتی در هر فانکشن یا لایه چقدر زمان برده تا پردازش بشه.
می‌تونید اطلاعات اضافی (Attributes) یا رویدادهایی که اتفاق افتاده رو هم به هر Span اضافه کنید. در کل، Trace ابزار فوق‌العاده‌ای برای تحلیل دقیق و عمیق رفتار سیستمتونه.

اما یه مشکلی هست:
تریس کردن همه‌ی درخواست‌ها هزینه‌ی زیادی داره، هم از نظر حافظه و پهنای باند و هم هزینه‌ی پردازش و ذخیره‌سازی.
در واقع، بیشتر درخواست‌هایی که وارد سیستم شما می‌شن بدون خطا و با latency مناسب انجام می‌شن. پس واقعا نیازی به نگه‌داری صد درصد تریس ها ندارید.
شما فقط به نمونه هایی از کل تریس ها نیاز دارید. اینجاست که مفهوم Sampling و یا همون نمونه برداری وارد می‌شه.

نمونه برداری یعنی چی؟

نمونه برداری یعنی تصمیم بگیریم کدوم Traceها نگه‌داری (Sampled) بشه و کدوم رو حذف کنیم (Not Sampled).
هدف اینه که با یه درصد کوچیک و حساب‌شده از داده‌ها، تصویری واضح از وضعیت سیستم داشته باشیم.

مثلا اگه شما هزار تا Trace در ثانیه تولید می‌کنید، نگه داشتن ۱۰۰٪ اونا هم پرهزینه‌ست و هم اغلب غیرضروری. توی این شرایط، یه نرخ Sampling حتی در حد ۱٪ هم می‌تونه نماینده خوبی از رفتار کلی سیستم باشه.

چه زمانی باید از Sampling استفاده کنیم؟

* وقتی تعداد زیادی Trace در ثانیه تولید می‌کنید (مثلا بیشتر از ۱۰۰۰ تا)
* وقتی بیشتر ترافیک شما سالم و بدون خطاست
* وقتی بتونید با قواعد خاصی (مثل خطا داشتن یا latency زیاد) تصمیم بگیرید که چه Traceهایی مهم‌ترن
* وقتی بودجه محدودی برای observability دارید

همچنین ما دو نوع نمونه برداری داریم:

1. Head Sampling

اینجوریه که تو لحظه ای که یک تریس ایجاد میشه، براساس ID و بدون درنظر گرفتن محتوا تصمیم‌گیری میکنه که این تریس سمپل هستش یا نه.
مزیتش اینه ساده و سریعه، ولی نمی‌تونه مثلا تشخیص بده که آیا داخل اون Trace خطا بوده یا نه.
مثال استفادش مثلا میگیم پنجاه درصد کل درخواست هارو نگه دار.

2. Tail Sampling

نمونه برداری بعد از اینکه کل Trace جمع‌آوری شد. می‌تونه براساس شرایطی مثل داشتن خطا، زیاد بودن latency، یا حتی اطلاعات مربوط به یک سرویس خاص تصمیم بگیره. خیلی قدرتمنده ولی نسب به head sampling منابع و هزینه بیشتری میخواد.

مثال tail sampling:
– هر Trace که error داشته باشه رو حتما نگه دار
– اگه latency بالای ۳ ثانیه بود، نگه دار
– تریس هایی که از سرویس جدیدمون شروع می‌شن رو بیشتر نگه دار

گاهی ترکیب Head و Tail Sampling بهترین راهه

مثلا ممکنه یه سیستم خیلی پرحجم اول با Head Sampling فقط ۱۰٪ داده‌ها رو رد کنه، بعد اون ۱۰٪ رو بیاره داخل یه سیستم Tail Sampling تا براساس هوشمندی بیشتر تصمیم بگیره چی رو نگه داره.

پیاده سازی عملی:
ما تو پروژه اپن سورس و مدرن Quick-Connect از opentelemetry برای جمع آوری تریس ها استفاده کردیم و از head sampling هم برای نمونه برداری استفاده کردیم که توی کانفیگ میتونید مشخص کنید به چه صورت باشه.
اگه 0 تنظیم کنید هیچی تریس نمیکنه و اگه 1 تنظیم کنیم صد درصد تریس میکنه.
برای اینکه مشخص کنید ده درصد باشه میتونید روی 0.1 تنظیمش کنید.

https://github.com/syntaxfa/quick-connect/tree/main/adapter/observability/traceotela


#trace #sampling #opentelemetry #observability

@Syntax_fa
Forwarded from یک برنامه نویس تنبل (The Lazy 🌱)
This media is not supported in your browser
VIEW IN TELEGRAM
🔶 این خط پایان ترجمه است؛

این شروع همکاری‌های بین‌المللی و گفتگوی ملت‌ها است و دیگر به زبان محدود نخواهد بود!

گوگل میت قابلیت ترجمه همزمان زنده را فعال کرده؛

کاربران می‌توانند در لحظه صحبت افراد را به زبان خود یا هر زبانی بشنوند!

#خبر

@TheRaymondDev
Forwarded from یه شعر (Poem Bot)
مولانا | دیوان شمس | رباعیات | رباعی شمارهٔ ۹۹

در چشم آمد خیال آن در خوشاب
آن لحظه کزو اشک همی رفت شتاب
پنهان گفتم به راز در گوش دو چشم
مهمان عزیز است بیفزای شراب

#مولانا | گنجور
📍@iipoem
Forwarded from Gopher Academy
🔵 عنوان مقاله
Compress: Optimized Compression Packages for Go

🟢 خلاصه مقاله:

مقاله به تجزیه و تحلیل جامع استانداردهای مختلف فشرده‌سازی پرداخته که شامل zstandard، S2، gzip، snappy، و zip می‌باشد. هر یک از این استانداردها خصوصیات منحصر به فردی دارند و بسته به نیاز کاربردی، سرعت و کارایی فشرده‌سازی، مزایای مختلفی ارائه می‌دهند. این مقاله به خوبی ویژگی‌های کلیدی و موارد استفاده ایده‌آل هر استاندارد را خلاصه کرده است تا افراد و سازمان‌ها بتوانند بر اساس نیازهای خاص فشرده‌سازی داده‌های خود تصمیم‌ گیری کنند.

🟣لینک مقاله:
https://golangweekly.com/link/169230/web


👑 @gopher_academy
متأسفانه چون به چشم خودم دیدم که یک‌جایی pipe ( | ) رو با && اشتباه گرفته بودن، این مطلب رو صرفاً می‌نویسم تا فرقشون رو به صورت خلاصه بگم. بعداً هم اگر حال داشته باشم یک مطلب کلی‌تر توی بلاگم با عکس و نمودار و اینا می‌نویسم که فرق کلیشو بگم.

خب اول از همه با پایپ شروع می‌کنیم، پایپ چی هستش؟

عملگر Pipe ( |) در شل به شما اجازه می‌دهد خروجی یک دستور را مستقیماً به ورودی دستور بعدی منتقل کنید. به عبارت ساده‌تر، وقتی از | استفاده می‌کنید، آنچه را که در خروجی دستور اول تولید می‌شود، به عنوان ورودی دستور دوم دریافت می‌شود.


مثلاً، من یک فایل دارم به اسم foo.txt می‌خوام ببینم این فایل من چند خط هستش.

چیکار می‌کنم؟

cat foo.txt | wc -l


اینطوری خروجی دستور اول رو به عنوان ورودی دستور دوم که wc -l برای نشان دادن تعداد خط هستش می‌فرستم و مثلاً خروجی ۹۱ رو دریافت می‌کنم.


از پایپ می‌تونید استفاده‌های دیگه‌ای هم بکنید :).


حالا && چیه؟
در شل (Shell)، عملگر && هم برای زنجیره‌سازی دستورات به کار می‌رود، اما با یک شرط: دستور بعد از && فقط زمانی اجرا می‌شود که دستور قبل از آن بدون خطا (با موفقیت) اجرا شده باشد.


مثلاً، من می‌خوام یک دایرکتوری بسازم و بعد بهش وارد بشم یا اول سیستمم رو آپگرید کنم بعدش درجا ری‌استارتش کنم:

mkdir foo && cd foo


sudo pacman -Syu --noconfirm && reboot


این کلا یک توضیح ساده بود :)


@SohrabContents
Forwarded from Python Hints
#تجربه #جنگو

چیزی که توی کدهای Django توی ایران به معنای واقعی اصلا و هیچوقت ندیدم؛ اما جزو مهمترین موارد هست.

تست نویسی برای سرویس‌های third-party هست که از طریق API استفاده می‌کنیم.

همینجا اضافه کنم؛ همیشه فرض ما این هست که هیچ اتفاقی برای اون سرویس‌ها نمیوفته ولی چندتا سوال؛

۱- سرویس ما چه اتفاقی باید براش بیوفته اگر سرویس دهنده تغییراتی داشته باشه ؟ و درخواست‌های ما 400, 404 , ... برگرده ؟

۲- چه اتفاقی برای سرویس‌های ما خواهد افتاد اگر سرویس دهنده بخاطر محدودیت‌های جدید یا .... بهمون 500, 503, ... برگردونه ؟

اینا چیزهایی هست که ننوشتن تست براش می‌تونه خسارت زیادی به سرویس بزنه مثلاً:

فرض کنید، من یک فروشگاه اینترنتی دارم؛ اگر سرویس درگاه پرداخت به هر دلیلی کار نکنه یعنی فروشگاه من هیچ خروجی نداره دوتا مورد باید هرچه سریعتر انجام بشه :

۱- یک ایمیل critical برای ادمین بره تا بتونه پیگیری کنه موضوع رو از سرویس دهنده

۲- خطای مناسب (اینکه سرویس پرداخت غیرفعال هست) به کاربر نشون داده بشه تا از رفرش و DDOS شدن توسط کاربرهای خودمون جلوگیری بشه

بخصوص روی سرویس‌های auto-scale که با زیاد شدن درخواست سرورهای جدیدی بالا میاد و این یعنی هزینه بیشتر.


توی زبان‌های برنامه‌نویسی مختلف ابزارهای متفاوتی برای اینکار وجود داره؛ توی پایتون هم پکیج
Responses

کمک می‌کنه اینکار رو انجام بدید.

واقعاً نمی‌دونم چرا؛ ولی اینکه این تست‌های توی کدهای شرکت‌های بزرگ داخلی نمی‌بینم یا حتی توی آموزش‌ها و .... مغزم سوت می‌کشه.

بعد اینا از gorilla تست صحبت می‌کنند.


حالا که این موارد رو توی آموزش و کدها ندیدم (توی سرویس‌هایی که تیم‌ خودم می‌نویسه همیشه وجود داره)

گفتم بگم که شما خودتون یاد بگیرید، شاید یک روزی کدهای شما به من رسید یا هم تیمی شدیم.
Forwarded from Python Hints
یادآوری کنم؛ خیلی قبلتر توی یک سخنرانی پایتون به wiremock اشاره کرده بودم.

ولی responses هم آپدیت‌تر هست هم بچه‌های پایتون دولوپر باهاش راحت‌تر کار می‌کنند.

اما اگر از زبان‌های برنامه‌نویسی دیگه میاید؛ این‌ تقریباً همون کارهای wiremock رو انجام می‌ده
هرچند بیشتر برنامه‌هایی که روی ویندوز استفاده می‌کنید یک نسخه برای گنو/لینوکس هم دارن، مثل vlc، فایرفاکس و کروم، باز هم توصیه می‌کنم اگر خواستید به گنو/لینوکس سوییچ کنید از سایت زیر کمک بگیرید، جایگزین ابزارهاتون رو پیدا کنید، امتحانشون کنید و بعد تصمیم بگیرید.

https://alternativeto.net


@SohrabContents
Forwarded from Linuxor ?
یادتون میاد چقدر دردسر بود تشخیص چهره با OpenCV؟ face_recognition تمام پیچیدگی‌های پردازش تصویر رو پشت یه API ساده‌س. نیازی به تنظیم پارامترهای عجیب و غریب نیست؛ فقط عکس رو بدی و جواب رو بگیر. برای پروژه‌های کوچیک و استارتاپ‌های تازه خوبه،

دیجیتال میکآپ هم داره مثلا اینجا واسه جو بایدن رژ لب زدن.


github.com/ageitgey/face_recognition

@Linuxor