#تجربه
شروع یک ایده از نیاز
تقریبا اواخر سال 2022 بود که سید مهدی عزیز ایده ی رادیو رو پیاده سازی کرد. چیزی که من راجب این کار خیلی دوس داشتم این بود که همه چیز در ساده ترین حالت ممکن بود. بجای ساخت یک محصول کامل ما پلتفرمی را داشتیم که کار اصلیش یعنی بخش موزیک رو انجام می داد. زیر ساخت این پروژه تشکیل شده بود از یه سرور که روش Icecast پیاده سازی شده بود و یک فرانت که از این سرور Icecast لیست ژانر ها را می گرفت. Icecast به این صورت عمل میکنه که شما مثلا چنتا پوشه به اسم های pop , rap , hipop دارید و با استفاده از LIQUIDSOAP که یک زبان برای استریم Audio و Video هست میتونید برنامه نویسیش کنید. یک نمونه کد LIQUIDSOAP:
در نهایت کاربر میتونست با وارد شدن به لینک http://127.0.0.1:15210/pop به استریم موزیک های ژانر pop گوش کنه. یه ایده ی فان و کاربردی بود.
شروع سال 2023:
به مهدی پیشنهاد دادم یک نسخه ی مستقل از رادیو رو در قالب اپ بسازم. خیلی خلاصه بخوام بگم یعنی بخش اپلیکیشن دیگه با اسم و زیر مجموعه رادیو فعالیت نکنه و با یک اسم جدید و یک اپلیکیشن مستقل با ویژگی ها و امکانات اضافه تر توسعه پیدا کنه ولی همچنان از زیر ساخت رادیو استفاده کنه.
یه متدی داریم به اسم Design thinking یا به اختصار DT . خیلی ساده بخوام بگم این متد تشکیل شده از 5 مرحلس.
👈 مرحله ی اول همدلی یا درک نیازهای انسان (Empathize): توی این مرحله باید فرضیه های پیش فرضو کنار گذاشت و واقعا دید چه مشکلی وجود داره و یه جورایی با جمع آوری داده ها بتونیم با بقیه همزاد پنداری کنیم.
👈 مرحله ی دوم تعریف مسئله (Define): توی این مرحله مشکل رو به شکلی واضح و روشن باید بیان کرد، جوری که همه بتونن درکش کنن.
👈 مرحله ی سوم ایده پردازی (Ideate): توی این مرحله افراد بدون قضاوت ایده هاشون رو میگن و تمرکز روی تعداد ایده هاست نه کیفیتشون.
👈 مرحله ی چهارم نمونهسازی اولیه (Prototype): توی این مرحله باید با ساخت نمونه های اولیه دید که ایده ها توی دنیای واقعی چطوری عمل میکنن
👈 مرحله ی پنجم تست (Test): در واقع نتیجهگیری از این مرحله به شما اجازه میده تا مراحل قبلی رو بررسی کنید که داده های بدست اومده درست بودند یا نه.
به طور خلاصه متد DT یک متد خطی نیست و مداوم شما بین مراحل جابه خواهید شد. یه اشتباه بزرگی که بعضی از تیم ها انجام میدن اینکه مرحله ی درک نیاز رو نادیده میگیرن و مستقیم میرن سراغ مرحله ی ایده پردازی و ساخت محصول اولیه و بعد تازه دنبال مشکلی میگردن که این ایده بتونه حلش کنه.
توی مورد ما مشکل مهدی این بود که بتونه موقع برنامهه نویسی و توی جاده ژانر های مورد علاقشو گوش بده و مشکل قطع و وصلی و تحریم و فیلترینگ نداشته باشه پس نیاز خودش و بقیه ی افرادی که مثل خودش بودند رو درک کرده بود. بعد من بهش پیشنهاد ساخت اپ رو دادم ولی در شروع کار هیچ اپی ساخته نشد و شروع کردیم فقط فیدبک گرفتن از کاربر ها که اصلا اپی نیاز دارن یا نه و به نظرشون چه طراحی و ویژگی هایی میتونه براشون جذابیت داشته باشه.
اگه دوس داشتید بیشتر راجب DT بدونید این مقاله رو بخونید:
🔗 The 5 Stages in the Design Thinking Process
این بود خلاصه ای از مرحله ی شروع ایده و ادامه دارد...
🆔 @MdDaily
شروع یک ایده از نیاز
چیزی بسازید که صد نفر عاشق آن باشند نه اینکه یک میلیون نفر آن را تا حدودی دوست داشته باشند.
- Brian Chesky
تقریبا اواخر سال 2022 بود که سید مهدی عزیز ایده ی رادیو رو پیاده سازی کرد. چیزی که من راجب این کار خیلی دوس داشتم این بود که همه چیز در ساده ترین حالت ممکن بود. بجای ساخت یک محصول کامل ما پلتفرمی را داشتیم که کار اصلیش یعنی بخش موزیک رو انجام می داد. زیر ساخت این پروژه تشکیل شده بود از یه سرور که روش Icecast پیاده سازی شده بود و یک فرانت که از این سرور Icecast لیست ژانر ها را می گرفت. Icecast به این صورت عمل میکنه که شما مثلا چنتا پوشه به اسم های pop , rap , hipop دارید و با استفاده از LIQUIDSOAP که یک زبان برای استریم Audio و Video هست میتونید برنامه نویسیش کنید. یک نمونه کد LIQUIDSOAP:
# Create a playlist containing all the files in the folder
pop = playlist("/music/pop/playlist.m3u")
output.icecast(
%mp3,
host="icecast2",
port=8000,
mount="pop",
password="1234",
fallible=true,
url="http://127.0.0.1:15210/pop",
encoding = "UTF-8",
name="Pop",
genre="pop",
pop
)
در نهایت کاربر میتونست با وارد شدن به لینک http://127.0.0.1:15210/pop به استریم موزیک های ژانر pop گوش کنه. یه ایده ی فان و کاربردی بود.
شروع سال 2023:
به مهدی پیشنهاد دادم یک نسخه ی مستقل از رادیو رو در قالب اپ بسازم. خیلی خلاصه بخوام بگم یعنی بخش اپلیکیشن دیگه با اسم و زیر مجموعه رادیو فعالیت نکنه و با یک اسم جدید و یک اپلیکیشن مستقل با ویژگی ها و امکانات اضافه تر توسعه پیدا کنه ولی همچنان از زیر ساخت رادیو استفاده کنه.
یه متدی داریم به اسم Design thinking یا به اختصار DT . خیلی ساده بخوام بگم این متد تشکیل شده از 5 مرحلس.
👈 مرحله ی اول همدلی یا درک نیازهای انسان (Empathize): توی این مرحله باید فرضیه های پیش فرضو کنار گذاشت و واقعا دید چه مشکلی وجود داره و یه جورایی با جمع آوری داده ها بتونیم با بقیه همزاد پنداری کنیم.
👈 مرحله ی دوم تعریف مسئله (Define): توی این مرحله مشکل رو به شکلی واضح و روشن باید بیان کرد، جوری که همه بتونن درکش کنن.
👈 مرحله ی سوم ایده پردازی (Ideate): توی این مرحله افراد بدون قضاوت ایده هاشون رو میگن و تمرکز روی تعداد ایده هاست نه کیفیتشون.
👈 مرحله ی چهارم نمونهسازی اولیه (Prototype): توی این مرحله باید با ساخت نمونه های اولیه دید که ایده ها توی دنیای واقعی چطوری عمل میکنن
👈 مرحله ی پنجم تست (Test): در واقع نتیجهگیری از این مرحله به شما اجازه میده تا مراحل قبلی رو بررسی کنید که داده های بدست اومده درست بودند یا نه.
به طور خلاصه متد DT یک متد خطی نیست و مداوم شما بین مراحل جابه خواهید شد. یه اشتباه بزرگی که بعضی از تیم ها انجام میدن اینکه مرحله ی درک نیاز رو نادیده میگیرن و مستقیم میرن سراغ مرحله ی ایده پردازی و ساخت محصول اولیه و بعد تازه دنبال مشکلی میگردن که این ایده بتونه حلش کنه.
توی مورد ما مشکل مهدی این بود که بتونه موقع برنامهه نویسی و توی جاده ژانر های مورد علاقشو گوش بده و مشکل قطع و وصلی و تحریم و فیلترینگ نداشته باشه پس نیاز خودش و بقیه ی افرادی که مثل خودش بودند رو درک کرده بود. بعد من بهش پیشنهاد ساخت اپ رو دادم ولی در شروع کار هیچ اپی ساخته نشد و شروع کردیم فقط فیدبک گرفتن از کاربر ها که اصلا اپی نیاز دارن یا نه و به نظرشون چه طراحی و ویژگی هایی میتونه براشون جذابیت داشته باشه.
اگه دوس داشتید بیشتر راجب DT بدونید این مقاله رو بخونید:
🔗 The 5 Stages in the Design Thinking Process
این بود خلاصه ای از مرحله ی شروع ایده و ادامه دارد...
🆔 @MdDaily
🔥9👍3👏2
Md Daily
#تجربه شروع یک ایده از نیاز چیزی بسازید که صد نفر عاشق آن باشند نه اینکه یک میلیون نفر آن را تا حدودی دوست داشته باشند. - Brian Chesky تقریبا اواخر سال 2022 بود که سید مهدی عزیز ایده ی رادیو رو پیاده سازی کرد. چیزی که من راجب این کار خیلی دوس داشتم…
#تجربه
از فیدبک کاربران تا اولین MVP
بعد از اینکه فیدبک کاربران رو گرفتیم متوجه شدیم که اینکه هربار لینک رادیو از سایت کپی کنند و توی مثلا VLC وارد کنند یا از پلیر وب گوش بدند، خیلی دسترسی پذیر نیست و دوست دارن که از روی نوتیفیکشن دستگاه هم بتونند موزیک ها را کنترل کنند و قطعی نداشته باشن.
خب کاری که من کردم این بود که چندین UI اپلیکیشن را برای کاربران هدف فرستادم، نظراتشون رو پرسیدم و در نهایت ما یک خروجی اولیه روی کاغذ داشتیم از اینکه کاربران چی دوست دارن.
قبل از اینکه کار را شروع کنیم چنتا قانون گذاشتیم:
1- همه چیز را در فرایند توسعه ساده نگه داریم
2- دچار چرخه ی توسعه ی بی پایان نشیم
3- تو هر مرحله فیدبک بگیریم
بیایند بخش دچار چرخه ی توسعه ی بی پایان نشیم باز تر کنیم. بار ها و بار ها توی تیم ها و پروژه های مختلف دیدم که پروژه یا ایده ها قبل از انتشار به دلیل اینکه مکررا بهشون فیچر اضافه شده و در نهایت برای مدت طولانی در حال توسعه باقی موندن شکست خوردن. مثلا شما قصد دارید یک اپلیکیشن آموزش زبان فرانسوی بسازید. اگر تعیین نکنید کاربران هدف اولیتون چه کسانی هستند، در اولین نسخه قرار چه سطحی رو پوشش بدید و چه امکاناتی داشته باشید، این اپلیکیشن هیچ وقت منتشر نخواهد شد. چون بجای اینکه دنبال خوب بودن باشید، دنبال کامل بودن هستید و مدام فیچر اضافه می کنید. بخش آموزش گرامر تموم شده، بعد با خودتون می گید خب بذار هوش مصنوعی هم اضافه کنم و وقتی هنوز بازخورد کاربران در ویژگی های core و اصلی نگرفتید، متوجه نمیشید که آیا اصلا این فیچر های جدید که اضافه کردید نیازی از کاربر رفع میکنه یا نه؟ پس در نهایت دامنه پروژه رو به وضوح باید تعریف کرد و بهش پایبند بود.
برای رفع این مشکل من اومدم توی Todoist ( اینجا Todoist رو مثال زدم چون مدت زمان زیادی هست ازش استفاده میکنم ولی شما از هر ابزار project management ای مثل ClickUp که باهاش راحت هستید میتونید استفاده کنید ) توی پروژه 5 تا بخش تعریف کردم:
👉 Next Version:
تسک ایده ها و اینکه در نسخه های آینده چیکار کنیم توی این بخش قرار گرفتن. بعد از انتشار هر نسخه نهایی بخشی از تسک های این بخش بر اساس اولویت و نیاز کاربر انتخاب و به Up next منتقل میشن
👉 Up next:
تسک های نسخه ی فعلی
👉 In progress:
تسک های درحال انجام
👉 In review:
تسک های انجام شده که درحال تست هستن و فیدبک کاربران رو دریافت میکنن
👉 Done:
تسک های انجام شده
و با این تقسیم بندی ساده موفق شدیم که گرفتار چرخه ی بی پایان توسعه نشیم و در نهایت اولین MVP ما ساخته شد.
به نظرم یکی از جالب ترین تجربه ها از اهمیت MVP مربوط به محصول DropBox هست که درو هوستون در سال 2008 یه ویدیو ساخت که نشون میداد دراپباکس چیکار میکنه. این ویدیو خیلی ساده بود، فقط نشون میداد که چطور میشه فایلها رو بین کامپیوترها همگامسازی کرد. ولی همین ویدیو ساده کلی سروصدا کرد!
خیلیها با دیدن این ویدیو و عاشق دراپباکس شدن. تعداد آدمهایی که میخواستن از دراپباکس استفاده کنن و توی لیست انتظار ثبت نام کرده بودن از ۵۰۰۰ نفر به ۷۵۰۰۰ نفر رسید! این نشون میداد که مردم عاشق ایدهی دراپباکس بودن.
دراپباکس با این ویدیو فهمید که باید چی بسازه. اونا به جای اینکه کلی پول خرج یه محصول کامل بکنن، فقط روی چیزهایی که مردم میخواستن تمرکز کردن. اینجوری دراپباکس تونست از یه استارتآپ کوچیک به یه شرکت بزرگ و معروف تبدیل بشه.
لینک مقاله How DropBox Started As A Minimal Viable Product:
🔗 https://techcrunch.com/2011/10/19/dropbox-minimal-viable-product/
🔗 https://www.linkedin.com/pulse/how-did-dropbox-do-tech-behind-mvp-triumph-indpro-ab/
🆔 @MdDaily
از فیدبک کاربران تا اولین MVP
مفهوم MVP یا Minimum Viable Product به معنای حداقل محصول قابل ارائه هست.
فرض کنید یه ایده برای یه محصول جدید دارید. به جای اینکه زمان و پول زیادی صرف ساخت کامل محصول و بعد عرضه به بازار کنید، میتونید یه نسخه اولیه از محصول رو بسازید که فقط کارکردهای اصلی و ضروری رو داشته باشه. به این نسخه اولیه MVP میگن.
لینک های مفید:
https://amplitude.com/blog/what-is-a-minimum-viable-product-mvp
https://www.productplan.com/glossary/minimum-viable-product/
بعد از اینکه فیدبک کاربران رو گرفتیم متوجه شدیم که اینکه هربار لینک رادیو از سایت کپی کنند و توی مثلا VLC وارد کنند یا از پلیر وب گوش بدند، خیلی دسترسی پذیر نیست و دوست دارن که از روی نوتیفیکشن دستگاه هم بتونند موزیک ها را کنترل کنند و قطعی نداشته باشن.
خب کاری که من کردم این بود که چندین UI اپلیکیشن را برای کاربران هدف فرستادم، نظراتشون رو پرسیدم و در نهایت ما یک خروجی اولیه روی کاغذ داشتیم از اینکه کاربران چی دوست دارن.
قبل از اینکه کار را شروع کنیم چنتا قانون گذاشتیم:
1- همه چیز را در فرایند توسعه ساده نگه داریم
2- دچار چرخه ی توسعه ی بی پایان نشیم
3- تو هر مرحله فیدبک بگیریم
بیایند بخش دچار چرخه ی توسعه ی بی پایان نشیم باز تر کنیم. بار ها و بار ها توی تیم ها و پروژه های مختلف دیدم که پروژه یا ایده ها قبل از انتشار به دلیل اینکه مکررا بهشون فیچر اضافه شده و در نهایت برای مدت طولانی در حال توسعه باقی موندن شکست خوردن. مثلا شما قصد دارید یک اپلیکیشن آموزش زبان فرانسوی بسازید. اگر تعیین نکنید کاربران هدف اولیتون چه کسانی هستند، در اولین نسخه قرار چه سطحی رو پوشش بدید و چه امکاناتی داشته باشید، این اپلیکیشن هیچ وقت منتشر نخواهد شد. چون بجای اینکه دنبال خوب بودن باشید، دنبال کامل بودن هستید و مدام فیچر اضافه می کنید. بخش آموزش گرامر تموم شده، بعد با خودتون می گید خب بذار هوش مصنوعی هم اضافه کنم و وقتی هنوز بازخورد کاربران در ویژگی های core و اصلی نگرفتید، متوجه نمیشید که آیا اصلا این فیچر های جدید که اضافه کردید نیازی از کاربر رفع میکنه یا نه؟ پس در نهایت دامنه پروژه رو به وضوح باید تعریف کرد و بهش پایبند بود.
برای رفع این مشکل من اومدم توی Todoist ( اینجا Todoist رو مثال زدم چون مدت زمان زیادی هست ازش استفاده میکنم ولی شما از هر ابزار project management ای مثل ClickUp که باهاش راحت هستید میتونید استفاده کنید ) توی پروژه 5 تا بخش تعریف کردم:
👉 Next Version:
تسک ایده ها و اینکه در نسخه های آینده چیکار کنیم توی این بخش قرار گرفتن. بعد از انتشار هر نسخه نهایی بخشی از تسک های این بخش بر اساس اولویت و نیاز کاربر انتخاب و به Up next منتقل میشن
👉 Up next:
تسک های نسخه ی فعلی
👉 In progress:
تسک های درحال انجام
👉 In review:
تسک های انجام شده که درحال تست هستن و فیدبک کاربران رو دریافت میکنن
👉 Done:
تسک های انجام شده
و با این تقسیم بندی ساده موفق شدیم که گرفتار چرخه ی بی پایان توسعه نشیم و در نهایت اولین MVP ما ساخته شد.
به نظرم یکی از جالب ترین تجربه ها از اهمیت MVP مربوط به محصول DropBox هست که درو هوستون در سال 2008 یه ویدیو ساخت که نشون میداد دراپباکس چیکار میکنه. این ویدیو خیلی ساده بود، فقط نشون میداد که چطور میشه فایلها رو بین کامپیوترها همگامسازی کرد. ولی همین ویدیو ساده کلی سروصدا کرد!
خیلیها با دیدن این ویدیو و عاشق دراپباکس شدن. تعداد آدمهایی که میخواستن از دراپباکس استفاده کنن و توی لیست انتظار ثبت نام کرده بودن از ۵۰۰۰ نفر به ۷۵۰۰۰ نفر رسید! این نشون میداد که مردم عاشق ایدهی دراپباکس بودن.
دراپباکس با این ویدیو فهمید که باید چی بسازه. اونا به جای اینکه کلی پول خرج یه محصول کامل بکنن، فقط روی چیزهایی که مردم میخواستن تمرکز کردن. اینجوری دراپباکس تونست از یه استارتآپ کوچیک به یه شرکت بزرگ و معروف تبدیل بشه.
لینک مقاله How DropBox Started As A Minimal Viable Product:
🔗 https://techcrunch.com/2011/10/19/dropbox-minimal-viable-product/
🔗 https://www.linkedin.com/pulse/how-did-dropbox-do-tech-behind-mvp-triumph-indpro-ab/
🆔 @MdDaily
❤🔥4🔥2❤1👏1
Md Daily
Photo
#تجربه
دستان پشت پرده: زیر ساخت ما چطوری کار میکنه؟
برای نوشتن و توضیح سیستم دیزاین زیرساخت خیلی فکر کردم که چطوری توضیح بدم، پس تصمیم گرفتم بکشمش و طبق تصویر قدم به قدم بریم جلو :)
توی بخش کلاینت و اپلیکیشن، از Flutter استفاده شده. وقتی کاربر از اپلیکیشن استفاده میکنه خب یه سری از کار های روتین اتفاق میوفته مثل گرفتن لیست پلی لیستا یا نحوه ی نمایش آیتم ها در صفحه ی خانه که توی این بخش کلاینت به بکند رکوئست میزنه و بعد بکند اپلیکیشن هم که با استفاده از Golang و فریمورک Gofiber با معماری Clean Architecture نوشته شده، اول سعی میکنه ریسپانس را از کش (Redis) بده و اگه کش رو پیدا نکرد با استفاده از ORM که برای این پروژه از Gorm استفاده شده از دیتابیس MySql میگیره و به اپلیکیشن جواب میده.
🔗 Go Fiber Clean Architecture
اما زمانی فرایند ها جالب میشن که کاربر میخواد ژانری رو پخش کنه. تو مرحله ی اول کلاینت به بکند خودش درخواست میزنه که مثلا من میخوام ژانر pop را پخش کنم. بکند اپلیکیشن به بکند Stream که اونم هم با استفاده از Golang و Gofiber نوشته شده درخواست میزنه. بهش میگه کاربر میخواد ژانر pop رو پخش کنه میشه بهم متا دیتا هاش رو بدی؟
نمونه اندپوینت:
سعی شده در نوشتن api ها best practice هایی که توی این پست هم راجبشون نوشتم رعایت بشه.
بعد بکند استریم میگه بذار اول از ice cast بپرسم ببینم چیا درحال پخش هستند ولی قبل از اینکه بره به آیس کست درخواست بزنه میره کشش رو چک میکنه چون که درخواست های تکراری زیاد هستند و تا زمان عوض شدن موزیک داده های قبلی توی ردیس کش باقی موندن. بکند استریم یه جیسون از اطلاعاتی مثل: اسم موزیک درحال پخش، آلبوم، نام خواننده و حتی کاور موزیک اماده میکنه و میده به بکند اپلیکیشن.
اطلاعتی مثل آلبوم و نام خواننده از icecast قابل دریافت هستند ولی کاور موزیک و متادیتا های خاص را باید حتما بره از روی فایل بخونه.
حالا بکند اپلیکیشن داده ها را برمیگردونه سمت اپ و اپلیکیشن توی پلیر خودش نشون میده. اما اینجا یه اتفاق بامزه میوفته، برای کاهش IO و افزایش پرفورمنس تو حجم تعداد کاربر بالا پلیر رادیویی که برای اپلیکیشن نوشته شده وقتی وصل شد به ادرس استریم موزیک مثلا:
http://127.0.0.1:15210/pop
و متا دیتا های اولیه رو هم گرفت، دیگه به بکند درخواست نمیزنه، بلکه اطلاعات موزد نیاز رو از خود موزیک درحال پخش میگیره و برای گرفتن کاور موزیک هم یک scraping کوچیک نوشتیم که میره از iTunes استخراج میکنه و برای بخش لیریکس هم از سرویس genius استفاده شده. حالا اگه به هر دلیلی سرویس genius قطع شد یا نت ملی شد یا iTunes فیلتر شد، اپ به مشکل نمیخوره و اتوماتیک دوباره برای گرفتن اطلاعات به بکند وصل میشه.
به طور کلی برای بهبود سرعت پاسخگویی:
1- از ردیس براش کشینگ استفاده کردیم
2- بکند ها به صورت concurrency پیاده سازی شدن و روی چند ترد اجرا میشن.
3- خود اپلیکیشن هم سیستم کشینگ داخلی داره و از دیتابیس Isar استفاده میکنه
پی نوشت:
موقع ساخت MVP و اینکه تست کنیم ببینیم میشه یا نه کل این ساختار در ساده ترین شکل ممکن پیاده سازی شد، ما یک بکند پایتون داشتیم که متا دیتا ها را بر میگردوند و از دیتابیس و سیستم کشینگ هم خبری نبود، اپلیکیشن مستقیم وصل میشد به Icecast و پلی لیست ها را نشون میداد. بکند اولیمون که با پایتون بود توی دو روز نوشته شده بود و بعد از اینکه تست هامون رو گرفتیم و سیستم دیزاینمون تکمیل شد زیر ساخت جدید که توی تصویر مشخصه توی حدودا 3 هفته آماده شد و خیلی بهبود پیدا کرد.
🆔 @MdDaily
دستان پشت پرده: زیر ساخت ما چطوری کار میکنه؟
برای نوشتن و توضیح سیستم دیزاین زیرساخت خیلی فکر کردم که چطوری توضیح بدم، پس تصمیم گرفتم بکشمش و طبق تصویر قدم به قدم بریم جلو :)
توی بخش کلاینت و اپلیکیشن، از Flutter استفاده شده. وقتی کاربر از اپلیکیشن استفاده میکنه خب یه سری از کار های روتین اتفاق میوفته مثل گرفتن لیست پلی لیستا یا نحوه ی نمایش آیتم ها در صفحه ی خانه که توی این بخش کلاینت به بکند رکوئست میزنه و بعد بکند اپلیکیشن هم که با استفاده از Golang و فریمورک Gofiber با معماری Clean Architecture نوشته شده، اول سعی میکنه ریسپانس را از کش (Redis) بده و اگه کش رو پیدا نکرد با استفاده از ORM که برای این پروژه از Gorm استفاده شده از دیتابیس MySql میگیره و به اپلیکیشن جواب میده.
🔗 Go Fiber Clean Architecture
اما زمانی فرایند ها جالب میشن که کاربر میخواد ژانری رو پخش کنه. تو مرحله ی اول کلاینت به بکند خودش درخواست میزنه که مثلا من میخوام ژانر pop را پخش کنم. بکند اپلیکیشن به بکند Stream که اونم هم با استفاده از Golang و Gofiber نوشته شده درخواست میزنه. بهش میگه کاربر میخواد ژانر pop رو پخش کنه میشه بهم متا دیتا هاش رو بدی؟
نمونه اندپوینت:
api/v1/{genre}/metaسعی شده در نوشتن api ها best practice هایی که توی این پست هم راجبشون نوشتم رعایت بشه.
بعد بکند استریم میگه بذار اول از ice cast بپرسم ببینم چیا درحال پخش هستند ولی قبل از اینکه بره به آیس کست درخواست بزنه میره کشش رو چک میکنه چون که درخواست های تکراری زیاد هستند و تا زمان عوض شدن موزیک داده های قبلی توی ردیس کش باقی موندن. بکند استریم یه جیسون از اطلاعاتی مثل: اسم موزیک درحال پخش، آلبوم، نام خواننده و حتی کاور موزیک اماده میکنه و میده به بکند اپلیکیشن.
اطلاعتی مثل آلبوم و نام خواننده از icecast قابل دریافت هستند ولی کاور موزیک و متادیتا های خاص را باید حتما بره از روی فایل بخونه.
حالا بکند اپلیکیشن داده ها را برمیگردونه سمت اپ و اپلیکیشن توی پلیر خودش نشون میده. اما اینجا یه اتفاق بامزه میوفته، برای کاهش IO و افزایش پرفورمنس تو حجم تعداد کاربر بالا پلیر رادیویی که برای اپلیکیشن نوشته شده وقتی وصل شد به ادرس استریم موزیک مثلا:
http://127.0.0.1:15210/pop
و متا دیتا های اولیه رو هم گرفت، دیگه به بکند درخواست نمیزنه، بلکه اطلاعات موزد نیاز رو از خود موزیک درحال پخش میگیره و برای گرفتن کاور موزیک هم یک scraping کوچیک نوشتیم که میره از iTunes استخراج میکنه و برای بخش لیریکس هم از سرویس genius استفاده شده. حالا اگه به هر دلیلی سرویس genius قطع شد یا نت ملی شد یا iTunes فیلتر شد، اپ به مشکل نمیخوره و اتوماتیک دوباره برای گرفتن اطلاعات به بکند وصل میشه.
به طور کلی برای بهبود سرعت پاسخگویی:
1- از ردیس براش کشینگ استفاده کردیم
2- بکند ها به صورت concurrency پیاده سازی شدن و روی چند ترد اجرا میشن.
3- خود اپلیکیشن هم سیستم کشینگ داخلی داره و از دیتابیس Isar استفاده میکنه
پی نوشت:
موقع ساخت MVP و اینکه تست کنیم ببینیم میشه یا نه کل این ساختار در ساده ترین شکل ممکن پیاده سازی شد، ما یک بکند پایتون داشتیم که متا دیتا ها را بر میگردوند و از دیتابیس و سیستم کشینگ هم خبری نبود، اپلیکیشن مستقیم وصل میشد به Icecast و پلی لیست ها را نشون میداد. بکند اولیمون که با پایتون بود توی دو روز نوشته شده بود و بعد از اینکه تست هامون رو گرفتیم و سیستم دیزاینمون تکمیل شد زیر ساخت جدید که توی تصویر مشخصه توی حدودا 3 هفته آماده شد و خیلی بهبود پیدا کرد.
🆔 @MdDaily
👍10❤🔥2❤1🔥1
چطوری توی SQL کوئری های پیچیده را ساده کنیم؟
یه قابلیت تو SQL هست که میتونه کوئریهاتون رو خیلی سادهتر کنه و سرعتشون رو هم بالا ببره.
فرض کنید یه کوئری داریم که تعداد کتابهای فروخته شده توسط هر نویسنده رو نشون میده:
خب این کوئری بدون مشکل اجرا میشه و نویسنده هایی که بیشتر از یک کتاب فروختند رو نشون میده. حالا اگه قرار باشه ببینیم کدوم نویسنده ها بیشتر از 5 تا کتاب فروختن چی؟
تقریبا با یه تفاوت کوچیک تو قسمت آخر مثله کوئری قبلیه. توی این کوئری پیچیدگی وجود داره و دیتابیس توی هر بار اجرا باید عملیات های مختلفی انجام میده.
یکی از راه حل ها استفاده از یک temporary table یا به اختصار temp table هست. این جدول یه جور حافظه موقتیه که میتونید توش یه سری اطلاعات رو ذخیره کنید، ولی فقط تا زمانی که سشن توی پایگاه داده بازه وجود داره و بعدش پاک میشه.
فرض کنید یه سری اطلاعات پیچیده دارید که باید چند بار باهاشون کار کنید. با استفاده از یه جدول موقتی میتونید این اطلاعات رو یه بار توی جدول بریزید و بعد هر بار که بهشون نیاز دارید به جای اینکه دوباره محاسبات رو انجام بدید، از همین جدول موقتی استفاده کنید.
اینجوری هم کوئری ها خیلی سادهتر میشن، چون دیگه نیازی نیست که هر بار همه محاسبات از اول انجام بشن و یه مزیت دیگه استفاده از جدولهای موقتی اینه که کنترل بیشتری میده.
میخوایم یه جدول موقتی تو Postgres بسازیم تا تعداد کتابهای فروخته شده توسط هر نویسنده مثال رو توش ذخیره کنیم. دستورات ساخت جدول تو هر پایگاه داده یه کمی با هم فرق دارن، ولی مفهوم کلی یکیه.
تو Postgres، دستور ساخت یه جدول موقتی تقریبا شبیه به دستور ساخت یه جدول عادیه، کافیه بعد از کلمه Create و قبل از کلمه Table کلمه Temporary رو اضافه کنید:
بعد از اجرای این SQL وقتشه که داده هامون رو بریزیم تو این جدول موقت:
حالا از این به بعد با یه دستور SELECT ساده میشه به نویسنده هایی که بیشتر از n تا کتاب دارند دسترسی پیدا کرد چون محاسبه نویسندهها و کتابهای فروخته شده قبلا انجام شده، و داده تو جدول موقت ذخیره شده:
استفاده از جداول موقت یه تکنیک خیلی مفیده.
میتونید ازشون هر موقع که کوئریهای پیچیدهتری دارید استفاده کنید، یا وقتی که نمیخواهید یا نیاز ندارید یه جدول واقعی بسازید. اینها میتونن عملکرد رو بهبود ببخشن و کوئریهای شما رو سادهتر کنن، به خصوص اگه دادههای مشابه رو چندین بار محاسبه یا مشاهده میکنید.
🔗 Simplify Complex SQL With This Feature
🆔 @MdDaily
یه قابلیت تو SQL هست که میتونه کوئریهاتون رو خیلی سادهتر کنه و سرعتشون رو هم بالا ببره.
فرض کنید یه کوئری داریم که تعداد کتابهای فروخته شده توسط هر نویسنده رو نشون میده:
SELECT
a.author_name,
COUNT(ol.line_id) AS book_count
FROM order_line ol
INNER JOIN book b ON ol.book_id = b.book_id
INNER JOIN book_author ba ON b.book_id = ba.book_id
INNER JOIN author a ON ba.author_id = a.author_id
GROUP BY a.author_name
HAVING COUNT(ol.line_id) > 1;
خب این کوئری بدون مشکل اجرا میشه و نویسنده هایی که بیشتر از یک کتاب فروختند رو نشون میده. حالا اگه قرار باشه ببینیم کدوم نویسنده ها بیشتر از 5 تا کتاب فروختن چی؟
SELECT
a.author_name,
COUNT(ol.line_id) AS book_count
FROM order_line ol
INNER JOIN book b ON ol.book_id = b.book_id
INNER JOIN book_author ba ON b.book_id = ba.book_id
INNER JOIN author a ON ba.author_id = a.author_id
GROUP BY a.author_name
HAVING COUNT(ol.line_id) > 5;
تقریبا با یه تفاوت کوچیک تو قسمت آخر مثله کوئری قبلیه. توی این کوئری پیچیدگی وجود داره و دیتابیس توی هر بار اجرا باید عملیات های مختلفی انجام میده.
یکی از راه حل ها استفاده از یک temporary table یا به اختصار temp table هست. این جدول یه جور حافظه موقتیه که میتونید توش یه سری اطلاعات رو ذخیره کنید، ولی فقط تا زمانی که سشن توی پایگاه داده بازه وجود داره و بعدش پاک میشه.
فرض کنید یه سری اطلاعات پیچیده دارید که باید چند بار باهاشون کار کنید. با استفاده از یه جدول موقتی میتونید این اطلاعات رو یه بار توی جدول بریزید و بعد هر بار که بهشون نیاز دارید به جای اینکه دوباره محاسبات رو انجام بدید، از همین جدول موقتی استفاده کنید.
اینجوری هم کوئری ها خیلی سادهتر میشن، چون دیگه نیازی نیست که هر بار همه محاسبات از اول انجام بشن و یه مزیت دیگه استفاده از جدولهای موقتی اینه که کنترل بیشتری میده.
میخوایم یه جدول موقتی تو Postgres بسازیم تا تعداد کتابهای فروخته شده توسط هر نویسنده مثال رو توش ذخیره کنیم. دستورات ساخت جدول تو هر پایگاه داده یه کمی با هم فرق دارن، ولی مفهوم کلی یکیه.
تو Postgres، دستور ساخت یه جدول موقتی تقریبا شبیه به دستور ساخت یه جدول عادیه، کافیه بعد از کلمه Create و قبل از کلمه Table کلمه Temporary رو اضافه کنید:
CREATE TEMPORARY TABLE author_books_sold (
author_name VARCHAR(400),
book_count INT
);
بعد از اجرای این SQL وقتشه که داده هامون رو بریزیم تو این جدول موقت:
INSERT INTO author_books_sold (author_name, book_count)
SELECT
a.author_name,
COUNT(ol.line_id) AS book_count
FROM order_line ol
INNER JOIN book b ON ol.book_id = b.book_id
INNER JOIN book_author ba ON b.book_id = ba.book_id
INNER JOIN author a ON ba.author_id = a.author_id
GROUP BY a.author_name;
حالا از این به بعد با یه دستور SELECT ساده میشه به نویسنده هایی که بیشتر از n تا کتاب دارند دسترسی پیدا کرد چون محاسبه نویسندهها و کتابهای فروخته شده قبلا انجام شده، و داده تو جدول موقت ذخیره شده:
SELECT author_name, book_count
FROM author_books_sold
WHERE book_count > 1;
SELECT author_name, book_count
FROM author_books_sold
WHERE book_count > 5;
استفاده از جداول موقت یه تکنیک خیلی مفیده.
میتونید ازشون هر موقع که کوئریهای پیچیدهتری دارید استفاده کنید، یا وقتی که نمیخواهید یا نیاز ندارید یه جدول واقعی بسازید. اینها میتونن عملکرد رو بهبود ببخشن و کوئریهای شما رو سادهتر کنن، به خصوص اگه دادههای مشابه رو چندین بار محاسبه یا مشاهده میکنید.
🔗 Simplify Complex SQL With This Feature
🆔 @MdDaily
❤🔥5👍3🔥2
کامیت خوب ✅ یا بد ❌: چند Best Practice برای Git
تو دنیای برنامهنویسی، یه چیزی هست که همه توسعهدهندهها بهش نیاز دارن: یه سیستم برای ردیابی تغییرات کدشون! یکی از بهترین این سیستمها، Git هست. با Git میتونی تغییرات کدت رو دنبال کنی، به نسخههای قبلی برگردی و با بقیه اعضای تیمت راحتتر کار کنی.
توی این پست بررسی می کنیم که یه کامیت خوب چه ویژگیهایی داره و یه کامیت بد چه مشکلاتی ایجاد میکنه. با این کار، تاریخچه تغییرات کدت مرتب و قابل فهم میشه.
کامیت یعنی چی؟
در Git، یک کامیت به وضعیت کد شما در یک نقطه زمانی خاص اشاره داره. هر کامیت یه اطلاعاتی داره مثل اینکه چه کسی این تغییر رو ایجاد کرده، چه زمانی این کار رو انجام داده و چه تغییراتی اعمال شده. با کامیتها میتونی به راحتی به نسخههای قبلی کدت برگردی و تغییرات رو بررسی کنی.
✅ ویژگیهای یک کامیت خوب
اتمی و متمرکز:
یک کامیت باید اتمی باشه - یعنی فقط یک تغییر منطقی رو شامل بشه. چند تغییر مستقل رو تو یک کامیت ترکیب نکن.
مثال:
پیام کامیت توصیفی:
پیام کامیت باید به وضوح توضیح بده که کامیت چه کاری انجام میده و چرا این تغییر ایجاد شده. این پیام باید اطلاعات کافی رو در اختیار دیگران (و خود آیندهات) بذاره تا بتونن بدون خوندن کد، تغییر رو درک کنن.
مثال:
رعایت استانداردهای کامیت:
میتونی از استانداردهای کامیت استفاده کنی تا تاریخچه گیتت تمیز، منظم و قابل خوندن تر باشه. معمولا این استانداردها شامل نوع تغییر (مثلا ویژگی جدید، رفع باگ، تغییر ساختار، مستندسازی) یا همون (feat, fix, chore, refactor, docs)، خلاصه کوتاه و گاهی توضیح طولانی یا اشاره به مشکلات مرتبط میشه.
مثال:
تست شده و تأیید شده:
مطمئن شو که تغییرات توی کامیتت تست شده و درست کار میکنه. کد خراب یا تست نشده میتونه روند کار رو مختل کنه و بقیه رو اذیت کنه.
محدوده مناسب:
کامیتهات رو درست محدوده بندی کن. مثلاً اگه داری روی یه قابلیت خاص کار میکنی یا یه باگ رو درست میکنی، مطمئن شو که همه تغییرات مربوط به اون کار تو یه کامیت قرار گرفتن. از تغییرات ناقصی که ممکنه کد رو تو وضعیت ناپایداری بذاره، خودداری کن.
مثال:
❌ ویژگیهای یک کامیت بد
بزرگ و بدون تمرکز:
کامیت با تغییرات خیلی زیاد، یه کامیت بده. فهمیدن اینکه کامیت چه کاری انجام میده رو سخت میکنه. کامیتهای بزرگ و بدون تمرکز، بررسی و دیباگ کردن رو چالش برانگیز میکنن.
مثال:
پیامهای مبهم یا گمراهکننده:
پیامهای کامیت که مبهم یا گمراهکننده هستن، اطلاعات مفیدی درباره تغییرات ارائه نمیدن. این کمبود جزئیات میتونه باعث سردرگمی بشه و ردیابی تاریخچه تغییرات رو سخت کنه.
مثال:
تغییرات بیربط:
ترکیب تغییرات بیربط توی یه کامیت، جداسازی تغییرات خاص رو سخت میکنه و ممکنه باعث ایجاد باگ و پیچیده شدن روند بررسی بشه.
مثال:
کد ناقص یا تست نشده:
کامیت کردن کد ناقص یا تست نشده میتونه جریان کار رو مختل کنه، برای بقیه اعضای تیم مشکل ایجاد کنه و ممکنه باعث خراب شدن بیلد بشه.
در نهایت بین کامیت کردن خیلی زیاد و خیلی کم تعادل برقرار کن. هر کامیت باید یه تغییر معنیدار رو نشون بده. هیچ وقت تغییرات بیربط رو تو یه کامیت قرار نده و پیامهای کامیتت باید توضیح بدن که کامیت چه کاری انجام میده و چرا این تغییر رو ایجاد کردی.
〰️〰️〰️
پ ن:
اگه هم مثه خودم خیلی حوصله ی نوشتن پیام commit ندارید میتونید از ابزاری که توی این پست معرفی کردم استفاده کنید تا خودش براتون کامیت رو بنویسه :)
🆔 @MdDaily
تو دنیای برنامهنویسی، یه چیزی هست که همه توسعهدهندهها بهش نیاز دارن: یه سیستم برای ردیابی تغییرات کدشون! یکی از بهترین این سیستمها، Git هست. با Git میتونی تغییرات کدت رو دنبال کنی، به نسخههای قبلی برگردی و با بقیه اعضای تیمت راحتتر کار کنی.
توی این پست بررسی می کنیم که یه کامیت خوب چه ویژگیهایی داره و یه کامیت بد چه مشکلاتی ایجاد میکنه. با این کار، تاریخچه تغییرات کدت مرتب و قابل فهم میشه.
کامیت یعنی چی؟
در Git، یک کامیت به وضعیت کد شما در یک نقطه زمانی خاص اشاره داره. هر کامیت یه اطلاعاتی داره مثل اینکه چه کسی این تغییر رو ایجاد کرده، چه زمانی این کار رو انجام داده و چه تغییراتی اعمال شده. با کامیتها میتونی به راحتی به نسخههای قبلی کدت برگردی و تغییرات رو بررسی کنی.
✅ ویژگیهای یک کامیت خوب
اتمی و متمرکز:
یک کامیت باید اتمی باشه - یعنی فقط یک تغییر منطقی رو شامل بشه. چند تغییر مستقل رو تو یک کامیت ترکیب نکن.
مثال:
# Good commit
git commit -m "Add user authentication"
# Bad commit
git commit -m "Add user authentication and update UI styles"
پیام کامیت توصیفی:
پیام کامیت باید به وضوح توضیح بده که کامیت چه کاری انجام میده و چرا این تغییر ایجاد شده. این پیام باید اطلاعات کافی رو در اختیار دیگران (و خود آیندهات) بذاره تا بتونن بدون خوندن کد، تغییر رو درک کنن.
مثال:
# Good commit message
git commit -m "Fix Correct null pointer exception in user login"
# Bad commit message
git commit -m "Fix bug"
رعایت استانداردهای کامیت:
میتونی از استانداردهای کامیت استفاده کنی تا تاریخچه گیتت تمیز، منظم و قابل خوندن تر باشه. معمولا این استانداردها شامل نوع تغییر (مثلا ویژگی جدید، رفع باگ، تغییر ساختار، مستندسازی) یا همون (feat, fix, chore, refactor, docs)، خلاصه کوتاه و گاهی توضیح طولانی یا اشاره به مشکلات مرتبط میشه.
مثال:
# Good commit message following conventional guidelines
git commit -m "feat(auth): add JWT-based authentication"
git commit -m "fix(login): resolve race condition in login flow"
میتونید از ایموجی هم استفاده کنید که لیست ایموجی هاش توی این gist و یا سایت gitmoji.dev پیدا میشن :)
تست شده و تأیید شده:
مطمئن شو که تغییرات توی کامیتت تست شده و درست کار میکنه. کد خراب یا تست نشده میتونه روند کار رو مختل کنه و بقیه رو اذیت کنه.
محدوده مناسب:
کامیتهات رو درست محدوده بندی کن. مثلاً اگه داری روی یه قابلیت خاص کار میکنی یا یه باگ رو درست میکنی، مطمئن شو که همه تغییرات مربوط به اون کار تو یه کامیت قرار گرفتن. از تغییرات ناقصی که ممکنه کد رو تو وضعیت ناپایداری بذاره، خودداری کن.
مثال:
# Good commit with proper scope
git commit -m "refactor(auth): split auth logic into separate module"
# Bad commit with mixed scope
git commit -m "refactor and minor fixes"
❌ ویژگیهای یک کامیت بد
بزرگ و بدون تمرکز:
کامیت با تغییرات خیلی زیاد، یه کامیت بده. فهمیدن اینکه کامیت چه کاری انجام میده رو سخت میکنه. کامیتهای بزرگ و بدون تمرکز، بررسی و دیباگ کردن رو چالش برانگیز میکنن.
مثال:
# Bad commit
git commit -m "Update project"
پیامهای مبهم یا گمراهکننده:
پیامهای کامیت که مبهم یا گمراهکننده هستن، اطلاعات مفیدی درباره تغییرات ارائه نمیدن. این کمبود جزئیات میتونه باعث سردرگمی بشه و ردیابی تاریخچه تغییرات رو سخت کنه.
مثال:
# Bad commit message
git commit -m "Stuff"
تغییرات بیربط:
ترکیب تغییرات بیربط توی یه کامیت، جداسازی تغییرات خاص رو سخت میکنه و ممکنه باعث ایجاد باگ و پیچیده شدن روند بررسی بشه.
مثال:
# Bad commit
git commit -m "Update readme and fix login issue"
کد ناقص یا تست نشده:
کامیت کردن کد ناقص یا تست نشده میتونه جریان کار رو مختل کنه، برای بقیه اعضای تیم مشکل ایجاد کنه و ممکنه باعث خراب شدن بیلد بشه.
در نهایت بین کامیت کردن خیلی زیاد و خیلی کم تعادل برقرار کن. هر کامیت باید یه تغییر معنیدار رو نشون بده. هیچ وقت تغییرات بیربط رو تو یه کامیت قرار نده و پیامهای کامیتت باید توضیح بدن که کامیت چه کاری انجام میده و چرا این تغییر رو ایجاد کردی.
〰️〰️〰️
پ ن:
اگه هم مثه خودم خیلی حوصله ی نوشتن پیام commit ندارید میتونید از ابزاری که توی این پست معرفی کردم استفاده کنید تا خودش براتون کامیت رو بنویسه :)
🆔 @MdDaily
❤🔥7👍3⚡1✍1
🕸 شبکهسازی: یه کار فان
شبکهسازی خیلی مهمه اگه میخوای تو کارت پیشرفت کنی.
میگن مهمترین چیزی که از رفتن به دانشگاههای خوب گیرت میاد، درس نیست بلکه دوستاییه که پیدا میکنی. و راستش رو بخوای، حق باهاشونه
اما خیلیا میگن شبکهسازی خیلی سخته، حوصلهسربره و اصلا برای بعضیها ممکن نیست، مخصوصا اونایی که یه کم فرق دارن. توی این پست باهم بررسی می کنیم که چطوری میشه این فرایندو فان و راحت انجام داد.
وقتی بحث شبکهسازی میشه احتمالا یه جور دورهمی تکنولوژی به نظر میاد که با آدمای هم صنفت حرف میزنی و بعدش تو لینکدین بهشون درخواست میدی. خب، اینم یه نوع شبکهسازیه ولی حقیقتش اینه که این فقط یه گوشه کوچیک از شبکهسازیه.
فکر کردن به اینکه باید بری تو این جور دورهمیا شرکت کنی تا بتونی از فایدههای شبکهسازی استفاده کنی، مثل اینه که فکر کنی حتما باید بری قرارهای گروهی تا ازدواج کنی! شاید برات جواب بده، ولی این که ازدواج چیه و چجوری اتفاق میفته نیست، و اکثر آدمها هم که اینطوری همسر پیدا نمیکنن.
واقعیت اینه که شبکهسازی یه چیزیه که میتونی با اراده و آگاهی انجامش بدی، ولی بیشتر وقتا اتفاقیه و اگه مهارت و دیدگاه درست رو داشته باشی، ازش سود میبری.
شما ممکنه در دورهمی حرفهای، مراسم مرتبط با برنامهنویسی و سخنرانیهای تکنولوژی مختلفی شرکت کنید و هیچ فرصتی از هیچ کدومشون پیدا نشه ولی این به معنای شرکت نکردن توشون نیست ولی در نهایت مثل قرار گذاشتنه، شانس خیلی کمی داری که تو یه قرار تصادفی همسرتو پیدا کنی، پس باید یاد بگیری از این پروسه لذت ببری. در نهایت، فرصتها از زندگی کردن معمولی به وجود میان.
یه توصیه واقعی برای شبکهسازی
پس چطور آدم باید «خوب شبکهسازی کنه»؟
کنجکاو باش!
کنجکاوی یه نیروی فوقالعادهایه که باعث میشه آدم رشد کنه.
درباره بقیه کنجکاو باش. آدمها خیلی باحالن، هر کدوم یه دنیایین! کلی چیز هست که بشه از آدمها یاد گرفت، کلی آدم هست که بشه باهاشون آشنا شد.
وقتی به بقیه اهمیت میدی، انگار که دانایی و تجربههای اونا رو به خودت اضافه میکنی. دیدگاههای مختلف آدم رو قویتر میکنه.
این یعنی داری یه شبکه از دوست و آشنا درست میکنی، داری با آدمای بیشتری آشنا میشی.
یه نکته جالب اینه که همیشه کشورهایی که با بقیه ارتباط کمتری دارن، رشد اقتصادیشون هم کمتره. این نشون میده که ارتباط با آدمای دیگه چقدر مهمه.
برای فرصتا دستت رو باز بذار
خب حالا که تورمونو انداختیم تو آب، یه عالمه ماهی توش گیر میاد. دیگه فقط کافیه دست به ماهی ببریم و درشون بیاریم.
آسون که میگم، بعضی ماهیها یه جوری سُر میخورن که نمیشه راحت گرفتشون. بعضی وقتا فرصتها یه ریسک کوچولو هم با خودشون میآرن. هر موقعیتی یه شکل خودشه و نمیشه یه قانون کلی براش گفت، ولی به نظرم اگه آدم یه کم جسورتر باشه، خیلی بیشتر میتونه به دست بیاره.
مهربون باش
آدمها اجتماعیان. ما برای اینکه با هم باشیم ساخته شدیم. حالا یه چیز جالب اینجاست که آدمها بیشتر دوست دارن با کسایی که باهاشون خوبن کار کنن. یعنی اگه تو با بقیه خوب باشی، اونا هم با تو خوبن. چه دوست، چه رفیق، چه سر کار.
راستش، من خودم معتقدم آدم باید برای خودش مهربون باشه، نه اینکه فقط بخواد بقیه ازش خوششون بیاد.
بخشنده باش
من بی نهایت سپاس گذار افرادی هستم که به من کمک کردن تا به اینجا برسم
اما چرخ روزگار می چرخه. همانطور که بقیه به من کمک کردن، من هم به دیگران کمک کردم. کمک به بقیه باعث بهتر شدن شغل من شد.
من بخشی از وقت آزادم را داوطلبانه صرف راهنمایی افرادی می کنم چون احساس می کنم روزی این تور ممکن است ماهی بگیره.
زندگی یک بازی با حاصل جمع صفر نیست. وقتی به کسی کمک می کنید به خودتون هم کمک کردید.
خب، اگه درونگرا باشی چی؟
یه حرف آخر به اونایی که زیاد اهل بیرون رفتن و ارتباط گرفتن نیستن. اینجور آدما که با بقیه حرف زدن انرژیشونو میگیره، منم همینم. با یکی حرف بزنم انگار یه ماراتن دویدم!
ولی خب، ورزش کردنم همینطوره. با این حال، آدم با تمرین میتونه ماراتن هم بدوه.
حرف زدن با بقیه و ورزش کردن اولش خیلی سختن، ولی آدم برای همین ساخته شده. میتونی یادش بگیری و با تمرین عاشقش بشی.
ورزش خوبه، حرف زدن با بقیه هم خوبه، پس برو بیرون و این کارو تمرین کن. شاید همیشه خستهکننده باشه، ولی آخرش حال میکنی.
خلاصه کلام:
شبکهسازی یعنی فقط قهوه خوردن توی یه جمع تکنولوژی و گرفتن چنتا شماره نیست.
بیشتر از هر چیزی یعنی ارتباط با آدمای دیگه.
این کارو برای کارت نمیکنی، برای اینکه آدمایی که دوست دارن با هم ارتباط بگیرن.
پس برو بیرون و با بقیه آشنا شو و دنبال کارای مشترک بگرد. کی میدونه، شاید یه همکاری خوب شروع بشه :)
🆔 @MdDaily
شبکهسازی خیلی مهمه اگه میخوای تو کارت پیشرفت کنی.
میگن مهمترین چیزی که از رفتن به دانشگاههای خوب گیرت میاد، درس نیست بلکه دوستاییه که پیدا میکنی. و راستش رو بخوای، حق باهاشونه
اما خیلیا میگن شبکهسازی خیلی سخته، حوصلهسربره و اصلا برای بعضیها ممکن نیست، مخصوصا اونایی که یه کم فرق دارن. توی این پست باهم بررسی می کنیم که چطوری میشه این فرایندو فان و راحت انجام داد.
وقتی بحث شبکهسازی میشه احتمالا یه جور دورهمی تکنولوژی به نظر میاد که با آدمای هم صنفت حرف میزنی و بعدش تو لینکدین بهشون درخواست میدی. خب، اینم یه نوع شبکهسازیه ولی حقیقتش اینه که این فقط یه گوشه کوچیک از شبکهسازیه.
فکر کردن به اینکه باید بری تو این جور دورهمیا شرکت کنی تا بتونی از فایدههای شبکهسازی استفاده کنی، مثل اینه که فکر کنی حتما باید بری قرارهای گروهی تا ازدواج کنی! شاید برات جواب بده، ولی این که ازدواج چیه و چجوری اتفاق میفته نیست، و اکثر آدمها هم که اینطوری همسر پیدا نمیکنن.
واقعیت اینه که شبکهسازی یه چیزیه که میتونی با اراده و آگاهی انجامش بدی، ولی بیشتر وقتا اتفاقیه و اگه مهارت و دیدگاه درست رو داشته باشی، ازش سود میبری.
شما ممکنه در دورهمی حرفهای، مراسم مرتبط با برنامهنویسی و سخنرانیهای تکنولوژی مختلفی شرکت کنید و هیچ فرصتی از هیچ کدومشون پیدا نشه ولی این به معنای شرکت نکردن توشون نیست ولی در نهایت مثل قرار گذاشتنه، شانس خیلی کمی داری که تو یه قرار تصادفی همسرتو پیدا کنی، پس باید یاد بگیری از این پروسه لذت ببری. در نهایت، فرصتها از زندگی کردن معمولی به وجود میان.
یه توصیه واقعی برای شبکهسازی
پس چطور آدم باید «خوب شبکهسازی کنه»؟
کنجکاو باش!
کنجکاوی یه نیروی فوقالعادهایه که باعث میشه آدم رشد کنه.
درباره بقیه کنجکاو باش. آدمها خیلی باحالن، هر کدوم یه دنیایین! کلی چیز هست که بشه از آدمها یاد گرفت، کلی آدم هست که بشه باهاشون آشنا شد.
وقتی به بقیه اهمیت میدی، انگار که دانایی و تجربههای اونا رو به خودت اضافه میکنی. دیدگاههای مختلف آدم رو قویتر میکنه.
این یعنی داری یه شبکه از دوست و آشنا درست میکنی، داری با آدمای بیشتری آشنا میشی.
یه نکته جالب اینه که همیشه کشورهایی که با بقیه ارتباط کمتری دارن، رشد اقتصادیشون هم کمتره. این نشون میده که ارتباط با آدمای دیگه چقدر مهمه.
برای فرصتا دستت رو باز بذار
خب حالا که تورمونو انداختیم تو آب، یه عالمه ماهی توش گیر میاد. دیگه فقط کافیه دست به ماهی ببریم و درشون بیاریم.
آسون که میگم، بعضی ماهیها یه جوری سُر میخورن که نمیشه راحت گرفتشون. بعضی وقتا فرصتها یه ریسک کوچولو هم با خودشون میآرن. هر موقعیتی یه شکل خودشه و نمیشه یه قانون کلی براش گفت، ولی به نظرم اگه آدم یه کم جسورتر باشه، خیلی بیشتر میتونه به دست بیاره.
مهربون باش
آدمها اجتماعیان. ما برای اینکه با هم باشیم ساخته شدیم. حالا یه چیز جالب اینجاست که آدمها بیشتر دوست دارن با کسایی که باهاشون خوبن کار کنن. یعنی اگه تو با بقیه خوب باشی، اونا هم با تو خوبن. چه دوست، چه رفیق، چه سر کار.
راستش، من خودم معتقدم آدم باید برای خودش مهربون باشه، نه اینکه فقط بخواد بقیه ازش خوششون بیاد.
بخشنده باش
من بی نهایت سپاس گذار افرادی هستم که به من کمک کردن تا به اینجا برسم
اما چرخ روزگار می چرخه. همانطور که بقیه به من کمک کردن، من هم به دیگران کمک کردم. کمک به بقیه باعث بهتر شدن شغل من شد.
من بخشی از وقت آزادم را داوطلبانه صرف راهنمایی افرادی می کنم چون احساس می کنم روزی این تور ممکن است ماهی بگیره.
زندگی یک بازی با حاصل جمع صفر نیست. وقتی به کسی کمک می کنید به خودتون هم کمک کردید.
خب، اگه درونگرا باشی چی؟
یه حرف آخر به اونایی که زیاد اهل بیرون رفتن و ارتباط گرفتن نیستن. اینجور آدما که با بقیه حرف زدن انرژیشونو میگیره، منم همینم. با یکی حرف بزنم انگار یه ماراتن دویدم!
ولی خب، ورزش کردنم همینطوره. با این حال، آدم با تمرین میتونه ماراتن هم بدوه.
حرف زدن با بقیه و ورزش کردن اولش خیلی سختن، ولی آدم برای همین ساخته شده. میتونی یادش بگیری و با تمرین عاشقش بشی.
ورزش خوبه، حرف زدن با بقیه هم خوبه، پس برو بیرون و این کارو تمرین کن. شاید همیشه خستهکننده باشه، ولی آخرش حال میکنی.
خلاصه کلام:
شبکهسازی یعنی فقط قهوه خوردن توی یه جمع تکنولوژی و گرفتن چنتا شماره نیست.
بیشتر از هر چیزی یعنی ارتباط با آدمای دیگه.
این کارو برای کارت نمیکنی، برای اینکه آدمایی که دوست دارن با هم ارتباط بگیرن.
پس برو بیرون و با بقیه آشنا شو و دنبال کارای مشترک بگرد. کی میدونه، شاید یه همکاری خوب شروع بشه :)
🆔 @MdDaily
❤🔥17👍6😁1
سلام سلام!
به خاطر یه سری ددلاین ها و شرایطی که بوجود اومد حدودا یک ماهی نتونستم تو کانال فعالیتی داشته باشم و ممنونم از همگی که تا اینجا همراه من بودید 🫶🏻
بریم که فعالیت رو با انرژی شروع کنیم :)
به خاطر یه سری ددلاین ها و شرایطی که بوجود اومد حدودا یک ماهی نتونستم تو کانال فعالیتی داشته باشم و ممنونم از همگی که تا اینجا همراه من بودید 🫶🏻
بریم که فعالیت رو با انرژی شروع کنیم :)
❤12👍3🔥2👎1
چرا باید پروژتون رو منتشر کنید حتی اگه بد باشه؟
واقعاً در شروع کار مهم نیست که پروژه ها چقدر ساده، ناپخته یا «غیر حرفهای» باشن. مهم اینکه تموم و منتشر بشن. حالا چرا؟ افراد زیادی هستن که وارد این حوزه میشن و شروع میکنن تویه یک چرخه ی بی پایان از دوره دیدن گیر کردن و در نهایت از اینکه خروجی ای نمی بینن از کارشون نا امید میشن. پس فقط شروع به ساختن کنید و بذارید بقیه کارتون رو ببینن. چیزی که مهمه اینه که در نهایت یه چیزی ساختید و این حس خوبی بهتون میده. درنهایت سریع تر یاد میگیری و کلی پروژه میزنی!
خودتو از نتیجه کار جدا کن.
چرا باید این کار رو کنی؟ مگه نباید بر اساس کیفیت خروجی کار قضاوت بشی؟ نباید تمرکز روی تولید بهترین کار ممکن گذاشت؟ خب، بله... ولی همونطور که نه. هر چقدر هم که تجربه داشته باشی، وقتی یه کار خلاقانه میکنی،احتمالا ازش ناراضی هستی. بعضی وقتا تو طول ساختن، بعضی وقتا آخرش؛ دیروز فکر میکردی چیزی که ساخته بودی عالیه، امروز فکر میکنی یه تیکه آشغاله و اگه منتشرش کنی همه بهت میخندن.
هر چقدر بیشتر خودمون رو به نتیجه کار گره بزنیم، بیشتر احتمال داره روی نکات منفی تمرکز کنیم و در نهایت منجر به بیعملی میشه. پس باید کمتر اهمیت بدی.
سخته، ولی سعی کن به چیزی که ساختی دل نبندی. بذار تا بقیه امتحان کنن، فیدبک بگیری و از همه مهمتر جلو برو. اگه جلو نری هیچ وقت پیشرفت نمیکنی.
بس کن یادگرفتن رو!
تو دیگه به اندازه کافی بلدی که بتونی پروژه های خفن بسازی. وقتی میگم "بس کن یادگرفتن رو" منظورم این نیست که دیگه یاد نگیری (چون همه ما همیشه در حال یادگیری هستیم)، منظورم اینه که:
ویدئو تو یوتیوب و حتی کتاب رو ببند،
حتما این پست رو هم تموم کن!
به جای این کارها چی کار کنی؟ کد ادیتورت رو باز کن و شروع کن به کد نویسی.
میگم "اول باید <مفهوم-خاص> رو بهتر یاد بگیرم تا بتونم چیزی بسازم."
یا "باید در مورد <موضوع-خاص> بیشتر بدونم."
یا "چطور میشه اگه <ویژگی-خاص> من طبق بهترین شیوه های فعلی نباشه؟"
این سوالا مهم نیستن؟ نه مهم هستن، ولی خیلی وقتا، برای پروژه تمرینی که داری روش کار می کنی، مهم نیستن. تو واقعاً به اندازه کافی بلدی که حداقل شروع کنی. بقیه چیزها رو می تونی در حین کار یاد بگیری.
کپیکاری اشکال نداره!
یه کاری که هزار نفر دیگه انجامش دادن، چرا خودت بخوای از اول شروع کنی؟ البته این معنیاش این نیست که هیچی یاد نگیریا، فقط میگم یه سری کارا رو لازم نیست از صفر شروع کنی. آخر سر، هرچی بسازی یه جوری بوی خودتو میده. پس نترس که بقیه فکر کنن کپیکاری کردی. راستش رو بخوای، خیلی هم خوبه که از کارای بقیه استفاده کنی. مثلاً یه کد آماده پیدا کنی و روش کار کنی، یا بری تو گیت هاب و کد بقیه رو بخونی. اینجوری خیلی زودتر به نتیجه میرسی.
یه فیچر یه فیچر کارو جلو ببر
برنامهریزی خوبه، اما اگه بخوای باهاش کارو ول کنی اصلا خوب نیست! برنامهریزی یه جور خودتو گول زدنیه که میگی: «آهان، خب من که برنامهریزی کردم، پس کارم تمومه!»
یه چیز دیگه هم هست، ممکنه وسط کار یه چیزی یادت بیاد که اصلا تو برنامهت نبوده. پس زیاد خودتو درگیر برنامهریزی نکن. یه فیچر رو درست کن، بعد بعدی رو. مثلا اگه پروژه ی جدید ساختی شروع کن به تعریف کردن ماژول هاش مثل:
اینجوری نه خسته میشی، نه گیج. هر فیچری که تموم میشه، حسابی کیف میکنی که یه قدم جلو رفتی. حتی اگه خیلی کوچیک باشه و از todo list هم غافل نشید.
ولش کن بابا، زود منشترش کن!
اول از همه اینکه اینجوری از اون ترس لعنتی خلاص میشی که نکنه کارم بد شده باشه. آخه هنوز که کامل نشده. بعدشم کلی نظر میگیری و میفهمی باید چی کار کنی تا بهترش کنی.
تمومش کن، حتی اگه گند باشه!
میدونم کار سختیه خودم هم باهاش مشکل دارم. ولی اگه کاری رو شروع کردی، تمومش کن. حتی اگه از کارت بدت بیاد، با تموم کردنش یاد میگیری چطور یه کارو تا آخر ببری .یه چیز خوب دیگه اینه که وقتی یه کارو تموم میکنی و یه مدت ازش فاصله میگیری، میبینی که خیلی هم بد نشده! و اگه هنوزم ازش خوشت نیاد، حداقل کلی چیز جدید یاد گرفتی. حالا تو مهارتهای جدید، یه دیدگاه جدید و یه روش بهتر برای کار کردن یاد گرفتی. این خیلی خوبه!
کلام آخر
حالا که دارم این پست رو تموم میکنم، میخوام یه نقل قول از Kurt Vonnegut بهتون بگم. اگه کدنویسی رو یه نوع هنر حساب کنیم، حرفای اون خیلی به کارمون میاد:
خب دوستان، حالا برید و حسابی کد بزنید :)
🆔 @MdDaily
واقعاً در شروع کار مهم نیست که پروژه ها چقدر ساده، ناپخته یا «غیر حرفهای» باشن. مهم اینکه تموم و منتشر بشن. حالا چرا؟ افراد زیادی هستن که وارد این حوزه میشن و شروع میکنن تویه یک چرخه ی بی پایان از دوره دیدن گیر کردن و در نهایت از اینکه خروجی ای نمی بینن از کارشون نا امید میشن. پس فقط شروع به ساختن کنید و بذارید بقیه کارتون رو ببینن. چیزی که مهمه اینه که در نهایت یه چیزی ساختید و این حس خوبی بهتون میده. درنهایت سریع تر یاد میگیری و کلی پروژه میزنی!
خودتو از نتیجه کار جدا کن.
چرا باید این کار رو کنی؟ مگه نباید بر اساس کیفیت خروجی کار قضاوت بشی؟ نباید تمرکز روی تولید بهترین کار ممکن گذاشت؟ خب، بله... ولی همونطور که نه. هر چقدر هم که تجربه داشته باشی، وقتی یه کار خلاقانه میکنی،احتمالا ازش ناراضی هستی. بعضی وقتا تو طول ساختن، بعضی وقتا آخرش؛ دیروز فکر میکردی چیزی که ساخته بودی عالیه، امروز فکر میکنی یه تیکه آشغاله و اگه منتشرش کنی همه بهت میخندن.
هر چقدر بیشتر خودمون رو به نتیجه کار گره بزنیم، بیشتر احتمال داره روی نکات منفی تمرکز کنیم و در نهایت منجر به بیعملی میشه. پس باید کمتر اهمیت بدی.
سخته، ولی سعی کن به چیزی که ساختی دل نبندی. بذار تا بقیه امتحان کنن، فیدبک بگیری و از همه مهمتر جلو برو. اگه جلو نری هیچ وقت پیشرفت نمیکنی.
بس کن یادگرفتن رو!
تو دیگه به اندازه کافی بلدی که بتونی پروژه های خفن بسازی. وقتی میگم "بس کن یادگرفتن رو" منظورم این نیست که دیگه یاد نگیری (چون همه ما همیشه در حال یادگیری هستیم)، منظورم اینه که:
ویدئو تو یوتیوب و حتی کتاب رو ببند،
حتما این پست رو هم تموم کن!
به جای این کارها چی کار کنی؟ کد ادیتورت رو باز کن و شروع کن به کد نویسی.
میگم "اول باید <مفهوم-خاص> رو بهتر یاد بگیرم تا بتونم چیزی بسازم."
یا "باید در مورد <موضوع-خاص> بیشتر بدونم."
یا "چطور میشه اگه <ویژگی-خاص> من طبق بهترین شیوه های فعلی نباشه؟"
این سوالا مهم نیستن؟ نه مهم هستن، ولی خیلی وقتا، برای پروژه تمرینی که داری روش کار می کنی، مهم نیستن. تو واقعاً به اندازه کافی بلدی که حداقل شروع کنی. بقیه چیزها رو می تونی در حین کار یاد بگیری.
کپیکاری اشکال نداره!
یه کاری که هزار نفر دیگه انجامش دادن، چرا خودت بخوای از اول شروع کنی؟ البته این معنیاش این نیست که هیچی یاد نگیریا، فقط میگم یه سری کارا رو لازم نیست از صفر شروع کنی. آخر سر، هرچی بسازی یه جوری بوی خودتو میده. پس نترس که بقیه فکر کنن کپیکاری کردی. راستش رو بخوای، خیلی هم خوبه که از کارای بقیه استفاده کنی. مثلاً یه کد آماده پیدا کنی و روش کار کنی، یا بری تو گیت هاب و کد بقیه رو بخونی. اینجوری خیلی زودتر به نتیجه میرسی.
یه فیچر یه فیچر کارو جلو ببر
برنامهریزی خوبه، اما اگه بخوای باهاش کارو ول کنی اصلا خوب نیست! برنامهریزی یه جور خودتو گول زدنیه که میگی: «آهان، خب من که برنامهریزی کردم، پس کارم تمومه!»
یه چیز دیگه هم هست، ممکنه وسط کار یه چیزی یادت بیاد که اصلا تو برنامهت نبوده. پس زیاد خودتو درگیر برنامهریزی نکن. یه فیچر رو درست کن، بعد بعدی رو. مثلا اگه پروژه ی جدید ساختی شروع کن به تعریف کردن ماژول هاش مثل:
-> auth
-> client
-> admin
-> landing-page
-> payment
اینجوری نه خسته میشی، نه گیج. هر فیچری که تموم میشه، حسابی کیف میکنی که یه قدم جلو رفتی. حتی اگه خیلی کوچیک باشه و از todo list هم غافل نشید.
ولش کن بابا، زود منشترش کن!
اول از همه اینکه اینجوری از اون ترس لعنتی خلاص میشی که نکنه کارم بد شده باشه. آخه هنوز که کامل نشده. بعدشم کلی نظر میگیری و میفهمی باید چی کار کنی تا بهترش کنی.
تمومش کن، حتی اگه گند باشه!
میدونم کار سختیه خودم هم باهاش مشکل دارم. ولی اگه کاری رو شروع کردی، تمومش کن. حتی اگه از کارت بدت بیاد، با تموم کردنش یاد میگیری چطور یه کارو تا آخر ببری .یه چیز خوب دیگه اینه که وقتی یه کارو تموم میکنی و یه مدت ازش فاصله میگیری، میبینی که خیلی هم بد نشده! و اگه هنوزم ازش خوشت نیاد، حداقل کلی چیز جدید یاد گرفتی. حالا تو مهارتهای جدید، یه دیدگاه جدید و یه روش بهتر برای کار کردن یاد گرفتی. این خیلی خوبه!
کلام آخر
حالا که دارم این پست رو تموم میکنم، میخوام یه نقل قول از Kurt Vonnegut بهتون بگم. اگه کدنویسی رو یه نوع هنر حساب کنیم، حرفای اون خیلی به کارمون میاد:
هنر را تمرین کنید، چه خوب یا بد، این راهی است برای رشد روح شما، به خاطر خدا. در حمام آواز بخوانید. با رادیو برقصید. داستان بگویید. برای یک دوست شعر بنویسید، حتی یک شعر بد. تا جایی که می توانید این کار را انجام دهید. پاداش بزرگی دریافت خواهید کرد. چیزی خلق خواهید کرد.
خب دوستان، حالا برید و حسابی کد بزنید :)
🆔 @MdDaily
❤🔥11👍6⚡1👎1🔥1
معرفی upscayl
برای بزرگ نمایی و افزایش کیفیت وضوح تصاویر دنبال یه ابزار متن باز بودم که نیاز به اینترنت نداشته باشه و رو گرافیک Intel هم کار بکنه که upscayl همه رو داشت :)
برای لینوکس، ویندوز و مک در دسترسه و من توی لینوکس نسخه ی flatpak اش رو نصب کردم
🌐 https://upscayl.org/
ℹ️ https://github.com/upscayl/upscayl
🆔 @MdDaily
برای بزرگ نمایی و افزایش کیفیت وضوح تصاویر دنبال یه ابزار متن باز بودم که نیاز به اینترنت نداشته باشه و رو گرافیک Intel هم کار بکنه که upscayl همه رو داشت :)
برای لینوکس، ویندوز و مک در دسترسه و من توی لینوکس نسخه ی flatpak اش رو نصب کردم
🌐 https://upscayl.org/
ℹ️ https://github.com/upscayl/upscayl
🆔 @MdDaily
❤🔥7👍5🆒1
چرا توی Js موقع استفاده از fetch باید دوبار منتظر بمونیم؟
داشتم کد js میزدم و برام سوال شد چرا موقع استفاده از fetch باید دوبار منتظر موند.
وقتی ما این کد رو داریم:
بعد از اینکه response برگردونده شد باید بتونیم بلادرنگ به .json دسترسی داشته باشیم نه؟ ولی با وجود اینکه پارس کردن جیسون async نیست باید از این کد استفاده کنیم تا promise برنگرده :
چه اتفاقی میوفته؟
طبق مستندات MDN’s article on the Fetch API:
یعنی fetch سریع جواب میده و هدر رو برمیگردونه، ولی ممکنه هنوز همه اطلاعات رو نگرفته باشه.
پس در نتیجه اینطوری میتونیم اول نتیجه درخواست رو بگیریم و اگه نتیجه اون چیزی بود که میخواستیم body رو بگیریم.
کنجکاو بمونید :)
🆔 @MdDaily
داشتم کد js میزدم و برام سوال شد چرا موقع استفاده از fetch باید دوبار منتظر موند.
وقتی ما این کد رو داریم:
// اول منتظر میمونیم
let response = await fetch("/mddaily");
بعد از اینکه response برگردونده شد باید بتونیم بلادرنگ به .json دسترسی داشته باشیم نه؟ ولی با وجود اینکه پارس کردن جیسون async نیست باید از این کد استفاده کنیم تا promise برنگرده :
// بعد هم منتظر میمونیم :)
let myObject = await response.json();
چه اتفاقی میوفته؟
طبق مستندات MDN’s article on the Fetch API:
دستور fetch() یه آدرس اینترنتی میگیره و میره سراغ اون آدرس تا اطلاعات رو بیاره. بعد یه قول میده که به محض اینکه جواب گرفت، حتی اگه جوابش اشتباه باشه، بهمون خبر بده.
یعنی fetch سریع جواب میده و هدر رو برمیگردونه، ولی ممکنه هنوز همه اطلاعات رو نگرفته باشه.
پس در نتیجه اینطوری میتونیم اول نتیجه درخواست رو بگیریم و اگه نتیجه اون چیزی بود که میخواستیم body رو بگیریم.
let response = await fetch("/some-url");
// اینجا،
// 1. جواب اولی که سرور میده رو گرفتیم.
// 2. اما ممکنه هنوز همه اطلاعات رو نگرفته باشیم.
let myObject = await response.json();
// اینجا،
// 1. بقیه اطلاعات رو هم گرفتیم.
// 2. اطلاعات رو به شکل JSON خوندیم.کنجکاو بمونید :)
🆔 @MdDaily
🔥13👍2👌2❤🔥1
یه مقاله با عنوان 3 Lessons from the Smartest Developers I’ve Worked With رو می خوندم و تجربه ی کسی بود که تمام عمر برنامه نویسیش کد ها رو کپی پیست میکرده (داستان آشنا) برای کد هاش تست نمی نوشته و به بازبینی کد هاهم اهیمتی نمیداده (اگه اشک تو چشم هات حلقه زد صبر کن تا بقیش رو بگم ) در نهایت در ادامه ی مسیرش با ادمای جالبی آشنا میشه و چیزهایی که ازشون یاد گرفته رو تواین مقاله میگه. من قرار مهم ترین نکات مقاله رو بگم و یه جورایی تجربه های خودمم بهشون اضافه کنم.
1- اگه خوبشو تجربه نکنی، بدشو نمیشناسی
بریان جنی قبل از اینکه برنامهنویسای حرفه ای رو ببینه، هدفش تو کار خیلی پایین بوده. میگه:
جنی با دان آشنا میشه که از همون اول معلوم بوده این بشر یه چیز دیگهایه. روز اول کار، متفاوت غذا میخورده و بعدش میگه خستهس و میخواد بره خونه بخوابه. فقط یه آدم نابغه میتونه این کارا رو بکنه و اخراج نشه. این آقا تو 40 سالگی از پزشکی میاد سراغ برنامهنویسی. وقتی جنی میبینتش، نزدیک 50 سالش بوده. جنی میگه من سه ساله که برنامهنویس بودم و فکر میکردم دیگه خیلی پرو هستم. اشتباه محض!
دان با جنی کار میکرده و جنی تازه میفهمه چقدر توی کارش جونیوره. این رو من خودم بارها تجربه کردم تا وقتی با آدمایی که ازت بهتر نیستند کار نکنی نمیدانی که چه قدر نمیدانی.
جنی ادامه میده: دان برای کدهایی که مینوشتیم، دان تست هم مینوشت. من تو عمرم تست ننوشته بودم.من حوصلهی این کارا رو نداشتم. فقط میخواستم کار راه بیفته.
دان اصلا با این روش کار کردن من حال نمیکرد. اگه کدی مینوشتم که تست نداشت، ردش میکرد. وقتی کمک میخواستم، جوابم رو نمیداد و میگفت برو خودت پیدا کن. فقط 9 ماه با هم کار کردیم، ولی خیلی چیزها ازش یاد گرفتم. یاد گرفتم چطور کدهام رو تست کنم، ابزارهام رو بهتر بشناسم و همزمان که کار رو پیش میبرم، درست هم انجامش بدم.آخرا شنیدم یه شرکت چند میلیونی زده.
2- بازرس جهنم... یا شاید از بهشت
جنی کسی بوده که کد های کسیو چک نمیکرده چون تیم پر بود از برنامهنویسای حرفه ای. میگفته خب دیگه خودشون چک میکنن دیگه! ولی چند بار به خاطر چک نکردن کد ها نزدیک بوده برنامه خراب بشه. با پارکر اشنا میشه. جنی ازش میپرسه چطوری کد های بقیه رو چک میکنی؟
* اول کد رو اجرا میکرد تا ببینه کار میکنه یا نه. اگه کار نکرد، دیگه وقت تلف نمیکرد.
* خط به خط کد های جدید رو چک میکرد تا بفهمه چیکار داره میکنه!
* هر جا گیر میکرد، از برنامهنویس میپرسید تا مطمئن بشه همه چی رو فهمیده.
* وقتی کد خیلی بزرگ بود، مینشست با برنامهنویس حرف میزد تا همه چی رو روشن کنه.
* همیشه صبح زود کدها رو چک میکرد تا حواسش پرت نشه.
3- لبه تکنولوژری، آره یا نه
جنی با جیمز یه تیمی از توسعه دهنگان رو شروع میکنن به مدیریت کردن. حالا که جنی مدیر مهندسی شده فرصت رو غنیمت میشماره و شروع میکنه یه نقشه ی راه سه ماهه ریختن و بالاخره می تونسته از تمام تکنولوژی ایی استفاده کنه که مدتها بود آرزوی کار باهاشون رو داشته و باید بگم چه قدر این داستان برای خیلی هامون آشناس .
جیمز میاد پیشش و میگه: "این همه کار میکنی برای چی؟" یه عالمه حرف فنی میزنه که فقط بگه من خیلی بروزم و کلی چیز که مثلا بیایم با کوبر ادغام بشیم و از یه ابزار cli خفن استفاده و سایت رو استاتیک کنیم.
جیمز بهش میگه اینا چطوری قرار به اهداف تجاری سه ماهه ما کمک کنه؟ جنی متوجه میشه اصلا به این فکر نکرده بود که کارشون درآمدزایی هم هست! فکر میکرد فقط باید از تکنولوژی جدید استفاده کنه.
جیمز گفت: "ما که اینجا نیستیم که فقط با تکنولوژی بازی کنیم! باید کاری کنیم که پول در بیاریم."
جنی با تیم حرف میزنه تا ببینه واقعا به چی نیاز دارن. میبینه اون همه تکنولوژی جدید اصلا به دردشون نمیخورد. میفهمه که باید بیشتر به فکر نیازهای کسبوکار باشه نه اینکه فقط به فکر تکنولوژی جدید بود.
---
اینکه توی هرکاری الگو هایی داشته باشیم خیلی مهمه. کلی نکات هست که میتونیم یاد بگیریم. میگن اگه تو یه جمع هستی و از همه باهوشتری، اونجا جای تو نیست. آسونتره که اینو بگی تا اینکه انجامش بدی. یه چیزی که از این حرفا یاد گرفتم اینه که باید همیشه دنبال یادگیری چیزای جدید باشیم و تو تیم هایی کار کنیم که ازمون با تجربه ترن. در نهایت بریم تو شرایطی که راحت نیستیم :)
کنجکاو بمونید :)
🆔 @MdDaily
1- اگه خوبشو تجربه نکنی، بدشو نمیشناسی
بریان جنی قبل از اینکه برنامهنویسای حرفه ای رو ببینه، هدفش تو کار خیلی پایین بوده. میگه:
به این فکر نمیکردم که خیلی خوب کار کنم، فقط میخواستم اخراج نشم. ولی بازم نتونستم به این هدفم برسم. آدما یه سری حرفای تکراری میزنن، مثلاً میگن: "روی سیستم من که کار میکنه!"، "نمیدونم چطور کار میکنه، فقط کار میکنه!"، "من فقط کد مینویسم، نمیدونم بیزینس چطوری کار میکنه!"، "به نظر من که اوکیه!" واسه من هم پیش اومده بود که اینجوری حرف بزنم.
جنی با دان آشنا میشه که از همون اول معلوم بوده این بشر یه چیز دیگهایه. روز اول کار، متفاوت غذا میخورده و بعدش میگه خستهس و میخواد بره خونه بخوابه. فقط یه آدم نابغه میتونه این کارا رو بکنه و اخراج نشه. این آقا تو 40 سالگی از پزشکی میاد سراغ برنامهنویسی. وقتی جنی میبینتش، نزدیک 50 سالش بوده. جنی میگه من سه ساله که برنامهنویس بودم و فکر میکردم دیگه خیلی پرو هستم. اشتباه محض!
دان با جنی کار میکرده و جنی تازه میفهمه چقدر توی کارش جونیوره. این رو من خودم بارها تجربه کردم تا وقتی با آدمایی که ازت بهتر نیستند کار نکنی نمیدانی که چه قدر نمیدانی.
جنی ادامه میده: دان برای کدهایی که مینوشتیم، دان تست هم مینوشت. من تو عمرم تست ننوشته بودم.من حوصلهی این کارا رو نداشتم. فقط میخواستم کار راه بیفته.
دان اصلا با این روش کار کردن من حال نمیکرد. اگه کدی مینوشتم که تست نداشت، ردش میکرد. وقتی کمک میخواستم، جوابم رو نمیداد و میگفت برو خودت پیدا کن. فقط 9 ماه با هم کار کردیم، ولی خیلی چیزها ازش یاد گرفتم. یاد گرفتم چطور کدهام رو تست کنم، ابزارهام رو بهتر بشناسم و همزمان که کار رو پیش میبرم، درست هم انجامش بدم.آخرا شنیدم یه شرکت چند میلیونی زده.
2- بازرس جهنم... یا شاید از بهشت
جنی کسی بوده که کد های کسیو چک نمیکرده چون تیم پر بود از برنامهنویسای حرفه ای. میگفته خب دیگه خودشون چک میکنن دیگه! ولی چند بار به خاطر چک نکردن کد ها نزدیک بوده برنامه خراب بشه. با پارکر اشنا میشه. جنی ازش میپرسه چطوری کد های بقیه رو چک میکنی؟
* اول کد رو اجرا میکرد تا ببینه کار میکنه یا نه. اگه کار نکرد، دیگه وقت تلف نمیکرد.
* خط به خط کد های جدید رو چک میکرد تا بفهمه چیکار داره میکنه!
* هر جا گیر میکرد، از برنامهنویس میپرسید تا مطمئن بشه همه چی رو فهمیده.
* وقتی کد خیلی بزرگ بود، مینشست با برنامهنویس حرف میزد تا همه چی رو روشن کنه.
* همیشه صبح زود کدها رو چک میکرد تا حواسش پرت نشه.
3- لبه تکنولوژری، آره یا نه
جنی با جیمز یه تیمی از توسعه دهنگان رو شروع میکنن به مدیریت کردن. حالا که جنی مدیر مهندسی شده فرصت رو غنیمت میشماره و شروع میکنه یه نقشه ی راه سه ماهه ریختن و بالاخره می تونسته از تمام تکنولوژی ایی استفاده کنه که مدتها بود آرزوی کار باهاشون رو داشته و باید بگم چه قدر این داستان برای خیلی هامون آشناس .
جیمز میاد پیشش و میگه: "این همه کار میکنی برای چی؟" یه عالمه حرف فنی میزنه که فقط بگه من خیلی بروزم و کلی چیز که مثلا بیایم با کوبر ادغام بشیم و از یه ابزار cli خفن استفاده و سایت رو استاتیک کنیم.
جیمز بهش میگه اینا چطوری قرار به اهداف تجاری سه ماهه ما کمک کنه؟ جنی متوجه میشه اصلا به این فکر نکرده بود که کارشون درآمدزایی هم هست! فکر میکرد فقط باید از تکنولوژی جدید استفاده کنه.
جیمز گفت: "ما که اینجا نیستیم که فقط با تکنولوژی بازی کنیم! باید کاری کنیم که پول در بیاریم."
جنی با تیم حرف میزنه تا ببینه واقعا به چی نیاز دارن. میبینه اون همه تکنولوژی جدید اصلا به دردشون نمیخورد. میفهمه که باید بیشتر به فکر نیازهای کسبوکار باشه نه اینکه فقط به فکر تکنولوژی جدید بود.
---
اینکه توی هرکاری الگو هایی داشته باشیم خیلی مهمه. کلی نکات هست که میتونیم یاد بگیریم. میگن اگه تو یه جمع هستی و از همه باهوشتری، اونجا جای تو نیست. آسونتره که اینو بگی تا اینکه انجامش بدی. یه چیزی که از این حرفا یاد گرفتم اینه که باید همیشه دنبال یادگیری چیزای جدید باشیم و تو تیم هایی کار کنیم که ازمون با تجربه ترن. در نهایت بریم تو شرایطی که راحت نیستیم :)
کنجکاو بمونید :)
🆔 @MdDaily
🔥14✍4👍2
#شاید_موقت
رفتم بانک سپه حساب باز کنم، طرف گفت ما دیگه حساب فیزیکی باز نمیکنیم. باید بری مجازی باز کنی
گفتم اوکی. اپلیکیشن بانک امید رو نصب کردم و از لحاظ ui و ux یه شاهکاری زده بودند که مسئول شعبه هم گردن نمیگرفت.
بعد از اینکه مراحل رو رد کردم و موقع افتتاح حساب شد، گفت خب ببین احراز هویتت رو که آنلاین انجام دادیم، کارمزدم که باید بدی و هزینه ی پستم هست :)))
یه فاکتور صادر کرد. گفتیم اقا اینم اوکی بریم مرحله بعدی. هرچی صبر کردم دیدم خبری از افتتاح حساب نیست. به مسئول شعبه گفتم پس چیشد؟ زنگ زد پیگیری کرد گفت سامانه قطع شده، صبر کن حسابتو دستی بسازیم😭
بعد از کاغذ بازی های بانکی و گرفتن دوباره ی فی و کارمزد یه حساب فیزیکی ساخت تا حساب دیجیتال فعال شد :)))))
احساس میکنم ازم دزدی شده 😂😂😂
رفتم بانک سپه حساب باز کنم، طرف گفت ما دیگه حساب فیزیکی باز نمیکنیم. باید بری مجازی باز کنی
گفتم اوکی. اپلیکیشن بانک امید رو نصب کردم و از لحاظ ui و ux یه شاهکاری زده بودند که مسئول شعبه هم گردن نمیگرفت.
بعد از اینکه مراحل رو رد کردم و موقع افتتاح حساب شد، گفت خب ببین احراز هویتت رو که آنلاین انجام دادیم، کارمزدم که باید بدی و هزینه ی پستم هست :)))
یه فاکتور صادر کرد. گفتیم اقا اینم اوکی بریم مرحله بعدی. هرچی صبر کردم دیدم خبری از افتتاح حساب نیست. به مسئول شعبه گفتم پس چیشد؟ زنگ زد پیگیری کرد گفت سامانه قطع شده، صبر کن حسابتو دستی بسازیم😭
بعد از کاغذ بازی های بانکی و گرفتن دوباره ی فی و کارمزد یه حساب فیزیکی ساخت تا حساب دیجیتال فعال شد :)))))
احساس میکنم ازم دزدی شده 😂😂😂
🤣24😁2👍1
درود خدمت همگی من امیر هستم و امروز قراره درباره الستیک سرچ صحبت کنیم و ببینیم اصلا چی هست
الستیک سرچ یک ابزار سرچ و نگه داری داده است که بر اساس Apache Lucene
(من یه توضیح ریزی بدم چیه اینم یه ابزار و موتور سرچ دادس که متن باز و بر پایه زبان برنامه نویسی جاوا نوشته شده)
ساخته شده یک ابزار full text search هست یعنی میتونه جستجوی های حتی با یک کاراکتر انجام بده که برای سایت های مثل دیوار که کوچیکترین تغییر کمک میکنه بهشون در پیشنهاد کردن کمک کنه
ویژگی هایی که باعث میشود شما بخواهید از الستیک سرچ استفاده کنید
⭕️ هر دو نوع دیتا sql و nosql را ساپورت میکند همچنین تمام فرمت های فایل ها را ساپورت میکنه ولی fluentd and logstash به صورت خودکار ان را به json تبدیل میکنه
(پ.ن داده های sql داده های هستند که ساختار بندی و جدول بندی دارن اگه بخوام به زبان ساده بگم
داده ها یه شکلی هست که میشه دسته بندیشون کرد ولی داده های nosql از هردری سخنی هستن و نمیشه دسته بندی خاصی براشون گذاشت که متد های خاص خودشو داره در اینده ای نه چندان دور درباره جفتش صحبت میکنم اگه دوست داشتی)
⭕️ همچنین میتوانیم ۴ نوع (phase (hot warm cold freeze البته فاز فرییز الان حذف شده که ما میتوانیم این فازهارو به نودهامون اضافه کنیم (پ.ن بزارید بگم اصلا چی هستش نود ببینید ) خب اینا اصلا به چه درد میخورن و چی هستن فاز hot قابلیت read and write باهم دارد و برای سرور هایی که هارد SSD دارن خیلی خوبه ولی فاز های دیگر فقط برای read هستن ولی لولهاشون فرق داره و برای جاهایی که از هارد HDD استفاده میکنن خیلی خوبه که به منظور دخیره داده و خواندن از روی ان استفاده میکنیم
⭕️ قابلیت بسیار اسان اد کردن سرور به صورت ریسورس اضافه تنها در ۳۰ ثانیه شما کانفیگ الستیک سرچ کپی میکنید در قسمت دیسکاوری آیپی سور جدید میدهید و اکنون شما سرور جدیدی اضافه کردید
⭕️همونطور که پیش تر گفتم قابلیت full-text search را دارد و در سایت های خرید مانند دیوار دیجیکالا ترب میتواند استفاده شود( این مبنی بر این نیست که استفاده میکنند تا انجایی که من میدونم دیوار استفاده میکنند )
🆔 @MdDaily
الستیک سرچ یک ابزار سرچ و نگه داری داده است که بر اساس Apache Lucene
(من یه توضیح ریزی بدم چیه اینم یه ابزار و موتور سرچ دادس که متن باز و بر پایه زبان برنامه نویسی جاوا نوشته شده)
ساخته شده یک ابزار full text search هست یعنی میتونه جستجوی های حتی با یک کاراکتر انجام بده که برای سایت های مثل دیوار که کوچیکترین تغییر کمک میکنه بهشون در پیشنهاد کردن کمک کنه
ویژگی هایی که باعث میشود شما بخواهید از الستیک سرچ استفاده کنید
⭕️ هر دو نوع دیتا sql و nosql را ساپورت میکند همچنین تمام فرمت های فایل ها را ساپورت میکنه ولی fluentd and logstash به صورت خودکار ان را به json تبدیل میکنه
(پ.ن داده های sql داده های هستند که ساختار بندی و جدول بندی دارن اگه بخوام به زبان ساده بگم
داده ها یه شکلی هست که میشه دسته بندیشون کرد ولی داده های nosql از هردری سخنی هستن و نمیشه دسته بندی خاصی براشون گذاشت که متد های خاص خودشو داره در اینده ای نه چندان دور درباره جفتش صحبت میکنم اگه دوست داشتی)
⭕️ همچنین میتوانیم ۴ نوع (phase (hot warm cold freeze البته فاز فرییز الان حذف شده که ما میتوانیم این فازهارو به نودهامون اضافه کنیم (پ.ن بزارید بگم اصلا چی هستش نود ببینید ) خب اینا اصلا به چه درد میخورن و چی هستن فاز hot قابلیت read and write باهم دارد و برای سرور هایی که هارد SSD دارن خیلی خوبه ولی فاز های دیگر فقط برای read هستن ولی لولهاشون فرق داره و برای جاهایی که از هارد HDD استفاده میکنن خیلی خوبه که به منظور دخیره داده و خواندن از روی ان استفاده میکنیم
⭕️ قابلیت بسیار اسان اد کردن سرور به صورت ریسورس اضافه تنها در ۳۰ ثانیه شما کانفیگ الستیک سرچ کپی میکنید در قسمت دیسکاوری آیپی سور جدید میدهید و اکنون شما سرور جدیدی اضافه کردید
⭕️همونطور که پیش تر گفتم قابلیت full-text search را دارد و در سایت های خرید مانند دیوار دیجیکالا ترب میتواند استفاده شود( این مبنی بر این نیست که استفاده میکنند تا انجایی که من میدونم دیوار استفاده میکنند )
🆔 @MdDaily
⚡7❤6✍1👍1
اما خب طرز کار الاستیک سرچ به چه صورتی هستش ؟
قبل از رفتن سراغ این قسمت چند مورد تاپیک خدمتون معرفی میکنم و در اخر میگم چجوری این ها به هم متصل میشوند
خب تاپیک هایی که باید بدونیم ایناس
الستیک سرچ موتورجستجو و کلا قلب تپنده ی این محصول است و همه چیز هستش (به همین راحتی)
کیبانا رابط گرافیکی الستیک سرچ برای استفاده راحت تر هستش و خیلی راحت استفاده ازش اگه الستیک سرچ بلد باشید
فلوئنت دی و لاگ استش هستش که بخوام خودمونی بگم نقش رابط داره که لاگ از کف سیستم جمع میکنه و به الستیک سرچ میفرسته
خب حالا در عمل ما میخواهیم لاگ های بخشی از سیستم جمع کنیم چکار انجام میدیم؟
اول از همه چند سرور اماده میکنیم و در کانیفیگ هایشان ip بقیه سرورهارو و میزاریم سپس نوع نود های که توضیح خواهم داد میزاریم مهمترین نوع نود همان master and replica (یعنی یک سرور نقش اصلی و پردازش دارد و بقیه کپی دیتا از روی اون هستن )هستش بعد از اون ادرس الاستیک سرچ به fluentd میدهیم و کانفیگ اون را هم درست میکنیم که نمونه هاشو میزارم و در نهایت کانفیگ kibana ست خواهیم کرد
خب مهمترین قسمت شاید میتونم بگم fluentd یا ابزار دیگه ای که مثل همین هستش logstash هست چون ۲ نوع کانفیگ داره یکی کانفیگ جمع اوری لاگ و یکی کانفیگ ارسال لاگ ولی همگی در فایلی به عنوان fluent.conf هستند
این یک مثال ساده از جمع اوری لاگ nginx ارسال ان به الستیک سرچ هست
در قسمت source تنطیمات مربوط به لاگ nginx را گذاشتیم و در قسمت match تنظیمات مربوط به elasticsearch(مثلا یکیشن اینه چون جفتش روی یه سرور روی لوکال هاست گذاشتم یا اسم ایندکس هامو اونجا گذاشتم)
در این مثال لاگ ها از nginx جمع شده و به الستیک سرچ ارسال میشوند
خب حالا یه نکته ریز هم اشاره کنم که چرا بجای logstash باید از fluentd استفاده کنیم
اول از همه fluentd رم بسیار کمتری مصرف میکنه بخاطر سیستمی که داره و همچنین برای سیستم روتتینگ ایونت هاش از تگ استفاده میکنه که خیلی کمک بهتری به سبک شدن پروسه میکنه ولی مشکلی که داره اینه کانفیگور کردنش خیلی سخت تره از logstash
پ.ن : چند تا تعربف هم میگم ولی چون اهمیت کمتری دارن این زیر میگم این تعریف index که اولیش هست تو تمام دیتا بیس ها و ابزارها یکی خب اولیش index که دقیقا مثل یه پوشه هستش که داخلش یکسری مدرک احتمالا کارنامه هاتون شما یه جا نگه میدارید اون یه جا index داخل دیتا بیس هم به همین صورت
چیزی که احتمالا دیدین پورت بخوام به صورت خیلی ساده بگم پورت ها دوروازه هایی هستن که ورود و خروج کنترل میکنن اینم به زبون ساده گفتیم
لاگ هم یکسری داده درباره فعل و انفعالات بخش خاصی از سیستم که ۳ تا پارامتر داره کی لاگو انداخته چرا لاگو انداخته چقدر لاگی که انداخته مهم هستش
در آخر هم بگم چرا اصلا رفتم سراغ الستیک سرچ اونجایی که هستیم خیلی مهم اون بحث full text. سرچ گه خدمتتون گفتم و دلیل اصلیش این بود ولی خب قابلیت هایی که گفتم ببینید و مقایسه کنید برای کاربری خودتون یه چیزی هم که در دنیای کامپیوتر هستش اینه که هیچ محصول بد و خوبی وجود نداره صرفا باید ببینی تو به کدومش نیاز داری!
🆔 @MdDaily
قبل از رفتن سراغ این قسمت چند مورد تاپیک خدمتون معرفی میکنم و در اخر میگم چجوری این ها به هم متصل میشوند
خب تاپیک هایی که باید بدونیم ایناس
الستیک سرچ موتورجستجو و کلا قلب تپنده ی این محصول است و همه چیز هستش (به همین راحتی)
کیبانا رابط گرافیکی الستیک سرچ برای استفاده راحت تر هستش و خیلی راحت استفاده ازش اگه الستیک سرچ بلد باشید
فلوئنت دی و لاگ استش هستش که بخوام خودمونی بگم نقش رابط داره که لاگ از کف سیستم جمع میکنه و به الستیک سرچ میفرسته
خب حالا در عمل ما میخواهیم لاگ های بخشی از سیستم جمع کنیم چکار انجام میدیم؟
اول از همه چند سرور اماده میکنیم و در کانیفیگ هایشان ip بقیه سرورهارو و میزاریم سپس نوع نود های که توضیح خواهم داد میزاریم مهمترین نوع نود همان master and replica (یعنی یک سرور نقش اصلی و پردازش دارد و بقیه کپی دیتا از روی اون هستن )هستش بعد از اون ادرس الاستیک سرچ به fluentd میدهیم و کانفیگ اون را هم درست میکنیم که نمونه هاشو میزارم و در نهایت کانفیگ kibana ست خواهیم کرد
خب مهمترین قسمت شاید میتونم بگم fluentd یا ابزار دیگه ای که مثل همین هستش logstash هست چون ۲ نوع کانفیگ داره یکی کانفیگ جمع اوری لاگ و یکی کانفیگ ارسال لاگ ولی همگی در فایلی به عنوان fluent.conf هستند
این یک مثال ساده از جمع اوری لاگ nginx ارسال ان به الستیک سرچ هست
<source>
@type tail
path /var/log/nginx/access.log
pos_file /var/log/td-agent/httpd-access.log.pos
tag nginx.access
format nginx
</source>
<match **>
@type elasticsearch
logstash_format true
logstash_prefix "nginx"
host "localhost"
port 9200
index_name "ngnix"
</match>در قسمت source تنطیمات مربوط به لاگ nginx را گذاشتیم و در قسمت match تنظیمات مربوط به elasticsearch(مثلا یکیشن اینه چون جفتش روی یه سرور روی لوکال هاست گذاشتم یا اسم ایندکس هامو اونجا گذاشتم)
در این مثال لاگ ها از nginx جمع شده و به الستیک سرچ ارسال میشوند
خب حالا یه نکته ریز هم اشاره کنم که چرا بجای logstash باید از fluentd استفاده کنیم
اول از همه fluentd رم بسیار کمتری مصرف میکنه بخاطر سیستمی که داره و همچنین برای سیستم روتتینگ ایونت هاش از تگ استفاده میکنه که خیلی کمک بهتری به سبک شدن پروسه میکنه ولی مشکلی که داره اینه کانفیگور کردنش خیلی سخت تره از logstash
پ.ن : چند تا تعربف هم میگم ولی چون اهمیت کمتری دارن این زیر میگم این تعریف index که اولیش هست تو تمام دیتا بیس ها و ابزارها یکی خب اولیش index که دقیقا مثل یه پوشه هستش که داخلش یکسری مدرک احتمالا کارنامه هاتون شما یه جا نگه میدارید اون یه جا index داخل دیتا بیس هم به همین صورت
چیزی که احتمالا دیدین پورت بخوام به صورت خیلی ساده بگم پورت ها دوروازه هایی هستن که ورود و خروج کنترل میکنن اینم به زبون ساده گفتیم
لاگ هم یکسری داده درباره فعل و انفعالات بخش خاصی از سیستم که ۳ تا پارامتر داره کی لاگو انداخته چرا لاگو انداخته چقدر لاگی که انداخته مهم هستش
در آخر هم بگم چرا اصلا رفتم سراغ الستیک سرچ اونجایی که هستیم خیلی مهم اون بحث full text. سرچ گه خدمتتون گفتم و دلیل اصلیش این بود ولی خب قابلیت هایی که گفتم ببینید و مقایسه کنید برای کاربری خودتون یه چیزی هم که در دنیای کامپیوتر هستش اینه که هیچ محصول بد و خوبی وجود نداره صرفا باید ببینی تو به کدومش نیاز داری!
🆔 @MdDaily
✍7❤5👍3
دو محصول WebStorm و Rider جت برینز رایگان شدند :)
به تازگی شرکت jetbrains تو یه توئیت و مقاله ای که منتشر کرد گفته که این دو محصول برای اهداف غیر تجاری مثل یادگیری و پروژه های اپن سورس رایگان شدند.
پ ن:
احتمالا این کارا برای رقابت با vscode انجام داده چون با رایگان کردن webstorm میتونه خیلی از فرانت کار ها را به خودش جذب کنه.
اگه خواستید از محصولات این شرکت استفاده کنید پیشنهاد میکنم از jetbrians toolbox برای نصب و مدیریتشون استفاده کنید:
🔗 https://www.jetbrains.com/toolbox-app/
🌐 لینک مقاله
🆔 @MdDaily
به تازگی شرکت jetbrains تو یه توئیت و مقاله ای که منتشر کرد گفته که این دو محصول برای اهداف غیر تجاری مثل یادگیری و پروژه های اپن سورس رایگان شدند.
پ ن:
احتمالا این کارا برای رقابت با vscode انجام داده چون با رایگان کردن webstorm میتونه خیلی از فرانت کار ها را به خودش جذب کنه.
اگه خواستید از محصولات این شرکت استفاده کنید پیشنهاد میکنم از jetbrians toolbox برای نصب و مدیریتشون استفاده کنید:
🔗 https://www.jetbrains.com/toolbox-app/
🌐 لینک مقاله
🆔 @MdDaily
🔥8👍2
Forwarded from Abrha
abrh.ir/isfenjoy
📣@abrhacom
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3❤1