147
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
+930 روز
آرشیو پست ها
147
Repost from | Rad Dev (JS) 🖤 |
تلگرام تو آپدیت جدیدش یه قابلیت اضافه کرده که چنلا میتونن یه Welcome Message تنظیم کنن که کاربرای جدید در حین جوین شدن ببینن.
میشه یه نمای کلی از محتوای چنل ارائه داد برای دسترسی بهترِ کاربرای جدید.
تلگرام برای بار چندم ثابت کرد که تولیدمحتوا جزو اولویتهاشه (لینک)
@Mern_stack_01
147
مطلب خوبی که راجع به شاردینگ خوندم. توضیحاتشون خوب بود.
https://alireza-haeri.github.io/BackendDeepDives/DataSharding.html
147
دقیقا در پی همین مشکلات بود که در دهه 1970 شخصی به نام ادگار کاد ( یکی از کارمندان شرکت IBM در آن زمان ) با انتشار مقاله ای، مدل رابطه ای را معرفی کرد.
ادگار کاد در مقاله با اشاره به روابط ریاضی این مدل را معرفی کرد.و پیشنهاد کرد که داده ها در قالب جداول مدیریت شوند.
چند سال بعد هم IBM از زبان SEQUEL ( SQL امروزی ) معرفی کرد.
اما حدودا یک دهه بعد شرکت اوراکل با مطالعه همان مقاله ها از RDBMS تجاری خود به نام Oracle Version 2 رو نمایی کرد.
شرکت IBM با اینکه مدل رابطهای و زبان SQL را اختراع کرده بود، در تبدیل آن به یک محصول تجاری برای فروش کند عمل کرد. دلیل اصلی این بود که IBM در آن زمان یک سیستم پایگاه داده بسیار سودآور (IMS) داشت و نمیخواست محصول جدید با فروش محصول قدیمیاش رقابت کند.
147
سرعت خواندن داده ها در این مدل بسیار بالاست. اما مشکلات اساسی هم داره.
مثلا فرض کنید بخواهید تمامی بیماران بالای 18 سال را دریافت کنید. در این حالت چون زبان گفتگویی با DBMS وجود نداره، شما باید خودون یک حلقه بنویسید و از بین بیماران آنهایی که مطابق شرط بودند را استخراج کنید.
یا اگر روزگاری یک شاخه دیگر ایجاد شود مثلا تراکنش ها، و بخواهید هر تراکنش را به کاربری نسبت دهید، یا باید کل اطلاعات کاربر را دوباره تکرار کنید (redundancy بالا ) یا از روش بهینه تر که شامل ذخیره آدرس کل مسیر به عنوان یک شاخه جدید.
یا اگر روزی تصمیم بگیرید که یک شاخه جدید به شاخه های بالایی اضافه کنید چه؟!
مثلا تا الان به این شکل بود :
hospital/wards/icu/patients/1/nameاما در ادامه مجبور شوید که هر بیمار را زیر نظر یک پزشک قرار دهید. در این صورت شاخه جدید این میشود :
hospital/wards/icu/doctor/patients/1/nameدر این صورت لازم است در پروژه، هرجایی که از این شاخه استفاده کرده اید را تغییر دهید! همچنین داده های جدید را به شاخه جدید انتقال دهید!
147
ببیند در مدل سلسه مراتبی دیگه خبری از جداول یا کالکشن و کلید خارجی و join و ... نیست!
یک دیتابیس میاد بالا و تمامی داده ها به صورت شاخه ای ذخیره میشن.
مثلا فرض کنید یک بیمارستان داریم. این بیمارستان ما شامل بیمار و اطلاعاتش ، و بخش ( مثلا icu یا اتاق زایمان ) هست فقط!
خب حالا میخوایم یک بیمار با نایم مایک رو به بخش icu اضافه کنیم.
در مدل سلسه مراتبی ما یک دیتابیس یا شاخه تعریف میکنیم به نام hospital . و بعد یک شاخه دیگه به نام wards (بخش ها) و یک شاخه دیگه به نام icu و بعد یک شاخه دیگه به نام patients (بیماران)
تا الان مسیر شد این :
hospital/wards/icu/patientsخب حالا میخوایم بیمار رو اضافه کنیم. اینجا خودمون به طور دستی یک شماره unique تعریف میکنیم که از دیگر بیماران جدا شه. و بعد اطلاعاتش رو دوباره به صورت شاخه ای تعریف میکنیم! به این شکل:
hospital/wards/icu/patients/1/name -> Mike hospital/wards/icu/patients/1/age -> 68 hospital/wards/icu/patients/1/gender -> maleچقدر جالب! برای کسانی که به مدل های رابطه ای عادت کردند، کار کردن با چنین مدلی برای اولین بار میتونه خیلی جالب باشه! نمونه کد با NodeJS و ذخیره داده ها با YottaDB :
db.set({global:"Hospital",subscripts:['General','Wards','Maternity','Patients','1','name'] , data:'Mike'})
db.set({global:"Hospital",subscripts:['General','Wards','Maternity','Patients','1','age'] , data:'68'})
db.set({global:"Hospital",subscripts:['General','Wards','Maternity','Patients','1','gender'] , data:'male'})
و حالا برای خواندن این داده ها :
const name = db.get({
global: 'Hospital',
subscripts: ['General', 'Wards', 'Maternity', 'Patients', '1','name']
}).data;
const age = db.get({
global: 'Hospital',
subscripts: ['General', 'Wards', 'Maternity', 'Patients', '1','age']
}).data;
const gender = db.get({
global: 'Hospital',
subscripts: ['General', 'Wards', 'Maternity', 'Patients', '1','gender']
}).data;
console.log("patient:", name , age , gender);
//Result -> console.log("patient:", name , age , gender);147
خب برای امتحان این مدل سلسه مراتبی تصمیم گرفتم که از خود ims استفاده کنم.
اما متوجه شدم نیازمند سیستم عامل اختصاصی شرکت IBM هستش و راه رسیدن بهش، میلیون دلاریه. یکم گرون بود نصرفید.
در نتیجه تصمیم گرفتم از یک DBMS دیگه که از همین مدل ساپورت کنه استفاده کنم و رسیدم به YottaDB .
ایشون هم از مدل سلسه مراتبی پیروی میکنه با این تفاوت که اوپن سورس و رایگانه. سیستم عامل اختصاصی هم نمیخواد و پکیج npm هم با نام nodem داره.
اما خب روی ویندوز ران نمیشه و نیازمند یک توزیع لینوکسی است 🤦♂️
سیستم عامل xUbuntu که نسخه لایت ubuntu هستش رو به صورت مجازی آوردم بالا، برنامه های لازم از جمله vsCode و node و ... رو نصب کردم.
و اولین داده ام رو با این مدل ذخیره کردم!
حالا بریم بپردازم که این مدل سلسه مراتبی واقعا چطوری کار میکنه و تفاوتش با مدل رابطه و دیگر مدل ها چیست؟
147
برام سوال شده بود که در گذشته افراد چگونه بدون DBMS ها داده های خودشون رو مدیریت میکردند ؟
و رفتم کلی راجع بهشون خوندم. خدارو شاکرم که در این عصر با این تکنولوژی ها کار میکنم وگرنه اگر این abstraction ها نبودند برنامه نویسی خیلی سخت بود!
در گذشته ( دهه های 1950-1960 ) اصلا نه دیتا مدل خاصی بوده نه DBMS خاصی. برنامه نویس ها مجبور بودند که خودشون داده های برنامه رو از طریق برنامه نویسی مدیریت کنند!
مثلا فایل هایی ایجاد میکردند و داده ها رو در هر ردیف اضافه میکردند. برای آپدیت داده باز باید خودشون کد مینوشتند که داده رو آپدیت کنه. یا برای یافتن داده هم همینطور. کلا مدیریت داده با کد اجین بود.
کمی جلوتر شرکتی به نام IBM از DBMS خود با مدل hierarchical (سلسه مراتبی) و نام ims رونمایی کرد. این DBMS برای مدیریت داده های پروژه آپولو ناسا بود.
مدیریت داده ها خیلی بهتر شد ولی همچنان برنامه نویس ها باید با برنامه نویسی و نوشتن کد داده ها رو مدیریت میکردند.
همچنین این مدل ضعف های داشت که در پی آن دیتا مدل network بهینه شد تا ضعف های مدل سلسه مراتبی را خصوصا در زمینه ارتباط چند به چند (Many-to-Many) بر طرف کند.
خیلی برام جالب شد که با این مدل سلسه مراتبی کار کنم و ببینم که واقعا چیه!
در ادامه سعی میکنیم که سیستم یک بیمارستان را با استفاده از دو مدل سلسه مراتبی و رابطه ای پیاده سازی کنیم.
147
واقعا دیگه دوست ندارم حتی نیم نگاهی به مطالبی که جدیدا در سوشال مدیا هایی همچون ( تلگرام، لینکدین و x ) پست میکنند، بیندازم!
همه مطالب آمپولی شدن
147
چند وقتیه که در حال مطالعه و لول آپ هستم و اینجا وقت نکردم باشم.
اما بزودی یک پست مفید از یکی از مباحث (که شامل کلی مباحث دیگر میشود) و راجع بهش مطالعه عمیق داشتم اینجا میذارم.
147
طی یک اشتباه متوجه شدم ریپو پرایوت بود.
الان پابلیکه و اگر دوست داشتید میتونید سورس رو هم بررسی کنید.
کلی رجکس نوشتم پاش.
توضیحات و فیچر ها هم کاملا در README ذکر شده دیگه من اینجا اضافه گویی نمیکنم.
اگر دوست داشتید با یک استار خوشحالمون کنید ❤️
147
کاربرد های خیلی متنوعی میتونه داشته باشه.
مثلا یکیش ولیدیشن آدرس ها، اگر آدرس کاربر رو گرفتید ولی میخواستین یکی از فیلد ها مثلا شهر رو حتما وارد کرده باشه، چک کنید.
یا حتی برای ذخیره ساختار یافته آدرس در دیتابیس.
ربات های پیج های اینستاگرامی که آدرس کاربر رو به طور متنی میگیرن.
شرکت هایی که آدرس های مشتریانشون رو بدون ساختار در فایل های excel ذخیره کردند.
در تمامی موقعیت ها کال کردن یک فانکشن، خروجی نرمالایز شده و ساختار یافته تحویل میگیرین.
بخش شهر و استان هم با داده های واقعی ایران، یعنی تمامی استان ها و شهر هاشون بررسی میشه.
147
یه پکیج npm نوشتم که آدرسهای فارسی رو به دادهی ساختاریافته تبدیل میکنه.
ورودی:
فارس شیراز خیابان زند کوچه لاله پ ۱۲ واحد ۳ طبقه ۲
خروجی:
{
province: "فارس",
city: "شیراز",
street: "زند",
alley: "لاله",
number: "12",
unit: "3",
floor: "2"
}
آدرس فارسی متن آزاده. نه ترتیب ثابتی داره، نه املای ثابتی. «خ» و «خیابون» و «خیابان» یکیاند «۱۲» و «١٢» و «12» یکیاند، «ولیعصر» و «ولی عصر» و «ولیعصر» هم همینطور. پکیج همه اینا رو نرمال میکنه و بعد فیلد ها رو در میاره.
اگه شهر رو پیدا کنه ولی استان تو متن نباشه، استان رو خودش پر میکنه.
بدون وابستگی، تایپاسکریپت، تستشده روی ۲۰۰+ آدرس برچسبخورده.
npm i persian-address-parser
github.com/rezadev8/persian-address-parser
147
Repost from KIANOLOGY
💰 سرویس ولت کلادفلیر رونمایی شد!
کلادفلر یه سرویس پرداخت و کیف پول برای ایجنتهای AI معرفی کرده که بتونن خودشون API و محتوا بخرن.
با سقف هزینه و محدودیتهایی که شما تعیین میکنید.
از همین الان میتونین یوزنیم ولت خودتونو رزرو کنین.
اسمای خوب زود پر میشه پس هر چه سریعتر مال خودتونو بگیرین👇
https://cloudflare.pay
#معرفی_سایت #معرفی_سرویس #کلادفلر #هوش_مصنوعی #عامل_هوشمند #رابط_برنامه_نویسی_کاربردی
147
جدیدا خیلی با AI Agent ها درگیر بودم.
برای همین در نظرم داشتم اینو کاملا بدون AI بزنم و تقریبا همینطور هم شد.
از RegEx خیلی استفاده کردم و همه رو خودم نوشتم.
البته بگی نگی برای بهبود یه جاهایی استفاده کردم تا یه وقت گوف خیلی بزرگی نداده باشم 😁
بخش تست هم که دیگه قطعا باید دست AI رو میبوسید چون خیلی چالشی نبود که براش وقت بذارم.
147
یه پروژه کوچک و جمع و جور اما به نسبت کاربردی زدم که فردا باهاتون به صورت اوپن سورس به اشتراک میذارم.
147
Repost from انجمن علمی برنامهنویسی
📱 مهندسی نرمافزار در عصر هوش مصنوعی
🎙سخنران:
👤علیرضا ابراهیمخانی
🔹بنیانگذار استارتاپ Parseh | پرسه
🔹مهندس داده در DataChef (هلند)
🔹سابقه فعالیت بهعنوان مهندس ارشد نرمافزار در اسنپ و علیبابا
🔹مشاور فنی دکتر پِی، دیجیکالا و SegalSoft
🔹مشارکتکننده اصلی فریمورک Angular
⌛️زمان برگزاری: چهارشنبه ۱۴ مرداد ماه، ساعت ۱۸
💻به صورت مجازی در بستر اسکایروم
💠لینک شرکت در جلسه در کانال انجمن علمی برنامهنویسی شبکه نخبگان ایران منتشر خواهد شد. برای شرکت در نشست، در کانال عضو شوید.
🔗لینک ثبتنام
💰حضور در جلسه برای تمامی علاقمندان، آزاد و رایگان است.
👨💻در کانال انجمن علمی برنامهنویسی با ما همراه باشید…
| @Programming_Association |
147
+4
نظرات کاربران سایت فارکس فکتوری بخش اخبار.
که چندین ماهه به دلیل جنگ ایران و آمریکا بسیاری از اخبار مربوط به همین جنگ، و ایران است.
بسیاری از افراد معتقدند که این جنگ بیش از حد طولانی و خسته کننده شده است.
همچنین، برخی نیز معتقد هستند که علت طولانی شدن این جنگ نوسان گیری از بازار است.
پ.ن: صدای افراد خارجی که حتی مستقیما در جنگ نیستند هم در اومده.
زندگی ما ایرانی ها از لحاظ اقتصادی همیشه در فشار بوده، این جنگ فشار رو چندین برابر کرده.
147
Repost from نوشتههای ترمینالی
به عنوان یک Engineering Manager چطور وقت و انرژی خودمون رو بودجه بندی کنیم؟
این مطلب رو من خیلی دوستش داشتم چون می اومد با مثال و توضیح میگفت که اگر اینجا اینقدر وقت بگذاریم نتیجه چی میشه و خیلی کمک میکرد به درک اتفاقاتی که در لایه مدیریت میفته و تاثیرش روی تیم.
https://www.manager.dev/newsletter/the-engineering-manager-s-attention-budget
