مطلب خیلی جالبی بود در مورد اینکه تکنولوژی هایی که تا وقتی استفاده ات ازش پیچیده نیست،و کاربردیه ولی وقتی پیچیدگی زیاد میشه دیگه به جای کمک کردن، مانع میشه.
https://surfingcomplexity.blog/2025/08/16/the-trap-of-tech-thats-great-in-the-small-but-not-in-the-large/
نمونهی خیلی ملموسش برای اکثرمون، spreadsheet ها هستن.
https://surfingcomplexity.blog/2025/08/16/the-trap-of-tech-thats-great-in-the-small-but-not-in-the-large/
نمونهی خیلی ملموسش برای اکثرمون، spreadsheet ها هستن.
Surfing Complexity
The trap of tech that’s great in the small but not in the large
There are software technologies that work really well in-the-small, but they don’t scale up well. The challenge here is that the problem size grows incrementally, and migrating off of them re…
👍4👎1
یه ویژگی جالب (و البته عجیب) که مدت هاست در گولنگ وجود داره ولی من تازه کشفش کردم امکان دانلود toolchainئه. به شکل خاص، از گولنگ ۱.۲۱ گولنگ این امکان رو داره که بر اساس نسخه گولنگی که توی go.mod نوشتین، خودش موقع فراخوانی کامندهای go، بره و toolchain مناسب رو دانلود کنه و یه جا قرار بده و نیاز نباشه شما اصلا درگیر چیزی بشین.
https://kokada.dev/blog/quick-bits-go-automatically-downloads-a-newer-toolchain-if-needed/
نکته خوبش طبیعتا راحتیشه. نکته منفیای که دوستش ندارم اینه که بدون اجازه کاربر میره و یه binary از یه جایی که خودش میدونه دانلود میکنه و اجرا میکنه.
https://kokada.dev/blog/quick-bits-go-automatically-downloads-a-newer-toolchain-if-needed/
نکته خوبش طبیعتا راحتیشه. نکته منفیای که دوستش ندارم اینه که بدون اجازه کاربر میره و یه binary از یه جایی که خودش میدونه دانلود میکنه و اجرا میکنه.
👍12
در مورد اهمیت متن آگهی استخدامی برای استخدام افراد خفن!
خلاصه ماجرا اینه که افراد با استعداد اگر احساس کنن متن استخدامی با دقت نوشته نشده یا خیلی اغراق کرده اصلا متن رو نمیخونن چه برسه به این که وارد شرکت بشن.
https://news.ycombinator.com/item?id=3804134
خلاصه ماجرا اینه که افراد با استعداد اگر احساس کنن متن استخدامی با دقت نوشته نشده یا خیلی اغراق کرده اصلا متن رو نمیخونن چه برسه به این که وارد شرکت بشن.
https://news.ycombinator.com/item?id=3804134
1👍15❤2🥰2😁1
در مورد رندوم چند تا ویدیو دیدم اخیرا که جالب بود:
چرا ما در تولید عدد تصادفی بد هستیم:
https://youtu.be/tP-Ipsat90c?si=H87JgbY1bzpuj0Qc
چرا به نظر ما ۳۷ عدد خیلی رندومیه؟
https://youtu.be/d6iQrh2TK98?si=qWlxnQu-0QlweQCP
ایا با داشتن اطلاعات کامل از لحظه کنونی جهان هستی میشه کامل و دقیق اینده رو پیشبینی کرد؟ نگاهی به قانون دوم ترمودینامیک هم میندازه
https://youtu.be/sMb00lz-IfE?si=mSXCblUK4aTSMsX2
چرا ما در تولید عدد تصادفی بد هستیم:
https://youtu.be/tP-Ipsat90c?si=H87JgbY1bzpuj0Qc
چرا به نظر ما ۳۷ عدد خیلی رندومیه؟
https://youtu.be/d6iQrh2TK98?si=qWlxnQu-0QlweQCP
ایا با داشتن اطلاعات کامل از لحظه کنونی جهان هستی میشه کامل و دقیق اینده رو پیشبینی کرد؟ نگاهی به قانون دوم ترمودینامیک هم میندازه
https://youtu.be/sMb00lz-IfE?si=mSXCblUK4aTSMsX2
YouTube
Randomness is Random - Numberphile
Featuring Simon Pampena... Check out Brilliant (and get 20% off their premium service): https://brilliant.org/numberphile (sponsor)
More links & stuff in full description below ↓↓↓
More coin-related videos: https://bit.ly/coins_videos
More videos with Simon…
More links & stuff in full description below ↓↓↓
More coin-related videos: https://bit.ly/coins_videos
More videos with Simon…
1🔥9❤2👍1
یه چیز جالبی بهم معرفی شد الان.
بچههای تیم صرافی سواپولت یه چالش برای روز برنامهنویس درست کردن و انگار مجموعا ۱۰۰۰ دلار هم جایزه داره.
از امروز تا سه روز آینده ادامه داره. یه سری معمای CTF طوره و خلاقانه بود به نظرم، دوست داشتید چک کنید.
لینک:
https://swlt.app/programmers-day
بچههای تیم صرافی سواپولت یه چالش برای روز برنامهنویس درست کردن و انگار مجموعا ۱۰۰۰ دلار هم جایزه داره.
از امروز تا سه روز آینده ادامه داره. یه سری معمای CTF طوره و خلاقانه بود به نظرم، دوست داشتید چک کنید.
لینک:
https://swlt.app/programmers-day
❤6
https://www.youtube.com/watch?v=DbhYpx70zTY
ویدیو جالبی بود در مورد سطح های متفاوت کاربرد LLM برای برنامه نویس های جونیور تا سنیور
آیا هوش مصنوعی جایگزین ما میشود؟ فعلا فقط جونیور ها
ویدیو جالبی بود در مورد سطح های متفاوت کاربرد LLM برای برنامه نویس های جونیور تا سنیور
آیا هوش مصنوعی جایگزین ما میشود؟ فعلا فقط جونیور ها
YouTube
The More Senior You Get, The Worse LLMs Become?
To try everything Brilliant has to offer—free—for a full 30 days, visit https://brilliant.org/TravisMedia/ . You’ll also get 20% off an annual premium subscription.
Today we're going to look at an article that made me rethink how I view the impact of LLMs…
Today we're going to look at an article that made me rethink how I view the impact of LLMs…
❤2👍1
شاید با protobuf یا msgpack از قبل آشنا باشید. این استاندارد ها هر کدوم یه فرمت باینری برای serialise deserialize دیتا هستن.
اما تنها آپشن ها نیستند، اگر ارسال کننده و دریافت کننده هردو گولنگی باشن میتونید از encoder decoder مخصوص خود گولنگ استفاده کنید که پرفورمنس بالایی داره و استفاده ازش سادهست. اسمش هم هست gob.
https://go.dev/blog/gob
اما تنها آپشن ها نیستند، اگر ارسال کننده و دریافت کننده هردو گولنگی باشن میتونید از encoder decoder مخصوص خود گولنگ استفاده کنید که پرفورمنس بالایی داره و استفاده ازش سادهست. اسمش هم هست gob.
https://go.dev/blog/gob
go.dev
Gobs of data - The Go Programming Language
Introducing gob, a high-speed Go-to-Go wire encoding format.
❤9👍2🔥1
یه ویژگی جدیدی که به گولنگ اضافه شده و در عین ساده بودن به نظرم کاربردیه و کد رو تمیز و زیبا میکنه، متد run روی waitgroupئه. به این شکل که به جای این که به صورت دستی هم go routine جدید بسازید و هم wg رو یکی زیاد کنید و آخر تابع هم doneش کنید، تابعتون رو به متد run جدید میدید و خودش این کارا رو انجام میده.
اطلاعات بیشتر و نمونه کد:
https://appliedgo.net/spotlight/go-1.25-waitgroup-go/
اطلاعات بیشتر و نمونه کد:
https://appliedgo.net/spotlight/go-1.25-waitgroup-go/
Applied Go
New in Go 1.25: WaitGroup.Go()
WaitGroups are a means of synchronizing goroutines; yet the Add()/defer Done() idiom feels clumsy and is error-prone. A new method, Go(), puts an end to goroutine counting.
1🔥15👍5
این هفته GPT5 توی openrouter انگار تخفیف داره ۵۰ درصد. گفتم بذار برای این یه پروژه کوچک ازش استفاده کنم و واقعا بده. من فکر میکردم روی پروژههای بزرگ بده ولی این پروژه ۴۰۰ خط هم نیست هنوز و وقتی گفتم یه interface تعریف کن، افتاده تو لوپ داره با خودش کشتی میگیره =)))))))
🤣16👍5👎1
چرا protobuf بد است و توسط یکسری جونیور طراحی شده؟!
نگارنده این مطلب خودش توی گوگل کار کرده و نظراتش رو در مورد اشکالات protobuf میگه مخصوصا تایپ سیستمش و این که مشکلاتی رو حل میکنه که به جز گوگل در جای دیگر وجود ندارن. حتی به عقیده اون، توی خود گوگل هم میشد کارهای بهتری کرد.
https://reasonablypolymorphic.com/blog/protos-are-wrong/
نگارنده این مطلب خودش توی گوگل کار کرده و نظراتش رو در مورد اشکالات protobuf میگه مخصوصا تایپ سیستمش و این که مشکلاتی رو حل میکنه که به جز گوگل در جای دیگر وجود ندارن. حتی به عقیده اون، توی خود گوگل هم میشد کارهای بهتری کرد.
https://reasonablypolymorphic.com/blog/protos-are-wrong/
2👍9🤔3
نوشتههای ترمینالی
میخواید تو کامیت مسیج هاتون ایموجی بذارید؟ میتونید به این روش عمل کنید :))) https://gitmoji.dev/
توی کامنت های این پست، بحث کامیت مسیج شد،
این سایت فوقالعاده براتون کامیت مسیج رندوم پیشنهاد میده، میتونید حتی اسکریپتی هم بنویسید که مستقیم کامیت کنه و کامیت مسیج رو از این بگیره.
Commit Message Generator
https://whatthecommit.com/
توضیح: چند بار رفرش کنید.
این سایت فوقالعاده براتون کامیت مسیج رندوم پیشنهاد میده، میتونید حتی اسکریپتی هم بنویسید که مستقیم کامیت کنه و کامیت مسیج رو از این بگیره.
Commit Message Generator
https://whatthecommit.com/
توضیح: چند بار رفرش کنید.
Whatthecommit
Commit Message Generator
Fucking egotistical bastard. adds expandtab to vimrc
🔥8🤣4
نوشتههای ترمینالی
مثل این که کمتر از یک ماه دیگه، Bitnami قراره بلاهایی سر تیم ها و دولوپرها بیاره. ماجرا از این قراره که از ۲۸ آگوست به بعد فقط به آخرین تگ هر چارت میتونیم دسترسی داشته باشیم (latest) و نسخه های استیبل و مشخص فقط از طریق برنامه جدیدشون که پولیه میشه استفاده…
بعد از یک ماه تمدید، نهایتا قراره فردا ایمج ها از دسترس خارج بشن :)
خسته نباشید به مهندسایی که دارن شب اخری، بدو بدو تگ ایمج ها رو عوض میکنن.
خسته نباشید به مهندسایی که دارن شب اخری، بدو بدو تگ ایمج ها رو عوض میکنن.
😁12❤1
Forwarded from tech-afternoon (Amin Mesbahi)
🔥 🐘 انتشار PostgreSQL 18، و اهمیت تغییراتش!
طبق روال سالهای گذشته حوالی سپتامبر ریلیز نسخه جدید PostgreSQL انجام شد. حالا چرا این نسخه برای برخی سیستمها میتونه قابل توجه و مهم باشه؟
- تغییرات انقلابی در I/O (Asyn I/O):
بالاخره! این قابلیت اومد و سرعت عملیات Read رو «تا» ۳ برابر افزایش میده! معطلیهای CPU برای I/O خیلی کمتر میشه و برای کارهای مثل VACUUM و اسکنهای بزرگ، تاثیرش چشمگیره (من روی نسخههای پیشنمایش تست کردم و عالی بود).
- پشتیبانی از UUIDv7:
برای توسعهدهندهها این شاید خیلی مهم باشه! (اگر دوست دارید در مورد انواع UUIDها بیشتر توضیح بدم:🤪 )
پشتیبانی Native از UUIDv7 یعنی Primary Keyها به صورت گلوبال یونیک میشن و هم چون بر اساس زمان مرتب هستن، عملکرد ایندکس B-tree به شکل چشمگیری بهتر میشه. (یعنی Page Split بی مورد نداریم!)
- قابلیت Virtual Generated Columns:
حالا ستونهای محاسباتی بهصورت پیشفرض مجازی هستن، یعنی فقط موقع خوانش محاسبه میشن و فضای دیسک رو اشغال نمیکنن. (البته اگه لازم باشه، میتونید همچنان STORED هم تعریف کنین).
افزودن NOT NULL بدون Downtime: کابوس اضافه کردن NOT NULL به جدولهای بزرگ تموم شد! حالا میشه قید NOT NULL رو بهصورت NOT VALID اضافه کنیم و بلافاصله برای ردیفهای جدید اعمال بشه. اعتبارسنجی ردیفهای موجود رو هم میتونیم بعداً بدون قفل کامل جدول انجام بدیم.
- امکان Skip Scan برای B-tree:
یه بهبود عالی برای بهینهسازی کوئری؛ اگه توی ایندکسهای چند ستونی، ستون اول رو در WHERE فیلتر نکرده باشیم، باز هم ایندکس کار میکنه و کوئریهای تحلیلی/گزارشگیری خیلی سریعتر میشن.
- امکان RETURNING هوشمند:
حالا میشه توی یک دستور UPDATE یا DELETE به هر دو مقدار قدیمی (OLD) و جدید (NEW) یک ستون در بخش RETURNING دسترسی داشته باشیم.
- آپگرید آسونتر:
قابلیت حفظ Planner Statistics حین آپگرید با pg_upgrade باعث میشه دیتابیس جدید خیلی سریعتر به پرفورمنس دلخواه برگرده.
طبق روال سالهای گذشته حوالی سپتامبر ریلیز نسخه جدید PostgreSQL انجام شد. حالا چرا این نسخه برای برخی سیستمها میتونه قابل توجه و مهم باشه؟
- تغییرات انقلابی در I/O (Asyn I/O):
بالاخره! این قابلیت اومد و سرعت عملیات Read رو «تا» ۳ برابر افزایش میده! معطلیهای CPU برای I/O خیلی کمتر میشه و برای کارهای مثل VACUUM و اسکنهای بزرگ، تاثیرش چشمگیره (من روی نسخههای پیشنمایش تست کردم و عالی بود).
- پشتیبانی از UUIDv7:
برای توسعهدهندهها این شاید خیلی مهم باشه! (اگر دوست دارید در مورد انواع UUIDها بیشتر توضیح بدم:
پشتیبانی Native از UUIDv7 یعنی Primary Keyها به صورت گلوبال یونیک میشن و هم چون بر اساس زمان مرتب هستن، عملکرد ایندکس B-tree به شکل چشمگیری بهتر میشه. (یعنی Page Split بی مورد نداریم!)
- قابلیت Virtual Generated Columns:
حالا ستونهای محاسباتی بهصورت پیشفرض مجازی هستن، یعنی فقط موقع خوانش محاسبه میشن و فضای دیسک رو اشغال نمیکنن. (البته اگه لازم باشه، میتونید همچنان STORED هم تعریف کنین).
افزودن NOT NULL بدون Downtime: کابوس اضافه کردن NOT NULL به جدولهای بزرگ تموم شد! حالا میشه قید NOT NULL رو بهصورت NOT VALID اضافه کنیم و بلافاصله برای ردیفهای جدید اعمال بشه. اعتبارسنجی ردیفهای موجود رو هم میتونیم بعداً بدون قفل کامل جدول انجام بدیم.
- امکان Skip Scan برای B-tree:
یه بهبود عالی برای بهینهسازی کوئری؛ اگه توی ایندکسهای چند ستونی، ستون اول رو در WHERE فیلتر نکرده باشیم، باز هم ایندکس کار میکنه و کوئریهای تحلیلی/گزارشگیری خیلی سریعتر میشن.
- امکان RETURNING هوشمند:
حالا میشه توی یک دستور UPDATE یا DELETE به هر دو مقدار قدیمی (OLD) و جدید (NEW) یک ستون در بخش RETURNING دسترسی داشته باشیم.
- آپگرید آسونتر:
قابلیت حفظ Planner Statistics حین آپگرید با pg_upgrade باعث میشه دیتابیس جدید خیلی سریعتر به پرفورمنس دلخواه برگرده.
اگر جزو افرادی هستین که به مهاجرت به PostgreSQL فکر میکنید، یه تعداد کارتهای شستهرُفته برای مهاجرت از SQL Server به PostgreSQL با هشتگ #MSSQL_to_PGSQL توی کانال داریم (کارتهای قرمز رنگ از بخش تصاویر هم قابل پیدا کردنه)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥6😁1
Forwarded from It's FOSS
It's Hacktoberfest time! Here's everything you need to know! 🥇
https://itsfoss.com/hacktoberfest-guide/
https://itsfoss.com/hacktoberfest-guide/
It's FOSS
How to Contribute to Open Source in Hacktoberfest
Hacktoberfest is the best place to give back to open-source projects. Here's everything you need to know about Hacktoberfest and how to participate in it..
🤩1
It's FOSS
It's Hacktoberfest time! Here's everything you need to know! 🥇 https://itsfoss.com/hacktoberfest-guide/
دوستان اکتبر شروع شده و باز برنامه هکتوبرفست در جریانه.
قضیه از این قراره که اگه توی ماه اکتبر ۶ تا مرج ریکویست ارسال کنید که مرج بشه، بج هکتوبرفست میگیرید. قبلا تیشرت هم میدادن البته ولی با توجه به سواستفاده ها دیگه انگار خبری نیست. :)
https://hacktoberfest.com
قضیه از این قراره که اگه توی ماه اکتبر ۶ تا مرج ریکویست ارسال کنید که مرج بشه، بج هکتوبرفست میگیرید. قبلا تیشرت هم میدادن البته ولی با توجه به سواستفاده ها دیگه انگار خبری نیست. :)
https://hacktoberfest.com
Hacktoberfest
Hacktoberfest 2025
Hacktoberfest: a month-long celebration of open-source projects, their maintainers, and the entire community of contributors.
🔥5❤1
در مورد hookهای git:
گیت امکانات مختلفی داره و یکی از امکاناتش که دستمون رو خیلی باز میکنه برای انواع شخصی سازی ها، hook ها هستن. قضیه از این قرارها که توی پوشه .git/hooks میتونید یکسری اسکریپت قابل اجرا بگذارید با اسم های معلوم و خود گیت در زمان های مشخص اونا رو اجرا میکنه. معلوم ترینش precommit hook هست که گیت بعد از اومدن دستور کامیت و قبل از این که واقعا کامیت کنه اون اسکریپت رو اجرا میکنه. توی اون اسکریپت میتونید کد رو فرمت کنید یا تست ها رو اجرا کنید تا مطمین بشین که کامیت های atomic دارید. البته قابل دور زدن هم هست.
فقط دقت کنید که هوک ها جزو چیزاییه که خودتون اونجا میگذارید و توی خود گیت ورژن کنترل نمیشه.
گیت امکانات مختلفی داره و یکی از امکاناتش که دستمون رو خیلی باز میکنه برای انواع شخصی سازی ها، hook ها هستن. قضیه از این قرارها که توی پوشه .git/hooks میتونید یکسری اسکریپت قابل اجرا بگذارید با اسم های معلوم و خود گیت در زمان های مشخص اونا رو اجرا میکنه. معلوم ترینش precommit hook هست که گیت بعد از اومدن دستور کامیت و قبل از این که واقعا کامیت کنه اون اسکریپت رو اجرا میکنه. توی اون اسکریپت میتونید کد رو فرمت کنید یا تست ها رو اجرا کنید تا مطمین بشین که کامیت های atomic دارید. البته قابل دور زدن هم هست.
فقط دقت کنید که هوک ها جزو چیزاییه که خودتون اونجا میگذارید و توی خود گیت ورژن کنترل نمیشه.
1👍19❤6
یه استفاده که من اخیرا از git hook کردم ابن بود که مطمین بشم کامیت مسیج های یه سری پروژه خاص، یه فرمت خاصی رو رعایت میکنن. برای این کار از هوک commit-msg استفاده کردم. این هوک هم میاد قبل از این که واقعا کامیت صورت بگیره اجرا میشه و کامیت مسیج رو دریافت میکنه. در نهایت با کمک exit code میتونید مشخص کنید که کامیت مورد تایید هست یا باید ریجکت بشه.
کدی که من نوشتم:
#!/bin/bash
commit_regex='some regex'
error_msg="Aborting commit."
if ! grep -E "$commit_regex" "$1"; then echo "$error_msg" >&2
exit 1
fi
این فایل باید به این اسم سیو بشه: commit-msg توی پوشه hooks اون ریپوزیتوری.
اما حالا برای این که این اسکریپت رو همه جا تکرار نکنم چیکار کردم؟ اومدم از core hooks استفاده کردم. به این شکل میتونم بگم پوشه هوک دیفالت برای همه پرورهها یکی باشه و نیاز نیست برم داخل هر پروژه تک تک چک کنم.
کامندی که استفاده کردم اینه:
git config core.hooksPath
و نهایتا کانفیگ گیت اینطوری میشه:
[core]
hooksPath = /path/to/hooks/dir
اما اینجا هنوز یه تیکه گمشده دیگه هست. با این تغییراتی که من دادم این فرمت برای همهی پروژه ها روی سیستمم اعمال شد ولی من اینو نمیخوام، بلکه میخوام فقط توی پروژه خاصی خاصی اعمال بشه. کاری که میکنم استفاده از conditional config توی گیته. قضیه اینطوریه که یه فایل کانفیگ ثانویه میسازم که این کانفیگ توش نوشته شده و توی کانفیگ اصلی میگم includeif: یعنی فقط وقتی این کانفیگ رو اعمال کن که پوشه گیت من داخل یکی از این پوشه ها بود یا داخل مسیری بود که این پترن رو داشت.
منابع:
https://git-scm.com/docs/githooks
و
https://dev.to/chaz8080/git-smart-streamlining-your-workflow-with-the-prepare-commit-msg-hook-432p
و
https://medium.com/@mrjink/using-includeif-to-manage-your-git-identities-bcc99447b04b
و اگه خواستید دقیقش رو توی dotfile م ببینید:
https://github.com/rsharifnasab/dotfiles/blob/2b3ba235c300e8a5dbec53a7a84dde350ca372af/configs/.config/git/config#L51
و
https://github.com/rsharifnasab/dotfiles/blob/37f0812046ef9eceb7c3e18ff0e9fb6b30843828/configs/.config/git/snapp#L9
کدی که من نوشتم:
#!/bin/bash
commit_regex='some regex'
error_msg="Aborting commit."
if ! grep -E "$commit_regex" "$1"; then echo "$error_msg" >&2
exit 1
fi
این فایل باید به این اسم سیو بشه: commit-msg توی پوشه hooks اون ریپوزیتوری.
اما حالا برای این که این اسکریپت رو همه جا تکرار نکنم چیکار کردم؟ اومدم از core hooks استفاده کردم. به این شکل میتونم بگم پوشه هوک دیفالت برای همه پرورهها یکی باشه و نیاز نیست برم داخل هر پروژه تک تک چک کنم.
کامندی که استفاده کردم اینه:
git config core.hooksPath
و نهایتا کانفیگ گیت اینطوری میشه:
[core]
hooksPath = /path/to/hooks/dir
اما اینجا هنوز یه تیکه گمشده دیگه هست. با این تغییراتی که من دادم این فرمت برای همهی پروژه ها روی سیستمم اعمال شد ولی من اینو نمیخوام، بلکه میخوام فقط توی پروژه خاصی خاصی اعمال بشه. کاری که میکنم استفاده از conditional config توی گیته. قضیه اینطوریه که یه فایل کانفیگ ثانویه میسازم که این کانفیگ توش نوشته شده و توی کانفیگ اصلی میگم includeif: یعنی فقط وقتی این کانفیگ رو اعمال کن که پوشه گیت من داخل یکی از این پوشه ها بود یا داخل مسیری بود که این پترن رو داشت.
منابع:
https://git-scm.com/docs/githooks
و
https://dev.to/chaz8080/git-smart-streamlining-your-workflow-with-the-prepare-commit-msg-hook-432p
و
https://medium.com/@mrjink/using-includeif-to-manage-your-git-identities-bcc99447b04b
و اگه خواستید دقیقش رو توی dotfile م ببینید:
https://github.com/rsharifnasab/dotfiles/blob/2b3ba235c300e8a5dbec53a7a84dde350ca372af/configs/.config/git/config#L51
و
https://github.com/rsharifnasab/dotfiles/blob/37f0812046ef9eceb7c3e18ff0e9fb6b30843828/configs/.config/git/snapp#L9
DEV Community
Git Smart: Streamlining Your Workflow with the prepare-commit-msg Hook
Overview If you want to learn how to improve and automate your commit messages, you're in...
1👍13❤6