✅ بجای کد نویس بودن، برنامه نویس باشید!
بعضی از مطالبی که پست میکنم. شاید اینطور به نظر بیاد که ربطی به کانال جنگولرن ندارن
اما قرار نیست ما کدنویس باشیم. قراره برنامه نویس باشیم و حتی فراتر از برنامه نویس!!!
مطلب زیر رو بخونید. تفاوت کد نویسی و برنامه نویسی رو تقریبا گفته:
https://roocket.ir/articles/programming-or-coding
بعضی از مطالبی که پست میکنم. شاید اینطور به نظر بیاد که ربطی به کانال جنگولرن ندارن
اما قرار نیست ما کدنویس باشیم. قراره برنامه نویس باشیم و حتی فراتر از برنامه نویس!!!
مطلب زیر رو بخونید. تفاوت کد نویسی و برنامه نویسی رو تقریبا گفته:
https://roocket.ir/articles/programming-or-coding
👍10
✅ شروع دوره طراحی الگوریتم از کانال @BenDevelop
توصیه میکنم پیگیر این دوره باشید. نه به خاطر مدرسش (که البته واقعا کارش درسته) به خاطر اینکه یاد گرفتن طراحی الگوریتم میتونه مارو به سمت حرفه ای شدن توی برنامه نویسی سوق بده.
وقتی طراحی الگوریتم و ساختمان داده بلدی. خیلی بهتر میتونی کد بهینه بنویسی که سرعت اجرای بالایی هم داشته باشه و منابع زیادی هم مصرف نکنه.
اینم اولین ویدیو معرفی دوره الگوریتم و ساختمان داده که صحبتش رو کرده بودیم
تو این ویدیو دوره رو معرفی میکنم و توضیح میدم که دوره برای چه کسایی هستش و به چه ترتیبی باید ببینیدش
https://youtu.be/kclXvoKsEEY
@BenDevelop
توصیه میکنم پیگیر این دوره باشید. نه به خاطر مدرسش (که البته واقعا کارش درسته) به خاطر اینکه یاد گرفتن طراحی الگوریتم میتونه مارو به سمت حرفه ای شدن توی برنامه نویسی سوق بده.
وقتی طراحی الگوریتم و ساختمان داده بلدی. خیلی بهتر میتونی کد بهینه بنویسی که سرعت اجرای بالایی هم داشته باشه و منابع زیادی هم مصرف نکنه.
اینم اولین ویدیو معرفی دوره الگوریتم و ساختمان داده که صحبتش رو کرده بودیم
تو این ویدیو دوره رو معرفی میکنم و توضیح میدم که دوره برای چه کسایی هستش و به چه ترتیبی باید ببینیدش
https://youtu.be/kclXvoKsEEY
@BenDevelop
👍3🔥2
Forwarded from ProgrammingSchool (Python)
قسمت سوم: تورفتگیهای بخش شرطی if
زمانی که بخش شرطی یک عبارت if طولانی باشد لازم است در چند خط نوشته شود. در این حالت، نوشتن کلمه کلیدی و پرانتز باز در خط اول و بقیه شروط در سایر خطوط ایده جالبی نیست(مشابه Hanging Indent). زیرا باعث تداخل کدهای شرط if با کدهای بلوک آن شود.
When the conditional part of an if-statement is long, it requires to be written on multiple lines. In this case, it isn't an interesting idea to write the keyword if and open parenthesis in the first line and the rest of the conditions in the other lines (similar to Hanging Indent). Because it makes the code less readable.
در این حالت PEP هیچ ایده صریحی ندارد. برخی از شکل های نوشتاری قابل قبول عبارتند از:
In this case, PEP has no clear idea. Some acceptable written forms are:
۱- سایر خطوط مربوط به بخش شرطی، به صورت همتراز با خطوط بلاک if نوشته شود.
1- Other lines related to the conditional section should be alignment to the lines of the if block.
۲- بین خطوط بخش شرطی و دستورهای بلوک if یک خط کامنت قرار میدهند.
2- A comment line is placed between the lines of the conditional section and the if block commands
۳- تورفتگی های بخش شرطی، بیشتر از دستورات بلوک if است.
3- The indents of the conditional section are more than the if block commands.
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
زمانی که بخش شرطی یک عبارت if طولانی باشد لازم است در چند خط نوشته شود. در این حالت، نوشتن کلمه کلیدی و پرانتز باز در خط اول و بقیه شروط در سایر خطوط ایده جالبی نیست(مشابه Hanging Indent). زیرا باعث تداخل کدهای شرط if با کدهای بلوک آن شود.
When the conditional part of an if-statement is long, it requires to be written on multiple lines. In this case, it isn't an interesting idea to write the keyword if and open parenthesis in the first line and the rest of the conditions in the other lines (similar to Hanging Indent). Because it makes the code less readable.
در این حالت PEP هیچ ایده صریحی ندارد. برخی از شکل های نوشتاری قابل قبول عبارتند از:
In this case, PEP has no clear idea. Some acceptable written forms are:
۱- سایر خطوط مربوط به بخش شرطی، به صورت همتراز با خطوط بلاک if نوشته شود.
1- Other lines related to the conditional section should be alignment to the lines of the if block.
۲- بین خطوط بخش شرطی و دستورهای بلوک if یک خط کامنت قرار میدهند.
2- A comment line is placed between the lines of the conditional section and the if block commands
۳- تورفتگی های بخش شرطی، بیشتر از دستورات بلوک if است.
3- The indents of the conditional section are more than the if block commands.
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
👍1
Forwarded from ProgrammingSchool (Python)
قسمت سوم: تورفتگیهای بخش شرطی if
در مثال بالا، سه فرم صحیح عبارت if با شرط طولانی را مشاهده میکنید.
In the example above, you see the three correct forms of the if statement with a long condition.
Please write clean code.🙏🙏
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
در مثال بالا، سه فرم صحیح عبارت if با شرط طولانی را مشاهده میکنید.
In the example above, you see the three correct forms of the if statement with a long condition.
Please write clean code.🙏🙏
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
👍3
✅ یه پلی لیست خوب و رایگان با موضوع نتورک پلاس
دونستن network+ و مفاهیم پایه شبکه، میتونه به درد برنامه نویس ها بخوره
این مفاهیم به هیچ استک خاص و زبان برنامه نویسی خاصی مربوط نیست
https://www.aparat.com/playlist/1641292
دونستن network+ و مفاهیم پایه شبکه، میتونه به درد برنامه نویس ها بخوره
این مفاهیم به هیچ استک خاص و زبان برنامه نویسی خاصی مربوط نیست
https://www.aparat.com/playlist/1641292
آپارات - سرویس اشتراک ویدیو
آموزش رایگان نتورک پلاس - لیست پخش
شبکه کامپیوتری چیست؟ تقسیم بندی جغرافیایی شبکه های کامپیوتری,شبکه PAN چیست؟ شبکه کامپیوتری شخصی,پروتکل آی پی (IP) چیست؟ بررسی IP Header با وایرشارک قسمت اول,پروتکل آی پی (IP) چیست؟ بررسی IP Header با وایرشارک قسمت دوم,پروتکل DNS چیست؟ بررسی Query و Answer…
❤1
جنگولرن
✅ مطلب مفیدی درباره Logging از کانال @PyHints یک دوستی دیروز راجب لاگ نویسی توی پایتون سوال داشت من به اینصورت براش توضیح دادم گفتم شاید مفید باشه : Python logging components : 1- Loggers وضعیت لاگ؛ همیشه لازم هست. نشون میده هر دسته از لاگ رو چطور باید…
✅ پیاده سازی logging در جنگو
توی جنگو، logging یک ابزاره که بهتون کمک میکنه تا پیامهای مختلف رو ثبت و مدیریت کنید.
این پیامها میتونن شامل پیامهای عملیاتی، اطلاعاتی و خطاها باشن. با استفاده از logging میتونید اطلاعات مربوط به برنامهتون رو به صورت منظم ثبت و بررسی کنید.
تنظیمات logging توی settings.py قرار میگیره. این تنظیمات شامل مواردی مثل جایی که پیامهای لاگ ذخیره بشن و چطور برچسبگذاری بشن، هستن.
توی کدهای جنگو میتونید از logging استفاده کنید. اول باید یه logger با یه نام دلخواه ایجاد کنید. بعد میتونید با استفاده از اون logger پیامهای مختلف رو ثبت کنید. مثلا:
import logging
logger = logging.getLogger('my_logger')
logger.debug('DEBUG')
logger.info('INFORMATION')
logger.warning('WARNING')
logger.error('ERROR')
logger.critical('CRITICAL')
لینک داکیومنت جنگو:
https://docs.djangoproject.com/en/4.2/topics/logging/
توی جنگو، logging یک ابزاره که بهتون کمک میکنه تا پیامهای مختلف رو ثبت و مدیریت کنید.
این پیامها میتونن شامل پیامهای عملیاتی، اطلاعاتی و خطاها باشن. با استفاده از logging میتونید اطلاعات مربوط به برنامهتون رو به صورت منظم ثبت و بررسی کنید.
تنظیمات logging توی settings.py قرار میگیره. این تنظیمات شامل مواردی مثل جایی که پیامهای لاگ ذخیره بشن و چطور برچسبگذاری بشن، هستن.
توی کدهای جنگو میتونید از logging استفاده کنید. اول باید یه logger با یه نام دلخواه ایجاد کنید. بعد میتونید با استفاده از اون logger پیامهای مختلف رو ثبت کنید. مثلا:
import logging
logger = logging.getLogger('my_logger')
logger.debug('DEBUG')
logger.info('INFORMATION')
logger.warning('WARNING')
logger.error('ERROR')
logger.critical('CRITICAL')
لینک داکیومنت جنگو:
https://docs.djangoproject.com/en/4.2/topics/logging/
Django Project
Logging | Django documentation
The web framework for perfectionists with deadlines.
👍2🤔1
جنگولرن
✅ پیاده سازی logging در جنگو توی جنگو، logging یک ابزاره که بهتون کمک میکنه تا پیامهای مختلف رو ثبت و مدیریت کنید. این پیامها میتونن شامل پیامهای عملیاتی، اطلاعاتی و خطاها باشن. با استفاده از logging میتونید اطلاعات مربوط به برنامهتون رو به صورت منظم…
✅ ترکیب Middleware های جنگو با logging
✔️ میتونیم با استفاده از میدلور ها و logging اطلاعات مفیدی رو لاگ کنیم. مثلا همه request و response هارو لاگ کنیم.
این مثال:
https://zeroes.dev/p/django-middleware-to-log-requests/
✔️ یا همه Exception هایی که رخ میده رو لاگ کنیم.
این مثال:
https://gist.github.com/Alexx-G/2a2986f2e8d93f554fb8
✔️ میتونیم با استفاده از میدلور ها و logging اطلاعات مفیدی رو لاگ کنیم. مثلا همه request و response هارو لاگ کنیم.
این مثال:
https://zeroes.dev/p/django-middleware-to-log-requests/
✔️ یا همه Exception هایی که رخ میده رو لاگ کنیم.
این مثال:
https://gist.github.com/Alexx-G/2a2986f2e8d93f554fb8
👍7
جنگولرن
✅ ترکیب Middleware های جنگو با logging ✔️ میتونیم با استفاده از میدلور ها و logging اطلاعات مفیدی رو لاگ کنیم. مثلا همه request و response هارو لاگ کنیم. این مثال: https://zeroes.dev/p/django-middleware-to-log-requests/ ✔️ یا همه Exception هایی که رخ میده…
✅ لاگ کردن چه استفاده ای میتونه داشته باشه؟
یکی از استفاده هاش که میتونه دیباگ کردن باشه.
اما استفاده مهم ترش میتونه مونیتورینگ باشه.
ریپو زیر رو ببینید عنوانش گویای ماجراست
Monitoring Django applications with Grafana and Kibana using Prometheus and Elasticsearch
https://github.com/gonzalo123/django-logs
یکی از استفاده هاش که میتونه دیباگ کردن باشه.
اما استفاده مهم ترش میتونه مونیتورینگ باشه.
ریپو زیر رو ببینید عنوانش گویای ماجراست
Monitoring Django applications with Grafana and Kibana using Prometheus and Elasticsearch
https://github.com/gonzalo123/django-logs
👍4
✅ پست مفیدی از کانال @ManiFoldsPython در مورد جاب آفر گرفتن از شرکت های خارجی
بقیه نکات در کامنت ها
مواردی که به نظر من یک بک اند کار برای کار تو شرکت های مدرن خارجی و گرفتن جاب آفر داخلشون باید بلد باشه, طبق تجربه این چند وقتم داخل مصاحبه ها و جاب هایی که دیدم:
1. آشنایی با گیت
2. تست نویسی
3. آشنایی با github action برای نوشتن فایل work flow yaml
4. درک عمیق تر از پایتون (خوندن کتابی مثل fluent python یا python cook book)
تسلط به پترن دیزاین ها
5. آشنایی با paradigms های مختلف برنامه نویسی
6. الگوریتم
7. تسلط روی SQL
8. آشنایی با MySQL یا PostgreSQL.
9. آشنایی با داکر و داکر کامپوز
10. آشنایی با مفاهیم Event driven architecture, SOA, microservice و Monolithic
11. تسلط رو یک فریم ورک microservice friendly مثل FastAPI یا Flask
12. آشنایی با یک فریم ورک Monolithic مثل جنگو میتونه مزیت خوبی باشه.
13. آشنایی با یک سرویس کلاد (AWS/Azure/GCP) در حد نیاز بک اند. معمولا certificate های مشخصی دارن که میتونید راجبشون تحقیق کنید و تو اون مسیری که مربوط به بک اند دولوپر میشه برین.
14. آشنایی با دیتابیس های کلاد مثل amazon rds
15. آشنایی با serverless و نمونش داخل کلاد مثل AWS Lambda
16. آشنایی با k8s در حد نوشتن فایل yaml سرویستون
17. آشنایی با یک ابزار IAC مثل terraform
(از بین ترافورم یا k8s و داکر, معمولا رو یکیش تمرکز میکنن شرکتا. و تو اغلب آگهی ها هم دیدم وزن بیشتر سمت داکر و k8s بوده تا ترافورم)
@ManiFoldsPython
بقیه نکات در کامنت ها
مواردی که به نظر من یک بک اند کار برای کار تو شرکت های مدرن خارجی و گرفتن جاب آفر داخلشون باید بلد باشه, طبق تجربه این چند وقتم داخل مصاحبه ها و جاب هایی که دیدم:
1. آشنایی با گیت
2. تست نویسی
3. آشنایی با github action برای نوشتن فایل work flow yaml
4. درک عمیق تر از پایتون (خوندن کتابی مثل fluent python یا python cook book)
تسلط به پترن دیزاین ها
5. آشنایی با paradigms های مختلف برنامه نویسی
6. الگوریتم
7. تسلط روی SQL
8. آشنایی با MySQL یا PostgreSQL.
9. آشنایی با داکر و داکر کامپوز
10. آشنایی با مفاهیم Event driven architecture, SOA, microservice و Monolithic
11. تسلط رو یک فریم ورک microservice friendly مثل FastAPI یا Flask
12. آشنایی با یک فریم ورک Monolithic مثل جنگو میتونه مزیت خوبی باشه.
13. آشنایی با یک سرویس کلاد (AWS/Azure/GCP) در حد نیاز بک اند. معمولا certificate های مشخصی دارن که میتونید راجبشون تحقیق کنید و تو اون مسیری که مربوط به بک اند دولوپر میشه برین.
14. آشنایی با دیتابیس های کلاد مثل amazon rds
15. آشنایی با serverless و نمونش داخل کلاد مثل AWS Lambda
16. آشنایی با k8s در حد نوشتن فایل yaml سرویستون
17. آشنایی با یک ابزار IAC مثل terraform
(از بین ترافورم یا k8s و داکر, معمولا رو یکیش تمرکز میکنن شرکتا. و تو اغلب آگهی ها هم دیدم وزن بیشتر سمت داکر و k8s بوده تا ترافورم)
@ManiFoldsPython
👍4
Forwarded from Meysam
فقط برای ریسرچ.
اگر دنبال موضوع، استاد، دانشجو برای پوزیشن خاص، نویسنده همکار، سوال در زمینه ژورنال و کنفرانس و ... هستید عضو بشید.
هرگونه بی احترامی باعث ریمومیشه.
پروژه درسی سفارش ندید و نگیرید باعث ریمو شدنتان میشود.
با تشکر.
لینک گروه:
https://t.iss.one/researcher_people
اگر دنبال موضوع، استاد، دانشجو برای پوزیشن خاص، نویسنده همکار، سوال در زمینه ژورنال و کنفرانس و ... هستید عضو بشید.
هرگونه بی احترامی باعث ریمومیشه.
پروژه درسی سفارش ندید و نگیرید باعث ریمو شدنتان میشود.
با تشکر.
لینک گروه:
https://t.iss.one/researcher_people
Telegram
Researcher People
A general discussion group for people who want to collaborate on research topics or are looking for students, professors, or even co-authors.
#قوانین
Channel:
@ai_person
#قوانین
Channel:
@ai_person
👍1
Forwarded from بنیاد پایتون کاران فارسی (SorousH)
HashMaps به بیان ساده:
قرار هست ببینیم associative array چیه، hashmap چیه، چه ارتباطی به dictionary داره، ویژگی هاشون چیه، hash collision چیه، چطور برطرف میشن، نمونه خیلی سادش رو پیاده سازی کنیم و در انتها یه نمونه کامل هم ببینیم ازش.
خب... زمانی که ما یک سری دیتا داریم که به هم مرتبط هستن میتونیم اون ها رو توی یه collection نگهداری کنیم مثلا array. اطلاعاتی مثل تمام نمرات دانش آموزان یک کلاس:
مشکل کجاست؟
مشکل اینه که برای ما سخته حفظ کنیم کدوم ایندکس برای کدوم شخص بوده و ترجیح میدیم که اگه نمره ی شخصی رو میخوایم به جای اینکه یه عدد بی معنی بدیم، اسمش رو بدیم و نمرش رو بگیریم:
اینکه اسمش رو(که بهش میگیم کلید) متصل یا مربوط یا "associate" بکنیم به نمرش.
چطوری؟ مثلا:
چیزی که ما بالا ساختیم یک پیاده سازی (بد) از associative array بود. چون associate کردیم یک کلید رو به مقدارش. associative array یک abstract هست و میتونه به شکل های مختلف پیاده سازی بشه.
خب... فقط یه مشکلی هست الان:
قبلا که با ایندکس میگرفتیم صاف میرفتیم سراغ خودش، الان مجبوریم که iterate کنیم روشون و دونه دونه بگردیم تا برسیم به اونی که میخوایم. کنده!! (شما مثال های این پست رو با ۱۰۰۰ تا داده مثلا تصور کنید)
راه حل چیه؟
اینکه بیایم "یه جوری" این اسم ها رو map کنیم به ایندکس های عددی تا دوباره بتونیم صاف بریم سراغ اونی که میخوایم و سرعت بهتر بگیریم.
چطور اینکارو بکنیم؟
مثلا بیایم یک فانکشن بنویسیم که از کلیدها عدد تولید کنیم به این صورت که اعداد اسکی متناظر با هر حرف از کلیدمون رو باهم جمع کنیم. یعنی برای sara داریم:
"sara" # -> 115 + 97 + 114 + 97 -> 423
این میشه فانکشنش:
باقی ماندش رو با طول لیستمون حساب کنیم!
اینطوری مطمئن هستیم که داخل اون رنجی که میخوایم هست. پس:
423 % 5 -> 3
کافیه sara و نمرش رو توی ایندکس شماره ۳ ذخیره کنیم:
الان خوب شد. هر کدوم از نمره هارو بخوایم بگیریم اول اون کلید رو hash میکنیم بعد باقی ماندش رو حساب میکنیم میشه ایندکس مورد نظر. دیگه iteration ای در کار نیست و به time complexity عه O(1) رسیدیم. الان get_grade عه ما اینطوری شد:
خب ما الان تونستیم associative array رو با کمک hashmap پیاده سازی کنیم :) بریم ادامش...
حالا اگه اسم یکی دیگه از دانشجو ها aras بود چی؟
(پست بعدی)
پست ۱ از ۳
قرار هست ببینیم associative array چیه، hashmap چیه، چه ارتباطی به dictionary داره، ویژگی هاشون چیه، hash collision چیه، چطور برطرف میشن، نمونه خیلی سادش رو پیاده سازی کنیم و در انتها یه نمونه کامل هم ببینیم ازش.
خب... زمانی که ما یک سری دیتا داریم که به هم مرتبط هستن میتونیم اون ها رو توی یه collection نگهداری کنیم مثلا array. اطلاعاتی مثل تمام نمرات دانش آموزان یک کلاس:
grades = [17, 19, 18, ...]و با ایندکس های عددی بهشون دسترسی پیدا کنیم:
grades[2]خیلی هم سریع هستن array ها تو دسترسی چون مستقیم میریم سراغ همون نمره ای که نیاز داریم.
مشکل کجاست؟
مشکل اینه که برای ما سخته حفظ کنیم کدوم ایندکس برای کدوم شخص بوده و ترجیح میدیم که اگه نمره ی شخصی رو میخوایم به جای اینکه یه عدد بی معنی بدیم، اسمش رو بدیم و نمرش رو بگیریم:
grades["ali"]راه حل چیه؟
اینکه اسمش رو(که بهش میگیم کلید) متصل یا مربوط یا "associate" بکنیم به نمرش.
چطوری؟ مثلا:
grades = [("reza", 17), ("sara", 19), ("ali", 18)]و بعد هم اینجوری میگیریم:
def get_grade(person_name):خیلی بهتر و راحت تر شد الان...
for name, grade in grades:
if name == person_name:
return grade
print(get_grade("ali"))
چیزی که ما بالا ساختیم یک پیاده سازی (بد) از associative array بود. چون associate کردیم یک کلید رو به مقدارش. associative array یک abstract هست و میتونه به شکل های مختلف پیاده سازی بشه.
خب... فقط یه مشکلی هست الان:
قبلا که با ایندکس میگرفتیم صاف میرفتیم سراغ خودش، الان مجبوریم که iterate کنیم روشون و دونه دونه بگردیم تا برسیم به اونی که میخوایم. کنده!! (شما مثال های این پست رو با ۱۰۰۰ تا داده مثلا تصور کنید)
راه حل چیه؟
اینکه بیایم "یه جوری" این اسم ها رو map کنیم به ایندکس های عددی تا دوباره بتونیم صاف بریم سراغ اونی که میخوایم و سرعت بهتر بگیریم.
چطور اینکارو بکنیم؟
مثلا بیایم یک فانکشن بنویسیم که از کلیدها عدد تولید کنیم به این صورت که اعداد اسکی متناظر با هر حرف از کلیدمون رو باهم جمع کنیم. یعنی برای sara داریم:
s: 115در نتیجه:
a: 97
r: 114
a: 97
"sara" # -> 115 + 97 + 114 + 97 -> 423
این میشه فانکشنش:
def hash_func(string):حالا یه لیست بسازیم که ۵ تا جای خالی داره:
return sum(map(ord, string))
grades = [None, None, None, None, None]خب حالا الان عددی که از هش کردن(پس یه هش فانکشن ساده بود اون) کلید sara به دست آوردیم و چطور map کنیم به یکی از ایندکس های لیستمون؟ ما که ۴۲۳ تا slot نداریم...
باقی ماندش رو با طول لیستمون حساب کنیم!
اینطوری مطمئن هستیم که داخل اون رنجی که میخوایم هست. پس:
423 % 5 -> 3
کافیه sara و نمرش رو توی ایندکس شماره ۳ ذخیره کنیم:
grades = [None, None, None, ("sara", 19), None]اگه همین کار رو برای باقی هم بکنیم همچین چیزی میشه:
grades = [(تو پرانتز حواسمون هست که ترتیبش عوض شد...)
("ali", 18),
None,
None,
("sara", 19),
("reza", 17),
]
الان خوب شد. هر کدوم از نمره هارو بخوایم بگیریم اول اون کلید رو hash میکنیم بعد باقی ماندش رو حساب میکنیم میشه ایندکس مورد نظر. دیگه iteration ای در کار نیست و به time complexity عه O(1) رسیدیم. الان get_grade عه ما اینطوری شد:
def hash_func(string):موقع insert کردن هم دقیقا برعکس همین شکل عمل میکنیم یعنی ابتدا هش میکنیم بعد باقیمانده میگیریم بعد که فهمیدیم کدوم slot برای اون کلید میشه میذاریمش اونجا. درواقع هر چیزی که برای get کردن میگیم برعکسش برای set کردن میشه.
return sum(map(ord, string))
def get_grade(person_name):
hash_value = hash_func(person_name)
idx = hash_value % 5
return grades[idx][1]
print(get_grade("reza"))
خب ما الان تونستیم associative array رو با کمک hashmap پیاده سازی کنیم :) بریم ادامش...
حالا اگه اسم یکی دیگه از دانشجو ها aras بود چی؟
(پست بعدی)
پست ۱ از ۳
👍2
Forwarded from بنیاد پایتون کاران فارسی (SorousH)
چجوری aras رو اضافه کنیم به grades ؟ چون aras از همون حروفی که sara داره تشکیل شده با هش فانکشنی که ما نوشتیم دوباره بهمون ۴۲۳ میده و اگه باقی مانده بگیریم میشه ۳ یا درواقع همون ایندکسی که برای سارا اختصاص داده شده.
مشکل بوجود اومد... به این مشکل میگن hash collision یا تداخل هش ها!
هش فانکشنی که انتخاب کردیم شاید زیاد جالب نبود چون درواقع به ازای تمام جای گشت های یک کلمه همون هش رو بهمون میده.
هش فانکشن خوب توی hashmap ها دو تا ویژگی داره:
۱- باید محاسباتش سبک باشه. چون دائما داره برای همه ی کلید ها حساب میشه.
۲- "سعی کنه" مقدار های یونیک تولید کنه تا به hash collision بر نخوریم.
بیایم کمی تغییرش بدیم: علاوه بر اینکه از عدد اسکیشون استفاده میکنیم، بیایم اون عدد رو در جایگاهی که داره(حرف چندمه) ضرب هم بکنیم به این شکل:
چه کنیم؟ بیایم یه هش فانکشن معقول داشته باشیم که سعی کنه با سرعت بالا hash value رو محاسبه کنه (چیزی که الان داریم) ولی اگه collision پیش اومد رفعش کنیم! چطور؟
روش اول، separate chaining :
تو این روش میگه به جای اینکه ما بیایم slot ها رو خالی بذاریم (None) ، بیایم به جاش از لیست خالی استفاده کنیم! هر موقع hash collision داشتیم میایم اضافش میکنیم به لیست.
یعنی اگه ۴ تا دانش آموزش ما باشن: ali, sara, reza, nima
با هش فانکشن جدیدی که نوشتیم slot های ما به این صورت میشن:
اگه دقت کنیم میبینیم هرچی hash collision بیشتر داشته باشیم به رفتار خطی بیشتر نزدیک میشیم.
این روش اول بود که پیاده سازی خیلی ساده ای هم داره. یه مشکلی ریزی داریم اینجا. یه سری فضای خالی الان توی slot های ما بوجود اومده. آیا میتونیم بیایم از این فضاها استفاده کنیم؟
روش دوم، open addressing:
شرایطی و در نظر بگیرید که الان reza و ali و sara ذخیره شدن و ما میخوایم nima رو اضافه کنیم:
0 -> 1 -> 2 -> 3 -> 4
اگه برای ali میخواستیم probing sequence چی میشد؟
3 -> 4 -> 0 -> 1 -> 2
و به همین ترتیب میریم جلو تا به جای خالی برسیم. الان برای نیما ایندکس بعدی میشه ۱. خالی هست؟ بله. پس میذاریمش اونجا و تبدیل میشه به:
1- linear probing
2- quadratic probing
3- double hashing
کاری که بالا کردیم linear probing بود. چون نمیخوام بیشتر از این طولانی بشه دوتای دیگه رو اینجا نمیگم(پیاده سازیش رو در انتها گذاشتم) ولی حدس زدنش سادس. مثلا تو دومی به جای اینکه دونه دونه بره بالا ، با توان های ۲ میره بالا (کمک میکنه که توده ای از کلید ها رو یک جای hash table مون نداشته باشیم پخش بشن) و آخری میگه یه هش دیگه(هش دوم) انجام بدیم برای پیدا کردن ایندکس بعدی!
اینا هر کدوم مزایا و معایبی دارن که میشه کلی دربارشون بحث کرد که کدوم کجا چرا بهتره.
پست تموم شد ولی یه سری نکته های تکمیلی باقی موند:
(پست بعدی و آخر)
پست ۲ از ۳
مشکل بوجود اومد... به این مشکل میگن hash collision یا تداخل هش ها!
هش فانکشنی که انتخاب کردیم شاید زیاد جالب نبود چون درواقع به ازای تمام جای گشت های یک کلمه همون هش رو بهمون میده.
هش فانکشن خوب توی hashmap ها دو تا ویژگی داره:
۱- باید محاسباتش سبک باشه. چون دائما داره برای همه ی کلید ها حساب میشه.
۲- "سعی کنه" مقدار های یونیک تولید کنه تا به hash collision بر نخوریم.
بیایم کمی تغییرش بدیم: علاوه بر اینکه از عدد اسکیشون استفاده میکنیم، بیایم اون عدد رو در جایگاهی که داره(حرف چندمه) ضرب هم بکنیم به این شکل:
def hash_func(string):الان هش collision رو بر طرف کردیم:
hash_value = 0
for i, char in enumerate(string, start=1):
hash_value += ord(char) * i
return hash_value
for name in ("ali", "sara", "reza", "aras"):خروجیش میشه:
hash_value = hash_func(name)
print(f"{name}: {hash_value} : {hash_value % 5}")
ali: 628 : 3ولی همونطور که حدس میزنید باز هم با کلید های مختلف ما به hash collision بر میخوریم... مثلا جای aras بذارید nima ...
sara: 1039 : 4
reza: 1070 : 0
aras: 1076 : 1
چه کنیم؟ بیایم یه هش فانکشن معقول داشته باشیم که سعی کنه با سرعت بالا hash value رو محاسبه کنه (چیزی که الان داریم) ولی اگه collision پیش اومد رفعش کنیم! چطور؟
روش اول، separate chaining :
تو این روش میگه به جای اینکه ما بیایم slot ها رو خالی بذاریم (None) ، بیایم به جاش از لیست خالی استفاده کنیم! هر موقع hash collision داشتیم میایم اضافش میکنیم به لیست.
یعنی اگه ۴ تا دانش آموزش ما باشن: ali, sara, reza, nima
با هش فانکشن جدیدی که نوشتیم slot های ما به این صورت میشن:
grades = [مشکل حل شد. الان با اینکه وقتی نمره ی نیما رو بخوایم باید قبلش یه رضا رو هم چک کنیم ولی خیلی جلو افتادیم نسبت به اینکه بخوایم همه رو چک کنیم! یعنی کلی کلید رو محاسبه نمیکنیم فقط اون چندتایی که collision داشتن سرچ میشن. و خب باقی کلید ها که collision نداشتن مستقیم پیدا میشن.
[("reza", 17), ("nima", 20)],
[],
[],
[("ali", 18)],
[("sara", 19)],
]
اگه دقت کنیم میبینیم هرچی hash collision بیشتر داشته باشیم به رفتار خطی بیشتر نزدیک میشیم.
این روش اول بود که پیاده سازی خیلی ساده ای هم داره. یه مشکلی ریزی داریم اینجا. یه سری فضای خالی الان توی slot های ما بوجود اومده. آیا میتونیم بیایم از این فضاها استفاده کنیم؟
روش دوم، open addressing:
شرایطی و در نظر بگیرید که الان reza و ali و sara ذخیره شدن و ما میخوایم nima رو اضافه کنیم:
grades = [میایم nima رو هش میکنیم ایندکس و پیدا میکنیم میبینیم میشه صفر. و نگاه میکنیم میبینیم پر هست! میایم یه sequence ای تولید میکنیم به اسم probing sequence. به طوری که از همون اون ایندکسی که محاسبه کردیم شروع میشه(اینجا شد صفر برای نیما) و یه دور میزنه:
("reza", 17),
None,
None,
("ali", 18),
("sara", 19),
]
0 -> 1 -> 2 -> 3 -> 4
اگه برای ali میخواستیم probing sequence چی میشد؟
3 -> 4 -> 0 -> 1 -> 2
و به همین ترتیب میریم جلو تا به جای خالی برسیم. الان برای نیما ایندکس بعدی میشه ۱. خالی هست؟ بله. پس میذاریمش اونجا و تبدیل میشه به:
grades = [ما ۳ شکل probe sequence داریم:
("reza", 17),
("nima", 20),
None,
("ali", 18),
("sara", 19),
]
1- linear probing
2- quadratic probing
3- double hashing
کاری که بالا کردیم linear probing بود. چون نمیخوام بیشتر از این طولانی بشه دوتای دیگه رو اینجا نمیگم(پیاده سازیش رو در انتها گذاشتم) ولی حدس زدنش سادس. مثلا تو دومی به جای اینکه دونه دونه بره بالا ، با توان های ۲ میره بالا (کمک میکنه که توده ای از کلید ها رو یک جای hash table مون نداشته باشیم پخش بشن) و آخری میگه یه هش دیگه(هش دوم) انجام بدیم برای پیدا کردن ایندکس بعدی!
اینا هر کدوم مزایا و معایبی دارن که میشه کلی دربارشون بحث کرد که کدوم کجا چرا بهتره.
پست تموم شد ولی یه سری نکته های تکمیلی باقی موند:
(پست بعدی و آخر)
پست ۲ از ۳
Forwarded from بنیاد پایتون کاران فارسی (SorousH)
نکته ۱:
دیکشنری توی پایتون نمونه از associative array هست که با hashtable یا hashmap پیاده سازی شده.
نکته ۲:
این پیاده سازی از hashmap چیزی هست که همین الان تو خیلی از زبان ها برای دیکشنری، set ها توی پایتون و برای دیکشنری ها تا قبل از ورژن ۳.۶ توی پایتون استفاده میشده.
به طور کلی hashmap ها ترتیب رو حفظ نمیکنن، همونطور که دیدید ولی از پایتون ۳.۶ به بعد آقای Raymond Hettinger یه پیاده سازی جدیدی برای دیکشنری ها انجام داد به اسم raymond dict. کلیت همینه ولی یه مقدار فرق داره با چیزی که دیدیم که هم کم حجم تره هم باعث میشه ترتیب رو حفظ کنن. اگه علاقه داشتید میتونم بعدا پیاده سازی دیکشنری های جدید پایتون رو هم بگم.
نکته ۳: توی separate chaining میشه به جای لیست از linked list یا binary search tree هم استفاده کرد که باز هم هر کدوم معایب و مزایای خودشون رو دارن.
نکته ۴:
خیلی از نکات گفته نشد به دلیل اینکه نمیخواستم بیشتر از این طولانی بشه. از جمله:
- پایتون علاوه بر key و value خود هشها رو هم نگه داره میکنه. چرا اینکارو میکنه؟
- این hash table عه ما به یه حدی که برسه نیاز داره تا resize بشه تا پرفورمنسش رو حفظ کنه. اگه از یه حدی بیشتر پر باشه تعداد دفعاتی که collision میگیریم بیشتر میشه و دیکشنری یا ست ما کند تر میشه.
- اگه یه کلیدی و delete کردیم تکلیف hashtable چی میشه؟ چطور باید هندل بشه؟
من همه ی انواع implementation هایی که اسمشون اومد رو به صورت کامل پیاده سازی کردم و نکاتی که وقت نشد رو توش گنجوندم. میتونید به عنوان رفرنس بهش یه نگاه بندازید:
* Open Addressing:
- Linear Probing
- Quadratic Probing
- Double Hashing Probing
* Separate Chaining
- With Dynamic Array
- With Linked List
- With Binary Search Tree
https://github.com/amirsoroush/Python_Hashmaps
پست ۳ از ۳
🖊 @AmirSoroushh
دیکشنری توی پایتون نمونه از associative array هست که با hashtable یا hashmap پیاده سازی شده.
نکته ۲:
این پیاده سازی از hashmap چیزی هست که همین الان تو خیلی از زبان ها برای دیکشنری، set ها توی پایتون و برای دیکشنری ها تا قبل از ورژن ۳.۶ توی پایتون استفاده میشده.
به طور کلی hashmap ها ترتیب رو حفظ نمیکنن، همونطور که دیدید ولی از پایتون ۳.۶ به بعد آقای Raymond Hettinger یه پیاده سازی جدیدی برای دیکشنری ها انجام داد به اسم raymond dict. کلیت همینه ولی یه مقدار فرق داره با چیزی که دیدیم که هم کم حجم تره هم باعث میشه ترتیب رو حفظ کنن. اگه علاقه داشتید میتونم بعدا پیاده سازی دیکشنری های جدید پایتون رو هم بگم.
نکته ۳: توی separate chaining میشه به جای لیست از linked list یا binary search tree هم استفاده کرد که باز هم هر کدوم معایب و مزایای خودشون رو دارن.
نکته ۴:
خیلی از نکات گفته نشد به دلیل اینکه نمیخواستم بیشتر از این طولانی بشه. از جمله:
- پایتون علاوه بر key و value خود هشها رو هم نگه داره میکنه. چرا اینکارو میکنه؟
- این hash table عه ما به یه حدی که برسه نیاز داره تا resize بشه تا پرفورمنسش رو حفظ کنه. اگه از یه حدی بیشتر پر باشه تعداد دفعاتی که collision میگیریم بیشتر میشه و دیکشنری یا ست ما کند تر میشه.
- اگه یه کلیدی و delete کردیم تکلیف hashtable چی میشه؟ چطور باید هندل بشه؟
من همه ی انواع implementation هایی که اسمشون اومد رو به صورت کامل پیاده سازی کردم و نکاتی که وقت نشد رو توش گنجوندم. میتونید به عنوان رفرنس بهش یه نگاه بندازید:
* Open Addressing:
- Linear Probing
- Quadratic Probing
- Double Hashing Probing
* Separate Chaining
- With Dynamic Array
- With Linked List
- With Binary Search Tree
https://github.com/amirsoroush/Python_Hashmaps
پست ۳ از ۳
🖊 @AmirSoroushh
GitHub
GitHub - amirsoroush/Python_Hashmaps: Python implementation of hash-tables using different techniques(Open addressing & Separate…
Python implementation of hash-tables using different techniques(Open addressing & Separate Chaining) for solving hash collisions. - amirsoroush/Python_Hashmaps
❤1
Forwarded from ProgrammingSchool (Python)
قسمت چهارم: ساختارهای چندخطی
پرانتز، براکت یا آکولادهای پایانی در ساختارهای چندخطی مانند لیستها، دیکشنری ها و ...
The closing parantese, brace or brucet in multiline structures such as lists, dictionaries, etc:
۱- میتواند همتراز با اولین کاراکتر غیرسفید از آخرین خط این ساختارها نوشته میشود.
1- It can be written in line with the first non-white character from the last line of these structures
۲- در ابتدای آخرین خط نوشته شود.
2- It should be written at the beginning of the last line.
مثال های بالا این دو حالت را نشان میدهد:
The above examples show these two states:
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
پرانتز، براکت یا آکولادهای پایانی در ساختارهای چندخطی مانند لیستها، دیکشنری ها و ...
The closing parantese, brace or brucet in multiline structures such as lists, dictionaries, etc:
۱- میتواند همتراز با اولین کاراکتر غیرسفید از آخرین خط این ساختارها نوشته میشود.
1- It can be written in line with the first non-white character from the last line of these structures
۲- در ابتدای آخرین خط نوشته شود.
2- It should be written at the beginning of the last line.
مثال های بالا این دو حالت را نشان میدهد:
The above examples show these two states:
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
👍1
📣 تبلیغ رایگان - کانال زرنگ هاس
کانال توسعه دهندگان باهوش
سعی میکنیم چیزایی که بنظر کاربردی هستن رو باهاتون به اشتراک بزاریم
موضوعات چنل اکثر حول این موضوعاته
🔥لینوکس
🔥برنامه نویسی فرانتاند
🔥برنامه نویسی بکاند
🔥اخبار تکنولوژی و...
👇👇👇👇👇👇👇👇👇
https://t.iss.one/CleverDevs
کانال توسعه دهندگان باهوش
سعی میکنیم چیزایی که بنظر کاربردی هستن رو باهاتون به اشتراک بزاریم
موضوعات چنل اکثر حول این موضوعاته
🔥لینوکس
🔥برنامه نویسی فرانتاند
🔥برنامه نویسی بکاند
🔥اخبار تکنولوژی و...
👇👇👇👇👇👇👇👇👇
https://t.iss.one/CleverDevs
Forwarded from ProgrammingSchool (Python)
قسمت پنجم: نمایش بلوکها در پایتون
در زبان پایتون بلوکها با استفاده از تورفتگی ها تفسیر میشوند. برای تورفتگیها میتوان از تب (Tab) یا فاصله (Space) استفاده کرد. در اصول PEP توصیه میشود از Space استفاده شود مگر آنکه در یک کد آماده از Tab، برای تورفتگیها استفاده شده باشد. در اینصورت چنانچه لازم باشد خطوطی به کد آماده اضافه شود که دارای تورفتگی باشد باید از Tab استفاده شود.
In Python, blocks are interpreted using indentations. Tab or space can be used for indents. In PEP principles, it is recommended to use Space, unless Tab is used for indentation in a ready code. In this case, if it is necessary to add indented lines to the ready code, Tab should be used.
توجه شود که نمیتوان از ترکیب Tab و Space برای ساختاردهی بلوکها استفاده کرد.
Note that you cannot use Tab and Space to structure blocks.
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
در زبان پایتون بلوکها با استفاده از تورفتگی ها تفسیر میشوند. برای تورفتگیها میتوان از تب (Tab) یا فاصله (Space) استفاده کرد. در اصول PEP توصیه میشود از Space استفاده شود مگر آنکه در یک کد آماده از Tab، برای تورفتگیها استفاده شده باشد. در اینصورت چنانچه لازم باشد خطوطی به کد آماده اضافه شود که دارای تورفتگی باشد باید از Tab استفاده شود.
In Python, blocks are interpreted using indentations. Tab or space can be used for indents. In PEP principles, it is recommended to use Space, unless Tab is used for indentation in a ready code. In this case, if it is necessary to add indented lines to the ready code, Tab should be used.
توجه شود که نمیتوان از ترکیب Tab و Space برای ساختاردهی بلوکها استفاده کرد.
Note that you cannot use Tab and Space to structure blocks.
#آموزش_پایتون
#قراردادهای_پایتون
آدرس کانال:
@Programmingschool2
سایت آموزشی:
https://programmingschool.ir
گروه پرسش و پاسخ:
https://t.iss.one/programmingschool_group
✅ یک ویدئوی خیلی مفید از @BenDevelop
✔️ توی این ویدئو امیربهادر سه تا نکته در مورد مرتبه زمانی (پیچیدگی زمانی) میگه که من خودم تا امروز برداشتم اشتباه بود.
✔️ یه مثال پادشاه و شطرنج هم اشاره کرد، که بهراد قبلا توی لینک های زیر توضیح داده:
رشد نمایی:
https://t.iss.one/TadavomnisT_channel/92
داستان تا کردن کاغذ:
https://t.iss.one/TadavomnisT_channel/93
داستان شطرنج:
https://t.iss.one/TadavomnisT_channel/95
✅ پست امیربهادر:
مرتبه زمانی فضایی و هش مپ
این ویدیو احتمالا مهم ترین ویدیو کل این مجموعست
چون از مفاهیم این قسمت تو تمام ویدیو های بعد استفاده خواهیم کرد
پس حتما حتما ویدیو رو کامل و با دقت تماشا کنین و اگر هر جایش ابهام داشتین حتما بپرسین
https://www.youtube.com/watch?v=2L-9QV0Nqgo&t=1295s
@BenDevelop
✔️ توی این ویدئو امیربهادر سه تا نکته در مورد مرتبه زمانی (پیچیدگی زمانی) میگه که من خودم تا امروز برداشتم اشتباه بود.
✔️ یه مثال پادشاه و شطرنج هم اشاره کرد، که بهراد قبلا توی لینک های زیر توضیح داده:
رشد نمایی:
https://t.iss.one/TadavomnisT_channel/92
داستان تا کردن کاغذ:
https://t.iss.one/TadavomnisT_channel/93
داستان شطرنج:
https://t.iss.one/TadavomnisT_channel/95
✅ پست امیربهادر:
مرتبه زمانی فضایی و هش مپ
این ویدیو احتمالا مهم ترین ویدیو کل این مجموعست
چون از مفاهیم این قسمت تو تمام ویدیو های بعد استفاده خواهیم کرد
پس حتما حتما ویدیو رو کامل و با دقت تماشا کنین و اگر هر جایش ابهام داشتین حتما بپرسین
https://www.youtube.com/watch?v=2L-9QV0Nqgo&t=1295s
@BenDevelop
🔥3
📣 تبلیغ رایگان - کانال دنیای سیاه و صورتی
~> اینجا (https://t.iss.one/PinkOrca) دنیای سیاه و صورتی منه :)💕
💉 پینک اورکا هستم. یک کامپیوتر باز، وب دولوپر، برنامه نویس، علاقهمند به لینوکس و نرمافزار آزاد، تولیدکننده محتوا و عاشق یادگیری و به اشتراک گذاشتن چیزها...
🥴😂 نویسنده نیستم، ولی گاهی اوقات در مورد یک سری موضوعات مینویسم و میتونید به پستهای این چنل جدیدم از طریق دستهبندی (https://t.iss.one/PinkOrca/5) به سادگی دسترسی داشتی باشید...
💎 امیدوارم مطالبم برات مفید باشن ✨
~> @PinkOrca
~> @PinkOrca
~> @PinkOrca
✨✨☝️💀✨✨
~> اینجا (https://t.iss.one/PinkOrca) دنیای سیاه و صورتی منه :)💕
💉 پینک اورکا هستم. یک کامپیوتر باز، وب دولوپر، برنامه نویس، علاقهمند به لینوکس و نرمافزار آزاد، تولیدکننده محتوا و عاشق یادگیری و به اشتراک گذاشتن چیزها...
🥴😂 نویسنده نیستم، ولی گاهی اوقات در مورد یک سری موضوعات مینویسم و میتونید به پستهای این چنل جدیدم از طریق دستهبندی (https://t.iss.one/PinkOrca/5) به سادگی دسترسی داشتی باشید...
💎 امیدوارم مطالبم برات مفید باشن ✨
~> @PinkOrca
~> @PinkOrca
~> @PinkOrca
✨✨☝️💀✨✨
Forwarded from DevOps Expert (Mohammad Babazadeh)
Media is too big
VIEW IN TELEGRAM
✔️ چرا نباید به بنچ مارک ها اعتماد کنیم؟
🔶 این ویدئو فوق العاده از امیررضا قادری عزیز رو حتما ببینید تا به بنچ مارک هایی که توی اینترنت راجع به فریمورک یا تکنولوزی های مختلف میبینید اعتماد نکنید. به قول امیررضا بنچ مارک میگیرید، همه چیز خوبه، محصول رو میبرید روی پروداکشن و در اون لحظه آب قطع هست.
🔷 از امیررضا قادری عزیز بابت تولید این ویدئو عالی، بینهایت سپاسگزاریم.
وبلاگ امیررضا:
👉 https://amirrezaghaderi.com/fa/blog/
#بنچ_مارک #benchmark
〰️〰️〰️〰️〰️〰️
©️ @DevOpsEx
🔶 این ویدئو فوق العاده از امیررضا قادری عزیز رو حتما ببینید تا به بنچ مارک هایی که توی اینترنت راجع به فریمورک یا تکنولوزی های مختلف میبینید اعتماد نکنید. به قول امیررضا بنچ مارک میگیرید، همه چیز خوبه، محصول رو میبرید روی پروداکشن و در اون لحظه آب قطع هست.
🔷 از امیررضا قادری عزیز بابت تولید این ویدئو عالی، بینهایت سپاسگزاریم.
وبلاگ امیررضا:
👉 https://amirrezaghaderi.com/fa/blog/
#بنچ_مارک #benchmark
〰️〰️〰️〰️〰️〰️
©️ @DevOpsEx
👍4
جنگولرن
✅ از Linkedin آقای arash hosseini #مهندسی_سیستم لینک در نظرات پست مهندسی سیستم بخش ششم: پذیرش سیستم : میزان موفقیت هر سیستم دست ساخته بشر و ماموریتش در شاخص های پذیرش ذیل نهفته است : · آیا بازار برای پذیرش سیستم جدید آمادگی دارد ؟ یک نیاز عملیاتی…
✅ از Linkedin آقای arash hosseini #مهندسی_سیستم
لینک در نظرات پست
مهندسی سیستم بخش هفتم :
ادامه پذیرش سیستم : امکان پذیری و مقرون به صرفه بودن سیستم : اگر برآورد زمانی توسعه یک سیستم، محصول یا خدمت درست باشد، چالش بعدی امکان پذیری توسعه بر اساس مشخصه های تعیین شده و تکنولوژی های موجود در برنامه زمانی تعیین شده و بودجه چرخه حیات در یک سطح ریسک معقول برای کاربر یا برای مالک خواهد بود. امکان پذیری نهایتا بر روی چهار سوال متمرکز می گردد : · کاربر چه چیزی می خواهد ؟ · نیاز کاربر چیست ؟ · کاربر از عهده چه چیزی بر می آید ؟ · برای چه چیزی کاربر حاضر است هزینه پرداخت نماید ؟ به عنوان یک مهندس سیستم، شانس با شما همراه خواهد بود اگر به شما برای پشتیبانی فنی از تیم توسعه کسب وکار جهت توسعه یک سیستم جدید یا بکارگیری یک محصول جدید نیاز داشته باشند در غیر اینصورت شما از یک مهندس سیستم دیگر پشتیبانی خواهید نمود. از نقطه نگاه فنی، تیم مهندسی سیستم چندکاره برای تصور، غنی سازی و ارائه راه کار فنی برای اقناع سوالات بیان شده مورد نیاز است. مقرون به صرفه بودن : معیار عینی موفقیت سیستم در نهایت به مقرون به صرفه بودن آن است. از نقطه نظر سازمان، آیا سیستم کارایی و نتیجه ای که با بازگشت سرمایه تنظیم شده باشد را تولید می نماید ؟ مهندسین، با بکارگیری تمامی توان فنی خود، غالبا در ارتباط با مفهوم مقرون به صرفه بودن مشکل دارند. سعی و تمرکز آنها بشتر بر روی امکان پذیری سیستم می باشد. واقعیت این است که هزینه عملیاتی چرخه حیات سیستم و سود حاصل از انجام فعالیت توسط سیستم موتور محرک تصمیم گیری سازمان می باشد. شما می توانید بهترین سیستم، محصول یا خدمت را با کارایی برجسته، ابداع نمائید. اما اگر هزینه های عملیاتی و پشتیبانی سیستم، برای کاربر مقرون به صرفه نباشد سیستم بخصوص درمحیط های تجاری در بدو ورود کنار گذاشته خواهد شد. مقرون به صرفه بودن به عنوان یک پارامتر اندازه گیری به کمک دو موئلفه اندازه گیری می گردد : · هزینه گردش کار · هزینه کارائی کارایی سیستم : به عنوان یک فاکتور عینی ، کارایی سیستم نمایان گر واقعیت های فیزیکی خروجی و نتیجه عملکرد سیستم خواهد بود. این کارایی در دو فرم کارایی برنامه ریزی شده و واقعی خواهد بود . هنگامی که توسعه سیستم کلید می خورد. توسعه دهندگان آن وابسته به آنالیز، مدل سازی و نمونه سازی برای رسیدن به دید فنی جهت آشکارسازی چگونگی انطباق عملکرد سیستم خواهند بود . این داده های در موار ذیل استفاده می گردد : · مشخص کردن و محدود کردن دید به سیستم یا یکی از اجزای آن · مقایسه کارایی برنامه ریزی شده یا نتایج مورد نظر و واقعیت تکنیک های متفاوتی مانند نمونه سازی سریع و ارائه تکنولوژی جهت ارزیابی مدل ها و نمونه ها برای رسیدن به حدس ها و کاهش ریسک استفده می گردد. قصد بر جمع آوری مدارک عینی و تجربی "زود هنگام" برای رسیدن به سطح اطمینان مورد نظر می باشد. نتیجه دقیق ارزیابی و صحت سنجی حدسیات می باشد. کارایی سیستم نیازمند فهم مشارکت فاکتورهایی همچون قابلیت اطمینان، نگهداری و کارایی است . (این کلمات نام آشنا در معماری نرم افزار است در این مجموعه از نوشته ها شما می توانید خطوطی که به معمار جهت توسعه سیستم کمک نمایند را پیدا کنید)
لینک در نظرات پست
مهندسی سیستم بخش هفتم :
ادامه پذیرش سیستم : امکان پذیری و مقرون به صرفه بودن سیستم : اگر برآورد زمانی توسعه یک سیستم، محصول یا خدمت درست باشد، چالش بعدی امکان پذیری توسعه بر اساس مشخصه های تعیین شده و تکنولوژی های موجود در برنامه زمانی تعیین شده و بودجه چرخه حیات در یک سطح ریسک معقول برای کاربر یا برای مالک خواهد بود. امکان پذیری نهایتا بر روی چهار سوال متمرکز می گردد : · کاربر چه چیزی می خواهد ؟ · نیاز کاربر چیست ؟ · کاربر از عهده چه چیزی بر می آید ؟ · برای چه چیزی کاربر حاضر است هزینه پرداخت نماید ؟ به عنوان یک مهندس سیستم، شانس با شما همراه خواهد بود اگر به شما برای پشتیبانی فنی از تیم توسعه کسب وکار جهت توسعه یک سیستم جدید یا بکارگیری یک محصول جدید نیاز داشته باشند در غیر اینصورت شما از یک مهندس سیستم دیگر پشتیبانی خواهید نمود. از نقطه نگاه فنی، تیم مهندسی سیستم چندکاره برای تصور، غنی سازی و ارائه راه کار فنی برای اقناع سوالات بیان شده مورد نیاز است. مقرون به صرفه بودن : معیار عینی موفقیت سیستم در نهایت به مقرون به صرفه بودن آن است. از نقطه نظر سازمان، آیا سیستم کارایی و نتیجه ای که با بازگشت سرمایه تنظیم شده باشد را تولید می نماید ؟ مهندسین، با بکارگیری تمامی توان فنی خود، غالبا در ارتباط با مفهوم مقرون به صرفه بودن مشکل دارند. سعی و تمرکز آنها بشتر بر روی امکان پذیری سیستم می باشد. واقعیت این است که هزینه عملیاتی چرخه حیات سیستم و سود حاصل از انجام فعالیت توسط سیستم موتور محرک تصمیم گیری سازمان می باشد. شما می توانید بهترین سیستم، محصول یا خدمت را با کارایی برجسته، ابداع نمائید. اما اگر هزینه های عملیاتی و پشتیبانی سیستم، برای کاربر مقرون به صرفه نباشد سیستم بخصوص درمحیط های تجاری در بدو ورود کنار گذاشته خواهد شد. مقرون به صرفه بودن به عنوان یک پارامتر اندازه گیری به کمک دو موئلفه اندازه گیری می گردد : · هزینه گردش کار · هزینه کارائی کارایی سیستم : به عنوان یک فاکتور عینی ، کارایی سیستم نمایان گر واقعیت های فیزیکی خروجی و نتیجه عملکرد سیستم خواهد بود. این کارایی در دو فرم کارایی برنامه ریزی شده و واقعی خواهد بود . هنگامی که توسعه سیستم کلید می خورد. توسعه دهندگان آن وابسته به آنالیز، مدل سازی و نمونه سازی برای رسیدن به دید فنی جهت آشکارسازی چگونگی انطباق عملکرد سیستم خواهند بود . این داده های در موار ذیل استفاده می گردد : · مشخص کردن و محدود کردن دید به سیستم یا یکی از اجزای آن · مقایسه کارایی برنامه ریزی شده یا نتایج مورد نظر و واقعیت تکنیک های متفاوتی مانند نمونه سازی سریع و ارائه تکنولوژی جهت ارزیابی مدل ها و نمونه ها برای رسیدن به حدس ها و کاهش ریسک استفده می گردد. قصد بر جمع آوری مدارک عینی و تجربی "زود هنگام" برای رسیدن به سطح اطمینان مورد نظر می باشد. نتیجه دقیق ارزیابی و صحت سنجی حدسیات می باشد. کارایی سیستم نیازمند فهم مشارکت فاکتورهایی همچون قابلیت اطمینان، نگهداری و کارایی است . (این کلمات نام آشنا در معماری نرم افزار است در این مجموعه از نوشته ها شما می توانید خطوطی که به معمار جهت توسعه سیستم کمک نمایند را پیدا کنید)