انتقال تجربیات در حوزه برنامه نویسی دات نت

رعایت Backward Compatibility در سرویس ها

شاید اولین تصویری که با جستجوی کلمه Backward Compatibility به آن برسید تصویر کنسولهای بازی باشد! اتفاقا این تصاویر به خوبی میتوانند توضیح دهند اصطلاح Backward Compatibility چیست: وقتی یک کنسول بازی جدید خریداری کردید اگر این کنسول با بازی های کنسول نسل قدیمی سازگاری داشته باشد (به عنوان مثال بتوان DVD های خریداری شده برای کنسول قدیمی را در کنسول نسل جدید استفاده کرد) آنگاه کنسول جدید ما Backward Compatible هست.

 

سرویس های Backward Compatible چیست؟

اگر سرویس های قدیمی ما همچنان بتوانند پس از انتشار سرویس های جدید به کار خود ادامه دهند و دچار مشکل نشوند آنگاه سرویس های ما Backward Compatible هستند.

به عنوان مثال : سرویس Orders سرویسی میباشد که لیستی از سفارش کاربران را به ما میدهد، بنا به دلایلی مجبور به تغییراتی در سرویس Order میباشیم در این تغییر جدید بازه زمانی از جنس تاریخ نیز میتواند به عنوان ورودی دریافت شود و اگر بازه زمانی دریافت شود آنگاه لیست سفارشات همان بازه زمانی برگشت داده میشود.

نکته: اگر پارامتر بازه زمانی فیلدی اجباری باشد چه اتفاقی خواهد افتاد؟ مشتریان جدید ما اگر متوجه این تغییرات شوند و برنامه خود را با توجه به آن توسعه دهند طبیعتا مشکلی بوجود نخواهد آمد اما نرم افزارهای و سرویس های قبلی که در حال استفاده از این سرویس بودند و اطلاعی از پارامتر جدید ندارند با خطا مواجه شده و دیگر نمیتوانند لیست سفارشات را دریافت کنند.

 

چرا باید سرویس های Backward Compatible داشت؟

شاید بتوان گفت مهمترین دلیل جلوگیری از بروز مشکل برای کاربران سرویس های قدیمی باشد.

 

راه حل ها

1- مطمئن باشیم تغییراتی که اعمال میکنیم باعث بروز خطا در سرویس های قبلی نشود مثلا:

Api/v2/orders : public List<orders> (optional int UserId)

 

فرض کنید سرویس بالا یک متد Get میباشد و با فراخوانی آن لیستی از سفارشات برمیگردد. مشاهده میکنید که پارامتر UserId به صورت Optional تعریف شده و اگر مقدار آن وارد شود آنگاه لیست سفارشات یک کاربر خاص نمایش داده میشود. 

اگر در ورژن جدید سرویس، به اشتباه این فیلد از اختیاری به اجباری تغییر کند آنگاه کاربرانی که از نسخه قدیمی استفاده میکنند به احتمال زیاد به مشکل خواهند خورد.

 

2- خروجی یک سرویس را تغییر ندهید. مثلا ممکن است فکر کنید اضافه کردن یک فیلد در یک فایل Json مشکلی بوجود نخواهد آورد اما شاید یک کاربر بر روی تعداد فیلدهای خروجی حساب باز کرده باشد! و یک عملیات خاصی را روی آنها انجام دهد.

 

3- از Version بر روی URI های خود استفاده کنید و ورژن های قدیمی را حفظ کنید. (و به مرور زمان کاربران را به سمت ورژنهای جدید سوق دهید). یکی از مزیت های این روش این است که دیگر نیاز ندارید Instanse های مختلف از برنامه خود را بالا نگه دارید و همه ورژن ها را در یک نسخه بالا نگه میدارید.

Api/v2/orders

Api/v3/orders 

 

4- از UnitTest استفاده کنید و مطمئن شوید تغییرات شما نسخه های قبلی را دچار مشکل نمیکند.

5- از قراردادهای اتوماتیک بر روی Pipleline های CI/CD استفاده کنید. 

۰۶ تیر ۹۹ ، ۱۴:۵۲ ۰ نظر موافقین ۱ مخالفین ۰
احسان احسانی اطهر

نمایش فارسی در Mi Band 4

نمایش پیام های فارسی در Mi Band 4 با آیفون

سلام دوستان، یه خبر خوش دارم!

