2009/06/23

‭Localizing OTRS into Persian (Farsi)

‭‭Mawlānā Jalāl ad-Dīn Muḥammad Balkhī

OTRS core framework has been previously translated into Persian (Farsi) by Hooman Mesgari and Amir Shams Parsa. It was even enabled to work bi-directional (RTL, LTR) by some other people. This translation worked well but at this time needed to be updated. There is about 1600 entries in "fa.pm" (June 2009, v2.3.4) that about 130 entries were new and has not been translated into Persian (Farsi) yet. In addition to OTRS core framework itself, there exists several modules that should be translated including ITSM and FAQ modules.

In order to complete/update this translations, I as a 2 year OTRS user decided to translate/update OTRS core framework and its modules. I used translation files that I have downloaded from CVS at 2009, 21 June. And now list of works I have done:

OTRS core framework (fa.pm):
  • ~130 new entries (there is ~1600 entries totally)
  • ~15 translation corrections related to words "stat", "role", and "lock"
  • 2 correction of Persian letter "ARABIC LETTER FARSI YEH", U+06CC
  • ~130 correction of ZWNJ character mostly in words that include HA (ها)
  • ~25 correction of Persian (Farsi) numeric characters like "۰۱۲۳۴۵۶۷۸۹"


Modules translated to Persian (Farsi):

  1. fa.pm
  2. fa_GeneralCatalog.pm
  3. fa_ImportExport.pm
  4. fa_ITSMConfigItem.pm
  5. fa_ITSMCore.pm
  6. fa_ITSMLocation.pm
  7. fa_ITSMService.pm
  8. fa_ITSMTicket.pm
  9. fa_FAQ.pm


Note:
  1. All module translations are based on German versions.
  2. My primary translations could be found here.
  3. I have sent back these translations to internationalization mailing list and don't know when they will check-in them to CVS.
  4. If anyone find any wrong translation, please let me know.
  5. I have done this with the help of my friend Masoud Ramezani
  6. I used FARDIS project to do some tasks in this process.
  7. CVS address of above modules are based on Farsi versions. So if they don't work, please replace "fa" with "de" or "en" in their URLs.




2009/06/21

‫نصب ActivePerl روی ویندوز ۲۰۰۳

ActivePerl نرم افزاری است که با نصب آن بر روی ویندوز می‌توانید اسکریپت‌های پرل را اجرا کنید. این نرم افزار محصول ActiveState است و صد البته تنها نرم افزاری نیست که می‌تواند پرل را روی ویندوز اجرا کند. پرل برای اجرای نرم افزار OTRS که یک نرم افزار معروف Help Desk کد باز و تحت وب است مورد نیاز است. مراحل نصب:

۱- با مراجعه به Control Panel مطمئن شوید که IIS نصب است. IIS به طور پیش فرض در ویندوز 2003 نصب نیست. IIS در قسمت Application Server قرار دارد و برای نصب آن به سی دی ویندوز 2003 نیاز هست. w1

 

۲- ActivePerl را نصب کنید. لطفا Optionهای نصب را تغییر ندهید.w2

 

۳- از قسمت Web Service Extensions اجرای Perl CGI Extension را مجاز اعلام نمایید.

w3

۴- IIS را Restart کنید.

۵-IIS را امتحان کرده و مطمئن شوید که می‌تواند اسکریپت‌های CGI و Perl را اجرا کند. برای این کار کد زیر را در یک فایل متنی ساده با پسوند .pl ذخیره کرده و آن در یک شاخه اختصاصی در شاخه wwwroot بگذارید. سپس در IIS یک Virtual Directory جدید ساخته و مسیر فایل فوق الذکر را به آن معرفی کنید. سپس آدرس کامل آن را به انضمام نام فایل بالا در browser خود تایپ کنید. اگر همه چیز درست پیش رفته باشد باید برنامه در حال کار را ببینید در غیر این صورت تا حل مشکل به مراحل بعدی نروید. دقت کنید که اگر به جای Virtual Directory یک Application ساخته باشید هیچ چیزی کار نمی‌کند و خطا می‌گیرید.

 

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print <<HTML;
<html>
<head>
<title>A Simple Perl CGI</title>
</head>
<body>
<h1>A Simple Perl CGI</h1>
<p>Hello World</p>
</body>
HTML
exit;

۶- ممکن است دو لینک زیر برای رفع مشکلات مربوط به نصب پرل روی IIS کمک کند:
•    http://perl.about.com/od/perltutorials/a/hellocgi.htm
•     http://community.activestate.com/forum-topic/configuring-perl-on-iis-7

 

پ. ن.: ‫نصب OTRS روی ویندوز ویستا




2009/06/15

‫تاثیر Index گذاری بر سرعت جداول MS SQL

