امیرحسین مرجانی

استفاده از Hangfire در ABP.io

به طور خلاصه Hangfire یک کتابخانه برای نمایش و مدیریت فعالیت های پشتی (BackgroundJon, BackgroundWorker) هست، فریم ورک Abp (به نظر من) بهترین فریم ورک .net  موجود هست که با قراردادن بهترین کتابخانه ها و بهترین تجربیات Best Practice  کمک می کنه تا تیم توسعه درگیر موضوعات زیرساختی نشوند و روی بیزینس اصلی نرم افزار تمرکز کنند. (در آینده در مورد این فریم ورک بیشتر خواهم گفت)

بنا به مستندات Abp  شما می توانید به راحتی ترد (Thread) های پشتی را راه ایجاد کنید، امکان یکپارچه سازی این ترد ها با Hangfire  هم به راحتی وجود دارد. نکته اصلی این هست که در حال حاضر مستندات ارائه شده مشکل دارد و نیاز به بازبینی دارد، البته در یک درخواست پشتیبانی به مشکل و راه حل اون اشاره شده که احتمالا به زودی این مشکل هم برطرف می شود. این درخواست از پشتیبانی مبنای این مطلب بنده هم شده.

بریم سراغ اصل موضوع:

بنا به مستندات برای یکپارچه سازی با Hangfire نیاز دارید ماژول AbpBackgroundWorkersHangfireModule به یکی از ماژول های خود اضافه کنید (در مورد سیستم فوق العاده ماژولاریتی Abp خودتان مطالعه کنید)

تنظیمات Hangfire

بعد از اون به سراغ تنظیمات Hangfire می رویم، همان طور که اطلاع دارید Hangfire  برای ذخیره اطلاعات مورد نیازش به یک پایگاه داده (JobStorage) دارد، این پایگاه داده می تواند Sql Server یا Redis  باشد. در حال حاضر استفاده از Redis  جز پلن پولی هست. تنظیمات در ماژول به صورت زیر خواهد بود (متد ConfigureHangfire را خودم اضافه کردم):

  • در خط 78 اطلاعات اتصال به دیتابیس را تعیین می کنیم، در اینجا مشخص کردیم که اگر برای Hangfire در appsettings.json  کانکشن استرینگ تنظیم نشده بود، از کانکشن استریگ پیش فرض استفاده کن.
  • در خط 85 تنظیمات مربوط به SqlServerStorage  را آماده می کنیم، در مورد تنظیمات می توانید به مستندات مراجعه کنید. نکته خط 92 هست که مشخص می کنیم اگر لازم هست جداول مورد نیاز را بسازد.
  • در خط 96 کانشکشن استرینگ و تنظیمات را برای Hangfire ست می کنیم.

 

تنظیمات Dashbord

برای اینکه بتوانید داشبورد Hangfire را مشاهده کنید، نیاز هست middleware مربوط به آن را اضافه کنید:

بعد از اجرای برنامه داشبود در آدرس /hangfire  در دسترس هست

ساخت BackgroundWorker

بر طبق مستندات یک کلاس Worker  مشتق شده از  HangfireBackgroundWorkerBase ساخته می شود.

  • در خط 21 ایتریشن (چرخه اجرا) را مشخص می کنیم، در ایجا می توانید از cron syntax استفاده کنید.
  • در خط 24  یک تابع DoWorkAsync وجود دارد که فعالیت اصلی در آن تعریف می شود.

در نهایت نیاز هست که این کلاس رو به لیست برنامه های پشتی اضافه کنیم:

در صورتی که سوال یا ابهامی در این مورد دارید با من تماس بگیرید، اطلاعات تماس در صفحه تماس هست

 

 

 

دریافت راحت ایمیج های داکر

حل مشکل دریافت imageهای داکر (ویندوز) با این وضعیت اینترنت!

اول کلام یه سلامی عرض بکنیم به اون #نارفیق !

اگر شما هم با داکر سروکار داشته باشید، حتما متوجه مشکلات دریافت ایمیج‌های داکر (در این مدت اخیر) شده اید، و احتمالا تا حالا خودتان هم روشی پیدا کرده اید.

