وبلاگ جدید

2014/03/30

سلام
باوردم نمیشه ۴ سال از آخرین پست‌م توی این وبلاگ می‌گذره!

باید وبلاگ جدیدم رو همون موقع معرفی می‌کردم (نمی‌دونم چی شد که یادم رفت)

http://saeedgnu.blog.ir

بیشتر بخاطر سریع بودن و پایتونی بودن و مسدود نبودن به blog.ir سوییچ کردم

گرچه نرم‌افزاری که تولید کردن و استفاده می‌کنن برای دیگران قابل دسترس نیست، و اشکالاتی هم داره. ولی فعلاً گزینهٔ بهتری ندارم.

Advertisements

هنوز زنده‌ام

2009/05/25

سلام

اگه می‌بینید وبلاگ رو آپدیت نمی‌کنم، علتش اینه که مشغولم. حالا بگذریم که زیادم اهل وبلاگ‌نویسی نیستم! ولی راستش بدجوری سرگرم برنامه‌نویسی و کارهای دیگه هستم.

از یه طرف یه پروژهٔ سفارشی دارم برای یه تیم تحقیقاتی با عنوان «مینی بیو رآکتور» (رآکتور زیستی کوچک)، تعجب نکنید! این برنامه رابطی برای برقراری ارتباط با یک دستگاهی هست با همین نام(مینی بیو رآکتور) که اختراع چند متخصص ایرانی توی دانشگاه تهران هست. پای من وقتی به این داستان کشیده شد که رفیق برنامه‌نویسم(VB کار حرفه‌ای و کاربر ویندوز که قبلاً یه خورده با گنو/لینوکس کار کرده) توی سایت دانشگاه دید دارم با اوبونتو کار می‌کنم(کدنویسی می‌کنم) بعدش یه سوالایی ازم کرد و بعدش پیشنهاد همچین برنامه‌ای رو بهم داد، بعداً فهمیدم پروژهٔ خیلی گنده و خفنی هست و رفیقم هم خودش مدیر تیم برنامه‌نویسی‌ش بوده. حالا شاید بعداً یکم بیشتر در موردش نوشتم. ولی کلاً توی این پروژه می‌خوام قدرت گنو/لینوکس و پایتون رو به دیگران نشون بدم! در ضمن قرار شده بصورت اوپن‌سورس کار کنم(بجز قسمت کوچیکی از برنامه که محرمانه هست) یعنی خودم خواستم که اوپن‌سورس کار کنم.

از یه طرف هم روی اون تقویم starcal کار می‌ کنم که داره خیلی خفن میشه(هم کامل میشه، هم به جاهای پیچیده و سختش رسیده)، نسخهٔ 1.3.5 رو هم که آپلود کردم تغییرات زیادی دادم، از جمله بهینه‌سازی‌های اساسی توی مختصات نقاط، که باعث شده تنظیماتش با تنظیمات ورژن‌های قبلی ناسازگار باشه(البته نگران نباشید، شما آپدیت کنید، بچه‌م خودش ردیفش میکنه!). ولی اون تغییرات کلی و بنیادین که ان‌شاءالله قراره توی ورژن 1.4 تکمیل بشه در مورد همون «افزودن روز دلخواه» هست(که شاید به bookmark یا «نشانه» تغییر نام بدم) قراره شدیداً کامل و انعطاف‌پذیرتر بشه(حتی انعطاف‌پذیرتر از تقویم Evolution) توی این ورژنی که آپلود کردم(1.3.5) فقط رابط گرافیکیش(اونم نه کامل) بصورت نمایشی(demo) قرار گرفته. حالا ان‌شاءااله ورژن 1.4 که اومد مفصل در مورد تغییرات و امکانات اضافه‌شده می‌نویسم.