si2 چند روزی را در حال بررسی سرعت Query بر روی جداول حجیم بودم. Query مورد نظر من یک sum ساده بر روی جدولی به اسم amort بود. این Query به صورت یک function پیاده سازی شده بود. البته آن Query نهایی که من زمان آن را بررسی کرده و نتایجش را در نظر داشتم این function را همراه با یک select ساده صدا می زد. خود این select آخر روی یک جدول با ۷۰۰۰ رکورد اجرا می‌شد. در نتیجه اگر فرض کنیم جدول amort دارای ۳۰۰ رکورد است پس ما عملا با انجام عملیات روی ۳۰۰ ضرب در ۷۰۰۰ یعنی ۲۱۰۰۰۰۰ رکورد طرف هستیم. تنها عاملی که آن را در آزمایشات مختلف تغییر می‌دادم تعداد رکوردهای جدول amort (که function مورد نظر من روی آن اجرا می‌شد) و ایندکس داشتن و نداشتن همان جدول amort بود. تمام آزمایشات بر روی یک کامپیوتر Pentium 4, 2.26 Ghz, 1GB RAM, Win Xp SP2 و Microsoft Sql Server 2008 انجام شده است.

نتایج بدون ایندکس واقعا فاجعه بار بودند. برای ۷۲۰۰ رکورد ۲۱۳ ثانیه طول کشید! این در حالی بود که هر سال همین تعداد رکورد به جدول مورد نظر من یعنی amort اضافه می‌شد. به عبارتی دیگر اجرای Query مورد نظر برای سال هشتم حدود نیم ساعت کشنده طول می‌کشد! با این که روی همه جداول دیتابیس بر روی ستون id ایندکس وجود داشت به علت کندی بیش از حد مجبور شدم باز هم به ایندکس‌ها، انواع آن و تاثیرشان بر کارایی فکر کنم. در MS SQL چهار نوع ایندکس وجود دارد که من فقط دو تای پر استفاده‌تر آن را مطالعه و بررسی کردم: Clustered Index و Non-Clustered Index. هر دوی آنها اطلاعات را به صورت sort نگهداری می‌کنند. بر اساس توضیحات اینجا، نوع Clustered اطلاعات را به صورت فیزیکی به حالت sort نگه می‌دارد و در نتیجه در هر جدولی فقط یک ایندکس از این نوع مجاز است در حالی که نوع Non-Clustered از یک ساختار اضافه برای نگهداری اطلاعات sort جدول استفاده می‌کند و می‌توان حدود اقلا ۲۵۰ ایندکس از این نوع در یک جدول داشت. در بعضی منابع خوانده بودم که performance ایجاد شده در هر دو نوع تقریبا یکسان است در حالی که در آزمایشات خودم فهمیدم سرعت Clustered حدود ۱۰ برابر Non-Clustered است. دقت کنید تعریف یک یا چند ستون به عنوان Primary Key باعث می‌شود آن ستون یا ستون‌ها خود به خود به یک Clustered Index تعریف شوند. در همه انواع ایندکس‌ها دو مفهوم ReOrganize و ReBuild وجود دارد که مفهوم آنها را خیلی نفهمیدم ولی متوجه شدم که برای دستیابی به حداکثر کارایی هر از چندگاهی باید این دو عملیات را بر روی جدول مورد نظر اجرا کرد.

نتایج آزمایشم را با هر دو نوع ایندکس تکرار کردم. پرس و جو آن قدر سریع اجرا می‌شد که خیلی سریع تعداد رکوردها را از ۷۲۰۰ به ۷۲۰ هزار، یک و نیم میلیون رکورد و نهایتا ۳ میلیون رکورد رساندم. نتایج کار اگر من مرتکب اشتباهی نشده باشم واقعا شگفت آور بود: زمان مورد نیاز برای اجرا در حالت استفاده از Clustered Index کمتر از یک ثانیه و در حالت استفاده از None Clustered Index حدود ۱۰ ثانیه بود! دقت کنید که ۳ میلیون رکورد در جدول amort و ۷ هزار رکورد در select استفاده کننده function من یعنی ۲۱ میلیارد حالت!!

 

پ. ن.: برای تولید ۳ میلیون رکورد از مقادیر اتفاقی int و تاریخ در یک حلقه while استفاده کردم. نحوه تولید «تاریخ» به صورت random در اینجا و اینجا بحث شده است.




2009/06/12

‫چرا FOSS (و Open Source) برای ما خوب است؟

foss FOSS یا Free/Open Source Software همان چیزی است که در ایران آن را عمدتاً به نام Open Source یا کد باز می‌شناسند. خیلی‌ها FOSS را به دلیل غیر انحصاری بودن و فلسفه‌ای که پشت آن است به نرم افزارهای تجاری/انحصاری مثل نرم افزارهای مایکروسافت ترجیح می‌دهند. اما من FOSS را جدا از سلیقه شخصی خودم از دیدگاه دیگری برای بازار نرم افزار ایران بهتر می‌دانم که دلایل آن در ادامه آمده است.