تقریبا دیگه مطمئنم هستم که الان می بند 4 قابلیت نمایش فونت ها و پیام های فارسی رو داره! از کجا؟

چون الان دارم ازش استفاده میکنم و اونو فارسی کردم

 

من با گوشی آیفون امتحان کردم و موفق شدم:

اول اپ Mi Fit رو روی گوشی نصب کنید و می بند رو کاملا به روز کنید (Firmware رو آپدیت کنید)

سپس نرم افزار AmazTools رو از اپ استور دانلود کنید و با می بند سینک کنید

در این نرم افزار در قسمت More قسمتی داره با عنوان Watch Languge که از اونجا باید می بند رو عربی کنید

 

 

 

 

۰۷ دی ۹۸ ، ۰۰:۳۲ ۳ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

CDN چیست؟

CDN چیست؟

CDN مخفف Content Delivery Network و به معنای شبکه تحویل محتوا میباشد. 

CDN ها سرورهایی هستند که به صورت جغرافیایی در سرتاسر جهان توزیع شده و وظیفه اصلی آنها این است که محتوای سایت شما را در تمامی سرورهایشان کپی میکنند، حالا وقتی یک درخواست به سمت سایت شما می آید بجای اینکه محتوای سایت شما (اعم از تصاویر، موسیقی، ویدئو، فایلهای متنی و ...) از سرورهای هاست شما به سمت بازدید کننده ارسال شود از نزدیکترین سرور به سمت بازدید کننده ارسال میشود.

به طور دقیقتر وقتی یک کاربر میخواهد از سایت شما بازدید کند ابتدا نزدیکترین سرور از لحاظ جغرافیایی به کاربر پیدا شده و محتوای سایت شما از آن سرور به کاربر ارسال میشود.

 

شاید به صورت عادی اگر همه کاربران شما در یک منطقه مشخص جغرافیایی جمع شده باشند تاثیری چندانی از لحاظ سرعت بارگزای صفحات مشاهده نشود اما اگر کاربران بخواهند از نقاط مختلف دنیا به سایت شما درخواست دهند آن وقت تاثیر CDN ها چشمگیر خواهد بود. هرچند مزایای CDN ها فقط به سرعت بارگزاری صفحات ختم نمیشود. 

در زیر برخی از این مزایا ذکر شده است:

 

1- افزایش سرعت بارگزاری صفحات

2- کاهش پهنای باند هاست 

3- افزایش نرخ در دسترس بودن محتوا و فراوانی داده

4- افزایش امنیت وب سایت

 

۰۹ شهریور ۹۸ ، ۰۹:۲۴ ۰ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

فرمت SVG چیست؟

گرافیک برداری مقیاس پذیر یا Scalable Vector Graphics

SVG فرمت تصویری گرافیک دو بعدی بر پایه XML میباشد که از انیمیشن نیز پشتیبانی میکند. این فرمت به صورت Open Standard توسط W3C از سال 1999 توسعه یافت.

تصاویر SVG به صورت text در فایل xml تعریف میشود. این بدین معنی است که میتوان بر روی تصاویر عملیات جستجو، ایندکس گذاری، کد نویسی و فشرده سازی را انجام داد.
همانند تمامی فایل های xml ، فایل های SVG را نیز میتوان توسط هر نرم افزار ویرایش گر متن به سادگی ایجاد و یا ویرایش کرد.
از طرفی تمامی مرورگر های مدرن از این فرمت پشتیبانی میکنند.

یکی از ویژگی های اصلی این تصاویر مقیاس پذیر بودن آنهاست، به طوری که بدون افزایش حجم یک فایل میتوان یک تصویر گرافیکی را صرفا با تغییر دادن متغیر طول و عرض بزرگ کرد.

نمونه یک تصویر SVG

<?xml version="1.0" encoding="UTF-8" ?>
<svg width="391" height="391" viewBox="-70.5 -70.5 391 391" xmlns="http://www.w3.org/2000/svg">
  <rect x="25" y="25" width="200" height="200" fill="lime" stroke-width="4" stroke="pink" />
  <circle cx="125" cy="125" r="75" fill="orange" />
  <polyline points="50,150 50,200 200,200 200,100" stroke="red" stroke-width="4" fill="none" />
  <line x1="50" y1="50" x2="200" y2="200" stroke="blue" stroke-width="4" />
</svg>

که به صورت زیر نمایش داده میشود:



۲۱ خرداد ۹۸ ، ۰۹:۰۶ ۱ نظر موافقین ۱ مخالفین ۰
احسان احسانی اطهر

