cookie

Ми використовуємо файли cookie для покращення вашого досвіду перегляду. Натиснувши «Прийняти все», ви погоджуєтеся на використання файлів cookie.

avatar

Geniuses Group

گروهی هدفمند و انتفاعی برای توسعه انواع پروژه ها در بخش های مختلف اجتماع با رویکرد استفاده از فناوری های نوین برای داشتن بالاترین سطح پایداری https://geniusess.group Github: https://github.com/GeniusesGroup/ Discord: https://discord.gg/BZg2Xkmwku

Більше
Рекламні дописи
328
Підписники
Немає даних24 години
Немає даних7 днів
Немає даних30 днів

Триває завантаження даних...

Приріст підписників

Триває завантаження даних...

مفهوم (رویکرد، الگو) zero allocation به چه چیزی اشاره می کند؟ بدفهمی این رویکرد در کجا نهفته شده است؟ خیلی پیش میاد برای خود من که جاهای مختلف به این مفهوم اشاره بشه، ولی درک درستی از آن وجود نداشته باشه در اون گفت و گو (نمونه)، که منجر به ایجاد انواع خطاها شناختی و در نهایت خطاهای تصمیم سازی می کنه. اولین اشتباهی که رایج هست این هست که یک بد فهمی زیاد حول دو الگوی zero allocation و Object pool pattern وجود دارد. به صورت لغوی هم اگر بررسی کنیم zero به معنای دقیقا هیچ می باشد نه حتی یک تخصیص. پس قطعا reuse کردن یک مقدار allocate شده (عموما در بخشی به ساختار داده heap) در استفاده های تکراری با نگهداری آدرس مقدار تخصیص داده شده در یک pool را به عنوان zero allocation نباید در نظر گرفته شود. این رویکرد همانطور که در بالا نام برده شد، به نام Object pool pattern شناخته می شود و استفاده از آن شرایط خاصی را طلب می کند. لذا اگر به خوبی مفهوم #memory_management تسلط داشته باشیم براحتی می تونیم این اشتباه (یکی دانستن این دو الگو) را متوجه بشیم. قبلا هم بارها تاکید کردیم که بهتره از تفکرات خوبی که در چندین دهه بوجود آمده استفاده کنیم و از گمانه زنی های بی مورد در خصوص اشاره به مفاهیم قدیمی دوری کنیم. مخصوصا مفاهیمی که حول OOP وجود دارد بدلیل غنای فکری نه به صورت نحوه پیاده سازی در زبان های مدعی، بلکه به استناد مستندات اکثرا دانشگاهی، می توانند مرجع و خوراک فکری خوبی برای ما باشند. حال چرایی ادعای کذب کتابخانه هایی مثل fasthttp در زبان Go را متوجه می شویم. همین اول بگم سوتفاهم پیش نیاد که این کتابخانه یا زبان بد هستند، اصلا اینجوری نیست و ما نمی خوایم حتی 1% این حس را منتقل کنیم. فقط منظور این هست که استفاده از رویکرد pool در یک کتابخانه مثل همین fasthttp باعث ادعای دروغین zero allocation نباید بشود که گمراهی به همراه بیاورد. نکته مهم که باید همیشه یادمون باشه که به object life cycle باید دقت کنیم و بدون در نظر گرفتن رویکرد pool به توسعه بپردازیم. چرایی اهمیت این قضیه، باز نمونه عدم دقتش میشه کتابخانه fasthttp که بدلیل allocate کردن زیاد برای یک object که قرار reuse بشه که باعث نیاز به reinit کردن زیاد خواهد داشت. و می دونیم که وقتی allocate های ما زیاد باشه یعنی درگیری بیشتر رم بجای کش های cpu که قطعا باعث افزایش مصرف cpu با نرخ کارکرد پایین به دلیل نیاز مبرم به اجرای دستورات مقداردهی رم. لذا هر چه ما کمتر از runtime memory management استفاده کنیم بهره وری نرم افزار به شدت بالاتر خواهد بود، نه در حد چند درصد بلکه چند صد درصد. نمونه های زیادی در زبان هایی با کنترل زیاد روی memory management مثل C یا Rust وجود داره ولی عموما در زبان های مثل Go به جز راهکارهای به شدت unsafe به هیچ عنوان امکان پیاده سازی این مفهوم zero allocation وجود ندارد. https://github.com/rikvdh/zabuffer https://github.com/nrc/zero/blob/master/src/lib.rs قطعا می دونیم نمیشه توی یک پست چند خطی همه این موضوعات را باز کنیم و قصد ارائه عمق موارد، مثل همیشه نیست و صرفا #تلنگر_ذهنی و ایجاد پرسش هدف پست ها هست. و قطعا قصد ساده انگاری این موضوع را هم نداریم و می دانیم در نرم افزارهای چند نخ (thread) آن هم در user space قطعا مفاهیمی مثل stack و heap و alloc به شدت پر جزییات تر از این حرف ها، در چند خط هست. در نهایت بیاییم با استفاده دقیق تر از کلمات، جامعه تخصصی حرفه ای تری را شکل بدهیم که نخواهیم سر پایه ای ترین موضوع یعنی توافق روی معنا و مفهوم کلمات ساعت ها وقت یکدیگر را بگیریم. هیچ فرصتی را برای مطالعه حتی روی کلماتی که فکر می کنیم خیلی بدیهی هستند را از دست ندهیم. (تلنگر قوی حتی به خودم)
Показати все...
Generator_template_6.mkv18.39 MB
Generator_template_5.mkv19.89 MB
Generator_template_4.mkv14.15 MB
Generator_template_3.mkv26.79 MB
Generator_template_2.mkv39.47 MB
ویدئوهای ۲ تا ۶ - تمرین پیاده‌سازی جنریتور با استفاده از پکیج template گو ...
Показати все...
درود خدمت اساتید، همکاران و دوستان عزیز، «تمرین»‌های یک نوآموز، برای پاسخ‌دادن به نیازمندی توسعه دامنه‌های مشترک (به همراه عملیات CRUD + ولیدیشن + data sanitization) به‌اتمام رسید. این نیازمندی گام صفر جهت توسعه یک وب‌اپلیکیشن erp مالی خواهد بود. سپاسگزار خواهم بود، ایرادات رو مطرح بفرمائید تا اصلاح بشه. ریپو روی گیت‌هاب، آدرس زیر دردسترس خواهد بود: github.com/ar-mokhtari/orginfo/ −−− ویدئوی ۲ تا ۶ هم جهت بررسی اساتید تقدیم می‌شه: ارادتمند ——————————— نگارنده : ‌ علیرضا مختاری گرکانی
Показати все...
GitHub - ar-mokhtari/orginfo: Organization information software

