Forwarded from DotNetZoom (Ali)
🔰 یک نکته پرفرمنسی درباره Logging
🔸استفاده از تامین کننده Console برای Logging در حین ارائه نهایی (Production) به شدت باعث کند شدن و کاهش کارآیی برنامه خواهد شد. بهتر است این تامین کننده را صرفا در محیط Development تنظیم کنید (مانند تصویر)
🔹اگر از WebHost.CreateDefaultBuilder استفاده میکنید، به صورت پیشفرض سه تامین کننده Console و Debug و EventSource ثبت خواهند شد پس لازم است ابتدا آن ها را توسط متد ClearProviders حذف کنید
#PerformanceTuning
_________
@DotNetZoom
🔸استفاده از تامین کننده Console برای Logging در حین ارائه نهایی (Production) به شدت باعث کند شدن و کاهش کارآیی برنامه خواهد شد. بهتر است این تامین کننده را صرفا در محیط Development تنظیم کنید (مانند تصویر)
🔹اگر از WebHost.CreateDefaultBuilder استفاده میکنید، به صورت پیشفرض سه تامین کننده Console و Debug و EventSource ثبت خواهند شد پس لازم است ابتدا آن ها را توسط متد ClearProviders حذف کنید
#PerformanceTuning
_________
@DotNetZoom
آیا برای شروع یادگیری ASP NET Core استفاده از داکیومنتهای مایکروسافت را پیشنهاد می کنید؟
Anonymous Poll
57%
بله
43%
خیر
لوگ کردن رویدادها می تواند در رفع باگها و رهگیری خطاهای برنامه کمک زیادی کند. با استفاده از کتابخانه Serilog می توانید داده های لوگ را به روشهای مختلف نمایش دهید یا در انواه دیتابیس ها ذخیره کنید. در این ویدیو نحوه اضافه کردن Serilog به یک پروژه ASP NET Core و ثبت اطلاعات لوگ در دیتابیس SQL Server آموزش داده میشود.
https://codehaks.com/go/pno
https://codehaks.com/go/pno
به مناسبت عید غدیر تمدید شد...
تخفیف 50 درصدی ویژه عید قربان
به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.
کد تخفیف : qorban
https://codehaks.com/shop
تخفیف 50 درصدی ویژه عید قربان
به مناسبت عید قربان می توانید همه دوره های آموزشی کدهک را با تخفیف 50 درصد تهیه کنید.
کد تخفیف : qorban
https://codehaks.com/shop
در این دوره به آموزش Entity Framework می پردازیم. کار را با یک پروژه کاملا خالی شروع می کنیم و سپس کتابخانه های لازم برای کار با روش Code First در Entity Framework را به آن اضافه می کنیم. گام به گام پیش میرویم تا دیتابیس ایجاد کنیم و اطلاعات را در آن ذخیره کنیم.
https://codehaks.com/go/efk
https://codehaks.com/go/efk
رقابت بسیار نزدیک پرفورمنس gRPC در دات نت 5 در کنار RUST و ++C و Go
آدرس بنچمارک:
https://codehaks.com/go/ykn
آدرس بنچمارک:
https://codehaks.com/go/ykn
در بسیاری از پروژه های وب نیاز به نمایش Select داریم که داده های آن از دیتابیس خوانده میشود. در این ویدیو به نحوه پیاده سازی آن در ASP .NET Core و Razor Page آشنا میشویم.
https://codehaks.com/go/pzo
https://codehaks.com/go/pzo
Forwarded from کدهک
با استفاده از ابزار Health Checks در ASP NET Core می توانید سلامتی اپلیکیشن خود را به دیگر سرویس ها اطلاع دهید. این ابزار امکان میدهد مواردی مانند اتصال به اینترنت، بالا بودن سرور دیتابیس یا دسترسی به سرویس پیامک و ... را چک کنیم و در صورت وجود مشکل به دیگران اطلاع دهیم.
https://codehaks.com/go/tpk
https://codehaks.com/go/tpk
آموزش RabbitMQ و پیاده سازی الگوی Messaging
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
در این ویدیو به معرفی RabbitMQ می پردازیم و نحوه استفاده از آن را در NET Core. بررسی می کنیم. از RabbitMQ به عنوان Message Broker استفاده میشود که میتواند پیامها را درون صف نگه دارد و به ترتیب در اختیار سایر سرویس ها قرار دهد. این ابزار در پیاده سازی Distributed System ها و میکروسرویس ها کاربرد زیادی دارد.
https://codehaks.com/go/fpw
Forwarded from DotNetZoom (Ali)
✅ افزایش امنیت JWT توسط Refresh Token در ASP NET Core
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
___________
@DotNetZoom
وقتی از Jwt واسه احراز هویت برنامه تون استفاده میکنین سوالی که پیش میاد اینه که زمانی که توکن کاربر Expire (منقضی) شد چی میشه؟!
1️⃣ آیا باید کاربر رو Logout کنیم و ازش بخوایم دوباره لاگین کنه؟ اگه وسط یه عملیات مهم باشه چی؟! همه چی از دست میره که! 🤔
2️⃣ شایدم باید مدت زمان توکن رو زیاد کنیم، مثلا 1 سال !! تا دیر به دیر منقضی بشه. که این عملا بدترین راه حل ممکن هست چرا که اگه توکن به سرقت بره، هکر تا یک سال میتونه هر کاری میخواد با توکن طرف (هویتش) بکنه 😕
3️⃣ یا اینکه یوزر و پسورد طرف رو بگیریم سمت خودمون ذخیره کنیم (مثلا توی localStorage توی وب) و هر موقع توکن اش منقضی شد، زیر پوستی خودمون یوزر پس طرف رو بفرستیم و توکن جدید بگیریم؟! اینم که ضعف امنیتی داره چون یوزر و پس طرف در معرض خطره 🤨
🔰پس راه حل چیه؟
🔸راه حل استفاده از Refresh Token هست. به این صورت که وقتی طرف برای بار اول میخواد احراز هویت بشه، یوزر و پس اش رو به ما میده و ما 2تا توکن بهش میدیم. یکی access_token که همون Jwt هست و دیگری یک refresh_token که عملا یه متن رندم (مثلا یه Guid) هست
این رفرش توکن (guid) توی دیتابیس ما ذخیره شده که به ازای چه کاربری و چه access_token ایی هست، در نتیجه وقتی طرف access_token اش منقضی میشه به جای اینکه لازم باشه 2مرتبه یوزر و پس برای ما بفرسته، با فرستادن refresh_token میتونه یه توکن جدید (شامل یه access_token جدید + یه refresh_token جدید) دریافت کنه که اینطوره ضریب امنیت بالا میره (چون یوزر پس اشو نمیفرسته)
🔹ضمن اینکه هر بار گرفتن access_token توسط refresh_token ، اون access_token قبلی رو غیرفعال میکنه، پس اگر access_token به سرقت بره، با Revoke کردنش توسط refresh_token، غیر قابل استفاده میشه و باز هم ضریب امنیت بالاتر میره
🔸این عملیات هم سمت فرانت یا کلاینت باید پشت پرده و زیر پوستی انجام بشه تا کاربر اصلا متوجه logout و login شدن مجددش نشه. مثلا توی Angular توسط HttpIncerceptor میتونیم قبل از Api Call ها چک کنیم که اگر access_token مون منقضی شده، ابتدا توسط refresh_token، یه توکن جدید بگیریم و بعد Api Call مون رو انجام بدیم
🔰خیلی از دوستان هم میپرسن مدت زمان انقضای access_token و refresh_token چقدر باید باشه؟
🔹هیچ بایدی وجود نداره و همه جوره زمان میدن بهش. درکل چیزی که مهمه اینه که مدت زمان access_token باید کم باشه و مدت زمان refresh_token بیشتر.
مثلا شخصا ترجیح میدم مدت زمان access_token بین 5 دقیقه تا نهایتا 1 ساعت باشه
و مدت زمان refresh_token بین 1 هفته تا نهایتا 1 ماه باشه
🔸هرچی کمتر باشه ضریب امنیت بیشتر میشه ولی تعداد ریکوئستا به سرور هم بیشتر میشه
البته یه مشکلی که هنگام استفاده از RefreshToken پیش میاد اینه که اگه کاربر توی مدت زمان refresh_token با سایت هیچ تعاملی نداشته باشه که توکن جدید دریافت کنه، مثلا بیشتر از 1 ماه به سایت ما سر نزنه، بعدش کلا logout میشه و باید دوباره توسط User و Pass لاگین کنه (که خب به نظرم منطقی هم هست)
❇️ از بین مقاله های زیادی که برای RefreshToken در ASP Core هست؛ این2تا رو براتون گلچین کردم که خیلی خوب توضیح دادند و اصولی پیاده سازی کردند
1️⃣ https://bit.ly/2ZZ2JwT
2️⃣ https://bit.ly/2ZWTk9o
___________
@DotNetZoom
C-Sharpcorner
Handle Refresh Token Using ASP.NET Core 2.0 And JSON Web Token
In this article , you will learn how to deal with the refresh token when you use jwt (JSON Web Token) as your access_token.
Forwarded from کدهک
در این ویدیو یک پروژه ی دمو با دیتابیس RavenDB در ASP Core پیاده می کنیم.
https://tinyurl.com/y5z3ak2n
https://tinyurl.com/y5z3ak2n
ارتباط با اکسل در دات نت
در این ویدیو به آموزش نحوه کار با COM Interop در dot NET Core می پردازیم. با استفاده از Component Object Model میتوانید محیط اکسل را از طریق کد سی شارپ کنترل کنید. ورکبوک جدید ایجاد کنید. درون سلولها محتوایی بنویسید و به صورت فایل ذخیره کنید.
https://codehaks.com/go/kve
در این ویدیو به آموزش نحوه کار با COM Interop در dot NET Core می پردازیم. با استفاده از Component Object Model میتوانید محیط اکسل را از طریق کد سی شارپ کنترل کنید. ورکبوک جدید ایجاد کنید. درون سلولها محتوایی بنویسید و به صورت فایل ذخیره کنید.
https://codehaks.com/go/kve
آشنایی با ZeroMQ
در این ویدیو به معرفی ZeroMQ می پردازیم و نحوه استفاده از آن را در NET Core بررسی می کنیم. برای استفاده از این ابزار باید پکیچ NetMQ را به پروژه دات نت اضافه کنید و سپس می توانید از ZeroMQ برای ارسال پیام بین چند سرویس یا اپلیکیشن استفاده کنید.
https://codehaks.com/go/pju
در این ویدیو به معرفی ZeroMQ می پردازیم و نحوه استفاده از آن را در NET Core بررسی می کنیم. برای استفاده از این ابزار باید پکیچ NetMQ را به پروژه دات نت اضافه کنید و سپس می توانید از ZeroMQ برای ارسال پیام بین چند سرویس یا اپلیکیشن استفاده کنید.
https://codehaks.com/go/pju
Forwarded from کدهک
Forwarded from DotNetZoom (Ali)
❇استفاده از پروکسی داخل پروژه های دات نت Framework Full
https://goo.gl/4JbeYW
خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)
تو NetFramework Full به صورت زیر عمل میکردیم
- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.
- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.
- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.
همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
درصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
@DotNetZoom
https://goo.gl/4JbeYW
خب وقتی پروکسی سرور خودتون رو راه انداختین باید کاری کنین که تمام درخواست های وبسایت شما (مثلا درخواست ارسال نوتیفیکشن تلگرام) از طریق پروکسی سرور شما ارسال بشه نه توسط خود وبسایتتون (یعنی Default Proxy پروژه تون رو عوض کنین)
تو NetFramework Full به صورت زیر عمل میکردیم
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { UseDefaultCredentials = true };
- فیلد BypassOnLocal مشخص میکنه که درخواست های local (محلی) از طریق پروکسی عبور نکنه و مستقیما ارسال بشه.- توسط خاصیت BypassList و BypassArrayList میشه لیستی از ادرس هایی رو مشخص کرد که برای درخواست اونها اون ها پروکسی استفاده نشه.
- خاصیت UseDefaultCredentials مشخص میکنه که از Credentials پیشفرض استفاده کنه که در حالت عادی یعنی Username و Password جهت احراز هویت پروکسی سرور ارسال نمیشه.
- اگه پروکسی سروو شما دارای Username و Password باشه باید اون رو داخل خاصیت Credentials شی WebProxy ست کنین.
WebRequest.DefaultWebProxy = new WebProxy("http://127.0.0.1:9050", BypassOnLocal: true) { Credentials = new NetworkCredential("username", "password") };
ست کردن مقدار WebRequest.DefaultWebProxy باعث میشه پروکسی پیشفرض پروژه تغییر کنه و از این به بعد تمام درخواست ها (به جز Local به دلیل Bypass در این مثال) از طریق پروکسی ارسال و دریافت بشه.همچنین مشابه تنظیمات بالا رو میتونین از طریق WebConfig به صورت زیر انجام بدین
<configuration>
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:9050" bypassonlocal="true" usesystemdefault="true"/>
</defaultProxy>
</system.net>
</configuration>
اما این روش (DefaultProxy) باعث میشه درخواست های کل سیستم از طریق پروکسی ارسال و دریافت بشهدرصورتی که نیاز دارین فقط برای یک درخواست خاص (مثل ارسال نوتیفیکیشن توسط api تلگرام) از پروکسی استفاده کنین و نه تمام درخواست ها
باید به صورت زیر عمل کنین
WebProxy proxy = new WebProxy("http://127.0.0.1:9050",true);
WebRequest request = WebRequest.Create("http://www.contoso.com");
request.Proxy = proxy;
_______________@DotNetZoom
آموزش MongoDb در ASP.NET Core - قسمت اول
دیتابیس MongoDb از نوع NoSQL است که اطلاعات را صورت اسناد ذخیره می کند. این دیتابیس در سالهای اخیر محبوبیت زیادی پیدا کرده و در بسیاری از پروژه های کوچک و بزرگ مورد استفاده قرار گرفته است. در این مجموعه به آموزش پیاده سازی وب سایت ASP.NET Core روی دیتابیس MongoDb می پردازیم.
https://codehaks.com/go/mng1
دیتابیس MongoDb از نوع NoSQL است که اطلاعات را صورت اسناد ذخیره می کند. این دیتابیس در سالهای اخیر محبوبیت زیادی پیدا کرده و در بسیاری از پروژه های کوچک و بزرگ مورد استفاده قرار گرفته است. در این مجموعه به آموزش پیاده سازی وب سایت ASP.NET Core روی دیتابیس MongoDb می پردازیم.
https://codehaks.com/go/mng1
Forwarded from کدهک
بهینه سازی GC در دات نت
در سی شارپ پاکسازی حافظه به عهده GC است. در این ویدیو به بررسی اثر منفی استفاده از Large Object Heap در پرفورمنس می پردازیم و سعی می کنیم از آن دوری کنیم.
https://codehaks.com/go/loh
در سی شارپ پاکسازی حافظه به عهده GC است. در این ویدیو به بررسی اثر منفی استفاده از Large Object Heap در پرفورمنس می پردازیم و سعی می کنیم از آن دوری کنیم.
https://codehaks.com/go/loh
آموزش MongoDb در ASP.NET Core قسمت دوم
در این قسمت به ادامه پیاده سازی پروژه می پردازیم و قابلیت ویرایش و حذف را به آن اضافه می کنیم.
https://codehaks.com/go/mng2
در این قسمت به ادامه پیاده سازی پروژه می پردازیم و قابلیت ویرایش و حذف را به آن اضافه می کنیم.
https://codehaks.com/go/mng2
Forwarded from اِسکیلی Skilly (مهدی کرامتی)
آیا در همه پروژه هایی که برنامه نویس ها اینقدر به خودشان زحمت میدن لایه بندی ها و پیاده سازی الگوهایی مثل Unit of Work و Repository و ... میدن و در حین انجامش کلی درگیری های مختلف پیدا می کنند، آیا وجود این همه لایه و دردسرهای تحمیلی حاصله ضرورت داره؟
Final Results
12%
من همیشه، حتی وقتی لازم نیست لایه بندی ها رو اجرا می کنم
32%
مزیت های لایه بندی بیشتر از تحمل دردسرهای اجرایش است.
25%
برنامه نویس ها اکثرا بخاطر خیلی حرفه ای جلوه دادن کارشون این دردسرها رو می پذیرند.
31%
هیچکام، مشاهده نتایج
Forwarded from اِسکیلی Skilly (Kambiz Asadzadeh)
یکی از مشکلاتی که این روزها بسیار دیده میشود، این است که چگونه باید قیمت بدیم و چطور با مشتری برخورد کنیم!
برنامهنویس حرفهای و واقعی هیچگاه پشت تلفن و با یک جلسه ملاقات هزینه و زمان برای انجام پروژه را مشخص نمیکند. بر خلاف انتظاری که مشتری از شما دارد، به هیچ عنوان نباید هزینههای زمانی و مالی را بدون تجزیه تحلیل اولیه بیان کنید. چرا که اگر مشتری شما واقعاً مصمم در انجام پروژهای باشد که هدفمند است، در این صورت حتماً از شما انتظار یاری و مشاروهٔ را خواهد داشت.
بنابراین توصیه میکنم، شدیداً به این نکته توجه داشته باشید که به هیچ عنوان در ملاقات اولیه و یا حتی در پشت تلفن قیمت و زمان برای پروژهٔ پیشنهادی از طرف مشتری ارائه نکنید. این نشانگر این است که شما به اندازهٔ کافی به زمان، مهارت و تخصص خود مطمئن نیستید.
پیشنهاد میشود هر پروژهای که به شما پیشنهاد شد، آن رو در یک زمان مناسب بررسی و مواردی که فکر میکنید نیاز است مشتری در جریان آن قرار بگیرد را به زبان سادهتر به او انتقال دهید.
1️⃣ ابتدا نیاز مشتری را به خوبی درک کنید، در قدم بعدی بررسی زمانی و سپس بررسی روشها و ابزارهایی که قرار است در توسعهٔ پروژه مورد استفاده برار بگیرد را برای خودتان مشخص کنید.
2️⃣ مهارت خود را همراه با دانش، اطلاعاتِ تکیه بر تجربیات خود برای پیادهسازیِ پروژهٔ پیشنهادی مرور کرده و آن را بر اساس نتیجهٔ حاصل شده ارزیابی کنید.
3️⃣ زمانی را که در طی چند ساعت، روز، هفته و ماه نیاز دارید به طور تقریبی و نزدیک به واقعیت محاسبه کنید. (زمان از نظر مشتری بسیار مهم است، او انتظار دارد در زمانی که شما طی کردهاید به نتیجه برسد).
4️⃣ قیمت را به صراحت و جدی برای مشتریِ خود مشخص کنید (مشخص کردن قیمت ترسی ندارد و شما باید واقعیت را بیان کنید) مهم نیست که مشتری چه واکنشی نشان خواهد داد. شما واقعیت را بیان کنید (بیان کردن واقعیت یعنی یک قدم برای تعریف ارزش برنامهنویسی به طرف مقابل) تا دیگر فرصتی برای بی ارزش کردن کار شما وجود نداشته باشد.
5️⃣ اگر مشتری با شنیدن هزینهٔ پیشنهادی شما جهت انجام کار شروع به مثال آوردن از برنامهنویسانی کرد که متخصص در این حوزه نیستند، مطمئن شوید که او ارزش پروژهٔ خود را به خوبی نمیداند. (اگر مشتری شخصیت انتقاد پذیری داشته باشد، میتوانید او را قانع کنید که کاملاً در اشتباه است) در غیر این صورت نباید در مورد هزینهها اصرار و تأکید داشته باشد، چرا که هزینهها بر اساس نیازها و معیار های واقعی مطرح میشوند.
5️⃣ تخفیف در برنامهنویسی در قدم اول معنی ندارد! در همان لحظه که احساس میکنید مشتریِ شما بیشتر به فکر هزینه است تا به فکر کیفیت، شک نکنید که در نهایت رضایت دو جانبهای وجود نخواهد داشت! چون این قرارداد یک طرفه و صرفاً بر اساس هزینهها بسته میشود.
6️⃣ به مشتری اطمینان خاطر بدهید که پروژهٔ او در بهترین حالت ممکن تولید خواهد شد! اگر بتوانید و اگر مهارت شما در حدی باشد که محصولی مشابه محصولات استاندارد و جهانی بسازید شک نکنید که موفق خواهید شد. تأکید میکنم مشتری در قدم اول هیچ کاری با کدهای شما ندارد و صرفاً منتظر نتیجهای است که باید ببیند و آن را حس و درک کند.
7️⃣ مشاوره را در هر مرحله از توسعهٔ پروژه در نظر بگیرید، سعی کنید نظرات مشتری را در مباحث تجربهکاربری گوش بدهید، اما اجازه ندهید در مورد مباحث فنی نظری را ارائه کنند! مگر دلایل قانع کننده و اساسی که در شرایط خاص توسط مشاورین فنی در پروژههای بزرگ و اساسی پیشنهاد میشود.
8️⃣ در صورتی که در داخل یک تیم کار میکنید، تعامل تنها روش ممکن برای موفقیت است! بحث و جدال با همتیمیها هیچ فایدهای به جز نا رضایتی نخواهد داشت.
9️⃣ اگر با مشکلاتی مواجه میشوید که باعث میشود شما کم کاری کنید آن را باید مدیریت کنید! نگذارید مشتری شما احساس کند که هر موقع حوصله داشتید روی پروژهٔ او کار میکنید. بنابراین برای حفظ ارزشها و درک برای احترامهای متقابل حتماً از برنامهٔ زمانبندی شده برای مشتری خود ارائه کنید.
0️⃣1️⃣ عقد قرارداد و تفاهم نامه در رابطه با عدم افشای اطلاعات مهم است! اگر میخواهید حرفهای باشید و با شما حرفهای رفتار شود همیشه خودتان پیش قدم برای عقد قراردادهای تضمین شده برای دو طرف را باشید.
1️⃣1️⃣ سعی کنید پروژهای که واقعاً آن را دوست ندارید را انجام ندهید! برنامهنویسی باید همراه با لذت باشد، در غیر این صورت کار بر روی آن بسیار خستهکننده خواهد بود که باعث ناراحتی و مشکلات احتمالی خواهد شد؛ بنابراین سعی کنید توسعهٔ پروژه برای شما جذاب و لذت بخش باشد.
2️⃣1️⃣ برنامهنویسی شغل بسیار موثر و سطح بالایی در این دوره زمانه است، بنابراین طوری رفتار کنید که در شأن آن هستید و قدر آن را بدانید.
[ @KambizAsadzadeh ]
برنامهنویس حرفهای و واقعی هیچگاه پشت تلفن و با یک جلسه ملاقات هزینه و زمان برای انجام پروژه را مشخص نمیکند. بر خلاف انتظاری که مشتری از شما دارد، به هیچ عنوان نباید هزینههای زمانی و مالی را بدون تجزیه تحلیل اولیه بیان کنید. چرا که اگر مشتری شما واقعاً مصمم در انجام پروژهای باشد که هدفمند است، در این صورت حتماً از شما انتظار یاری و مشاروهٔ را خواهد داشت.
بنابراین توصیه میکنم، شدیداً به این نکته توجه داشته باشید که به هیچ عنوان در ملاقات اولیه و یا حتی در پشت تلفن قیمت و زمان برای پروژهٔ پیشنهادی از طرف مشتری ارائه نکنید. این نشانگر این است که شما به اندازهٔ کافی به زمان، مهارت و تخصص خود مطمئن نیستید.
پیشنهاد میشود هر پروژهای که به شما پیشنهاد شد، آن رو در یک زمان مناسب بررسی و مواردی که فکر میکنید نیاز است مشتری در جریان آن قرار بگیرد را به زبان سادهتر به او انتقال دهید.
1️⃣ ابتدا نیاز مشتری را به خوبی درک کنید، در قدم بعدی بررسی زمانی و سپس بررسی روشها و ابزارهایی که قرار است در توسعهٔ پروژه مورد استفاده برار بگیرد را برای خودتان مشخص کنید.
2️⃣ مهارت خود را همراه با دانش، اطلاعاتِ تکیه بر تجربیات خود برای پیادهسازیِ پروژهٔ پیشنهادی مرور کرده و آن را بر اساس نتیجهٔ حاصل شده ارزیابی کنید.
3️⃣ زمانی را که در طی چند ساعت، روز، هفته و ماه نیاز دارید به طور تقریبی و نزدیک به واقعیت محاسبه کنید. (زمان از نظر مشتری بسیار مهم است، او انتظار دارد در زمانی که شما طی کردهاید به نتیجه برسد).
4️⃣ قیمت را به صراحت و جدی برای مشتریِ خود مشخص کنید (مشخص کردن قیمت ترسی ندارد و شما باید واقعیت را بیان کنید) مهم نیست که مشتری چه واکنشی نشان خواهد داد. شما واقعیت را بیان کنید (بیان کردن واقعیت یعنی یک قدم برای تعریف ارزش برنامهنویسی به طرف مقابل) تا دیگر فرصتی برای بی ارزش کردن کار شما وجود نداشته باشد.
5️⃣ اگر مشتری با شنیدن هزینهٔ پیشنهادی شما جهت انجام کار شروع به مثال آوردن از برنامهنویسانی کرد که متخصص در این حوزه نیستند، مطمئن شوید که او ارزش پروژهٔ خود را به خوبی نمیداند. (اگر مشتری شخصیت انتقاد پذیری داشته باشد، میتوانید او را قانع کنید که کاملاً در اشتباه است) در غیر این صورت نباید در مورد هزینهها اصرار و تأکید داشته باشد، چرا که هزینهها بر اساس نیازها و معیار های واقعی مطرح میشوند.
5️⃣ تخفیف در برنامهنویسی در قدم اول معنی ندارد! در همان لحظه که احساس میکنید مشتریِ شما بیشتر به فکر هزینه است تا به فکر کیفیت، شک نکنید که در نهایت رضایت دو جانبهای وجود نخواهد داشت! چون این قرارداد یک طرفه و صرفاً بر اساس هزینهها بسته میشود.
6️⃣ به مشتری اطمینان خاطر بدهید که پروژهٔ او در بهترین حالت ممکن تولید خواهد شد! اگر بتوانید و اگر مهارت شما در حدی باشد که محصولی مشابه محصولات استاندارد و جهانی بسازید شک نکنید که موفق خواهید شد. تأکید میکنم مشتری در قدم اول هیچ کاری با کدهای شما ندارد و صرفاً منتظر نتیجهای است که باید ببیند و آن را حس و درک کند.
7️⃣ مشاوره را در هر مرحله از توسعهٔ پروژه در نظر بگیرید، سعی کنید نظرات مشتری را در مباحث تجربهکاربری گوش بدهید، اما اجازه ندهید در مورد مباحث فنی نظری را ارائه کنند! مگر دلایل قانع کننده و اساسی که در شرایط خاص توسط مشاورین فنی در پروژههای بزرگ و اساسی پیشنهاد میشود.
8️⃣ در صورتی که در داخل یک تیم کار میکنید، تعامل تنها روش ممکن برای موفقیت است! بحث و جدال با همتیمیها هیچ فایدهای به جز نا رضایتی نخواهد داشت.
9️⃣ اگر با مشکلاتی مواجه میشوید که باعث میشود شما کم کاری کنید آن را باید مدیریت کنید! نگذارید مشتری شما احساس کند که هر موقع حوصله داشتید روی پروژهٔ او کار میکنید. بنابراین برای حفظ ارزشها و درک برای احترامهای متقابل حتماً از برنامهٔ زمانبندی شده برای مشتری خود ارائه کنید.
0️⃣1️⃣ عقد قرارداد و تفاهم نامه در رابطه با عدم افشای اطلاعات مهم است! اگر میخواهید حرفهای باشید و با شما حرفهای رفتار شود همیشه خودتان پیش قدم برای عقد قراردادهای تضمین شده برای دو طرف را باشید.
1️⃣1️⃣ سعی کنید پروژهای که واقعاً آن را دوست ندارید را انجام ندهید! برنامهنویسی باید همراه با لذت باشد، در غیر این صورت کار بر روی آن بسیار خستهکننده خواهد بود که باعث ناراحتی و مشکلات احتمالی خواهد شد؛ بنابراین سعی کنید توسعهٔ پروژه برای شما جذاب و لذت بخش باشد.
2️⃣1️⃣ برنامهنویسی شغل بسیار موثر و سطح بالایی در این دوره زمانه است، بنابراین طوری رفتار کنید که در شأن آن هستید و قدر آن را بدانید.
[ @KambizAsadzadeh ]
Forwarded from اِسکیلی Skilly (Kambiz Asadzadeh)
3️⃣1️⃣ سطح معلومات خود رو مدام افزایش دهید، توانایی درک مسائل و حل آنها بسیار مهم است.
4️⃣1️⃣ بهروز رسانی ابزارها را جدی بگیرید و مدام مستندات مراجع رو مطالعه کنید.
5️⃣1️⃣ زبانهای برنامهنویسی را ابزارهای موجود در جعبه ابزار خود بدانید و از هر کدام در جای مناسب استفاده کنید.
6️⃣1️⃣ شکرگزار باشید و از تلاش منصرف نشوید، من قبلاً در مقالات و کتابهای خود به این موضوع اشاره کردهام، زمانی که خسته شدهاید و احساس میکنید توان ادامه ندارید، در این لحظه شک نکنید، که شما به موفقیت بسیار نزدیک شدهاید.
#نکته #پند #توصیه #نکات #مشاوره #رایگان #برنامهنویس #برنامهنویسی #مشتری #اصول
[ @KambizAsadzadeh ]
4️⃣1️⃣ بهروز رسانی ابزارها را جدی بگیرید و مدام مستندات مراجع رو مطالعه کنید.
5️⃣1️⃣ زبانهای برنامهنویسی را ابزارهای موجود در جعبه ابزار خود بدانید و از هر کدام در جای مناسب استفاده کنید.
6️⃣1️⃣ شکرگزار باشید و از تلاش منصرف نشوید، من قبلاً در مقالات و کتابهای خود به این موضوع اشاره کردهام، زمانی که خسته شدهاید و احساس میکنید توان ادامه ندارید، در این لحظه شک نکنید، که شما به موفقیت بسیار نزدیک شدهاید.
#نکته #پند #توصیه #نکات #مشاوره #رایگان #برنامهنویس #برنامهنویسی #مشتری #اصول
[ @KambizAsadzadeh ]