۱- عمده نرم افزارهای FOSS یا حداقل آنهایی که می‌توانند کار ما را راه بیندازند مثل Ubuntu Linux، Firefox، Nhibernate و PHP مجانی هستند. پس مجبور نیستیم پولی بابت آنها بدهیم یا با عذاب وجدانی هر چه تمام‌تر از crack آنها استفاده کنیم. عذاب وجدان crack هیچ وقت از بین نمی‌رود چون دزدی دزدی است چه دزدی نرم افزار چه دزدی و بالا رفتن از دیوار مردم و چه دزدی از یک ایرانی/مسلمان و چه دزدی از یک آمریکایی/مسیحی. البته استفاده از نرم افزارهای غیر آزاد ولی مجانی مثل MS SQL Express هم می‌تواند ما را از شر crack و مشکلات اخلاقی آن رها کند.


۲- شاید بتوانیم با کمک FOSS و Customize کردن آنها از شر نرم افزارهای مالی/اداری مزخرفی که هر روزه به نام نرم افزار تولید وطن به شرکت‌ها و ادارات قالب می‌شوند خلاص شویم. به علت وضع خیلی بد بازار و کیفیت خیلی پایین فارغ التحصیلان نرم افزار کشور، برنامه‌های مالی اداری تولید داخل مثل انواع نرم افزارهای حسابداری، حقوق و دستمزد، انبار و… که گاهاً عناوینی مثل ERP، سیستم جامع و غیره و غیره را به یدک می‌کشند سطح کارکرد بسیار پایینی دارند. این نرم افزارها با باگ‌های بی‌پایان و انعطاف پذیری خیلی کمی که دارند نه تنها نمی‌توانند امورات ادارات و سازمان‌ها را به درستی رتق و فتق کنند بلکه باعث شده‌اند عوام الناس و صاحبان مشاغل هیچ اعتمادی به یک سیستم مکانیزه/کامپیوتری نداشته باشند. در حال حاضر تعداد زیادی نرم افزار مالی اداری و حتی ERPهای FOSS در بازارهای جهانی وجود دارد که امید است با custom کردن آن برای قوانین داخلی ایران و محلی سازی و فارسی سازی آنها بتوان موجی از نرم افزار با کیفیت را در داخل کشور ایجاد کرد. فارسی سازی، محلی سازی و customize نرم افزارهای بزرگی مثل Compiere و Open Bravo که از چند وقت پیش شروع شده می‌تواند الگوی خوبی برای این حرکت باشد.


۳- بالا رفتن کیفیت کار برنامه نویسان ایرانی یکی از فواید پیوستن جامعه نرم افزاری ایران به جنبش FOSS است. اگر استفاده از FOSS فراگیر شود دیگر کسی حاضر نخواهد شد بابت نرم افزار «به درد نخور» پول بدهد در نتیجه برنامه نویسان مجبور می‌شوند یا کیفیت کار خود را بالا ببرند یا تغییر شغل بدهند. همراهی برنامه نویسان ایرانی با نهضت FOSS آنها را با تیم‌های توسعه دهنده معتبر دنیا آشنا خواهد کرد. به این ترتیب در صورتی که همه چیز درست پیش برود، برنامه نویسان ما می‌توانند از این افراد چیزهای زیادی یاد گرفته و با روش‌های کار تیمی دوست شوند نه آن که به خاطر نداستن کار خود مدام جر و بحث‌های بیهوده راه بیندازند.


۴- نرم افزارهای FOSS باعث کاهش هزینه‌ها و مشکلات قانونی host و hosting می‌شود. اگر در برنامه‌ای که می‌نویسید به جای MS SQL Server و IIS از MySQL و Apache استفاده کنید می‌توانید از سرورهای ارزان قیمت‌تری برای host برنامه‌تان استفاده کنید. ضمنا هیچ وقت هم سرور شما به دلیل استفاده از نرم افزارهای غیر قانونی تعطیل نمی‌شود.
۵- بقیه مزایایی که FOSS برای ما دارد همان‌هایی هستند که FOSS برای بقیه دارند از جمله کاهش دوباره‌کاری‌ها و انجام پروژه‌های تکراری، جامعه بزرگ پشتیبانی، به روز رسانی‌های بیشتر و سریع‌تر، ایجاد رقابت در صنعت نرم افزار، افزایش دوستی بین ملل دنیا و…

 