OpenEHR چیست؟

OpenEHR چیست؟

OpenEHR یک جامعه مجازی میباشد که در راستای تحقق "تبدیل اطلاعات بهداشتی از فرم های کاغذی و فیزیکی به صورت الکترونیک" فعالیت میکند.

OpenEHR با ارائه یک معماری استاندارد تلاش میکند تا قابلیت Interoperability و تعامل بین تمام سیستم های نرم افزاری در این حوزه را فراهم سازد. 

OpenEHR چه چیزهایی نیست؟

یک نرم افزار نیست

یک بانک اطلاعاتی نیست

یک زبان برنامه نویسی نیست

یک وب سایت نیست

به زبان ساده OpenEHR چیست؟

یک معماری استاندارد برای پرونده های الکترونیک سلامت (EHR) میباشد. 

فرض کنید به یک برنامه نویس و یا یک شرکت تولید کننده نرم افزار درخواست تولید یک سیستم نرم افزاری بیمارستانی را بدهند. به صورت معمول و عادی تحلیل گران و کارشناسان شروع به تجزیه و تحلیل سیستم میکنند، نیازمندی ها، موجودیت ها و ... را شناسایی کرده و در اختیار تیم توسعه دهنده جهت پیاده سازی و اجرا قرار میدهند.

مساله ای که اغلب اتفاق می افتد، این است که کارشناسان نرم افزار ممکن است از دید خود به داده ها و سیستم نگاه کنند و شروع به طراحی و تولید کنند، و از آنجایی که اطلاعات پرونده های پزشکی بسیار پیچیده میباشد اغلب اطلاعات ارزشمندی وجود خواهد داشت که از دید این کارشناسان پنهان می ماند و به مرور زمان در طول حیات سیستم خود را نشان میدهد.

برای اینکه موضوع کمی دقیقتر مشخص شود به این مثال توجه کنید:

فرض کنید از یک برنامه نویس بخواهند فیلد فشارخون را در نرم افزارش ذخیره کند، اولین چیزی که به ذهن این برنامه نویس میرسد این است که یک فیلد فشار خون با نوع Int یا رشته ای در دیتابیس ایجاد کرده و آن را از کاربر دریافت و ذخیره کند.

اما از نگاه یک پزشک فیلد فشارخون میتواند شامل اجزاء زیر باشد:

1- فشار سیستولیک

2- فشار دیاستولیک

3- اندازه کاف (قسمتی که روی بازو بسته میشود)

4- حالت بیمار در حین دریافت فشار خون (نشسته، خوابیده)

5- وضعیت بیمار (هوشیار، بی هوش)

6- نوع فشار سنج

7- واحد اندازه گیری

8- ...


پس مشاهده میکنیم که دید یک پزشک، پرستار یا هرشخصی که تخصصی در حوزه بهداشت و درمان دارد میتواند بسیار متفاوت باشد با دید یک برنامه نویس و یا تحلیلگر.

شاید بپرسید اصلا چه نیازی به ذخیره کردن این همه داده وجود دارد؟! همان فیلد فشار خون کفایت میکند

اول اینکه استفاده از معماری OpenEHR به معنی مجبور بودن به ذخیره سازی حداکثر دیتا نیست. بلکه میتوان حداقل دیتای مورد نیاز را استفاده کرد.

دوم اینکه این اطلاعات در مواقعی بسیار مهم هستند و میتواند مبنای تصمیم گیری های حیاتی برای یک شخص باشد. همچنین در مباحث حقوقی نیز بسیار کاربرد دارد.

خب! تا اینجای کار چه مشکلی شناسایی شد؟

ما تا اینجای این مطلب متوجه شدیم که یکی از مشکلات اصلی سیستم های نرم افزاری حوزه سلامت بدون معماری این است که به علت پیچیده بودن داده های پزشکی و نا آشنا بودن برنامه نویسان و تحلیلگران با این اطلاعات ممکن است داده های زیادی از چشم آنها پنهان بماند و به مرور زمان خودش را نشان دهد که تغییرات سیستم ممکن است با چالش های زیادی مواجه شود.


مزایای OpenEHR چیست و چگونه این مشکل را بر طرف میکند؟

اگر بخواهم خیلی خلاصه مزیت OpenEHR را بگویم باید اینطور ذکر کنم که:

OpenEHR لایه مربوط به تعریف مدل (آرکه تایپ) ها را از لایه برنامه نویسی و توسعه جدا میکند به طوری که افراد متخصص در حوزه پزشکی مشخص میکنند چه داده هایی مورد نیاز است و افراد متخصص در حوزه توسعه و نرم افزار بدون آنکه نیاز باشد اطلاعاتی از داده ها و اصطلاحات پزشکی داشته باشند فقط آنها را ذخیره یا بازیابی میکنند.


همچنین از آنجایی که امروز توسعه نرم افزار با سال های گذشته بسیار تفاوت کرده و حجم قابل توجهی از نرم افزار را میتوان با استفاده از ابزارهای آماده تولید کرد، با طراحی یک Parser برای مدل هایی که از سوی پزشکان تهیه شده است میتوان به صورت اتوماتیک فرم ها و UI را نیز طراحی کرد. 

یعنی اگر یک فرمت استاندارد برای هر نوع داده ای داشته باشیم میتوانیم با استفاده از این Tools که یا خودمان طراحی کردیم یا از ابزارهای OpenSource مربوط به OpenEHR استفاده کردیم میتوانیم برای تمام داده ها و فرم های مورد نیاز UI بسازیم.

۲۹ بهمن ۹۷ ، ۱۷:۱۰ ۲ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

انتشار یک پروژه از طریق ویژوال استدیو بر روی IIS

برای انتشار یک پروژه وب بر روی IIS معمولا از پروژه publish میگیریم و فایل های publish رو بر روی سروری که iis دارد کپی میکنیم که این امر باعث اتلاف زمان میگردد.

برای افزایش سرعت توسعه و تست میتوان از روشی استفاده کرد که در آن تنظیماتی را بر روی ویژوال استدیو وارد میکنیم تا فایل ها بلافاصله پس از publish بر روی iis قرار گیرد.


نصب و تنظیم Web Deploy بر روی ویندوز سرور

1- ابتدا باید بر روی ویندوز سرور web platform installer را نصب کنید. برای این منظور میتوانید از این لینک استفاده کنید.

2- پس از نصب web platform installer  آن را از منوی استارت اجرا کنید. (Microsoft web platform installer) با علامت فلش و رنگ نارنجی.

3- در تب Application گزینه Web Deploy form hosting servers را add کنید و سپس نصب را انجام دهید.

4- اگر ویژگی IIS Management Scripts and Tools را قبلا نصب نکرده اید آن را بدین صورت نصب کنید:

start>server manager>add roles and features>server roles

در اینجا لیستی از features های نصب شده را مشاهده میکنید. حالا به نود web server iis بروید سپس گزینه management tools را باز کنید و تیک گزینه iis management scripts and tools را بزنید و نصب را کامل کنید.

پس از نصب میتوانید از service های نصب شده در سیستم عامل مطمئن شوید که سرویس web deployment agent service به صورت run باشد.


تنظیمات publish بر روی iis

1- پنجره باز iis را ببنید و دوباره باز کنید تا تنظیمات اعمال شود.

2- بر روی سایتی که میخواید فایل ها آنجا publish شوند راست کلیک کنید سپس گزینه Deploy و Configure web deploy publishing را کلیک کنید.

3- در پنجره باز شده گزینه Setup را کلیک کنید.

4- در پنجره ای که باز میشود توضیحاتی ارائه میشود و یک فایل با پسوند .publishsettings نیز ساخته میشود که در توضیحات آدرس آن را مشاهده خواهید کرد. (معمولا روی دسکتاپ ساخته میشود.)

این فایل حاوی تنظیماتی است که باید در ویژوال استدیو برای publish پروژه خود وارد نمایید.

5- فایل مذکور را کپی کرده و به سیستمی که روی آن ویژوال استدیو دارید انتقال دهید.

6- بر روی پروژه خود در ویژوال استدیو کلیک راست کرده و گزینه publish را بزنید. (اگر قبلا تنظیمات publish را انجام داده اید روی گزینه create new profile کلیک کنید)

7- در پنجره جدید بر روی import pofile در پایین پنجره کلیک کنید و فایلی که کپی کردید را وارد نمایید.

8- پس از وارد کردن فایل میتوانید با زدن لینک configure برخی ویرایش ها را انجام دهید.

مثلا پسورد سرور را وارد کنید و آن را ذخیره کنید، یا اگر آدرس سرور مشکل دارد آن را اصلاح کنید و یا ترجیح دهید از Ip سرور بجای نام آن در تنظیمات استفاده کنید.

