قوانین Semantic Versioning
روش ها رو معرفی کردیم، حالا وقتشه مهم ترینشون رو یاد بدیم.
تمامی پروژه های معروف جز چند تا، از این روش استفاده میکنن.
ما داخل این روش سه عدد اصلی داریم که با نقطه از هم جدا میشن:
MAJOR.MINOR.PATCH
1️⃣ قانون یک:
عدد Major: این عدد تنها زمانی اجازه تغییر دارد که تغییری که در نرم افزار ایجاد شده است با نسخه های قبلی ناسازگار است. برای مثال سینتکس پایتون 2 داخل پایتون 3 اجرا نمیشه و برعکس.
2️⃣ عدد Minor: این عدد تنها زمانی اجازه تغییر دارد که فیچری اضافه شده، یا تغییر مهمی صورت گرفته که با نسخه های قبلی سازگار است. برای مثال داخل پایتون 3.10 ویژگی match اومد، ولی سورس های ورژن 3.9 قابل اجرا هستن داخل 3.10
3️⃣ عدد Patch: این عدد تنها زمانی اجازه تغییر دارد که باگی یا مشکلی یا هر تغییر جزئی داخل نرم افزار صورت گرفته است.
قانون دو:
وقتی عددی رو ارتقا میدید، عدد های بعدیش باید صفر بشن.
برای مثال اگه minor رو تغییر میدید، باید patch صفر بشه.
3.18.4 -> 3.19.0
شروع ورژن گذاری
نسخه های ازمایشی:
دیدید بعضی برنامه ها ورژن های ازمایشی میدن بیرون ( مثلا تلگرام )
ورژن های ازمایشی رو اینجا این شکلی نشون میدیم:
Major.Minor.Patch-rc0
◀️ جای rc میتونه اسم های beta، alpha یا nightly قرار بگیره، در بعضی جاها فقط اولین کلمه رو میزارن: a یا b یا n
و عدد بعد از rc میتونه سر هر تغییری در نسخه ازمایشی، تغییر کنه ( یا کلا میتونین عددی نزارین اینجا )
برای مثال:
7.2.9-alpha8 -> 7.2.9-alpha9
نرم افزار دارای فایل های metadata:
اول اینکه فایل های metadata چی هستن؟ هر فایل چرت و پرتی که مربوط به برناممون نیست ولی ازشون استفاده میکنیم.
مثلا نرم افزار های iana که برای تشخیص مکان آیپی استفاده میشن، از دیتابیس های از پیش اماده استفاده میکنن که این دیتابیس هارو میتونیم به عنوان metadata در نظر بگیریم.
ما در این روش، این فایل هارو اینشکلی ورژن بندی میکنیم:
Major.Minor.Patch+number
برای مثال:
4.1.4+1234
و هروقت اگه اون فایل های metadata رو فقط اپدیت کنیم، میتونیم این اعداد رو بیشتر کنیم:
4.1.4+1269
⚡ امیدوارم لذت برده باشید ...
یه مثال کُلی از همه ی موارد:
1.81.2-b1+728466
روش ها رو معرفی کردیم، حالا وقتشه مهم ترینشون رو یاد بدیم.
تمامی پروژه های معروف جز چند تا، از این روش استفاده میکنن.
ما داخل این روش سه عدد اصلی داریم که با نقطه از هم جدا میشن:
MAJOR.MINOR.PATCH
1️⃣ قانون یک:
عدد Major: این عدد تنها زمانی اجازه تغییر دارد که تغییری که در نرم افزار ایجاد شده است با نسخه های قبلی ناسازگار است. برای مثال سینتکس پایتون 2 داخل پایتون 3 اجرا نمیشه و برعکس.
2️⃣ عدد Minor: این عدد تنها زمانی اجازه تغییر دارد که فیچری اضافه شده، یا تغییر مهمی صورت گرفته که با نسخه های قبلی سازگار است. برای مثال داخل پایتون 3.10 ویژگی match اومد، ولی سورس های ورژن 3.9 قابل اجرا هستن داخل 3.10
3️⃣ عدد Patch: این عدد تنها زمانی اجازه تغییر دارد که باگی یا مشکلی یا هر تغییر جزئی داخل نرم افزار صورت گرفته است.
قانون دو:
وقتی عددی رو ارتقا میدید، عدد های بعدیش باید صفر بشن.
برای مثال اگه minor رو تغییر میدید، باید patch صفر بشه.
3.18.4 -> 3.19.0
شروع ورژن گذاری
نسخه های ازمایشی:
دیدید بعضی برنامه ها ورژن های ازمایشی میدن بیرون ( مثلا تلگرام )
ورژن های ازمایشی رو اینجا این شکلی نشون میدیم:
Major.Minor.Patch-rc0
◀️ جای rc میتونه اسم های beta، alpha یا nightly قرار بگیره، در بعضی جاها فقط اولین کلمه رو میزارن: a یا b یا n
و عدد بعد از rc میتونه سر هر تغییری در نسخه ازمایشی، تغییر کنه ( یا کلا میتونین عددی نزارین اینجا )
برای مثال:
7.2.9-alpha8 -> 7.2.9-alpha9
نرم افزار دارای فایل های metadata:
اول اینکه فایل های metadata چی هستن؟ هر فایل چرت و پرتی که مربوط به برناممون نیست ولی ازشون استفاده میکنیم.
مثلا نرم افزار های iana که برای تشخیص مکان آیپی استفاده میشن، از دیتابیس های از پیش اماده استفاده میکنن که این دیتابیس هارو میتونیم به عنوان metadata در نظر بگیریم.
ما در این روش، این فایل هارو اینشکلی ورژن بندی میکنیم:
Major.Minor.Patch+number
برای مثال:
4.1.4+1234
و هروقت اگه اون فایل های metadata رو فقط اپدیت کنیم، میتونیم این اعداد رو بیشتر کنیم:
4.1.4+1269
⚡ امیدوارم لذت برده باشید ...
یه مثال کُلی از همه ی موارد:
1.81.2-b1+728466
❤6👍4🔥1
امروز روز برنامه نویس هاست، روز ۲۵۶م از سال ۲۰۲۴
روزتون مبارک ❤️
حالا میدونستین ۴۲ روز دیگه باز هم روز برنامه نویسه؟ میدونین چرا؟
روزتون مبارک ❤️
حالا میدونستین ۴۲ روز دیگه باز هم روز برنامه نویسه؟ میدونین چرا؟
❤18👎4
بهترین لحظه ای که میتونی کسی رو به قتل برسونی
اون لحظهس که به طرف قیمت میدی، میاد بهت اسکرین شات از هوش مصنوعی میده میگه بفرما
ما داریم اینجا زحمت میکشیم :/
اون لحظهس که به طرف قیمت میدی، میاد بهت اسکرین شات از هوش مصنوعی میده میگه بفرما
ما داریم اینجا زحمت میکشیم :/
🤣8😁4🔥3👍1
سبک زندگی برنامه نویس چگونه باید باشد؟
امروز یه مطلب خوندم خیلی باهاش حال کردم که عنوانش همین بود
درواقع ۱۵ مشکل و نکته رو میگه که حتما باید حواسمون بهشون باشه
خودم سه چهار تاش رو رعایت نمیکنم
خواستم باهاتون به اشتراک بزارم ❤️
https://nabeghesaz.com/the-lifestyle-of-a-programmer/
امروز یه مطلب خوندم خیلی باهاش حال کردم که عنوانش همین بود
درواقع ۱۵ مشکل و نکته رو میگه که حتما باید حواسمون بهشون باشه
خودم سه چهار تاش رو رعایت نمیکنم
خواستم باهاتون به اشتراک بزارم ❤️
https://nabeghesaz.com/the-lifestyle-of-a-programmer/
👍11❤2
🐉 یه حرکت بشدت جالب از Kali Linux
خبر قدیمیه، ولی من تازه فهمیدمش
۹۰ درصدتون میدونید کالی لینوکس یه سیستم عامل هست که با هدف امنیت و هک و پینترست طراحی شده که الان نزدیک ۸ گیگ ابزار هکینگ رو توسعه داده و در خودش داره
🟣 امسال یه سیستم عامل جدید داده بیرون!
اسمش Purple Kali هستش و دقیقا ضد Kali Linux عمل میکنه
این سیستم عامل با هدف حفظ امنیت و پشتیبانی و ریکاوری اطلاعات طراحی شده و دقیقا حریف Kali Linux قرار میگیره ...
کلی ابزار ریکاوری و حفظ امنیت داخل خودش داره که میشه باهاش امنیت یک مکان رو حفظ کرد
اینجاست که باید گفت: کالی لینوکس ۱۱ ساله هستش، و هنوزم تنها رقیبش خودشه ...
پ.ن: جوگیر شدم امشب کالی میریزم 😂
خبر قدیمیه، ولی من تازه فهمیدمش
۹۰ درصدتون میدونید کالی لینوکس یه سیستم عامل هست که با هدف امنیت و هک و پینترست طراحی شده که الان نزدیک ۸ گیگ ابزار هکینگ رو توسعه داده و در خودش داره
🟣 امسال یه سیستم عامل جدید داده بیرون!
اسمش Purple Kali هستش و دقیقا ضد Kali Linux عمل میکنه
این سیستم عامل با هدف حفظ امنیت و پشتیبانی و ریکاوری اطلاعات طراحی شده و دقیقا حریف Kali Linux قرار میگیره ...
کلی ابزار ریکاوری و حفظ امنیت داخل خودش داره که میشه باهاش امنیت یک مکان رو حفظ کرد
اینجاست که باید گفت: کالی لینوکس ۱۱ ساله هستش، و هنوزم تنها رقیبش خودشه ...
پ.ن: جوگیر شدم امشب کالی میریزم 😂
👍16😁2👎1
دوتا فانکشن بیلت این پرکاربر پایتون
وقتی میخواید یه Iterable رو چک کنید که همه آیتم ها Truthy هستند یا نه، یا وقتی میخواید ببینید یکی از ایتم ها Truthy هست یا ن، از اینا استفاده میشه
https://youtube.com/shorts/UEt87e0CeLU?si=bLpR27L712PsPVI6
وقتی میخواید یه Iterable رو چک کنید که همه آیتم ها Truthy هستند یا نه، یا وقتی میخواید ببینید یکی از ایتم ها Truthy هست یا ن، از اینا استفاده میشه
https://youtube.com/shorts/UEt87e0CeLU?si=bLpR27L712PsPVI6
❤4
کار رو سرم ریخته بدجور
خیلی تو برنامه ریزی خوب نیستم و تنبل بودن هم باعث میشه کارام همیشه عقب بیفته و همشون یجا یهو باید انجام بدم
واسه همینه که خیلی فعال نیستم، اوکیش میکنم و میام
شما وضعتون چطوره؟ پروژه میاد قطار قطار؟
خیلی پروژه زیاد شده اخیرا یا من توهم زدم؟
خیلی تو برنامه ریزی خوب نیستم و تنبل بودن هم باعث میشه کارام همیشه عقب بیفته و همشون یجا یهو باید انجام بدم
واسه همینه که خیلی فعال نیستم، اوکیش میکنم و میام
شما وضعتون چطوره؟ پروژه میاد قطار قطار؟
خیلی پروژه زیاد شده اخیرا یا من توهم زدم؟
🔥11❤2👍1
حسودیم میشه به مدرسه ای ها
عادی نیست 🚬
دوران مدرسه خوبی داشتم
چند نفر تون میرید مدرسه؟
عادی نیست 🚬
دوران مدرسه خوبی داشتم
چند نفر تون میرید مدرسه؟
❤8👍2
❔ فرق متود
هردوی این متود ها، مجیک متود هایی هستن که مشخص میکنن وقتی یک classیی قراره پرینت بشه، به چه صورتی باید پرینت بشه.
برای مثال:
✨ خب فرقشون کجاست؟
اگه از مجیک متود str استفاده کنین، فقط در صورتی کلاستون چیزی که میخواید نوشته میشه که مستقیم به str(x) داده بشه، یا مستقیم به print داده بشه.
این کد رو ببینید:
اخر کد رو دقت کردید؟ چرا چیزی که خواستیم پرینت نشد؟ یعنی [ "A: ILY" ]
چون مستقیم به print داده نشدن، اما وقتی از مجیک متود repr استفاده کنید، هرجای دنیا که کلاستون رو پرینت کنین، یا بزنین repr(x) یا بزنین str(x)، به چیزی که میخواید تبدیل میشه:
__str__ و __repr__ میدونین چیه؟هردوی این متود ها، مجیک متود هایی هستن که مشخص میکنن وقتی یک classیی قراره پرینت بشه، به چه صورتی باید پرینت بشه.
برای مثال:
class A:
def __repr__(self):
return "A: I love you"
a = A()
print(a)
# A: I love you
✨ خب فرقشون کجاست؟
اگه از مجیک متود str استفاده کنین، فقط در صورتی کلاستون چیزی که میخواید نوشته میشه که مستقیم به str(x) داده بشه، یا مستقیم به print داده بشه.
این کد رو ببینید:
class A:
def __str__(self):
return "A: ILY"
a = A()
print(a)
# A: ILY
text = str(a)
print(text)
# A: ILY
print( [ a ] )
# [<A at 0xisi83ijsiow837>]
اخر کد رو دقت کردید؟ چرا چیزی که خواستیم پرینت نشد؟ یعنی [ "A: ILY" ]
چون مستقیم به print داده نشدن، اما وقتی از مجیک متود repr استفاده کنید، هرجای دنیا که کلاستون رو پرینت کنین، یا بزنین repr(x) یا بزنین str(x)، به چیزی که میخواید تبدیل میشه:
class A:
def __repr__(self):
return "A: ILY"
a = A()
print(a)
# A: ILY
text = repr(a)
print(text)
# A: ILY
print( [ a ] )
# ["A: ILY"]
🔥9❤1
تبدیل یک سرگرمی، به پروژه ای بزرگ ...
سال ۱۹۹۱، Linus Torvalds، همزمان که دانشجوی علوم کامپیوتر بود، شروع میکنه توی اوقات فراغت خودش و برای سرگرمی خودش، پروژه ای به اسم Linux رو پیش میبره
تنها هدفشم اینه که با پردازنده ی جدید Intel، که اولین پردازنده x86 هست سازگاری داشته باشه تا بتونه با کامپیوتر جدیدش کار کنه
همونطور ک داخل کتابش نوشته: «این پروژه قرار نیست پروژه بزرگی باشه و فقط یک پروژه شخصیه، مثل gnu نخواهد شد.»
اول که سیستم رو میزنه و استفاده هاشو میکنه، به سرش میزنه از ساختار system-callsعه سیستمه Unix، الهام بگیره و روی Linux هم پیاده سازیش کنه
روی سیستم فقط bash و gcc رو میسازه، و به صورت اوپن سورس پخشش میکنه ...
حالا این Linux، بزرگترین و پراستفاده ترین سیستم در دنیاست ...
گوشیه توی دستتون، سیستم ضبط ماشین، ساعت مچی هوشمند، هزاران توزیععه مختلف ازش، سیستمه مدیریت ماشین های خفن، ابرکامپیوتر ها ...
همه و همه از هسته ی Linux استفاده میکنن ...
بنظرتون فکرش رو میکرد که سرگرمیش، همچین چیزی بشه؟🤔
اون فقط یک عادت کوچیک برای خودش خلق کرده بود «کد زدن روی پروژه های خودش در زمان فراغت» جای گشتن توی اکسپلور اینستا ( اونموقع ک اینستا نبود ولی خب، به در زدم دیوار بشنوه )
تازه اینم هست:
https://t.iss.one/CodingLovers_GP/98747
سال ۱۹۹۱، Linus Torvalds، همزمان که دانشجوی علوم کامپیوتر بود، شروع میکنه توی اوقات فراغت خودش و برای سرگرمی خودش، پروژه ای به اسم Linux رو پیش میبره
تنها هدفشم اینه که با پردازنده ی جدید Intel، که اولین پردازنده x86 هست سازگاری داشته باشه تا بتونه با کامپیوتر جدیدش کار کنه
همونطور ک داخل کتابش نوشته: «این پروژه قرار نیست پروژه بزرگی باشه و فقط یک پروژه شخصیه، مثل gnu نخواهد شد.»
اول که سیستم رو میزنه و استفاده هاشو میکنه، به سرش میزنه از ساختار system-callsعه سیستمه Unix، الهام بگیره و روی Linux هم پیاده سازیش کنه
روی سیستم فقط bash و gcc رو میسازه، و به صورت اوپن سورس پخشش میکنه ...
حالا این Linux، بزرگترین و پراستفاده ترین سیستم در دنیاست ...
گوشیه توی دستتون، سیستم ضبط ماشین، ساعت مچی هوشمند، هزاران توزیععه مختلف ازش، سیستمه مدیریت ماشین های خفن، ابرکامپیوتر ها ...
همه و همه از هسته ی Linux استفاده میکنن ...
بنظرتون فکرش رو میکرد که سرگرمیش، همچین چیزی بشه؟🤔
اون فقط یک عادت کوچیک برای خودش خلق کرده بود «کد زدن روی پروژه های خودش در زمان فراغت» جای گشتن توی اکسپلور اینستا ( اونموقع ک اینستا نبود ولی خب، به در زدم دیوار بشنوه )
تازه اینم هست:
https://t.iss.one/CodingLovers_GP/98747
❤8👍2
وقتشه از MySQL بریم سراغ PostgreSQL 🐘
دیتابیس PostgreSQL امروز نسخه ۱۷ خودش رو منتشر کرد، و پرفورمنس خودش رو حدودن ۳۰ درصد بهتر کرد، و کلی ابزار جدید با خودش اورد.
میتونم پیشنهاد کنم کوچ کنین به PostgreSQL ...
سایت رسمی
مقایسه نسخه ۱۶ و ۱۷
دیتابیس PostgreSQL امروز نسخه ۱۷ خودش رو منتشر کرد، و پرفورمنس خودش رو حدودن ۳۰ درصد بهتر کرد، و کلی ابزار جدید با خودش اورد.
میتونم پیشنهاد کنم کوچ کنین به PostgreSQL ...
سایت رسمی
مقایسه نسخه ۱۶ و ۱۷
❤6👍2
از کجا ایموجی انتخاب میکنی ❓
انتخاب کردن ایموجی مناسب واسه متن ها داخل پروژه ( مخصوصا ربات تلگرام )، واقعا کار سختیه، من از emojidb.org استفاده میکنم ...
داخل کامنت ها بگین شما از چی استفاده میکنین؟
انتخاب کردن ایموجی مناسب واسه متن ها داخل پروژه ( مخصوصا ربات تلگرام )، واقعا کار سختیه، من از emojidb.org استفاده میکنم ...
داخل کامنت ها بگین شما از چی استفاده میکنین؟
❤8
سلام چطورید، امروز با یه نکته مفید دیگه اومدم که ممکنه به کارتون بیاد
تا حالا به داک استرینگها توی پایتون توجه کردید؟ 🤔 داک استرینگها همون توضیحات کوتاه و مفیدی هستن که داخل تریپل کوتیشنها مینویسید و هدفشون اینه که عملکرد فانکشنها، کلاسها یا متغیرها رو توضیح بدن
مثال میزنم تا بهتر متوجه بشید:
وقتی از داک استرینگ استفاده میکنید، میتونید با فانکشن
اینطوری:
خروجیش اینه:
اینطوری میتونید کدتون رو برای دیگران قابل فهمتر کنید، و وقتی کسی از کدتون استفاده کرد، سریعاً بفهمه هر قسمت چیکار میکنه! 😎
مخلص 💜
تا حالا به داک استرینگها توی پایتون توجه کردید؟ 🤔 داک استرینگها همون توضیحات کوتاه و مفیدی هستن که داخل تریپل کوتیشنها مینویسید و هدفشون اینه که عملکرد فانکشنها، کلاسها یا متغیرها رو توضیح بدن
مثال میزنم تا بهتر متوجه بشید:
def add(a, b):
"""
این تابع دو عدد رو به هم اضافه میکنه.
:param a: عدد اول (int یا float)
:param b: عدد دوم (int یا float)
:return: حاصل جمع دو عدد
"""
return a + b
وقتی از داک استرینگ استفاده میکنید، میتونید با فانکشن
help() یا حتی __doc__ به راحتی مستندات کدتون رو ببینید.اینطوری:
print(help(add)) # نمایش مستندات
print(add.__doc__) # مستندات به صورت ساده
خروجیش اینه:
Help on function add in module __main__:
add(a, b)
این تابع دو عدد رو به هم اضافه میکنه.
:param a: عدد اول (int یا float)
:param b: عدد دوم (int یا float)
:return: حاصل جمع دو عدد
اینطوری میتونید کدتون رو برای دیگران قابل فهمتر کنید، و وقتی کسی از کدتون استفاده کرد، سریعاً بفهمه هر قسمت چیکار میکنه! 😎
مخلص 💜
❤9👍4🔥2
رفتم اخبار رو یه نگاه بندازم، خبری چیزی پیدا کنم پست بزارم
دیدم ویندوز چقدر خرابکاری کرده
از ۲۶ سپتامبر، تا امروز، حداقل ۹ تا خبر درباره این بود که «ویندوز فلان مشکل امنیتی را رفع کرد، «امنیت بیشتر را تجربه کنید.»»
دیدم ویندوز چقدر خرابکاری کرده
از ۲۶ سپتامبر، تا امروز، حداقل ۹ تا خبر درباره این بود که «ویندوز فلان مشکل امنیتی را رفع کرد، «امنیت بیشتر را تجربه کنید.»»
🤣15👍1😁1
فیچر های جدید تلگرام
⭐ با آپدیت جدید تلگرام اپلیکیشنها و وبسایتها میتوانند با پرداخت هزینه در fragment، کد تأیید را از طریق تلگرام ارسال کنند.
🎁 در بهروزرسانی جدید تلگرام هدیه بدهید. میتوانید با استفاده از استار، برای دیگران هدیه بفرستید. این هدیه میتواند پیام اختصاصی یا پیامهای متحرک باشد. دریافتکننده میتواند آن را در پروفایلش نمایش دهد یا آنها را به استار تبدیل کند.
⭐ با آپدیت جدید تلگرام اپلیکیشنها و وبسایتها میتوانند با پرداخت هزینه در fragment، کد تأیید را از طریق تلگرام ارسال کنند.
🎁 در بهروزرسانی جدید تلگرام هدیه بدهید. میتوانید با استفاده از استار، برای دیگران هدیه بفرستید. این هدیه میتواند پیام اختصاصی یا پیامهای متحرک باشد. دریافتکننده میتواند آن را در پروفایلش نمایش دهد یا آنها را به استار تبدیل کند.
4🔥6👍1