حالا که حرف از Evolution شد: خداییش عجب چیــــــــــــزیه این Evolution !!! عجب برنامهٔ کامل و قدرمتندی هست! بی‌شباهت به یه سیستم‌عامل نیست! خداییش ناول چه کارها که نمیکنه! اون از ابزار کامل YaST که قدرتمندترین و کامل‌ترین ابزار گرافیکی مدیریت سیستم هست، اونم از اوپن‌سوزه که جزو بهترین و محبوب‌ترین توزیع‌های گنو/لینوکس هست(البته جدیداً اوبونتو محبوب‌تر شده). اون از پروژهٔ مونو. اینم از Evolution که هم یه Mail Client هست، هم Feed Reader هست، هم تقویم و Task و Reminder و یادداشت‌نویسی و کلی چیز دیگه داره!! جالبه بدونید Evolution جزئی از گنوم هست(البته من تعصبی روی بحث گنوم و KDE ندارم. ولی خداییش Korginizer هم چیز توپیه). جالب‌تر اینکه ظاهرا ً Evolution و گنوم با هم مچ هستن، آخه اون روزهای خاص(Appoinment ها یا همون کارها) که توی Evolution تعریف می‌کنیم، توی اپلت تقویم گنوم هم نشون میده! خیلی جالبه! قصد دارم حتماً بین Evolution و StarCalendar خودم ارتباط برقرار کنم، مثلاً بتونه این روزهای خاص رو از تنظیماتش import و export کنه.

مدتی هم هست(یکی دو ماهی میشه) که به کمک Evolution فید می‌خونم. اگرچه زیاد نمی‌رسم وبلاگ‌ بروبچ رو بخونم، حتی جدیداً به فروم‌های گنو/لینوکسی(تکنوتاکس ابونونتو-ایران) هم کمتر سر می‌زنم. اما فید شیش‌هفت تا از بچه‌های گنو/لینوکس‌کار رو اضافه کردم به Evolution و گاهی اوقات سرگرم فیدخونی میشم.

اگرچه به تلویزیون علاقهٔ چندانی ندارم، ولی این روزا کارتون فوتبالیست‌ها رو نگاه می‌کنم(سعی می کنم ساعت 6 حتماً پای تلویزیون حاضر بشم). از بچگی عاشق این کارتون بودم، اون قدیما هم که با میکرو بازی می‌کردم عاشق بازی فوتبالیست‌ها بودم(هم ژاپنی‌ش رو خیلی بازی کردم هم انگلیسی‌ش رو). بازی‌ش پر از خلاقیت بود(اصلاً سرعتی نبود بلکه شدیداً استراتژیک بود). یادش به خیر، چه خاطراتی با این کارتون و بازی دارم(با چه علاقه‌ای می‌نشستم رمزهای پیچیدهٔ ژاپنی رو می‌نوشتم). قیافهٔ کلمات ژاپنی رو یاد گرفتم(شوت و پاس و دریبل و…، به علاوهٔ اسم بازیکن‌های معروف مثل سوبا و کاکرو و تارو و واکی‌بایاشی و واکاشی‌مازو و…) با اینکه نمی‌تونستم این کلمات رو بخونم(ژاپنی بلد نبودم) ولی از شکل و قیافهٔ حروفش می‌فهمیدم کدوم کدومه.

آدم وقتی بچه‌س آرزو می‌کنه زود بزرگ بشه، وقتی بزرگ می‌شه گاهی وقتی با خودش میگه کاش می‌شد برگردم به دوران بچه‌گی!

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

خب دیگه فعلاً بسه. سعی می‌کنم بیشتر وبلاگ رو آپدیت کنم. فید وبلاگ که اون بغل هست، راستی اگه می‌خواید از ورژن‌های جدید starcal هم مطلع بشید می‌تونید از این فید rss استفاده کنید.

موفق باشید


نشت نشا، یا همان فرار مغزها

2009/04/26

سلام

(قرار نیست که تمام نوشته‌های وبلاگم در حوزهٔ کامپیوتر باشد!)