پارس پک زحمت کشیده و روی دامنه docker.ir  یک mirror از داکرهاب قرار دادِ و توی همین سایت هم تنظیماتش رو برای لینوکس توضیح داده، ولی چیزی در مورد ویندوز نگفتِ. من می خواهم روش تنظیم در ویندوز رو توضیح بدهم.

برای اون دسته از دوستانی که احتمالا نمی دانند به طور خلاصه بگم: یک کپی از ایمیج های داکرهاب رو در داخل ایران تحویل می ده.

برای تنظیم mirror سایت docker.ir  فایل تنظیمات زیر رو باز کنید:

C:\Users\{USERNAME}\.docker\daemon.json

در خط اول ریجیستری docker.ir  رو اضافه کنید:

 "registry-mirrors": ["https://registry.docker.ir"]

در نهایت فایل شما باید محتوای مشابه داشته باشه:

{

"registry-mirrors": ["https://registry.docker.ir"],

"insecure-registries": [],

"debug": false,

"experimental": false,

"features": {

"buildkit": true

},

"builder": {

"gc": {

"enabled": true,

"defaultKeepStorage": "20GB"

}

}

}

بعد از این ذخیره کنید و داکر رو ریست کنید.

حالا می توانید پکیچ های رایج رو بدون زخم خون ریزی دریافت کنید

docker pull redis

اصلاح تاریخ شمسی در گرید های ناپ‌کامرس

برای مشاهده آموزش اصلاح DatetimePicker  تاریخ شمسی کلیک کنید

اگر به دنبال پروژه های متن باز و راه اندازی فروشگاه اینترنتی بوده اید، حتما با حال اسم NopCommerce  به گوش شما خورده است، پروژه بی نظیری که تصمیم دارم از این به بعد بیشتر در موردش صحبت کنم و بنویسم. آشنایی من با این پروژه بر می گرده به حدود شش سال پیش [پروژه مترجم فایل های ناپ‌کامرس]، آن زمان که نسخه 3.9 منتشر شده بود، آن زمان به درخواست یکی از عزیزان به دنبال راه اندازی فروشگاه اینترنتی با قابلیت پذیریش بیت کوین بودم. کار جدی من با نسخه 4.2 برای سایت آروان چوب، نسخه 4.3 برای فروشگاه اینترنتی طب تیک، و نسخه 4.4 برای فروشگاه دنسیس بوده است.

یکی از دغدغه هایی که در پروژه های متن سازی بین المللی وجود دارد، بومی سازی پروژه های برای مصرف داخل هست، پروژه ناپ‌کامرس به خوبی از چند زبانگی (multi languages) و چند محلی (multicultural) پشتیبانی می کند و برای استفاده در محیط فارسی و شمسی نیاز به تغییر زیادی ندارد، و اکثر تغییرات به صورت خودکار اعمال می شود.

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

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

تمامی گرید های ناپ کامرس توسط یک Partial View  به نام Table  ساخته می شود، این به این معنی هست که با یک بار تغییر می توان این مسئله را در کل پروژه اصلاح کرد. در ویو Table  یک Partial  دیگر وجود به نام _Table.Definition.cshtml دارد که ساختار گرید را مشخص می کند.

در صورتی که تنظیمات سرور به درستی انجام شده باشد، مشخصات کالچر به صورت صحیح در این خط تنظیم می شود.

    //the locale which MomentJS should use
    var locale = CultureInfo.CurrentCulture.Name;

در نسخه های قبلی نیاز بود که این مقدار به صورت دستی به شکل زیر تغییر کند.

    //the locale which MomentJS should use
    var locale = "fa";

فیلد تاریخ در جداول به صورت Text  با Render از نوع Date مشخص می شود و نتیجه متن تاریخ نهایی در خط زیر مشخص می شود.

case RenderDate date:
    <text>
         render: function (data, type, row, meta) {
            return (data) ? moment(data).locale('@locale').format('@date.Format') : null;
         },
    </text>
    break;