Organization information software. Contribute to ar-mokhtari/orginfo development by creating an account on GitHub.

یادگیری و استفاده از مفاهیم پیرامون OOP در اکثر زبان های برنامه نویسی برای توسعه دهنده ها مفید هست. همانگونه که در این نظرسنجی (اشاره به اصل abstraction یعنی محدودسازی دسترسی ها) نمود پیدا کرد، اکثریت (74%) مشارکت کنندگان اهمیت وجود قواعد در توسعه را قبول داریم. به جز چند اصل (principle) پیشنهادی در OOP ، یادگیری و بکارگیری دیگر اصول (همراه با خود 4 اصل معروف به design pattern ها هستند) در توسعه در اکثرا زبان های برنامه نویسی حتی زبان هایی مانند C یا زبان های Functional مثل Erlang، می تونه خیلی کمک کننده باشه. موارد نه خیلی زیاد و نه خیلی کم هستند ولی بعضی ها کمتر شناخته شده هستند مثل object life cycle. باید دقت کنیم اگر سینتکس زبانی انتخابی ما به صورت مستقیم از این مفاهیم پشتیبانی می کند، نباید سعی در پوشش به صورت غیر مستقیم روی بیاوریم. زیاد دیده میشه مثلا در زبانی مثل Go (مخصوصا چارچوب های پرطرفدارش مثل gin و echo) که از روش "متد" پشتیبانی میکنه مفهوم encapsulation به صورت غیر صحیح با توابع ساده و استفاده اشتباه از مفهوم پکیچ، پیاده سازی انجام میشه. هر چند حتی در زبان هایی مانند C که مستقیم از مفهوم های OOP مثل encapsulation (که عموما با تعریف متد در زبان ها نمود عینی پیدا می کنند) پشتیبانی نمی شود هم می توان به این مهم دست یافت و حتی از قدیم با استفاده از نام گذاری های متفاوتی مانند single responsibility و روش های دیگه وجود داشته اند که سعی در توسعه با خوانایی بالاتر داشتند. ما به عنوان best practice در توسعه سه متد پیش فرض برای اکثر ساختارهامون در زبان گو تعریف می کنیم و این سه متد Init و Reinit و Deinit هستند، که برگرفته از همین مفهوم object life cycle هست. - متد Init وظیفه عملیات مقداردهی را دارد. یعنی هر عملیاتی که قبل از فراخوانی دیگر وظیفه ها باید انجام شود. - متد Reinit وظیفه آماده سازی ساختار برای استفاده مجدد را دارد، مثلا فرض بگیریم هزینه ساخت و مقدار دهی اولیه از نگهداری یک ساختار آماده در یک pool کمتر هست، لذا مصرف این متد فقط محدود به بررسی هزینه مربوطه هست. در خیلی از موارد مشاهده شده بدون بررسی دقیق هزینه دوباره مقدار دهی از هزینه آزادسازی منابع بیشتر هست، چون یادمان باشد ما برای استفاده مجدد حتما مراقب همه سناریوها خرابی فرآیند بدلیل نشتی اطلاعات از فرآیند قبلی باشیم. - متد Deinit هم وظیفه انجام کارهای باقی ماننده قبل از آزادسازی منابع به عهده دارد. باید اشاره کنیم این مفهوم object life cycle برگرفته از اصل encapsulation هست که میگه تمام فیلدها و رفتارها یک ساختار باید بتونه با هم در هر جایی منتقل (جابجا) بشه و دسترسی به فیلدها و متدهاش کاملا مشخص باشه. فقط اشاره کنیم اسم هایی که در زیر آمده، در زبان ها و منابع مختلف می تونه متفاوت باشه ولی با توجه به بررسی نگارنده بنظر میرسه بهترین ترکیب استفاده از نام ها این موارد می باشند. و اینکه فرض کنترل مموری با الگوریتم reference counting گذاشته شده ولی قطعا روش های دیگه هم وجود داره و به دید یک نمونه بهش نگاه کنید allocates » initializes » [increment-reference] » use » [decrement-reference] » [re-initializes» [increment-reference] » use » [decrement-reference]] » de-initializes » de-allocates یک نکته حائز اهمیت در این حین اینه که اشتباها بخشی از رفتار یک ساختار را با توجه به الگوهای طراحی دیگر مانند factory یا builder یا حتی singleton به تابع هایی خارج از ساختار منتقل می کنند. مثلا موضوع مقدار دهی اولیه بجای بودن در متد Init و فراخوانی توسط تابع New(*DesireStructureName) ،درون این تابع خارج از اسکوپ ساختار، پیاده سازی انجام میشود. این موضوع حتی در کتابخانه های الحاقی و رسمی به زبان هایی مانند Go به وفور دیده میشود که باعث کاهش کیفیت خوانایی کدها می شود. نمود عینی این موضوع در قانون گذاری جوامع انسانی نیز مشاهده می شود. مثلا بجای اصلاح یک قانون مشخص درون پکیچ خود قانون، قانون گذاران بدون توجه به اضافه شدن پیچیدگی های اجرای قانون، اصلاح بخشی را درون یک پکیچ قانونی دیگر انجام می دهند. مثلا نحوه رفتار مالیاتی درون قوانین توسعه ای دوره ای ایران به وفور دیده می شود! باز مثل همیشه هدف صرفا #تلنگر_ذهنی هست و فقط خواستم یادآوری کنم اگر به اشتباه میگن مثلا زبان Go یا C یا ... یک زبان OOP نیست، تنبلی نکنیم و سعی کنیم در این بخش هم مطالعه کنیم و هم اصول و مفاهیم خوبی که در طی سالیان (بیش از 60 سالش) به واسطه تجربه در دیگر زبان های برنامه نویسی بوجود اومده را با کمی تفکر و تامل درون توسعه استفاده کنیم. و یادمون نره یادگیری این مفاهیم اصلا ربط مستقیم به زبان ها نداره و از منابع معتبر استفاده کنیم. (ادامه برای ذکر یک مثال در کامنت)
Показати все...
Object-oriented programming