9- سپس publish را انجام دهید.

اگر با خطا مواجه شدید باید ازامکان اتصال به سرور و صحیح بودن ip ها اطمینان حاصل کنید. همچنین میتوانید از ip سرور به جای nameserver ها استفاده کنید.




۱۹ دی ۹۷ ، ۱۲:۰۶ ۰ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

نکات کاربردی در ویژوال استدیو 2

نکات کاربردی جلسه دوم

1- پیدا کردن فایلی که در حال کار بر روی آن هستیم:

گاهی بر روی یک فایل در حال کار هستیم و میخواهیم بدانیم این فایل دقیقا معادل کدام فایل در Solution میباشد، برای این کار از دکمه های 

Ctrl + [ , s

و یا از پنجره Solution روی گزینه ای که با علامت دو فلش مشخص شده کلیک میکنیم. (Sync with active document)


2- ذخیره کردن محیط کاری

در پنجره windows از طریق منوی savewindowlayout و applywindowslayout میتوان محیط کاری که درست کردیم را ذخیره و بازیابی کنیم میتوانیم چندین محیط کاری بر اساس نوع پروژه درست کنیم.


3- پرش به شروع یا پایان یک بلاک


زمانی که نشان گر موس در کنار علامت } یا { میباشد با زدن دکمه های

Ctrl + ]

به شروع یا پایان آن بلاک میرویم.


4- حرکت به محل قبلی که در حال ویرایش آن بودیم:

با زدن دکمه های 

Ctrl + - 

به محل قبلی که در حال ویرایش بودیم پرش خواهیم داشت. همچنین برای بازگشت به محل فعلی از دکمه های ذیل استفاده میکنیم:

Ctrl + Shift + -



۰۵ مهر ۹۷ ، ۱۵:۰۷ ۰ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

Agile چیست؟

Agile چیست

Agile متدولوژی تولید و توسعه نرم افزار است ، در آن از رویکرد تکرار جهت تحویل نرم افزار استفاده میشود. بدین صورت که بجای تحویل یک دفعه نرم افزار به مشتری ، نرم افزار به تکه های کوچکتری تقسیم شده و در بازه های زمانی مختلف به مشتری تحویل داده میشود. در طی هر بار تحویل به مشتری و گرفتن نظرات آنها ، سعی میشود پروژه در مسیر صحیح و مورد نظر مشتری قرار گیرد.


در این روش پروژه به تکه های کوچکتری تقسیم شده و سپس پس از اولویت بندی در بازه های زمانی مشخص مثلا دوهفته یکبار تحویل مشتری میشود.


یک لیست بسازید

به همراه مشتری جلسه ای داشته باشید و از او بخواهید دقیقا بگوید توقع دارد چه چیزهایی در نرم افزار مورد نیازش مشاهده کند.
ادامه مطلب...
۱۹ اسفند ۹۶ ، ۱۱:۱۲ ۱ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

رفع خطای Gradle در Android Studio

اگر در حین راه اندازی Android Studio به خطای

Error:Failed to open zip file. Gradle's dependency cache may be corrupt

برخورد داشتید مراح زیر را دنبال کنید:

1- دانلود Gradle از لینک:

https://services.gradle.org/distributions/gradle-3.3-bin.zip

2- وارد محل نصب برنامه Android studio شوید مثلا آدرس :

C:\Program Files\Android\Android Studio\

3- وارد فولدر gradle شوید

4- فولدر دانلود شده را اینجا Extract کنید (یعنی داخل این فولدر Gradle باید یک فولدری با نام مثلا Gradle 3.3 که Extract کردید ایجاد گردد)

5- در Android Studio مراحل زیر را انجام دهید:

File->Settings->Build, Exectution, Deployment->Gradle and set "Gradle home" to point your new gradle-3.3 folder.


۱۹ شهریور ۹۶ ، ۱۴:۳۰ ۰ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر

مشاهده تکنولوژی های مورد استفاده یک وب سایت

با افزونه WhatRuns مرورگر Chrome به راحتی با یک کلیک تمام تکنولوژی های مورد استفاده هر وب سایتی را مشاهده کنید.

لینک دانلود:
https://www.whatruns.com

۰۷ شهریور ۹۶ ، ۱۱:۱۳ ۱ نظر موافقین ۰ مخالفین ۰
احسان احسانی اطهر