همانطور که ملاحظه می کنید همه تنظیمات به صورت پیش فرض وجود دارد و تنها نیاز هست که پلاگین تاریخ شمسی به moment  اضافه شود. چندین پلاگین تاریخ شمسی توسط اساتید نوشته شده است که من از jalali-calendar  در پروژه ها استفاده می کنم، به دلیل اینکه همه تنظیمات قبلا انجام شده است با اضافه کردن پلاگین شمسی تاریخ ها به صورت صحیح به شمسی نمایش داده می شود.

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

بعد از اعمال تغییرات و نمایش تاریخ شمسی

 

قبل از اعمال تغییرات و تاریخ میلادی

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

 

برای مشاهده آموزش اصلاح DatetimePicker  تاریخ شمسی کلیک کنید

فایل دسته‌بندی محصولات دیجی کالا

اکسل دسته‌بندی محصولات دیجی کالا با بیش از 800 ردیف

سلام، برای شروع به کار feenama.com نیاز داشتیم که یک دسته بندی کلان از محصولاتی که در فروشگاه های اینترتی هستند، داشته باشیم. برای همین به سراغ دیجی کالا رفتیم.

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

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

یا اینجا کلیک کنید

ترجمه فارسی نوپ کامرس

مقایسه بین فایل های منابع زبان در نوپ کامرس و استخراج تگ های جدید

سلام

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

به عنوان مثال من برای نسخه 4.00 نوپ کامرس فایل زبان ترجمه شده را در اختبار داشتم، (دانلود فایل ترجمه نوپ کامرس برای نسخه 4.00) و وقتی که این بسته را روی نسخه 4.1 اضافه کردم، متوجه شدم که یک سری از عبارت ها اضافه شده است که نیاز به ترجمه دارد (بسته زبان ترجمه نشده نوپ کامرس 4.1). برای ترجمه عبارت ها نیاز داشتم که ابتدا آن هایی که جدید هستند را استخراج کنم.

برای همین یک قطعه کد ساده نوشتم (کد برنامه مقایسه و استخراج عبارت ها در نوپ کامرس) که حاصل خروجی هم شد این، حدود 460 خط که نیاز به ترجمه دارند (دانلود فایل تفاوت عبارت ها نوپ کامرس در نسخه 4.00 و 4.0).

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

 

پی نوشت: می دونم که این کد رو خیلی بهتر هم می تونستم بنویسم، ولی خب … 🙂

 

برنامه مترجم گوگل به زبان #C

سلام

در اولین نوشتم، کمی در باره خودم توضیح بدم و بعد بریم سراغ برنامه.

من امیرحسین مرجانی هستم، ساکن تهران و مهندس نرم افزار، بیش از 6 سال که فعالیت های خودم رو در زمینه فناوری اطلاعات شروع کردم و در زمینه های مختلف تجربه دارم. البته این اولین تجربه وبلاگ نویسی بنده نیست. مدتی روی سیستم های متن باز مثل دروپال (DruplEasy.ir) کار کردم و بعد دوباره به سراغ برنامه نویسی دات نت برگشتم و پروژه ها و تجربیات خوبی در این زمینه دارم که به مرور زمان با هم در میان می گذاریم.

 

چند وقنی هست که سیستم های متن بازِ دات نتی رو بررسی می کردم تا بتونم یکی از آن ها رو برای توسعه (بومی سازی) انتخاب کنم، (بعد ها به صورت مفصل در مورد بومی سازی صحبت خواهم کرد).

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

تصمیم من برای بیش از 2هزار رشته که باید ترجمه می شدند این بود که ابتدا رشته ها برای ترجمه به گوگل بسپارم (با اطلاع از اینکه ترجمه گوگل، ترجمه مناسب و معتبری نیست) و بعد رشته هایی که بیشتر دیده می شوند و دارای غلط های اساسی هستند را به صورت دستی اصلاح کنم.

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

به همین دلیل به سراغ همان برنامه قبلی برگشتم، ( شاید اگر امکان پرداخت به گوگل را داشتم این کار را می کردم!)

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

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

Marjani.net Google Translate  Response

 

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

Marjani.net Translator

سورس این برنامه را می توانید از صفحه ” برنامه مترجم گوگل به زبان #C ”  دریافت کنید و یا نسخه از آن را در گیت هاب داشته باشید.