OOP (Object-oriented programming) is a programming paradigm based on the concept of "objects", which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods).

🖤🥀 شرم‌تان باد ای خداوندان قدرت! بس کنید! بس کنید از این همه #ظلم و قساوت، بس کنید! ای نگهبانان #آزادی! نگهداران #صلح! ای جهان را لطف‌تان تا قعر دوزخ رهنمون! سرب داغ است این که می‌بارید بر دل‌های مردم، سرب داغ! موج خون است این که می‌رانید بر آن کشتی خودکامگی را موج خون! گر نه کورید و نه کر، گر مسلسل‌های تان یک لحظه ساکت می‌شوند؛ بشنوید و بنگرید: بشنوید این "وایِ" مادرهای جان‌آزرده است، کاندرین شب‌های وحشت سوگواری می‌کنند! بشنوید این بانگ فرزندان مادر مرده است؛ کز ستم‌های شما هر گوشه زاری می کنند. بنگرید این کشتزاران را، که مزدوران‌تان روز و شب، با خون مردم، آبیاری می‌کنند! بنگرید این خلق عالم را، که دندان بر جگر، دم‌به‌دم بیدادتان را، بردباری می کنند! دست ها از دست‌‌تان ای سنگ چشمان، بر خداست گرچه می‌دانم، آنچه بیداری ندارد، خواب مرگ بی گناهان است و وجدان شماست! با تمام اشکهایم، باز، -نومیدانه- خواهش می‌کنم: ‌ بس کنید! بس کنید! فکر مادرهای دلواپس کنید. رحم بر این غنچه‌های نازک نورس کنید. بس کنید! زنده یاد «فریدون مشیری» #آرزوی همیشگی ما، دستیابی به #آزادی، #صلح و افزایش #کیفیت_زندگی
Показати все...
درود به همه مخاطبین گرامی گاهی اوقات بعد از توسعه یک‌راهکار (چارچوب توسعه)، نیاز هست که اون توسعه برای مدل‌های بیشتر و مشابه، پیاده‌سازی بشه، به‌عنوان مثال شما عملیات CRUD (Create, Read, Update, Delete) رو برای اکثر دامنه‌هایی که نیاز به نگهداری داده در پایگاه داده رو دارند، پیاده‌سازی می‌کنید. اگر ده‌ها دامنه مشابه رو در دستورکار داشته باشید، بطور حتم، کپی و جایگزین کردن نام دامنه‌ها بهتر از دوباره‌نویسی خواهد بود، اما روش بهتر استفاده از templateها هست، در لغت template به‌معنی «قالب» و  اشاره به نیازمندیِ تکثیر متن هست که در زبان «گو»، درحال‌حاضر در دو قالب text و ‌html توسط پکیج رسمی، ارائه می‌شه، ویدئو‌یی که ارائه شده، یک تمرین برای پیاده‌سازی این پکیج با تعریف یک سناریوی نمونه هست که امیدوارم مفید باشه، خوشحال می‌شم اشکالات‌ش رو اشاره کنید و اگر تجربه کار باهاش رو دارید، جهت استفاده علاقه‌مندان، مشارکت بفرمائید. ——————————— نگارنده : ‌ علیرضا مختاری گرکانی
Показати все...
generator.mkv18.17 MB
generator.mkv18.17 MB
generator.mkv18.17 MB
درود به همه مخاطبین گرامی گاهی اوقات بعد از توسعه یک‌راهکار (چارچوب توسعه)، نیاز هست که اون توسعه برای مدل‌های بیشتر و مشابه، پیاده‌سازی بشه، به‌عنوان مثال شما عملیات CRUD (Create, Read, Update, Delete) رو برای اکثر دامنه‌هایی که نیاز به نگهداری داده در پایگاه داده رو دارند، پیاده‌سازی می‌کنید. اگر ده‌ها دامنه مشابه رو در دستورکار داشته باشید، بطور حتم، کپی و جایگزین کردن نام دامنه‌ها بهتر از دوباره‌نویسی خواهد بود، اما روش بهتر استفاده از templateها هست، در لغت template به‌معنی «قالب» و اشاره به نیازمندیِ تکثیر متن هست که در زبان «گو»، درحال‌حاضر در دو قالب text و ‌html توسط پکیج رسمی، ارائه می‌شه، ویدئو‌یی که ارائه شده، یک تمرین برای پیاده‌سازی این پکیج با تعریف یک سناریوی نمونه هست که امیدوارم مفید باشه، خوشحال می‌شم اشکالات‌ش رو اشاره کنید و اگر تجربه کار باهاش رو دارید، جهت استفاده علاقه‌مندان، مشارکت بفرمائید. ——————————— نگارنده : ‌ علیرضا مختاری گرکانی
Показати все...
Alireza Mokhtari G

Оберіть інший тариф

На вашому тарифі доступна аналітика тільки для 5 каналів. Щоб отримати більше — оберіть інший тариф.