Farsi text in GNU/Linux and windows

2009/02/16

متن فارسی در گنو/لینوکس و ویندوز

باور کنید این مطلب دیگه زیاد ربطی به برنامه‌نویسی نداره(البته بی‌ربط بی‌ربط هم که نمیشه!). خیلی وقت بود می‌خواستم یه همچین مطلبی رو بنویسم(قبل از اینکه وبلاگ داشته باشم) و تجربیاتی که در این مورد دارم رو یه جا جمع کنم تا یه کمکی به کاربران گنو/لینوکس کرده باشم. چون می‌دیدم خیلی مورد نیاز هست و خیلی‌ها هم می‌پرسن. خلاصه…

قبلاً مطلب رو مستقیم توی وبلاگ گذاشتم، ولی بعداً به این نتیجه رسیدم که وبلاگ جای خوبی برای گذاشتن مستقیم همیچن متنهایی نیست، حالا چراش رو بگذریم ولی بعد از اینکه دهنم صاف شد! تا فرمت‌بندی و کد و left to right و… آخرش هم اونطور که میخواستم نشد، رفتم توی OpenOffice.org خودمون نوشتم خودم رو راحت کردم.
اینم با فرمت pdf و odt و doc دانلود کنید:
farsi-linux-win.pdf

farsi-linux-win.odt
farsi-linux-win.doc
فقط لیست موضوعاتش رو اینجا می‌نویسم:
0- مقدمه
1- انتقال متن txt از ویندوز به لینوکس
1.1- تغییر Encoding به کمک gedit
1.2- تغییر Encoding به کمک فایرفاکس
1.3- تغییر Encoding به کمک اسکریپت پایتون
1.4- تغییر Encoding به کمک دستور recode
2- انتقال متن txt از لینوکس به ویندوز
2.1- تبدیل کاراکتر سرخط لینوکس به ویندوز، به کمک فایرفاکس (در ویندوز)
2.2- تبدیل کاراکتر سرخط لینوکس به ویندوز، به کمک gedit (در لینوکس)
2.3- تبدیل کاراکتر سرخط لینوکس به ویندوز، به کمک خط فرمان (در لینوکس)
2.5- تبدیل کاراکتر سرخط ویندوز به لینوکس
2.6- استفاده از ادیتور BabelPad بجای notepad
3- فرمت rtf و doc و docx
4- فونت‌های فارسی

ببخشید که اینقدر عامیانه می‌نویسم. دیگه وبلاگ همینه دیگه… خوشم نمیاد رسمی بنویسم.
موفق باشید

Advertisements

شیءگرایی (قسمت اول)

2009/02/06