به‌تازگی به چند کتاب از یک نویسندهٔ واقعاً توانمند برخوردم. این نویسنده آقای «رضا امیرخانی» است. شاید اکثر آثار ایشان، داستان یا رمان باشد، که ایشان واقعاً یک رمان‌نویس متبحر هستند و ذهن خلاق و تخیل بسیار بالا و قدرت فضاسازی خوب و ادبیات قوی دارند. در ضمن رمان‌‌های ایشان بسیار آموزنده هستند، و با اینکه چندان اهل خواندن داستان مخصوصاً رمان (یا داستان غیرواقعی) نیستم اما کتاب «ارمیا» دید من را نسبت به رمان بسیار تغییر داد(تنها رمانی بود که تا آخر خواندم). «ارمیا» با باقی رمان‌ها بسیار متفاوت است.

اما اینها همهٔ توانمندی‌های ایشان نیست. آقای امیرخانی منطق بسیار قوی و قدرت بالایی در تجزیه و تحلیل مسائل و پدیده‌ها دارند. در ضمن من عقاید و تفکرات ایشان را بسیار با عقاید و تفکرات خودم سازگار و نزدیک دیدم.

از میان چند کتاب که از ایشان دیدم، کتابی با عنوان «نشت نشا» از همه برایم جالب‌تر و جذاب‌تر بود. این کتاب در مورد پدیدهٔ «فرار مغزها»، یا همان «مهاجرت نخبگان» است.(این کتاب بر خلاف بسیاری از آثار ایشان، رمان نیست). این کتاب ۱۰۲ صفحه‌ای را با اشتیاق تمام خواندم، یک تحلیل جامع و بسیار منطقی و به ‌دور از تعصب و افراط یا تفریط. با این که بسیار اهل نقد کردن هستم و در پذیرفتن مطالبی که می‌خوانم یا می‌شنوم سخت‌گیر و وسواسی هستم، اما از نقد این اثر عاجز ماندم و مطالبش بسیار بر دلم نشست.

به همهٔ دوستان پیشنهاد می‌کنم این کتاب را بخرند و مطالعه کنند.

نشت نشا (جستاری در پدیده‌ی فرار مغزها)