پ.ن. ۱: بعضی افراد معتقدند حرکت ما به سمت FOSS می‌تواند خطرات و مشکلات تحریم آمریکا علیه کشور را کم کند. بعضی دیگر هم معتقدند که FOSS ما را از وابستگی به شرکت‌های بزرگ دنیا مثل مایکروسافت رها می‌کند. به نظر من هیچ کدام از این دو نظر درست نیستند چون در ایران هیچ پولی بابت نرم افزارهای خارجی پرداخت نمی‌شود و همه نسخه‌ها غیر قانونی است پس تحریم یا وابستگی خطری برای خلافکاران دنیای نرم افزار ایجاد نمی‌کند!

پ. ن. ۲: یک بحث قدیمی در انجمن برنامه نویس راجع به Open Source، مدل تجاری و فلسفه آن وجود دارد که در آن نکات ارزشمندی برای فهم FOSS وجود دارد. توصیه می‌شود حتما مطالعه بفرمایید.

 

مطالعه بیشتر:




2009/06/05

‫‫FOSS در ایران

iran2  بعضی از بحث‌های FOSS در ایران قابل فهم نیستند مثل آن قسمت مربوط به نرم افزارهای Proprietary که در آن کاربران حق دستکاری نرم افزار یا استفاده در مقاصد از قبل مشخص نشده را ندارند. آن هم به این دلیل که چنین قوانین سفت و سختی در ایران وجود ندارد و همین معدود قوانین مربوط به نرم افزار و حق تالیف هم با اما و اگرهای فراوان اجرا می‌شود.
خیلی از قوانین اجازه‌نامه‌های نرم افزارهای FOSS به علت عدم رعایت قوانین بین المللی در ایران هیچ محلی از اعراب ندارد. هیچ کس توجهی به این قوانین ندارد و صحبت در این باره متاسفانه برای خیلی از افراد خنده آور است. مثلا بعضی شرکت‌های محترم ایرانی یک نرم افزار FOSS را که تحت یک اجازه‌نامه سهو تالیف (کپی‌لفت) قرار دارد را پیدا کرده و پس از اعمال تغییراتی به صورت کد بسته (بدون دادن کد منبع آن به بقیه) و با حذف نام تولید کننده اصلی به نام خودشان می‌فروشند!
یکی از قوانین مهمی که در مورد تعداد زیادی از نرم افزارهای کد باز وجود دارد این است که شما حق دستکاری و توزیع مجدد یک نرم افزار و کد منبع آن را دارید و حتی می‌توانید آن را تغییر داده یا در نرم افزار خودتان استفاده کنید و حتی می‌توانید نسخه تغییر یافته را به فروش برسانید ولی حق ندارید اجازه‌نامه (license) آن را عوض کنید. یعنی قانوناً مجبور هستید نرم افزار خودتان که در واقع تغییر یافته همان نرم افزار قبلی است را به صورت کدباز منتشر کرده و به دیگران هم اجازه بدهید نرم افزار شما را دستکاری کرده و مجددا به صورت آزادانه توزیع نمایید.

مطالب مرتبط:

FOSS چیست؟
کمی درباره GFDL (‫اجازه‌نامه مستندات آزاد گنو)
کپی‌لفت (Copyleft) چیست؟




2009/06/04

How “ZZZAuto.pm” can stop OTRS from sending mail?

email “ZZZAuto.pm” is the second configuration file that is searched by OTRS to find configuration entries like SMTP. To find out a specific configuration entry, OTRS searches “config.pm” first and if it is present, it will be used. If not present then “ZZZAuto.pm” will be searched for.
But what’s wrong with this? In our OTRS installation we were using a mail account to send e-mails and notifications from OTRS using SMTP. This mail account was using user name and password for authentication. After a while, mail server changed its policies. It didn’t need user name and password anymore. If OTRS sent “AuthUser” and “AuthPassword” to mail server, the mail server would not accept any e-mail and would give us following error message:


Message: SMTP authentication failed: 535 authorization failed (#5.7.0) ! Enable Net::SMTP debug for more info!


So in a test machine I commented “AuthUser” and “AuthPassword” in the “config.pm” and everything went O.K. I did same modifications in the operational machine but OTRS was not able to sent any e-mail yet and error message was not changed.
I was very confused! Why same settings were working on one machine but would not work in another one? I did some tests and realized if I comment “Host” in “config.pm” I receive a new error message:


Message: Can't connect to somewhere.com : Invalid argument!


I wondered while I have commented “Host” entry in “config.pm” so where were “somewhere.com” coming from? I searched for and YES! It was in “ZZZAuto.pm”. “Host” was not important for me because I could change it in “config.pm” but I also found two annoying entries there: “AuthUser” and “AuthPassword”. They should be absent but they were sent to mail server and were causing it stop relaying our messages. In the other hands they were not present in “config.pm” as I desired but because OTRS was finding them in “ZZZAuto.pm” so was sending them back to the mail server. I commented them in “ZZZAuto.pm” too and everything went O.K. once another time.

 

See also:

OTRS config files and SysConfig

SMTP authentication failed