اکثر کسایی توی برنامه‌نویسی تازه‌کار هستن، فکر می‌کنن که شیءگرایی چیز خیلی پیچیده‌ای هست. ولی کل مفهوم شیءگرایی رو میشه در یه کلمه خلاصه کرد: «بسته‌بندی»! تعجب نکنید. مفهومش به همین سادگیه.
منظورم فقط بسته‌بندی چیزهایی که می‌خریم نیست. مثلاً همین کیفی که دستمون می‌گیریم یه وسیله‌ای برای بسته‌بندی و دسته‌بندی اشیاء هست. حتی کیسهٔ سطل زباله…
یکم فکر کنید، چرا ما توی زندگی روزمره میایم اشیاء مختلف رو در یک مجموعه‌ای قرار میدیم و دسته‌بندی می‌کنیم؟ برای اینکه جابحجایی و انتقالش از یه مکان به مکان دیگه راحت‌تر بشه. برای اینکه راحت‌تر بتونه بین افراد مختلف دست به دست بشه(مثلاً خرید و فروش بشه). برای اینکه اشیاء داخلش گم و گور نشن یا با اشیاء مشابه خوشون قاتی نشن. و در نهایت برای اینکه راحت‌تر دور انداخته بشه.
در برنامه‌نویسی هم همینطور هست. فلسفهٔ شیءگرایی در برنامه‌نویسی، دسته‌بندی داده‌ها یا به قول بعضی‌ها کپسوله‌سازی داده(Data Encapulization) هست. ببینیم داده‌هایی که ما در برنامه‌نویسی داریم چیا هستن. کوچیکترینشون بیت(bit) هست، بعد از بایت که سنگ‌بنای تمام اجزاء بزرگتر هست. یه مرحله بالاتر متغیرها هستن، با هر نوعی مثل int یا float یا char یا…(در بعضی زبانهای اسکریپتی بعضی اشیاء سطح‌بالاتر هم بعنوان انواع داده‌های درونی تعریف شدن). به موازات متغیرها، توابع رو داریم. یه سطح بالاتر ساختمان‌ها(structure ها) هستن که شامل تعدادی متغیر هستن. و یه سطح بالاتر اشیاء هستن.
هر متغیر شامل تعدادی بایت هست. هر ساختمان شامل تعدادی متغیر هست(که دور هم پیچیده شدن و بسته‌بندی شدن). و هر شیء شامل تعدادی متغیر(یا اصطلاحاً data field) و تعدادی تابع(و اصطلاحاً متد) هست، که البته میشه یک شیء رو متناظر با یک(یا چند) ساختمان و تعدادی تابع(متد) دونست. البته هر کدوم از متغیرهای(data field های) یک شیء، خودش میتونه یه شیء باشه.
اون اوایل که داشتم مفاهیم شیءگرایی رو یاد می‌گرفتم(اون موقع با جاوا یاد می‌گرفتم)، خیلی باهاش مشکل داشتم، چون هیچ جا شیءگرایی رو زیاد ساده و قابل فهم توضیح نمی‌دادن.
مثلاً اولش فرق کلاس رو با شیء نمی‌فهمیدم، بعد از کلی کلنجار رفتم فهمیدم که «یک شیء نمونه‌ای از یه کلاس هست». یه کلاس مجموعه‌ای از متغیرها و متدها(توابع شیءگرا) هست که مجموعه‌ای از اشیاء رو تعریف می‌کنه. و یه شیء یکی از اعضای این مجموعه‌ای از اشیاء هست که توسط یه کلاس تعریف میشه. فرضاً ما «کلاس اتومبیل» داریم، اما «اتومبیل فلانی» یه شیء هست، و یه نمونه از «کلاس اتومبیل».
میشه تقریباً تمام مفاهیم شیءگرایی رو با مفهوم شیء در زندگی روزمره متناظر(و تشبیه) کرد. مثلاً متغیرهای یک شیء(یا همون فیلدهای داده‌ای شیء)، متناظر با خواص و اجزاء مختلف یک شیء مادی هست(در زندگی روزمره). متدهای(توابع) یک شیء هم متاظر با کارهایی هست که میشه با یک شیء مادی انجام داد. مثلاً یه شیء خودکار در نظر بگیرید. یدونه سر داره(یک متغیر)، یه نوک داره(یه متغیر)، یه رنگ براش تعریف شده(یه متغیر). براش نوشتن تعریف شده، یعنی میشه باهاش نوشت(یه متد)، میشه سرش رو برداشت(یه متد)، و میشه سرش رو گذاشت(یه متد) و در نهایت میشه دورش انداخت(یه متد).
بعضی متدها بین تمام اشیاء مشترک هستن(مثل متد سازنده و متد مخرب). بعضی متدها بین طیف وسیعی از اشیاء مشترک هستن، و بعضی هم فقط در اشیاء خاصی تعریف میشن.
تا اینجا رو داشته باشید تاب بعد…


PyGlossary-2009.2.3

2009/02/04

سلام
خب من برگشتم. با نسخهٔ جدیدی از PyGlossary
ospdev.net/projects/glossary-pywork
تغییرات این نسخه:

1- رفع یه اشکال خیلی بزرگ(یه اشتباه لپی) توی نوشتن دیتابیس‌های MDic که باعث میشد اصلاً معانی کلمات ذخیره نشه و بجاش دوباره خود کلمات ذخیره بشه!! این جور سوتی‌ها از من جای تعجب نداره! کلاً یه خورده(بیشتر از یه خورده) آدم حواس‌پرتی هستم! حالا این که چیزی نیست. من اولش یه چند ماهی توی رابط گرافیکی برنامه بجای کلمهٔ Convert نوشته بود بودم Covnert (توی label همون تب اول) !! اون ورژنی هم که الآن توی softpedia هست همین اشکال رو داره(حالا بهشون میگم آپدیت کنن). خلاصه حسابی آبروم رفت! :دی

2- اضافه کردن امکان Reverse کردن در خط فرمان(قبلاً میشه توی خط فرمان Convert کرد) فقط بنویسید
pyglossary --help
تا طرز استفاده از رابط خط فرمان برنامه رو ببینید.

3- اضافه کردن ProgressBar به رابط خط فرمان برنامه، برای معکوس کردن دیتابیس‌ها. و همینطور تبدیل کردن دیتابیس‌هایی که بیشتر طول میکشن مثل خوندن از BGL و نوشتن MDic. خداییش ProgressBar ش خیلی باحال شده حتماً ببینید(یه دیتابیس رو reverse کنید یا یه دیتابیس BGL رو تبدیل کنید). البته از کتابخونهٔ python-progressbar (که تحت LGPL هم هست) استفاده کردم و خودم ننوشتم، من فقط یه تغییراتی توش انجام دادم و توی برنامهٰ‌م استفاده کردم.

pyglossary-terminal

4- اعمال شدن تنظیمات برنامه در رابط خط فرمان. یعنی همون تنظیماتی که در رابط گرافیکی هست، در رابط خط فرمان هم در نظر گرفته میشه. مثل sort کردن یا حذف تگ‌ها بعد از خوندن دیتابیس، یا تنظیمات مختلف Reverse (مثل حداقل درصد ربط و حداکثر تعداد نتایج و…)
می‌تونید تنظیمات برنامه رو از رابط گرافیکی برنامه(تب Preferences) تغییر بدید، یا فایل pyglossary. رو (توی پوشهٔ خانگی) دستی ویرایش کنید.

5- رفع یک اشکال در خوندن از StarDict (اگه کلمات دیتابیس ورودی sort نشده بودند، بعضی کلمات رو نادیده می‌گرفت). با این اصلاح فکر می‌کنم دیگه پشتیبانی از فرمت StarDict کامل کامل شده باشه. دیگه گمون نمی‌کنم نیازی به ماژول خارجی باشه(که خیلی هم کند هست) ولی باز محض احتیاط ماژول خارجی stardict reader رو حذف نکردم.

6- پشتیبانی از پلاگین! یعنی تابع خوندن و نوشتن یه فرمت که توی فایل جدا(توی پوشهٔ src/plugins) نوشته شده(بصورت نه لزوماً شیءگرا)، توسط موتور درونی برنامه (یعنی کلاس Glossary) خونده میشه و به کلاس Glossary پیوند می‌خوره. اگه میخواید خودتون یه فرمت جدید به PyGlossary اضافه کنید، این امکان برنامه کارتون رو راحت میکنه. اگه می‌خواید یه پلاگین بنویسید، فایل src/plugins/testformat.py رو بخونید(یک مثال ساده هست) تا ساختار یه پلاگین برنامه رو متوجه بشید. البته باید از ساختار فایل فرمتی که میخواید اضافه کنید هم اطلاع داشته باشید(اون دیگه بستگی به فرمتش داره).

7- و رفع چند تا اشکال که یادم نیست. و طبق معمول مقداری تمیزکاری و بهینه‌سازی.