مؤلف: رضا امیرخانی (http://amirkhani.ir و http://www.ermia.ir)

ناشر: موسسهٔ انتشارات قدیانی

چاپ دهم: ۱۳۸۶ (چاپ اول: ۱۳۸۰)

قیمت: ۱۰۰۰ تومان

فهرست مطالب:

۰- نشت نشا! (پیش درآمد)

۱- روابط علی (نشت نشا، یک مسألهٔ کلان)

۲- کانون توطئه… (نمونه‌هایی از نگاه رایج خرد غیرمسأله‌ای به پدیده‌ی نشت نشا)

۳- در زمین که می‌کاریم؟ (با این کاشت و داشت و برداشت، نشت نشا یک امر طبیعی است)

۴- علم بومی… (تنها راه آب‌بندی نشت نشا)

۵- متدولوژی (نمونه‌ای از ترجمه‌ی ناموفق علم)

۶- باز هم متدلوژی (باز دست مریزاد به اهل ترجمه‌ی روش)

۷- علوم انسانی (عقب‌ماندگی جدی‌تر در علوم انساتی)

۸- علم و زنده‌گی! (آیا غربی‌ها علم بومی دارند؟)

۹- رپ یا انصار؟ (نمونه‌ای از نگاه بومی فراموش‌شده)

۱۰- زنده‌گی و علم! (مقدار مجاز فاصله‌ی شهر تا دانش‌گاه چه‌قدر باید باشد؟)

۱۱- نتایج دروغین نظام آموزشی (تنگ‌چشمان نظر به میوه کنند!)

۱۲- چه نباید کرد؟ (فرار مغزها به فرموده متوقف نمی‌شود!)

۱۳- تکریم (سازو‌کار تکریم درست)

۱۴- ارزیابی مستمر و حقیقی… (تنها سازو‌کار تکریم درست…)

۱۵- چه باید کرد (دو راه‌برد بلندمدت و میان‌مدت)

۱۶- سخن آخر (نجوایی با اهالی نشت نشا)

۱۷- مؤخره


Kilo, Mega, Giga…

2009/04/13

سلام

احتمالاً تا حالا شده یه هارد یا فلش بخرید! و احتمالاً بعد از خریدن و وصل کردن به کامپیوتر یه نگاهی به حجمش هم انداختید که مثلاً بجای هارد 120 یه هارد 60 گیگ بهتون نداده باشن! البته اگه اینقدرا اختلاف داشته باشه که می‌فهمید. ولی اگه بجای 120 گیگ 112 گیگ باشه ممکنه متوجه نشید، یا اینکه زیاد اهمیت ندید. یا وقتی که بجای یه فلش 8 گیگ یه فلش 7.4 گیگ تحویل بگیرید. یا خلاصه تقریباً 7 درصد کمتر از چیزی باشه که انتظار دارید! ممکنه هم این سوال براتون پیش اومده باشه که «پس بقیه‌ش چی شده؟». آیا شرکت سازنده به شما دروغ گفته یا کم‌فروشی کرده؟! یا اون جنس تقلبی هست؟! یا فروشنده‌ها و دلال‌ها وسط راه چند یه خورده‌ش رو کش رفتن؟!! پس علتش چیه؟!

دلیل خیلی دلیل ساده‌ای داره. در یک جمله بخاطر تفاوت 1000 با 1024 هست. در دنیای کامپیوتر کیلو معمولاً به معنای 1024 هست(نه 1000) و مگا هم 1024 کیلو. گیگا هم 1024 مگا، ترا هم 1024 گیگا…

اما ظاهرأ سازنده‌های حافظه، از این قاعده پیروی نمی‌کنن و بجای 1024 همون 1000 در نظر می‌گیرن. نمی‌دونم چرا. دلیل فنی داره یا دلیل اقتصادی(برای نفع خودشون)؟ ولی با یه حساب سرانگشتی میشه فهمید که حدوداً 7 درصد کمتر از چیزی میشه که ما انتظار داریم(و حجم اسمی اون هارد یا فلش هست). بصورت دقیق‌تر حجم واقعی میشه 0.9313 برابر حجم اسمی. حالا اگه تونستید خودتون این حساب سرانگشتی رو انجام بدید و عدد دقیقترش رو بهم بگید؟! 😀


multi-layering

2009/03/22
سلام
اول عید نوروز رو دوباره تبریک میگم
بعدشم میخوام مطلبی رو بذارم که خیلی وقت پیش تایپ کردم ولی وقت نشد توی وبلاگم بذارم.

چندلایه‌ای بودن:

یکی از دلایلی که من عاشق لینوکس هستم همین چندلایه‌ای بودنش هست. حالا این چی هست؟ یه مفهوم کلی هست که خیلی جاها مصداق پیدا میکنه، حالا ما که بحثمون در حوزهٔ کامپیوتر هست، بازم خیلی مصادیق میتونیم براش پیدا کنیم. اونقدر مفهومش ساده‌س که ترجیه با چند تا مثال بیانش کنم.

مثلاً معروفترین نرم‌افزار پارتیشن‌بند چی هست؟ معلومه دیگه partition magic ویندوز. اما همین پارتیشن‌بند معروف و قدرتمند رو فقط بصورت گرافیکی میشه استفاده کرد. یعنی اگه بخواید تحت داس پارتیشن‌بندی کنید مجبورید از همون ابزار مزخرف fdisk داس استفاده کنید. اما توی لینوکس قضیه خیلی فرق داره، ابزار تجت ترمینال parted قدرتش به اندازهٔ ابزار گرافیکی GParted هست، حتی شاید بیشتر باشه چون اصولاً GParted یه رابط گرافیکی برای parted هست. اما این تنها رابط گرافیکی نیست که برای parted نوشته شده. QTParted و VisParted و از همه باحال‌تر YaST Partitioner هم هستن. پس شما در هر محیطی که باشید(ترمینال، گرافیکی و GTK رو داشته باشید یا QT رو، یا هیچ کدوم رو نداشته باشید از VisParted استفاده کنید، مثل لینوکس لایو 54 مگابایتی Parted Magic) همه جا قدرت ابزار Parterd رو خواهید داشت. (نکتهٔ دیگه اینکه YaST Partitioner و کلاً ابزارهای YaST هم رابط مبتنی بر GTK دارن هم رابط مبتنی بر QT هم حتی رابط مبتنی بر ncurses که توی ترمینال اجرا بشه). خیلی نرم‌افزارهای تحت ترمینال هستن که ابزار قدرمتندی هستن، ولی چون کار کردن با ترمینال(و به خاطر سپردن کلی اوپشن و آرگومان) برای همه راحت نیست(محبوبیت ابزارهای گرافیکی رو نداره) یه عده ای اومدن برای اون ابزار قدرتمند تحت ترمینال، رابط گرافیکی نوشتن. پس این برنامهٔ گرافیکی دو لایه داره، لایهٔ بالاییرابط گرافیکی وابسته هست، و لایهٔ پایینی موتور درونی و رابط سادهٔ تحت ترمینال. لایهٔ بالایی به لایهٔ پایینی وابسته هست، اما لایهٔ پایینی به لایهٔ بالایی وابسته نیست و میتونه مستقل کار خودش رو انجام بده. پس میشه لایهٔ بالایی رو عوض کرد (یه رابط گرافیکی دیگه برای برنامه استفاده کرد). در ضمن کسی که یک رابط گرافیکی رو می‌نویسه، دیگه با جزئیات موتور درونی برنامه کاری نداره و با اونها سر و کله نمی‌زنه، و فقط تمرکز خودش رو روی رابط گرافیکی می‌ذاره.

شاید اصطلاح Abstraction layer یا «لایهٔ تجرید» رو خونده یا شنیده باشید. اگه به ویکی پدیا مراجعه کنید:

An abstraction layer (or abstraction level) is a way of hiding the implementation details of a particular set of functionality.

In computer science, an abstraction level is a generalization of a model or algorithm, away from any specific implementation.

یک لایهٔ تجرید (یا سطح تجرید) راهی است برای پنهان کردن جزئیات پیاده‌سازی مجموعهٔ خاصی از وظایف(عملکردها).

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

بازم ترجیه میدم با مثال مطلب رو روشن کنم. یه مثال واضحش فایل‌سیستم‌ها هستن، با به زبان ساده‌تر، فرمت‌های پارتیشن‌های هارد(یا فلش). هر فایل‌سیستم یک abstraction layer هست برای خوندن و نوشتن دیتاهای هارد. مثلاً شما وقتی یه فایل رو از یه پارتیشن به یه پارتیشن دیگه(یا به همون پارتیشن) کپی می‌کنید، کاری دارید که فرمت پارتیشن مبدا و مقصد چی هست؟! اصلاً ازتون نمی‌پرسه که «با چه فرمتی بخونم؟» و «با چه فرمتی بنویسم؟» چه برسه به اینکه بخواد جزئیات نحوهٔ خوندن از و نوشتن روی هارد رو ازتون بپرسه. برای هر فایل‌سیستم سری کارها (مثل خوندن یک فایل، ایجاد یک فایل یا دایرکتوری جدید، گرفتن لیست محتویات یک دایرکتوری، گرفتن مشخصات یک فایل و…) تعریف شده، که وقتی یک کاربر(یا برنامه) درخواست یکی از این کارها رو به کرنل میده، کرنل(بعد از بررسی مجوزها) اون کار رو بسته به نوع فایل‌سیستم انجام میده، و اون کاربر(یا برنامه) دیگه به جزئیاتش کاری نداره.
همینطور درایورهای سخت‌افزاری هر کدوم یک abstraction layer هستن برای ارتباط با اون سخت افزار.(احتمالاً اصطلاح Hardware Abstraction Layer یا به اختصار HAL رو شنیدید)

همینطور مفهوم Database abstraction layer هم شبیه دو نمونهٔ قبلی هستن.
کتابخانه‌ها(Library ها) هم هر کدوم رو میشه یک abstraction layer تصور کرد(مثل GTK و QT). حتی هر کدوم از زبانهای برنامه‌نویسی. گفتم یه مفهوم خیلی کلی هست که میشه همه جا مصادیقش رو پیدا کرد!

وقتی abstraction layer اینقدر کاربرد و مصداق داره، پس میشه انتظار داشت هر سیستم‌عامل کلی از این abstraction layer ها داشته باشه.
به قول ویکی پدیا:

A typical vision of a computer architecture as a series of abstraction layers: hardware, firmware, assembler, kernel, operating system and applications

Computer_abstraction_layers.svg

هر سیستم‌عامل از یه سیستم چند لایه تشکیل شده. و حتی قسمتهای مختلف یک سیستم‌عامل. اما این قضیه بین سیستم‌عامل‌های مختلف کم و زیاد داره. توی ویندوز کمتر هست و توی یونیکس و لینوکس خیلی بیشتر. مثلاً شما ویندوز بدون گرافیک نمی‌تونید داشته باشید. یا نمی‌تونید محیط گرافیکی ویندوز رو عوض کنید. و توی ویندوز(بر خلاف لینوکس) کرنل به محیط گرافیکی وابسته هست. اما توی لینوکس ما یه چیزی داریم به اسم X Window System که رابط بین کرنل و محیطهای گرافیکی مختلف(Window Manager ها مثل گنوم و KDE) هست و در واقع یک abstraction layer. یا مثلاً توی لینوکس Shell های مختلف(مثل bash و sh و tcsh و…) هر کدوم بصورت یک برنامهٔ جدا و مستقل تعریف شدن که میشه توی ترمینال‌های مختلف اجرا کرد(مثل ترمینال‌های 1 تا 6 و یا terminal emulator هایی مثل gnome-terminal یا konsole یا xterm یا…). اما توی ویندوز حتی شل(که همون داس باشه) از ترمینال جدا نیست و نمیشه تفکیک کرد.(مثلاً نمیشه از شر اون پنجرهٔ کامند زشت خلاص شد. اصلاً خط فرمان ویندوز درپیت نه ظاهر داره نه باطن!)

فکر می‌کنم دیگه واضح شده باشه.

راستی از اونجایی که من از این ساختار چندلایه‌ای بودن خیلی خوشم اومد، سعی کردم برنامهٔ خودم یعنی PyGlossary رو هم دو لایه‌ای کنم. یعنی موتور دورنیش مستقل از رابط گرافیکیش باشه. و یه رابط سادهٔ مبتنی بر خط فرمان براش نوشتم(جدیداً ProgressBar متنی هم براش گذاشتم) که بشه هم با رابط GTK ازش استفاده کرد هم با رابط خط فرمان. رابط گرافیکیش که همینطوری باز میشه(با کلیک روی آیکونش یا اجرای دستورش بدون هیچ اوپشن و آرگومانی). اما برای رابط خط فرمانش کافیه بنویسید:
pyglossary --help
البته فعلاً با رابط خط فرمانش فقط میشه Convert و Reverse کرد(نه Edit).
من خودم این PyGlossary رو توی ویندوز هم اجرا کردم، ولی چون dependency هاش برای ویندوز زیاد هست(python و gtk و python-gtk و python-cairo و چند تا library دیگه که مجموعاً بالای 20 مگ میشه) اجرای رابط گرافیکیش توی ویندوز یه خورده سخته. بنابراین رابط مبتنی بر خط فرمانش میتونه به درد کاربران ویندوز بخوره، چون فقط یه مفسر پایتون میخواد. البته هنوز خوندن از bgl ش برای ویندوز کار نمیکنه(یه کد ++C باید جدا برای ویندوز کامپایل بشه). اما کاربران ویندوز میتونن باهاش مثلاً از دیتابیس Tabfile (مثلاً دیتابیس ساختهٔ خودشون) به StarDict تبدیل کنن(یا بالعکس) و در نتیجه دیتابیس استاردیکت رو ویرایش کنن، البته بصورت غیر مستقیم(با واسطهٔ Tabfile یا xFarDic).

من چون از اول انشام زیاد خوب نبوده، بلد نیستم چطوری بحث رو شروع کنم و خاتمه بدم! پس فعلاً خداحافظ