چند روز توی X (توییتر سابق) پست هایی میبینم راجب اینکه عزیزانی که تازه می خواهند وارد دنیای برنامه نویسی بشن چه زبانی رو یاد بگیرن و اکثر پست ها هم تاکیید داشتن که حتما با جاوا اسکریپت و پایتون شروع کنند با یه سری دلایل خودشون :)
به نظر من و چیزی که تو این چند سال دیدم زبان برنامه نویسی که شما باهاش قرار شروع کنید مهم نیست. در نهایت اینا ابزار هستند و شما صرفا سینتکس و قواعد زبان رو یاد می گیرید. قبل از اینکه زبانی رو شروع کنید باید الگوریتم رو یاد بگیرید! قرار نیست برید یه کتاب چند صد صفحه ای راجب الگوریتم بخونید یا خیلی عمیق بشید که همین اول کاری حوصلتون سر بره و خسته بشید؛ اما خوبه که با یه سری مفاهیم پایه آشنا بشید و هدف از آشنایی باهاش اینکه خط فکریتون مشخص باشه و بدونید قراره چیکار کنید
وقتی کسی ازم می پرسه با چه زبانی شروع کنم، بهش زبان معرفی نمیکنم. ازش میپرسم میخوای چیکار کنی؟ هدفت چیه از اینکه اومدی تو دنیای برنامه نویسی؟
وقتی کسی که میخواد وارد این حوزه بشه و خودشم نمیدونه قرار چیکار کنه، کسی بهش بگه برو مثلا فقط جاوا اسکریپت یاد بگیر یا فقط C یاد بگیر اون شخص وارد یه لوپ سردرگمی میشه و در طول فرایند یاد گیری ممکنه بار ها از خودش سوال بپرسه حالا که چی؟ چرا من باید اینو یاد بگیرم؟ به چه دردی میخوره؟ و باعث میشه انگیزه و اشتیاق یاد گیریش کم بشه
ولی وقتی هدف مشخص باشه! مثلا اون شخص به سوالات بالا اینطوری جواب میده:
- میخوام برنامه نویس موبایل بشم - هدفم اینکه بتونم اپلیکیشن خودمو بنویسم
الان باید زبان و ابزار مناسب معرفی کرد که مخاطب ما بدونه نتیجه ی کارش قرار چی بشه ؛) و موقع یاد گیری توی لوپ سردرگمی گیر نکنه. بدونه اگه داره این وقتو میذاره این هزینه و انرژی رو صرف کنه مسیرش مشخصه . مثلا میره دارت یادمیگیره، بعد میره سراغ فلاتر یا هم میره کاتلین یاد میگیره یا ...
یه مثال دیگه:
- میخوام درس های دانشگاهی رو پاس میکنم - هدفم اینکه بتونم تمرین های برنامه نویسی دانشگاه رو حل کنم
توی همچین مواردی شما دیگه نمیاین بگید برو C یاد بگیر. چون هدف فقط حل کردن تمریناته و به این شخص یه نقشه راه پایتون معرفی میکنید
خلاصه اینکه:
اگه جایی دیدید میگن فقط فلان زبان یا فلان ابزارو یاد بگیرید آینده ی شغلی، درآمد همه چیتون تضمین شدسو .... یا طرف داره تبلیغات آموزش خودشو میکنه یا هم از روی ناآگاهی داره راهنمایی اشتباه میکنه. در نهایت همه ی تکنولوژی ها و زبان ها ابزارن و نقشه ی راه مهمه که واقعا اون شخصی که تازه میخواد شروع کنه قرار چیکار کنه؟ وارد کدوم حوزه میخواد بشه؟ و طبق جوابش به این سوالا باید راهنمایی بشه نه از روی ترندها و جواب هایی مثل فقط این زبان و تکنولوژی خوبن بقیه بد :)
🆔 @MdDaily
به نظر من و چیزی که تو این چند سال دیدم زبان برنامه نویسی که شما باهاش قرار شروع کنید مهم نیست. در نهایت اینا ابزار هستند و شما صرفا سینتکس و قواعد زبان رو یاد می گیرید. قبل از اینکه زبانی رو شروع کنید باید الگوریتم رو یاد بگیرید! قرار نیست برید یه کتاب چند صد صفحه ای راجب الگوریتم بخونید یا خیلی عمیق بشید که همین اول کاری حوصلتون سر بره و خسته بشید؛ اما خوبه که با یه سری مفاهیم پایه آشنا بشید و هدف از آشنایی باهاش اینکه خط فکریتون مشخص باشه و بدونید قراره چیکار کنید
توی پست الگوریتم و فلو چارت خیلی خلاصه راجبش نوشتم و برای شروع راهنمای خوبی میتونه باشه
وقتی کسی ازم می پرسه با چه زبانی شروع کنم، بهش زبان معرفی نمیکنم. ازش میپرسم میخوای چیکار کنی؟ هدفت چیه از اینکه اومدی تو دنیای برنامه نویسی؟
وقتی کسی که میخواد وارد این حوزه بشه و خودشم نمیدونه قرار چیکار کنه، کسی بهش بگه برو مثلا فقط جاوا اسکریپت یاد بگیر یا فقط C یاد بگیر اون شخص وارد یه لوپ سردرگمی میشه و در طول فرایند یاد گیری ممکنه بار ها از خودش سوال بپرسه حالا که چی؟ چرا من باید اینو یاد بگیرم؟ به چه دردی میخوره؟ و باعث میشه انگیزه و اشتیاق یاد گیریش کم بشه
ولی وقتی هدف مشخص باشه! مثلا اون شخص به سوالات بالا اینطوری جواب میده:
- میخوام برنامه نویس موبایل بشم - هدفم اینکه بتونم اپلیکیشن خودمو بنویسم
الان باید زبان و ابزار مناسب معرفی کرد که مخاطب ما بدونه نتیجه ی کارش قرار چی بشه ؛) و موقع یاد گیری توی لوپ سردرگمی گیر نکنه. بدونه اگه داره این وقتو میذاره این هزینه و انرژی رو صرف کنه مسیرش مشخصه . مثلا میره دارت یادمیگیره، بعد میره سراغ فلاتر یا هم میره کاتلین یاد میگیره یا ...
یه مثال دیگه:
- میخوام درس های دانشگاهی رو پاس میکنم - هدفم اینکه بتونم تمرین های برنامه نویسی دانشگاه رو حل کنم
توی همچین مواردی شما دیگه نمیاین بگید برو C یاد بگیر. چون هدف فقط حل کردن تمریناته و به این شخص یه نقشه راه پایتون معرفی میکنید
خلاصه اینکه:
اگه جایی دیدید میگن فقط فلان زبان یا فلان ابزارو یاد بگیرید آینده ی شغلی، درآمد همه چیتون تضمین شدسو .... یا طرف داره تبلیغات آموزش خودشو میکنه یا هم از روی ناآگاهی داره راهنمایی اشتباه میکنه. در نهایت همه ی تکنولوژی ها و زبان ها ابزارن و نقشه ی راه مهمه که واقعا اون شخصی که تازه میخواد شروع کنه قرار چیکار کنه؟ وارد کدوم حوزه میخواد بشه؟ و طبق جوابش به این سوالا باید راهنمایی بشه نه از روی ترندها و جواب هایی مثل فقط این زبان و تکنولوژی خوبن بقیه بد :)
🆔 @MdDaily
👍9❤🔥3
پایگاه داده vector چیه؟
وکتور یه آرایه از اعداده که موقعیت یه نقطه رو توی فضای چند بعدی نشون میده. مثلاً وکتور {12، 13، 19، 8، 9} یه نقطه رو توی 5 بعد قرار میده. وکتور ها این امکان رو فراهم می کنن که داده رو به صورت هندسی نمایش بدیم و مقایسه های ریاضی بین نقاط داده رو انجام بدیم.
ادامه در پست بعدی...
🆔 @MdDaily
وکتور یه آرایه از اعداده که موقعیت یه نقطه رو توی فضای چند بعدی نشون میده. مثلاً وکتور {12، 13، 19، 8، 9} یه نقطه رو توی 5 بعد قرار میده. وکتور ها این امکان رو فراهم می کنن که داده رو به صورت هندسی نمایش بدیم و مقایسه های ریاضی بین نقاط داده رو انجام بدیم.
ادامه در پست بعدی...
🆔 @MdDaily
👍5
Md Daily
پایگاه داده vector چیه؟ وکتور یه آرایه از اعداده که موقعیت یه نقطه رو توی فضای چند بعدی نشون میده. مثلاً وکتور {12، 13، 19، 8، 9} یه نقطه رو توی 5 بعد قرار میده. وکتور ها این امکان رو فراهم می کنن که داده رو به صورت هندسی نمایش بدیم و مقایسه های ریاضی بین…
رابطه وکتور ها با embeddings چیه؟
در ماشین لرنینگ، embeddings وکتور هایی هستن که data point هایی رو مثل کلمات، جملات، تصاویر و غیره رو نشون میدن. embeddings میاد semantic meaning داده ها رو به فرم وکتور encode میکنه . اونا توسط شبکه های عصبی تولید می شن که برای map data points به نمایش های وکتور موثر آموزش دیده اند. این embeddings مفاهیم مرتبط رو توی فضای وکتور نزدیک یکدیگر قرار میدن.
پایگاه داده vector چطور کار می کنه؟
پایگاه داده وکتور embeddings رو برای انواع مختلفی از نقاط داده مثل اسناد، تصاویر، محصولات و غیره ذخیره می کنه. این پایگاه داده این embeddings رو به داده های اصلی اونا مپ میکنه. پایگاه داده امکان جستجو سریع شباهت ها رو بر اساس نزدیکی وکتور فراهم می کنه. یه کوئری embeddings می تونه با embeddings ذخیره شده مقایسه بشه و مشابه ترین وکتور ها تقریباً به سرعت بازیابی می شن. این پایه و اساس جستجوی semantic، پیشنهادات و سایر کاربردهای AI رو فراهم می کنه.
پایگاه داده های وکتور در AI چه کاربردهایی دارن؟
پایگاه داده های وکتور کاربردهای کلیدی مختلفی در AI دارن:
👈 جستجوی semantic: بازیابی اطلاعات بر اساس معنا، نه فقط کلمات کلیدی
👈پیشنهادات: پیشنهاد محتوایی که بیشترین ارتباط رو با علایق کاربر داره
👈مدل های LLM: درک کلمات توی متن برای تولید و خلاصه نویسی
👈تشخیص ناهنجاری: شناسایی data points غیرعادی در مقایسه با عادی
👈طبقه بندی تصویر: طبقه بندی تصاویر بر اساس ویژگی های بصری
با تسهیل سرعت مقایسه شباهت ها، پایگاه داده های وکتور به مدل های یادگیری ماشین اجازه می دن تا بین قطعات داده ارتباط برقرار کنن. این از توانایی های AI پیشرفته پشتیبانی می کنه که با استفاده از داده خام امکان پذیر نیست. فضای وکتور به نوعی "حافظه" برای الگوریتم ها برای ایجاد درک عمل می کنه.
🆔 @MdDaily
در ماشین لرنینگ، embeddings وکتور هایی هستن که data point هایی رو مثل کلمات، جملات، تصاویر و غیره رو نشون میدن. embeddings میاد semantic meaning داده ها رو به فرم وکتور encode میکنه . اونا توسط شبکه های عصبی تولید می شن که برای map data points به نمایش های وکتور موثر آموزش دیده اند. این embeddings مفاهیم مرتبط رو توی فضای وکتور نزدیک یکدیگر قرار میدن.
پایگاه داده vector چطور کار می کنه؟
پایگاه داده وکتور embeddings رو برای انواع مختلفی از نقاط داده مثل اسناد، تصاویر، محصولات و غیره ذخیره می کنه. این پایگاه داده این embeddings رو به داده های اصلی اونا مپ میکنه. پایگاه داده امکان جستجو سریع شباهت ها رو بر اساس نزدیکی وکتور فراهم می کنه. یه کوئری embeddings می تونه با embeddings ذخیره شده مقایسه بشه و مشابه ترین وکتور ها تقریباً به سرعت بازیابی می شن. این پایه و اساس جستجوی semantic، پیشنهادات و سایر کاربردهای AI رو فراهم می کنه.
پایگاه داده های وکتور در AI چه کاربردهایی دارن؟
پایگاه داده های وکتور کاربردهای کلیدی مختلفی در AI دارن:
👈 جستجوی semantic: بازیابی اطلاعات بر اساس معنا، نه فقط کلمات کلیدی
👈پیشنهادات: پیشنهاد محتوایی که بیشترین ارتباط رو با علایق کاربر داره
👈مدل های LLM: درک کلمات توی متن برای تولید و خلاصه نویسی
👈تشخیص ناهنجاری: شناسایی data points غیرعادی در مقایسه با عادی
👈طبقه بندی تصویر: طبقه بندی تصاویر بر اساس ویژگی های بصری
با تسهیل سرعت مقایسه شباهت ها، پایگاه داده های وکتور به مدل های یادگیری ماشین اجازه می دن تا بین قطعات داده ارتباط برقرار کنن. این از توانایی های AI پیشرفته پشتیبانی می کنه که با استفاده از داده خام امکان پذیر نیست. فضای وکتور به نوعی "حافظه" برای الگوریتم ها برای ایجاد درک عمل می کنه.
🆔 @MdDaily
👍3🔥2
Md Daily
رابطه وکتور ها با embeddings چیه؟ در ماشین لرنینگ، embeddings وکتور هایی هستن که data point هایی رو مثل کلمات، جملات، تصاویر و غیره رو نشون میدن. embeddings میاد semantic meaning داده ها رو به فرم وکتور encode میکنه . اونا توسط شبکه های عصبی تولید می شن که…
خب این توضیح تقریبا رسمیه vector database بود، خیلی ساده و خلاصه و خودمونی vector database ها دقیقا چین و چرا توی ai انقدر استفاده ازشون مهمه؟
خب شاید سوال پیش بیاد چرا ما توی ai مثلا نمیایم مثل اکثر پروژه ها از پایگاه های داده ای مثل mysql یا pg sql استفاده کنیم؟
توی پایگاه های داده رابطه ای پردازش حجم عظیمی از داده های بدون ساختار که توی هوش مصنوعی استفاده میشن چالش بر انگیزه و بهینه نیست.
اینجا بود که پایگاه های داده برداری یا همون vector database خودمون بوجود اومدن تا برای ذخیره و مدیریت حجم عظیمی از دادههای با ابعاد بالا در قالب بردارها استفاده بشن که بردارها نمایش داده های ریاضی هستند که اشیاء را بر اساس ویژگی ها یا کیفیت های مختلف آنها توصیف می کنند.
خب وقت مثاله:
فرض کن یه فروشگاه بزرگ داری و میخوای بدونی کدوم محصولات با هم مرتبط هستن. قبلاً میتونستی این کارو با یه دیتابیس معمولی انجام بدی. مثلاً میتونستی یه ستون به اسم "متعلق به دسته" داشته باشی و هر محصول رو به یه دسته خاص نسبت بدی. بعداً میتونستی از این ستون برای پیدا کردن محصولات مرتبط با هم استفاده کنی. مثلاً اگه میخواستی بدونی کدوم محصولات مرتبط با "لوازم الکتریکی" هستن، میتونستی همه محصولاتی رو که در ستون "متعلق به دسته" ارزش "لوازم الکتریکی" رو دارن، پیدا کنی.
اما این روش خیلی دقیق نیست. مثلاً فرض کن یه محصولی رو داشته باشی که هم لوازم الکتریکی هست هم لوازم خانگی. توی این حالت، محصول تو به دو دسته تعلق داره و نمیتونی تشخیص بدی که کدوم دسته برایش مرتبطتره.
حالا بیا ببینیم که vector database چطوری میتونه به ما کمک کنه. توی vector database، هر محصول رو به یه بردار تبدیل میکنیم. این بردار ویژگیهای محصول رو نشون میده. مثلاً اگه محصول ما یه گوشی موبایل باشه، بردار آن ممکن است شامل ویژگیهای زیر باشه:
*قیمت
*برند
*نوع صفحه نمایش
*ظرفیت حافظه داخلی
*ظرفیت حافظه رم
*سیستم عامل
حالا اگه بخوایم بدونیم کدوم محصولات با هم مرتبط هستن، کافیه بردارهای مربوط به اون محصولات رو مقایسه کنیم. اگه بردارها به هم شبیه باشن، یعنی محصولات هم مرتبط هستن.
برای مثال، فرض کن یه گوشی موبایل با قیمت 10 میلیون تومان، برند سامسونگ، نوع صفحه نمایش OLED، ظرفیت حافظه داخلی 128 گیگابایت، ظرفیت حافظه رم 8 گیگابایت و سیستم عامل اندروید داشته باشیم. بردار این محصول ممکنه به صورت زیر باشه:
حالا اگه یه گوشی موبایل دیگه با قیمت 12 میلیون تومان، برند سامسونگ، نوع صفحه نمایش OLED، ظرفیت حافظه داخلی 256 گیگابایت، ظرفیت حافظه رم 12 گیگابایت و سیستم عامل اندروید داشته باشیم، بردار این محصول هم به صورت زیر خواهد بود:
اگه بردارهای این دو محصول رو با هم مقایسه کنیم، میبینیم که خیلی شبیه به هم هستن. بنابراین، میتونیم نتیجه بگیریم که این دو محصول با هم مرتبط هستن.
این فقط یه مثال ساده از کاربرد vector database بود. در واقعیت، کاربردهای vector database در هوش مصنوعی خیلی گستردهتر هستن.
چنتا از vector database های معروف:
🔗 Pinecone
🔗 Milvus
🔗 Chroma
🔗 Weaviate
🆔 @MdDaily
خب شاید سوال پیش بیاد چرا ما توی ai مثلا نمیایم مثل اکثر پروژه ها از پایگاه های داده ای مثل mysql یا pg sql استفاده کنیم؟
توی پایگاه های داده رابطه ای پردازش حجم عظیمی از داده های بدون ساختار که توی هوش مصنوعی استفاده میشن چالش بر انگیزه و بهینه نیست.
اینجا بود که پایگاه های داده برداری یا همون vector database خودمون بوجود اومدن تا برای ذخیره و مدیریت حجم عظیمی از دادههای با ابعاد بالا در قالب بردارها استفاده بشن که بردارها نمایش داده های ریاضی هستند که اشیاء را بر اساس ویژگی ها یا کیفیت های مختلف آنها توصیف می کنند.
خب وقت مثاله:
فرض کن یه فروشگاه بزرگ داری و میخوای بدونی کدوم محصولات با هم مرتبط هستن. قبلاً میتونستی این کارو با یه دیتابیس معمولی انجام بدی. مثلاً میتونستی یه ستون به اسم "متعلق به دسته" داشته باشی و هر محصول رو به یه دسته خاص نسبت بدی. بعداً میتونستی از این ستون برای پیدا کردن محصولات مرتبط با هم استفاده کنی. مثلاً اگه میخواستی بدونی کدوم محصولات مرتبط با "لوازم الکتریکی" هستن، میتونستی همه محصولاتی رو که در ستون "متعلق به دسته" ارزش "لوازم الکتریکی" رو دارن، پیدا کنی.
اما این روش خیلی دقیق نیست. مثلاً فرض کن یه محصولی رو داشته باشی که هم لوازم الکتریکی هست هم لوازم خانگی. توی این حالت، محصول تو به دو دسته تعلق داره و نمیتونی تشخیص بدی که کدوم دسته برایش مرتبطتره.
حالا بیا ببینیم که vector database چطوری میتونه به ما کمک کنه. توی vector database، هر محصول رو به یه بردار تبدیل میکنیم. این بردار ویژگیهای محصول رو نشون میده. مثلاً اگه محصول ما یه گوشی موبایل باشه، بردار آن ممکن است شامل ویژگیهای زیر باشه:
*قیمت
*برند
*نوع صفحه نمایش
*ظرفیت حافظه داخلی
*ظرفیت حافظه رم
*سیستم عامل
حالا اگه بخوایم بدونیم کدوم محصولات با هم مرتبط هستن، کافیه بردارهای مربوط به اون محصولات رو مقایسه کنیم. اگه بردارها به هم شبیه باشن، یعنی محصولات هم مرتبط هستن.
برای مثال، فرض کن یه گوشی موبایل با قیمت 10 میلیون تومان، برند سامسونگ، نوع صفحه نمایش OLED، ظرفیت حافظه داخلی 128 گیگابایت، ظرفیت حافظه رم 8 گیگابایت و سیستم عامل اندروید داشته باشیم. بردار این محصول ممکنه به صورت زیر باشه:
[10000000, 1, 1, 128, 8, 1]
حالا اگه یه گوشی موبایل دیگه با قیمت 12 میلیون تومان، برند سامسونگ، نوع صفحه نمایش OLED، ظرفیت حافظه داخلی 256 گیگابایت، ظرفیت حافظه رم 12 گیگابایت و سیستم عامل اندروید داشته باشیم، بردار این محصول هم به صورت زیر خواهد بود:
[12000000, 1, 1, 256, 12, 1]
اگه بردارهای این دو محصول رو با هم مقایسه کنیم، میبینیم که خیلی شبیه به هم هستن. بنابراین، میتونیم نتیجه بگیریم که این دو محصول با هم مرتبط هستن.
این فقط یه مثال ساده از کاربرد vector database بود. در واقعیت، کاربردهای vector database در هوش مصنوعی خیلی گستردهتر هستن.
چنتا از vector database های معروف:
🔗 Pinecone
🔗 Milvus
🔗 Chroma
🔗 Weaviate
🆔 @MdDaily
🔥6❤1
📍 منابع توصیه شده برای یادگیری گولنگ
👈 کتاب آنلاین Learn Go With Tests
👈 مستندات Effective Go (این منبع به شما کمک میکنه که چطوری کد های بهتر و تمیز تری توی گولنگ بنویسید)
👈 وبسایت Go by Example (این وبسایت اومده مباحث مختلف رو با مثال آموزش داده، این وبسایت وقتی که خودمم میخواستم یادگیری گولنگ رو شروع کنم خیلی بهم کمک کرد)
👈 کورس A Tour of Go (این کورس مهمترین ویژگیهای زبان رو پوشش میده و برای شروع یه منبع عالیه)
👈 وبسایت Coding Challenges (برای حل چالش)
👈 دوره ی Learn Go از گوگل در codecademy (اگه هیچ پیش زمینه ای از گولنگ ندارید برای شروع این منبع عالیه و بهتون توصیه میکنم)
👈 کانال یوتیوب Golang Dojo (از این کانال برای یادگیری مباحث پیشرفته تر استفاده کنید )
🆔 @MdDaily
👈 کتاب آنلاین Learn Go With Tests
👈 مستندات Effective Go (این منبع به شما کمک میکنه که چطوری کد های بهتر و تمیز تری توی گولنگ بنویسید)
👈 وبسایت Go by Example (این وبسایت اومده مباحث مختلف رو با مثال آموزش داده، این وبسایت وقتی که خودمم میخواستم یادگیری گولنگ رو شروع کنم خیلی بهم کمک کرد)
👈 کورس A Tour of Go (این کورس مهمترین ویژگیهای زبان رو پوشش میده و برای شروع یه منبع عالیه)
👈 وبسایت Coding Challenges (برای حل چالش)
👈 دوره ی Learn Go از گوگل در codecademy (اگه هیچ پیش زمینه ای از گولنگ ندارید برای شروع این منبع عالیه و بهتون توصیه میکنم)
👈 کانال یوتیوب Golang Dojo (از این کانال برای یادگیری مباحث پیشرفته تر استفاده کنید )
🆔 @MdDaily
❤3❤🔥2🔥1
Audio
🎧 پلی لیست #موزیک مناسب برای زمان تمرکز و کاهش استرس
🎵 Tracklist
► 00:00 Ekloe - Vault
► 06:02 Throwy, Infinitum - One Day
► 10:06 Liam Thomas - Aquila
► 13:03 Victoriya - Symmetry
► 15:50 Fotiz Liberis - Lost
► 19:48 Vigo - Haze
► 23:38 Rhekluse - No Means To An End
► 27:28 Oscuro, Riversilvers - Crying All The Time (Instrumental Mix)
► 31:16 Autumn Glow, Auel - Your Loving
► 32:53 Arnyd - Beginning
► 36:34 Oscuro - Devotion
► 39:52 VonnBoyd - Smoke
► 44:05 Liam Thomas - Supernova
► 47:58 Oscuro - Into The Sun
► 51:10 4th Front - Decent
► 55:19 Arnyd - Paradox
► 58:58 Oscuro, Liam Thomas - Orion
► 1:02:10 Victoriya - Ocean Sky
► 1:07:54 Unbrok - Chasm
► 1:11:14 Outlier - Forgive
🆔 @MdDaily
🎵 Tracklist
► 00:00 Ekloe - Vault
► 06:02 Throwy, Infinitum - One Day
► 10:06 Liam Thomas - Aquila
► 13:03 Victoriya - Symmetry
► 15:50 Fotiz Liberis - Lost
► 19:48 Vigo - Haze
► 23:38 Rhekluse - No Means To An End
► 27:28 Oscuro, Riversilvers - Crying All The Time (Instrumental Mix)
► 31:16 Autumn Glow, Auel - Your Loving
► 32:53 Arnyd - Beginning
► 36:34 Oscuro - Devotion
► 39:52 VonnBoyd - Smoke
► 44:05 Liam Thomas - Supernova
► 47:58 Oscuro - Into The Sun
► 51:10 4th Front - Decent
► 55:19 Arnyd - Paradox
► 58:58 Oscuro, Liam Thomas - Orion
► 1:02:10 Victoriya - Ocean Sky
► 1:07:54 Unbrok - Chasm
► 1:11:14 Outlier - Forgive
🆔 @MdDaily
🔥8
Md Daily
معرفی Pi این پروژه خودش رو یه هوش مصنوعی شخصی معرفی میکنه و باهاش میتونید مثل یک دوست صحبت کنید، ایده های جدید بگیرید، بازی کنید، برنامه ریزی کنید و... یه قابلیت جالب متن به گفتارم با صدای طبیعی داره که ازش میتونید برای تقویت زبان انگلیسی استفاده کنید.…
💫 رقیب جدید ChatGPT در موبایل؛ نسخه اندروید اپلیکیشن چتبات هوش مصنوعی Pi منتشر شد
🔹استارتاپ Inflection AI اعلام کرد که چتبات هوش مصنوعی Pi اکنون در قالب یک اپلیکیشن رایگان برای اندروید در دسترس قرار گرفته است. این استارتاپ توسط «مصطفی سلیمان»، همبنیانگذار دیپمایند و «رید هافمن»، همبنیانگذار لینکدین تأسیس شده است. این هوش مصنوعی با رابط کاربری ساده و سریع خود، همچنین با قابلیت چت از طریق تماس صوتی همزمان، رقیبی برای ChatGPT محسوب میشود.
🔹براساس ادعای استارتاپ Inflection AI، این هوش مصنوعی به مرور و با چتکردن بیشتر، با شخصیت شما آشنا میشود و مطابق سلیقه و اطلاعاتی که از شما کسب میکند، مکالمه را پیش میبرد.
<Digiato>
🔗 دانلود نسخه اندروید
🆔 @MdDaily
🔹استارتاپ Inflection AI اعلام کرد که چتبات هوش مصنوعی Pi اکنون در قالب یک اپلیکیشن رایگان برای اندروید در دسترس قرار گرفته است. این استارتاپ توسط «مصطفی سلیمان»، همبنیانگذار دیپمایند و «رید هافمن»، همبنیانگذار لینکدین تأسیس شده است. این هوش مصنوعی با رابط کاربری ساده و سریع خود، همچنین با قابلیت چت از طریق تماس صوتی همزمان، رقیبی برای ChatGPT محسوب میشود.
🔹براساس ادعای استارتاپ Inflection AI، این هوش مصنوعی به مرور و با چتکردن بیشتر، با شخصیت شما آشنا میشود و مطابق سلیقه و اطلاعاتی که از شما کسب میکند، مکالمه را پیش میبرد.
<Digiato>
🔗 دانلود نسخه اندروید
🆔 @MdDaily
👍2
معرفی زبان برنامه نویسی V (ساده، سریع، ایمن، کامپایلی)
اولین نسخه ی این زبان دوست داشتنی سال 2019 عرضه شد و طبق گفته ی توسعه دهنده ی این زبان خیلی شبیه زبان Go طراحی شده و اگه شما Go رو بلدید پس V رو هم بلدید :)
زبان V برپایه ی زبان V ایه و با زبان V نوشته شده😄 با استفاده از این زبان میتونید: برنامه های سیستمی، بکند ، بازی ، برنامه های گرافیکی چند سکویی و اپ موبایل بنویسید یا توی embedded و علوم داده و ... ازش استفاده کنید
ویژگی هایی که این زبان رو متمایز میکنه:
👈 به اندازه ی C سریعه
👈 خروجی برنامه هاش کم حجمه مثلا خروجی اجرایی یه یه وب سرور که برای اجراش نیاز به هیچ دپندسی نیست اندازش حدودا 250 کیلوبایت میشه
👈 میتونید کل برنامه ای که با C نوشتید رو به V تبدیل کنید
👈 از Hot code reloading پشتیبانی میکنه و بدون نیاز به کامپایل مجدد میتونید تغییرات رو ببینید
👈 کتاب خانه های گرافیکی قدرتمندی برای رندر دو بعدی و سه بعدی داره
👈 یه کتاب خانه ی قدرتمند برای ساخت GUI داره
👈 از خروجی چند سکویی پشتیبانی میکنه مثلا میتونید روی لینوکس برای ویندوز و مک خروجی بگیرید
👈 میتونید به عنوان Bash هم ازش استفاده کنید
👈 مستندسازی خود کار از کد شما
👈 پشتیبانی از WASM
👈 توی خودش فریم ورک و ORM برای ساخت بکند داره
👈 و ...
برنامه ی Hello world در V:
🔗 وبسایت پروژه
🔗 گیت هاب پروژه
پ ن:
این زبان هنوز در مرحله ی Beta هست و استفاده ازش توی پروژه های واقعی پیشنهاد نمیشه :) ولی یادگیریش برای فان جالبه. اگه دوست داشتید و خواستید یه آخر هفته برای یادگیریش وقت بذارید میتونید از این مستندات استفاده کنید.
🆔 @MdDaily
اولین نسخه ی این زبان دوست داشتنی سال 2019 عرضه شد و طبق گفته ی توسعه دهنده ی این زبان خیلی شبیه زبان Go طراحی شده و اگه شما Go رو بلدید پس V رو هم بلدید :)
زبان V برپایه ی زبان V ایه و با زبان V نوشته شده😄 با استفاده از این زبان میتونید: برنامه های سیستمی، بکند ، بازی ، برنامه های گرافیکی چند سکویی و اپ موبایل بنویسید یا توی embedded و علوم داده و ... ازش استفاده کنید
ویژگی هایی که این زبان رو متمایز میکنه:
👈 به اندازه ی C سریعه
👈 خروجی برنامه هاش کم حجمه مثلا خروجی اجرایی یه یه وب سرور که برای اجراش نیاز به هیچ دپندسی نیست اندازش حدودا 250 کیلوبایت میشه
👈 میتونید کل برنامه ای که با C نوشتید رو به V تبدیل کنید
👈 از Hot code reloading پشتیبانی میکنه و بدون نیاز به کامپایل مجدد میتونید تغییرات رو ببینید
👈 کتاب خانه های گرافیکی قدرتمندی برای رندر دو بعدی و سه بعدی داره
👈 یه کتاب خانه ی قدرتمند برای ساخت GUI داره
👈 از خروجی چند سکویی پشتیبانی میکنه مثلا میتونید روی لینوکس برای ویندوز و مک خروجی بگیرید
👈 میتونید به عنوان Bash هم ازش استفاده کنید
👈 مستندسازی خود کار از کد شما
👈 پشتیبانی از WASM
👈 توی خودش فریم ورک و ORM برای ساخت بکند داره
👈 و ...
برنامه ی Hello world در V:
fn main() {
println('Hello, ${area} developers!')
}🔗 وبسایت پروژه
🔗 گیت هاب پروژه
پ ن:
این زبان هنوز در مرحله ی Beta هست و استفاده ازش توی پروژه های واقعی پیشنهاد نمیشه :) ولی یادگیریش برای فان جالبه. اگه دوست داشتید و خواستید یه آخر هفته برای یادگیریش وقت بذارید میتونید از این مستندات استفاده کنید.
🆔 @MdDaily
👍2
زبان های برنامه نویسی چطوری خودشون با خودشون نوشته میشن و توسط خودشون کامپایل میشن؟
شاید براتون سوال شده باشه که زبان هایی مثل V, Golang ,zig,rust و ... چطوری خودشون توسط خودشون نوشته میشن یا بهتر بگیم اول مرغ بوده یا تخم مرغ؟
پس با این پست از Md Daily همراه باشید.
بهتره برای پاسخ دادن به این سوال بریم عقب تر. انقدر عقب که برگردیم به زمان اسمبلی :)
کار اصلیه کامپایلر اینکه سورس کد رو به یک زبان کامپیوتری دیگه ای مثل machine code تبدیل کنه. هر برنامهای که به یک زبان برنامهنویسی سطح بالا نوشته شده باشه، قبل از اجرا باید به کد ماشین ترجمه بشه.
برنامه های کامپیوتر اولیه عمدتاً به زبان اسمبلی و قبل از اسمبلی هم مستقیماً به کد ماشین نوشته میشدن.
خب به مرور زمان یه نیازی به وجود اومد که برنامه ها سطح بالاتر نوشته بشن و توسط کامپایلر ها برای سیستم های مختلفی ترجمه بشن. تا بالاخره بعد از کلی نواوری و ایده از سال 1942 تا 1960 اولین زبان برنامه نویسی سطح بالا یعنی COBOL روی دوتا کامپیوتر مختلف کامپایل و اجرا شد (جزئیات بیشتر در این مقاله)
❓خب حالا چرا این تاریخچه برای ما مهم بود؟
برگردیم به مثال اول مرغ بوده یا تخم مرغ یا بهتر بگیم پارودکس علیت. خب قبل از اینکه زبانی بتونه خودش با خودش نوشته بشه ما به یه زبان مادر نیاز داریم و از تاریخچه ی کامپیوتر ها میشه فهمید که بدون بوجود اومدن اسمبلی کامپایلری هم بوجود نمیومده. توی علوم کامپیوتر به فرایندی که توش یک کامپایلر (یا اسمبلر) به زبان برنامه نویسی هدف نوشته میشه که قرار توسط همون کامپایل بشه. میگیم بوتاسترپینگ (Bootstrapping)
مراحل بوتاسترپینگ:
👈 نوشتن یک نسخه اولیه از کامپایلر در یک زبان دیگر، مانند C یا C++.
👈 استفاده از نسخه اولیه کامپایلر برای کامپایل کردن یک نسخه جدید از کامپایلر، اما این بار در زبانی که کامپایلر برای آن طراحی شده.
👈 تکرار مرحله 2 تا زمانی که کامپایلر بتونه خودش رو کامپایل کنه.
💡 مثال بوتاسترپینگ:
برای مثال، فرض کنید میخوایم کامپایلر زبان برنامهنویسی جدیدی به نام MdLang رو بنویسیم. اولین قدم اینکه یک نسخه اولیه از کامپایلر رو در زبان C یا C++ بنویسیم. این نسخه اولیه میتونه بسیار ساده باشه و تنها شامل حداقل قابلیتهای لازم برای کامپایل کردن کد MdLang باشه.
بعد از نوشتن نسخه اولیه کامپایلر، میتونیم ازش برای کامپایل کردن یک نسخه جدید از کامپایلر، اما این بار در زبان MdLang استفاده کنیم. این نسخه جدید از کامپایلر میتونه شامل قابلیتهای بیشتری باشه، مثل پشتیبانی از ویژگیهای جدید زبان MdLang.
این فرآیند رو می تونیم تا زمانی که کامپایلر بتونه خودش رو کامپایل کنه تکرار کنیم.
💫 نتیجه گیری:
پس اگه خیلی خلاصه بخوایم بگیم و نتیجه گیری کنیم. بعد از اومدن زبان اسمبلی و شکل گیری ایده ی اولیه اولین کامپایلر ها با استفاده از تکنیک بوتاسترپینگ و بوجود اومدن زبان هایی مثل C . برپایه ی این زبان ها کامپایلر هایی برای زبان های جدید نوشته شدن.
🆔 @MdDaily
شاید براتون سوال شده باشه که زبان هایی مثل V, Golang ,zig,rust و ... چطوری خودشون توسط خودشون نوشته میشن یا بهتر بگیم اول مرغ بوده یا تخم مرغ؟
پس با این پست از Md Daily همراه باشید.
بهتره برای پاسخ دادن به این سوال بریم عقب تر. انقدر عقب که برگردیم به زمان اسمبلی :)
کار اصلیه کامپایلر اینکه سورس کد رو به یک زبان کامپیوتری دیگه ای مثل machine code تبدیل کنه. هر برنامهای که به یک زبان برنامهنویسی سطح بالا نوشته شده باشه، قبل از اجرا باید به کد ماشین ترجمه بشه.
برنامه های کامپیوتر اولیه عمدتاً به زبان اسمبلی و قبل از اسمبلی هم مستقیماً به کد ماشین نوشته میشدن.
خب به مرور زمان یه نیازی به وجود اومد که برنامه ها سطح بالاتر نوشته بشن و توسط کامپایلر ها برای سیستم های مختلفی ترجمه بشن. تا بالاخره بعد از کلی نواوری و ایده از سال 1942 تا 1960 اولین زبان برنامه نویسی سطح بالا یعنی COBOL روی دوتا کامپیوتر مختلف کامپایل و اجرا شد (جزئیات بیشتر در این مقاله)
❓خب حالا چرا این تاریخچه برای ما مهم بود؟
برگردیم به مثال اول مرغ بوده یا تخم مرغ یا بهتر بگیم پارودکس علیت. خب قبل از اینکه زبانی بتونه خودش با خودش نوشته بشه ما به یه زبان مادر نیاز داریم و از تاریخچه ی کامپیوتر ها میشه فهمید که بدون بوجود اومدن اسمبلی کامپایلری هم بوجود نمیومده. توی علوم کامپیوتر به فرایندی که توش یک کامپایلر (یا اسمبلر) به زبان برنامه نویسی هدف نوشته میشه که قرار توسط همون کامپایل بشه. میگیم بوتاسترپینگ (Bootstrapping)
مراحل بوتاسترپینگ:
👈 نوشتن یک نسخه اولیه از کامپایلر در یک زبان دیگر، مانند C یا C++.
👈 استفاده از نسخه اولیه کامپایلر برای کامپایل کردن یک نسخه جدید از کامپایلر، اما این بار در زبانی که کامپایلر برای آن طراحی شده.
👈 تکرار مرحله 2 تا زمانی که کامپایلر بتونه خودش رو کامپایل کنه.
💡 مثال بوتاسترپینگ:
برای مثال، فرض کنید میخوایم کامپایلر زبان برنامهنویسی جدیدی به نام MdLang رو بنویسیم. اولین قدم اینکه یک نسخه اولیه از کامپایلر رو در زبان C یا C++ بنویسیم. این نسخه اولیه میتونه بسیار ساده باشه و تنها شامل حداقل قابلیتهای لازم برای کامپایل کردن کد MdLang باشه.
بعد از نوشتن نسخه اولیه کامپایلر، میتونیم ازش برای کامپایل کردن یک نسخه جدید از کامپایلر، اما این بار در زبان MdLang استفاده کنیم. این نسخه جدید از کامپایلر میتونه شامل قابلیتهای بیشتری باشه، مثل پشتیبانی از ویژگیهای جدید زبان MdLang.
این فرآیند رو می تونیم تا زمانی که کامپایلر بتونه خودش رو کامپایل کنه تکرار کنیم.
💫 نتیجه گیری:
پس اگه خیلی خلاصه بخوایم بگیم و نتیجه گیری کنیم. بعد از اومدن زبان اسمبلی و شکل گیری ایده ی اولیه اولین کامپایلر ها با استفاده از تکنیک بوتاسترپینگ و بوجود اومدن زبان هایی مثل C . برپایه ی این زبان ها کامپایلر هایی برای زبان های جدید نوشته شدن.
یعنی توی همون مثال MdLang. اول میایم با MdLang یه کامپایلر می نویسیم ولی چیزی نیست که کامپایلش کنه پس در نتیجه میایم با زبان های موجود یه کامپایلر مینویسیم تا بتونه کامپایلری که با MdLang نوشته شده رو تبدیل به کد ماشین کنه از اینجا به بعد ما کامپایلرمون که با MdLang نوشته شده و اجرا میشه رو داریم . پس می تونیم با همون دوباره کامپایلر جدید و پیشرفته تری که با MdLang نوشته میشه رو کامپایل کنیم و این چرخه تا جایی ادامه پیدا میکنه تا کامپایلر نهایی ما اماده بشه و زبان خودش با خودش نوشته بشه :)
🆔 @MdDaily
❤🔥3👌2⚡1🔥1
Md Daily
زبان های برنامه نویسی چطوری خودشون با خودشون نوشته میشن و توسط خودشون کامپایل میشن؟ شاید براتون سوال شده باشه که زبان هایی مثل V, Golang ,zig,rust و ... چطوری خودشون توسط خودشون نوشته میشن یا بهتر بگیم اول مرغ بوده یا تخم مرغ؟ پس با این پست از Md Daily…
وقتی داشتم این پستو اماده میکردم. یاد وقتی افتادم که میخواستم فیلم Tenet کریستوفر نولان رو تعریف کنم :)
توضیحش طولانی تر از انجامش تو عمل شد😅
توضیحش طولانی تر از انجامش تو عمل شد😅
😁5
#معرفی
وبسایت osssoftware اومده ابزار ها و پروژه های اپن سورس جایگزین ابزار های متن بسته و تجاریو به صورت دسته بندی شده قرار داده و میتونید در بین بیش از 500 ابزار مختلف جستجو کنید
سازندش میگه تمرکز اصلی روی جمع آوری پروژه هایی بوده که:
👈 توی GitHub فعال بودن
👈 توی DevHunt و Product Hunt جزو بهترین ها بودن
👈 توی منابع مختلف بهشون اشاره شده
چند نمونه از پروژه های اپن سورس معرفی شده:
💫 پروژه ی Penpot جایگزین اپن سورس Figma
💫 پروژه ی AppFlowy جایگزین اپن سورس Notion
💫 پروژه ی plausible جایگزین اپن سورس Google Analytics
💫 و ...
🆔 @MdDaily
وبسایت osssoftware اومده ابزار ها و پروژه های اپن سورس جایگزین ابزار های متن بسته و تجاریو به صورت دسته بندی شده قرار داده و میتونید در بین بیش از 500 ابزار مختلف جستجو کنید
سازندش میگه تمرکز اصلی روی جمع آوری پروژه هایی بوده که:
👈 توی GitHub فعال بودن
👈 توی DevHunt و Product Hunt جزو بهترین ها بودن
👈 توی منابع مختلف بهشون اشاره شده
چند نمونه از پروژه های اپن سورس معرفی شده:
💫 پروژه ی Penpot جایگزین اپن سورس Figma
💫 پروژه ی AppFlowy جایگزین اپن سورس Notion
💫 پروژه ی plausible جایگزین اپن سورس Google Analytics
💫 و ...
🆔 @MdDaily
👍5
داشتم توی dev.to یه مقاله میخوندم با عنوان :
توی مقاله یه سری دلایلی رو اورده بود مثل بحث پرفورمنس، پیچیده تر شدن ساختار اپلیکیشن و ... ولی نکته ای که برام جالب بود، تقریبا یه مقاله ی پربحثی بود. توی کامنت ها مخالف ها و موافق ها با دلایل مختلفی توی سناریو های متفاوت گفته بودند که چرا باید یا نباید استفاده کرد.
به نظرم یکی از مباحث کم تر پرداخته شده اینکه برای primary key چه زمانی از uuid باید استفاده بشه و چه زمانی از integer.
خیلی خوشحال میشم اگه کسی تجربه ای یا نظری در مورد این تاپیک داره توی کامنت های همین پست با بقیه به اشتراک بگذاره تا در نهایت با مشارکت شما و مقاله ی dev.to به یه جمع بندیه خیلی خوب راجب این موضوع تو یه پست بعدی کانال برسیم :)
🆔 @MdDaily
چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟
توی مقاله یه سری دلایلی رو اورده بود مثل بحث پرفورمنس، پیچیده تر شدن ساختار اپلیکیشن و ... ولی نکته ای که برام جالب بود، تقریبا یه مقاله ی پربحثی بود. توی کامنت ها مخالف ها و موافق ها با دلایل مختلفی توی سناریو های متفاوت گفته بودند که چرا باید یا نباید استفاده کرد.
به نظرم یکی از مباحث کم تر پرداخته شده اینکه برای primary key چه زمانی از uuid باید استفاده بشه و چه زمانی از integer.
خیلی خوشحال میشم اگه کسی تجربه ای یا نظری در مورد این تاپیک داره توی کامنت های همین پست با بقیه به اشتراک بگذاره تا در نهایت با مشارکت شما و مقاله ی dev.to به یه جمع بندیه خیلی خوب راجب این موضوع تو یه پست بعدی کانال برسیم :)
🆔 @MdDaily
👌5🤝1
Md Daily
داشتم توی dev.to یه مقاله میخوندم با عنوان : چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟ توی مقاله یه سری دلایلی رو اورده بود مثل بحث پرفورمنس، پیچیده تر شدن ساختار اپلیکیشن و ... ولی نکته ای که برام جالب بود، تقریبا یه…
با تشکر از عزیزانی که توی کامنت پست تجربه هاشون و مطالب خوبی رو به اشتراک گذاشتند، امشب/فردا صبح پست این تاپیک منتشر میشه و فردا به مناسبت شب یلدا هم یه 🎁سوپرایز ویژه داریم....
🔥4
Md Daily
داشتم توی dev.to یه مقاله میخوندم با عنوان : چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟ توی مقاله یه سری دلایلی رو اورده بود مثل بحث پرفورمنس، پیچیده تر شدن ساختار اپلیکیشن و ... ولی نکته ای که برام جالب بود، تقریبا یه…
چرا هرگز نباید از UUID به عنوان کلید اصلی در پایگاه داده های SQL استفاده کنید؟
استفاده از UUID که مخفف (Universally Unique Identifier) هستش به عنوان primary key در پایگاه دادههای SQL مزایا و معایبی داره. اگرچه UUIDها در برخی شرایط مزایایی دارن ولی دلایلی وجود داره که ممکنه بهترین گزینه primary key نباشن:
👈 ایندکسینگ و عملکرد(Indexing and Performance):
وقتی که UUID ها 128 bits هستن در مقایسه با integer که 32 bits عه شاید در داده های کم خیلی به چشم نیاد ولی در مجموعه داده های بزرگ باعث افزایش نیاز به استوریج بیشتر و کاهش پرفورمنس میشه.
ایندکس هایی که روی UUID columns ساخته میشن ممکنه به اندازه ایندکس هایی که روی داده های کوچکتر هستن کارآمد نباشن. این به این دلیله که کلیدهای(keys) بزرگتر میتونه باعث خوندن(read) بیشتر page بشه و عملکرد query را تحت تأثیر قرار بده.
👈 قابل درک بودن و اشکال زدایی(Readability and Debugging):
برخلاف اعداد صحیح، UUIDها قابل خوندن/درک توسط نیروی انسانی(human-readable) نیستن، که میتونه اشکال زدایی و بازرسی دستی پایگاه داده رو سخت تر کنه. Integers یا data type های کوچیکتر میتونه برای توسعه دهندگان و مدیران پایگاه داده راحت تر باشه.
👈 خوشه بندی(Clustering):
دیتا تایپ های UUID برای منحصر به فرد بودن به صورت globally طراحی شدن ولی تضمین نمیشه که ترتیبی داشته باشن. این عدم ترتیب ترتیبی میتونه منجر به الگوهای I/O دیسک نامناسب بشه و عملکرد برخی از query ها رو تحت تأثیر قرار بده، به ویژه اونایی که range-based هستن
👈 فرگمنتیشن (Fragmentation):
دیتا تایپ UUID اغلب با استفاده از ترکیبی از timestamp و مقادیر تصادفی تولید میشن. این تصادفی بودن میتونه باعث افزایش سطح fragmentation ایندکس بشه و عملکرد پایگاه داده رو در درازمدت تحت تأثیر قرار بده.
👈 سربار استوریج(Storage Overhead):
ذخیره سازی UUIDها میتونه باعث افزایش نیازهای ذخیره سازی، هم از نظر فضای دیسک و هم از نظر حافظه بشه. این میتونه در محیط هایی که هزینه های ذخیره سازی مهمه، نگران کننده باشه.
👈 پیچیدگی کاربرد(Application Complexity):
مدیریت UUID ها ، به ویژه تولیدشون و منحصر به فرد بودنشون در سیستم های توزیع(distributed systems) شده ، میتونه پیچیدگی رو به منطق(logic) برنامه اضافه کنه. این پیچیدگی ممکنه لازم نباشه اگر primary key های ساده تری از نظر تایپ برای نیازهای برنامه کافی باشن.
💡 خب حالا وقتشه که خیلی خلاصه به سناریو های مختلف بپردازیم که چرا باید/نباید از UUID توی این سناریو ها استفاده کرد.
دیتا تایپ UUID به منحصر به فرد بودنش معروفه و یکی از اهداف اصلی استفاده ازش توی distributed systems هاس چون شما مطمئنی کلید تکراری تولید نمیشه .
وقتی که میزان استفاده از مموری و پرفورمنس SQL queries برای ما حیاتیه بهتر برای کلید اصلی مثلا از integer استفاده کنیم که به صورت متوالی افزایش پیدا میکنن .
حتی تویه سناریو های distributed system که باید از UUID استفاده بشه با توجه به نیاز پروژه میشه استفاده نکرد. مثلا توی MySQL میشه نحوه ی افزایش خودکار مقدار ID رو تنظیم کرد یعنی مثلا سرور اول: 1, 101، 201، 301، 401 و غیره (افزایش 100 + offset 1) رو تولید کنه. سرور دوم: 2، 102، 202، 302، 402 و غیره (افزایش 100 + offset 2) رو. این کار خیلی ساده ترعه و میشه این row ها رو بدون خطر تداخل بین سرورها منتقل کرد. اما این روش هم ممکنه برای همه سناریو ها مناسب نباشه و استفاده از UUID مناسب تر باشه.
شاپیفای هم یه مقاله منتشر کرده که توش توضیح میده چرا از UUIDv4 به ULID مهاجرت کرده و باعث شده عملیات INSERT تا 50 درصد سریع تر انجام بشه.
💫 نتیجه گیری:
در نتیجه تا وقتی که نیاز نشده پروژتون رو الکی پیچیده نکنید. یکی از انتقاد هایی که به میکروسرویس میشه اینکه روی کاغذ داری سرویس هاتا به بخش های مختلفی تقسیم میکنی که هر بخش قرار یه کاریو انجام بده و این خوبه تا زمانی که در عمل و واقعیت شما برای ارتباط بین این سرویس ها و اشکال زداییشون باید پیچیدگی های بیشتری به پروژه اضافه کنید. پس تا وقتی واقعا نیاز نشده ساختار پروژه رو ساده و بهینه نگه دارید. احتمالا توی اکثر سناریو های نیاز پیدا نکنید از UUID استفاده کنید مگر در مواردی مثل میکروسرویس و distributed system ها.
🆔 @MdDaily
استفاده از UUID که مخفف (Universally Unique Identifier) هستش به عنوان primary key در پایگاه دادههای SQL مزایا و معایبی داره. اگرچه UUIDها در برخی شرایط مزایایی دارن ولی دلایلی وجود داره که ممکنه بهترین گزینه primary key نباشن:
👈 ایندکسینگ و عملکرد(Indexing and Performance):
وقتی که UUID ها 128 bits هستن در مقایسه با integer که 32 bits عه شاید در داده های کم خیلی به چشم نیاد ولی در مجموعه داده های بزرگ باعث افزایش نیاز به استوریج بیشتر و کاهش پرفورمنس میشه.
ایندکس هایی که روی UUID columns ساخته میشن ممکنه به اندازه ایندکس هایی که روی داده های کوچکتر هستن کارآمد نباشن. این به این دلیله که کلیدهای(keys) بزرگتر میتونه باعث خوندن(read) بیشتر page بشه و عملکرد query را تحت تأثیر قرار بده.
👈 قابل درک بودن و اشکال زدایی(Readability and Debugging):
برخلاف اعداد صحیح، UUIDها قابل خوندن/درک توسط نیروی انسانی(human-readable) نیستن، که میتونه اشکال زدایی و بازرسی دستی پایگاه داده رو سخت تر کنه. Integers یا data type های کوچیکتر میتونه برای توسعه دهندگان و مدیران پایگاه داده راحت تر باشه.
👈 خوشه بندی(Clustering):
دیتا تایپ های UUID برای منحصر به فرد بودن به صورت globally طراحی شدن ولی تضمین نمیشه که ترتیبی داشته باشن. این عدم ترتیب ترتیبی میتونه منجر به الگوهای I/O دیسک نامناسب بشه و عملکرد برخی از query ها رو تحت تأثیر قرار بده، به ویژه اونایی که range-based هستن
👈 فرگمنتیشن (Fragmentation):
دیتا تایپ UUID اغلب با استفاده از ترکیبی از timestamp و مقادیر تصادفی تولید میشن. این تصادفی بودن میتونه باعث افزایش سطح fragmentation ایندکس بشه و عملکرد پایگاه داده رو در درازمدت تحت تأثیر قرار بده.
فرگمنتیشن (fragmentation) در پایگاه داده زمانی اتفاق میافته که دادهها به صورت غیرمنظم در دیسک ذخیره بشن که باعث میشه سیستم مدیریت پایگاه داده برای دسترسی به دادهها زمان بیشتری صرف کنه و در نتیجه عملکرد پایگاه داده کاهش پیدا کنه. مثل اینه که شما یک کتاب را باز کنید و صفحاتش رو به هم بریزید. حالا برای پیدا کردن یک صفحه خاص، باید وقت بیشتری صرف کنید.
👈 سربار استوریج(Storage Overhead):
ذخیره سازی UUIDها میتونه باعث افزایش نیازهای ذخیره سازی، هم از نظر فضای دیسک و هم از نظر حافظه بشه. این میتونه در محیط هایی که هزینه های ذخیره سازی مهمه، نگران کننده باشه.
👈 پیچیدگی کاربرد(Application Complexity):
مدیریت UUID ها ، به ویژه تولیدشون و منحصر به فرد بودنشون در سیستم های توزیع(distributed systems) شده ، میتونه پیچیدگی رو به منطق(logic) برنامه اضافه کنه. این پیچیدگی ممکنه لازم نباشه اگر primary key های ساده تری از نظر تایپ برای نیازهای برنامه کافی باشن.
💡 خب حالا وقتشه که خیلی خلاصه به سناریو های مختلف بپردازیم که چرا باید/نباید از UUID توی این سناریو ها استفاده کرد.
دیتا تایپ UUID به منحصر به فرد بودنش معروفه و یکی از اهداف اصلی استفاده ازش توی distributed systems هاس چون شما مطمئنی کلید تکراری تولید نمیشه .
وقتی که میزان استفاده از مموری و پرفورمنس SQL queries برای ما حیاتیه بهتر برای کلید اصلی مثلا از integer استفاده کنیم که به صورت متوالی افزایش پیدا میکنن .
حتی تویه سناریو های distributed system که باید از UUID استفاده بشه با توجه به نیاز پروژه میشه استفاده نکرد. مثلا توی MySQL میشه نحوه ی افزایش خودکار مقدار ID رو تنظیم کرد یعنی مثلا سرور اول: 1, 101، 201، 301، 401 و غیره (افزایش 100 + offset 1) رو تولید کنه. سرور دوم: 2، 102، 202، 302، 402 و غیره (افزایش 100 + offset 2) رو. این کار خیلی ساده ترعه و میشه این row ها رو بدون خطر تداخل بین سرورها منتقل کرد. اما این روش هم ممکنه برای همه سناریو ها مناسب نباشه و استفاده از UUID مناسب تر باشه.
شاپیفای هم یه مقاله منتشر کرده که توش توضیح میده چرا از UUIDv4 به ULID مهاجرت کرده و باعث شده عملیات INSERT تا 50 درصد سریع تر انجام بشه.
💫 نتیجه گیری:
در نتیجه تا وقتی که نیاز نشده پروژتون رو الکی پیچیده نکنید. یکی از انتقاد هایی که به میکروسرویس میشه اینکه روی کاغذ داری سرویس هاتا به بخش های مختلفی تقسیم میکنی که هر بخش قرار یه کاریو انجام بده و این خوبه تا زمانی که در عمل و واقعیت شما برای ارتباط بین این سرویس ها و اشکال زداییشون باید پیچیدگی های بیشتری به پروژه اضافه کنید. پس تا وقتی واقعا نیاز نشده ساختار پروژه رو ساده و بهینه نگه دارید. احتمالا توی اکثر سناریو های نیاز پیدا نکنید از UUID استفاده کنید مگر در مواردی مثل میکروسرویس و distributed system ها.
🆔 @MdDaily
👍4🔥2
Md Daily
قرار یه پروژه ایو تحت عنوان رویای Md: آموزش آزاد و رایگان برای همه به صورت ازاد و با مشارکت شما عزیزان توی گیت هاب شروع کنیم. که تلاشی باشه برای اینکه بتونیم منابع فارسی بیشتری در حوزه ی برنامه نویسی و تکنولوژی داشته باشیم و پلتفرمی صاحب مقالات نباشه …
🎉سوپرایز یلدایی MdDaily🎉
یلدای همگی مبارک باشه❤️
به مناسبت شب یلدا پلتفرم ام دی کورس برای محقق شدن پروژه ی رویای ام دی راه اندازی شد 🎊
از این به بعد کورس های Md daily از طریق ام دی کورس منتشر میشوند و شما هم میتونید توی آماده سازی دوره ها مشرکت کنید یا پروفایل خودتون رو ایجاد و به نام خودتون مقاله ها یا دوره هاتون رو به صورت متن باز منتشر کنید
🔗 گیت هاب پروژه: https://github.com/mdpe-ir/MdCourse
🔗 وبسایت: https://mddaily.web.app/
🔗 پیام تبریک شب یلدا
🆔 @MdDaily
یلدای همگی مبارک باشه❤️
به مناسبت شب یلدا پلتفرم ام دی کورس برای محقق شدن پروژه ی رویای ام دی راه اندازی شد 🎊
از این به بعد کورس های Md daily از طریق ام دی کورس منتشر میشوند و شما هم میتونید توی آماده سازی دوره ها مشرکت کنید یا پروفایل خودتون رو ایجاد و به نام خودتون مقاله ها یا دوره هاتون رو به صورت متن باز منتشر کنید
🔗 گیت هاب پروژه: https://github.com/mdpe-ir/MdCourse
🔗 وبسایت: https://mddaily.web.app/
🔗 پیام تبریک شب یلدا
🆔 @MdDaily
❤🔥7🔥1👏1
تقریبا یه چند ماهی به Jetbrains Ai دسترسی داشتم و یه قابلیت خیلی خوبی که داشت این بود که اتوماتیک message برای commit های git تولید میکرد و زمان زیادی رو هم در نوشتن و هم در فکر کردن به اینکه چه بنویسم صرفه جویی میکرد 😅
تا اینکه از هفته ی پیش این سرویس اشتراکی شد و شروع کردم توی ابزار های open source دنبال یه جایگزین خوب گشتن تا اینکه با پروژه ی opencommit که عملکرد مشابه ای رو داشت آشنا شدم ولی یه مشکلی وجود داشت! نیاز به ای پی ای openai بود. خب ابزار هایی که از ای پی ای openai استفاده میکنند دقیقا دارن چیکار میکنند؟ بر اساس داده ی ورودی و یه سری عملیات پردازشی در نهایت یه Prompt رو اماده میکنند که میفرستن به openai و نتیجش رو میگیرن و نمایش میدن. خب با این ایده سورسش رو فورک کردم و شروع کردم به تغییر سورسش :) خروجی چیشد؟ یه نسخه ی ویرایش شده از opencommit با این تفاوت که 100٪ رایگانه و privacy شما تضمین شدس.
دقیقا تو نسخه ی فورک شده چه اتفاقی میوفته؟
شما بعد از اینکه ابزار را اجرا کردید تغییرات کدتون رو از git میگیره، یک Prompt آماده میکنه و بجای اینکه بفرسته به openapi یا هر سرویس شخص ثالثی تو کلیپبورد شما کپیش میکنه. شما میتونید توی هر chat bot ای که خواستید مثل bard یا gpt یا مدل های اپن سورس پیستش کنید و بوم! message کامیت رو تحویل بگیرید و push کنید :)
میتونید از لینک زیر دریافتش کنید 👇👇👇
🔗 لینک پروژه نسخه ی اختصاصی Md
برای اجراشم فقط کافیه پروژه رو clone یا Download ZIP کنید و با دستور :
اجراش کنید
مثلا من خودم توی .zshrc یه alias برای اجراش نوشتم:
باید README.md و توضیحاتش رو آپدیت کنم 😅 و در نهایت یه راه نصب ساده براش ایجاد بشه و دیگه برای اجراش وابسته به node نباشه
🆔 @MdDaily
تا اینکه از هفته ی پیش این سرویس اشتراکی شد و شروع کردم توی ابزار های open source دنبال یه جایگزین خوب گشتن تا اینکه با پروژه ی opencommit که عملکرد مشابه ای رو داشت آشنا شدم ولی یه مشکلی وجود داشت! نیاز به ای پی ای openai بود. خب ابزار هایی که از ای پی ای openai استفاده میکنند دقیقا دارن چیکار میکنند؟ بر اساس داده ی ورودی و یه سری عملیات پردازشی در نهایت یه Prompt رو اماده میکنند که میفرستن به openai و نتیجش رو میگیرن و نمایش میدن. خب با این ایده سورسش رو فورک کردم و شروع کردم به تغییر سورسش :) خروجی چیشد؟ یه نسخه ی ویرایش شده از opencommit با این تفاوت که 100٪ رایگانه و privacy شما تضمین شدس.
دقیقا تو نسخه ی فورک شده چه اتفاقی میوفته؟
شما بعد از اینکه ابزار را اجرا کردید تغییرات کدتون رو از git میگیره، یک Prompt آماده میکنه و بجای اینکه بفرسته به openapi یا هر سرویس شخص ثالثی تو کلیپبورد شما کپیش میکنه. شما میتونید توی هر chat bot ای که خواستید مثل bard یا gpt یا مدل های اپن سورس پیستش کنید و بوم! message کامیت رو تحویل بگیرید و push کنید :)
میتونید از لینک زیر دریافتش کنید 👇👇👇
🔗 لینک پروژه نسخه ی اختصاصی Md
برای اجراشم فقط کافیه پروژه رو clone یا Download ZIP کنید و با دستور :
node {ProjectPath}/out/cli.cjsاجراش کنید
مثلا من خودم توی .zshrc یه alias برای اجراش نوشتم:
alias md-oco="node /home/$USER/opencommit/out/cli.cjs"
برای اجرا توی لینوکس حتما پکیج xclip رو نصب داشته باشید
باید README.md و توضیحاتش رو آپدیت کنم 😅 و در نهایت یه راه نصب ساده براش ایجاد بشه و دیگه برای اجراش وابسته به node نباشه
🆔 @MdDaily
👍7❤1🤔1
داریم به پایان سال 2023 نزدیک میشیم و به مناسبت تولد خالق لینوکس بریم با ۷ اپلیکیشن جذاب و کاربردی متن باز که کاربران لینوکس در سال ۲۰۲۳ دوست داشتن آشنا بشیم :)
1️⃣ اپلیکیشن Warp:برنامه به اشتراک گذاری فایل امن
اپلیکیشن Warp یک برنامه اشتراک فایل متن باز مبتنی بر Rust عه که برای Linux، Windows و Android در دسترسه.
اگه دنبال برنامه ای هستید که در یک شبکه ی داخلی بین ویندوز و لینوکس و اندروید در یک محیط رمزنگاری شده فایل جابه جا کنید. حتما Warp رو امتحان کنید. رابط کاربری فوق العاده تمیز و راحتی داره
2️⃣ اپلیکیشن MusicPod: یک پخش کننده موسیقی زیبا
اگر به دنبال یک پخش کننده موسیقی هستید که تجربه کاربری خوبی رو با پشتیبانی از پادکست ها و رادیو ارائه بده، MusicPod یک انتخاب عالیه . با فلاتر نوشته شده و فقط برای لینوکس در دسترسه.
3️⃣ اپلیکیشن Beaver Notes: برنامه نوت برداری با تمرکز روی حریم شخصی
برنامههای نوت برداری مختلفی روی لینوکس وجود دارن اما اگه بیشترشون رو امتحان کردین و دنبال یه چیز ساده و سر راست و با تمرکز روی حریم شخصی هسید، Beaver Notes گزینه خوبیه. علاوه بر لینوکس برای مک و ویندوز هم نسخه داره.
4️⃣ اپلیکیشن Wave: یک ترمینال مدرن لینوکسی
ترمینال Waveterm هم رابط کاربری خیره کننده ای داره و هم تجربه کاربری خیلی خوبی داره. بهتون اجازه میده پروفایل های مختلفی بسازید و کانکشن های SSH اتون رو هم ذخیره کنید. حتما امتحانش کنید. برای مک هم نسخه داره و با Go و Typenoscript نوشته شده
5️⃣ اپلیکیشن Xplorer: یک مدیر فایل زیبا
اکثر شما از مدیر فایل پیش فرضی که توی سیستمتون هست راضی هستید، با این حال، اگه میخواهید یه چیز مدرن ترو امتحان کنید، Xplorer یک مدیر فایل زیبا با گزینه های زیادی برای سفارشی سازیه. برای لینوکسو مک و ویندوز نسخه داره
6️⃣ اپلیکیشن Mission Center: نرم افزار نظارت سیستم
اگه دنبال یه برنامه با GUI خوب هستید که میزان مصرف منابع سیستمون رو نشون بده Mission Center میتونه گزینه ی خوبی باشه.
7️⃣ اپلیکیشن Denaro
این برنامه یه دستیار مدیریت مالی عیه که می تونید ازش برای نظارت و سازماندهی استفاده کنید. فقط برای لینوکس در دسترسه
🆔 @MdDaily
1️⃣ اپلیکیشن Warp:برنامه به اشتراک گذاری فایل امن
اپلیکیشن Warp یک برنامه اشتراک فایل متن باز مبتنی بر Rust عه که برای Linux، Windows و Android در دسترسه.
اگه دنبال برنامه ای هستید که در یک شبکه ی داخلی بین ویندوز و لینوکس و اندروید در یک محیط رمزنگاری شده فایل جابه جا کنید. حتما Warp رو امتحان کنید. رابط کاربری فوق العاده تمیز و راحتی داره
2️⃣ اپلیکیشن MusicPod: یک پخش کننده موسیقی زیبا
اگر به دنبال یک پخش کننده موسیقی هستید که تجربه کاربری خوبی رو با پشتیبانی از پادکست ها و رادیو ارائه بده، MusicPod یک انتخاب عالیه . با فلاتر نوشته شده و فقط برای لینوکس در دسترسه.
3️⃣ اپلیکیشن Beaver Notes: برنامه نوت برداری با تمرکز روی حریم شخصی
برنامههای نوت برداری مختلفی روی لینوکس وجود دارن اما اگه بیشترشون رو امتحان کردین و دنبال یه چیز ساده و سر راست و با تمرکز روی حریم شخصی هسید، Beaver Notes گزینه خوبیه. علاوه بر لینوکس برای مک و ویندوز هم نسخه داره.
4️⃣ اپلیکیشن Wave: یک ترمینال مدرن لینوکسی
ترمینال Waveterm هم رابط کاربری خیره کننده ای داره و هم تجربه کاربری خیلی خوبی داره. بهتون اجازه میده پروفایل های مختلفی بسازید و کانکشن های SSH اتون رو هم ذخیره کنید. حتما امتحانش کنید. برای مک هم نسخه داره و با Go و Typenoscript نوشته شده
5️⃣ اپلیکیشن Xplorer: یک مدیر فایل زیبا
اکثر شما از مدیر فایل پیش فرضی که توی سیستمتون هست راضی هستید، با این حال، اگه میخواهید یه چیز مدرن ترو امتحان کنید، Xplorer یک مدیر فایل زیبا با گزینه های زیادی برای سفارشی سازیه. برای لینوکسو مک و ویندوز نسخه داره
6️⃣ اپلیکیشن Mission Center: نرم افزار نظارت سیستم
اگه دنبال یه برنامه با GUI خوب هستید که میزان مصرف منابع سیستمون رو نشون بده Mission Center میتونه گزینه ی خوبی باشه.
7️⃣ اپلیکیشن Denaro
این برنامه یه دستیار مدیریت مالی عیه که می تونید ازش برای نظارت و سازماندهی استفاده کنید. فقط برای لینوکس در دسترسه
🆔 @MdDaily
❤🔥5👍1🔥1