گزیر

::گاهنوشتهای حمیدرضا محمدی::

دربارهٔ من:

آخرین نظردهندگان:

مشترک شوید:

ایمیل خود را در جعبهٔ زیر وارد کنید و دکمهٔ اشتراک را بزنید.

جستجو:

Valid XHTML 1.0 Transitional RSS Feed

کارنامهٔ کاری من از مهر ۱۳۸۵ تا پایان اردیبهشت ۱۳۹۰

من از اول مهرماه ۱۳۸۵ تا پایان اردیبهشت ۱۳۹۰ در شرکت هدی سیستم کار می‌کردم. این نوشته -که بخشی از نگارش مفصل‌تر رزومهٔ کاری من بود- دربردارندهٔ خلاصه‌ای از کارنامهٔ من در آن شرکت است که به عنوان یکی از آخرین یادگاریهای سال ۹۰ در اینجا نگهش می‌دارم. با توجه به آن که خروجی نوع کار من نرم‌افزارهای کامپیوتری است؛ با گذشت زمان و تغییرات سریع سیستم عاملها و جایگزینی نرم‌افزارها شاید در آینده حتی اجرای این برنامه‌ها دیگر به راحتی امکان‌پذیر نباشد. حفظ چنین فهرستهایی می‌تواند برای آن روزها، محض تاریخچهٔ زندگی یا یادگاری مفید باشد.

LightPM

کاربری

سیستم مدیریت پروژهٔ داخلی برای پروژه‌های توسعهٔ نرم‌افزار بر اساس مدل XP

زبان برنامه‌نویسی

Delphi 7.0

پایگاه داده‌ها

Microsoft SQL Server 2000 به بالا (به شکل مخلوط از BDE و ADO جهت کار با پایگاه داده‌ها استفاده شده)

کمپوننتهای استفاده شده

DevExpress، …

مشارکتها

اسکلت اولیهٔ برنامه توسط همکار دیگری طراحی شده بود.

قابلیتها

  • مدیریت کاربران (برنامه‌نویسها)، تعیین دسترسی
  • امکان تعریف پروژه، تعیین پارامترهای پروژه، تعریف Story، Iteration، Taskهای مختلف و انتساب آنها به کاربران، امکان پیگیری پیشرفت کارها و امتیازدهی به کار کاربران
  • امکان استفاده به عنوان سیستم ثبت ورود و خروج (با ثبت زمانهای ورود و خروج و امکان یکسان‌سازی ساعتها)، امکان اجرای همیشگی در پس‌زمینه و همخوانی با رویدادهای خاموش و روشن شدن سیستم، امکان ورود اطلاعات کاری (اضافه‌کاری و …)، امکانات گزارش‌گیری متناسب
  • قابلیت یادآور (TODO) برای استفادهٔ شخصی کاربران با پشتیبانی از تقویم شمسی
  • قابلیت ثبت یادداشتهای شخصی، با امکان دسته‌بندی و مدیریت یادداشتها
  • امکان مشاهدهٔ کار جاری کاربران
  • قابلیت ارسال و دریافت پیام متنی بین کاربران (بسیار ساده، مبتنی بر پایگاه داده‌ها با قابلیت ارسال فایلهای ضمیمه)
  • امکان ضمیمه کردن فایل به هر یک از آیتمهای پروژه
  • گزارشساز پروژه با خروجی RTF
  • امکان بروزرسانی خودکار
  • امکان گزارش خطاهای برنامه‌ها و انتساب آنها به کاربران دیگر و پیگیری نتیجه (Bug Tracking)
  • نصاب برنامه قابلیت ایجاد خودکار پایگاه داده‌ها روی سرور و همینطور تنظیم ODBC روی سیستم کاربر را دارا بود

نظر کلی

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

نمای کلی LightPM

مدیریت یادداشتهای شخصی

نمای کاربری

ورود و خروج

پیشرفت پروژه

Globalizer

کاربری

اضافه کردن پشتیبانی از زبانهای مختلف برای رابط کاربری پروژه‌های موجود دلفی ۷

زبان برنامه‌نویسی

Delphi 7.0

کمپوننتهای استفاده شده

DevExpress و همینطور یک Syntax Highlighter رایگان و بازمتن که نامش را به خاطر ندارم و …

مشارکتها

یک کد اولیهٔ ده یا بیست خطی که در یک سورس دلفی دنبال رشته‌ها می‌گشت و آنها را پیدا می‌کرد به من داده شد تا بر اساس آن برنامه‌ای بنویسم که یک پروژهٔ دلفی ۷ را بگیرد و پشتیبانی از زبانهای مختلف را به رابط کاربری آن اضافه کند! (جریان لباسی که برای یک دکمه دوخته می‌شود با ابعاد میکروسکوپی برای دکمه البته 😉 )

قابلیتها

  • قابلیت پشتیبانی از تعداد زبانهای نامحدود برای رابط کاربری
  • امکان بارگذاری پروژه‌های دلفی ۷، تشکیل درخت پروژه
  • پارس فایلهای dfm، تشکیل درخت اجزا، نمایش ساختار فرم با استفاده از مجموعه‌ای از label با امکان ردگیری کلیک و همگامسازی آن با جدول مشخصات اجزا
  • پارس سورسهای دلفی، استخراج رشته‌ها، نمایش آنها در ساختار جدول، امکان استثنا کردن رشته‌هایی که نیاز به ویرایشهای مختلف برای چند زبان ندارند، نمایش متن کد متناظر با رشتهٔ جاری در جدول رشته‌ها
  • امکان ذخیره و بارگذاری پروژه‌های چندزبان‌سازی، علاوه بر آن امکان ذخیره و بازیابی فهرست رشته‌های ترجمه شده و همینطور رشته‌های مستثنا شده از فرایند ترجمه نیز به شکل جداگانه وجود دارد
  • امکان ایجاد پروژهٔ دلفی با پشتیبانی از زبانهای ترجمه شده، امکان کامپایل، مشاهدهٔ خطاها و هشدارها و رفع ایراد در محیط برنامه بدون نیاز به اجرای مجزای دلفی
  • قابلیت پشتیبانی همزمان پروژه‌های خروجی از تمام زبانهای ترجمه شده با امکان سوییچ بین زبانها در حین اجرا
  • امکان ایجاد فایل مجزای ترجمه (فقط شامل رشته‌ها) برای مترجم (بدون نیاز به سورس پروژه)، برنامهٔ کاربردی کوچکی توانایی نمایش رشته‌ها را به مترجم دارد و پس از پایان کار او می‌توان خروجی فایل او را در برنامه وارد و استفاده کرد
  • کاربری سریع با استفاده از صفحه‌کلید

نظر کلی

برای خودم (در زمان خودش، به عنوان یک برنامه‌نویس آماتور دلفی) باعث افتخار است، این برنامه برای استفادهٔ داخلی ساخته شد و یکی دو پروژهٔ موجود با استفاده از آن ترجمه شد (ترجمهٔ پروژه‌های بسیار بزرگ دلفی در ظرف یک یا چند ساعت می‌توانست انجام شود)، اما نهایتاً بدون جایگزین کنار گذاشته شد و علی‌رغم آن که به نظرم در دوران رواج دلفی ۷ می‌توانست مشتریهای خاص خودش را داشته باشد هیچگاه روی فروش آن حساب نشد. تصور می‌کنم تعداد افراد کمی در شرکت از وجود چنین برنامه‌ای آگاه باشند و بدانند این دارایی چه ارزشی داشت/دارد.

گلوبالایزر
گلوبالایزر
گلوبالایزر
گلوبالایزر
گلوبالایزر
گلوبالایزر
گلوبالایزر
گلوبالایزر
گلوبالایزر

FormDesigner

کاربری

طراحی فرمهای OMR

زبان برنامه‌نویسی

MFC/Visual C++ (6.0, 2003, 2005)

کتابخانه‌های استفاده شده

BCGControlBar Library, CxImage

منبع اولیه

Report Generator

قابلیتهای اضافه شده

  • پشتیبانی از اضافه کردن آیتمهای OMR و ICR
  • اضافه کردن پشتیبانی از گرید OMR به ویرایشگر مطابق با استانداردهای مختلف برای تعداد Headهای OMR برای فرمهای ایستاده یا خوابیده با قابلیت تعیین محل تایمینگها در کناره‌ها یا بالا و پایین
  • قابلیت ایجاد خودکار تایمینگها با امکان ویرایش دستی
  • طراحی مجدد ظاهر با استفاده کنترلهای BCG
  • اضافه کردن قابلیت تغییر همزمان Propertyهای تمام عناصر انتخاب شده
  • قابلیت تغییر Propertyهای پیش‌فرض برای عناصر جدید
  • اضافه کردن نمایش ساختار درختی فرم
  • پشتیبانی نمایش متون راست به چپ، پشتیبانی از یونیکد
  • امکان آرایش سریع OMRها، ایجاد خودکار برچسبهای ردیفی و ستونی و …
  • رابطهای کاربری فارسی و انگلیسی (برنامه‌های مجزا)
  • پشتیبانی از طراحی فرمها در حالت GrayScale در هنگام طراحی (بخشی از کد کتابخهٔ BCGControlBar برای اضافه کردن Color Pickerهای طیف خاکستری دستکاری شد)
  • پشتیبانی از ایجاد خروجی XML جهت استفاده در برنامه‌های دیگر
  • پشتیبانی از نقاط مرجع (Reference Point) جهت تعیین میزان چرخش ناشی از اسکن فرمهای چاپ شده که توسط این برنامه طراحی شده‌اند

نظر کلی

بدنهٔ اصلی این برنامه از یک پروژهٔ بازمتن روی اینترنت برداشته شده (اینجا) ولی کار زیادی روی آن کرده‌ام. برای آن طرحهایی داشتم (و ارائه کردم) تا آن را در قالب یک سیستم آزمون (از طراحی فرم پاسخنامه، چاپ، … تا اسکن پاسخها، …، صدور کارنامه) به بازار ارائه دهیم که پس از ارائهٔ نمونهٔ اولیهٔ کاملاً قابل استفاده، به این نتیجه رسیدند که قابلیت تجاری‌سازی ندارد. در حال حاضر بخشی از بستهٔ نرم‌افزاری OMR Studio است (لینک) و فکر می‌کنم هیچگاه به مشتریان ایرانی ارائه نشده (به جهت مشکلاتی که می‌تواند برای تجارت طراحی و چاپ فرم شرکت ایجاد کند)، نسخهٔ فارسی آن -علی‌رغم زحمت زیادی که جهت سازگار کردن برنامهٔ اولیه با یونیکد کشیده شده- هیچگاه از شرکت بیرون نرفته است.

FormDesigner
FormDesigner
FormDesigner
FormDesigner
FormDesigner

نویسه‌خوان آراکس (AraxPage)

کاربری

نرم‌افزار رومیزی OCR فارسی

زبانهای برنامه‌نویسی استفاده شده توسط من

C# (Windows Forms. .NET 2.0) , Visual C++

مشارکتها

موتور بازشناسی فارسی و تشخیص الگوی ناحیه‌بندی این نرم‌افزار توسط دوستان دیگر من در هدی سیستم تهیه شده (که بعضاً دیگر در آنجا کار نمی‌کنند)، پشتیبانی از خروجی RTF نیز توسط همکاران دیگر اضافه شده، باقی قابلیتها تا زمان حضور من در این شرکت توسط من (عموماً طراحی و) پیاده‌سازی شده، یکی از راهنماهای نرم‌افزار نیز توسط من نوشته و به‌روز نگه داشته شده (راهنمای اولیه و مفصل حدوداً ۲۶۰ صفحه‌ای برای نسخه‌های قدیمی‌تر، منهای فصل مقدماتی دربارهٔ شرکت البته، طرح جلد نیز توسط دوستان دیگر صورت گرفته)، البته میزان استفاده از کتابخانه‌های بازمتن و کدهای آماده -در کارهای من روی این نرم‌افزار- نیز بالاست.

قابلیتهایی که توسط من پیاده‌سازی شده

مفصل است، تصور می‌کنم راهنمای کاربران این نرم‌افزار مستند کاملی در این زمینه باشد با این توضیح که کنترلهای نمایش تصویر و امکانات ناحیه‌بندی (جدولبندی دستی و …)، کنترل نمایش تصاویر بندانگشتی، ویرایشگر متنی و بسیاری از کنترلهای غیراستاندارد برنامه از صفر و توسط خود من نوشته شده است و تنها کنترل تجاری استفاده شده Elegant Ribbon است که در ویرایشهای جدیدتر استفاده شده. قابلیتهایی مثل پشتیبانی از ورودی PDF، خروجی PDF، بازشناسی متون انگلیسی نیز توسط من و با استفاده از کتابخانه‌های بازمتن به برنامه اضافه شده و عموماً شامل تغییرات و تصحیحاتی در کد کتابخانه‌های معروف مورد استفاده بوده است. در طراحی رابط آن روی پشتیبانی از رابطهای چندزبانه نیز دقت و پیش‌بینیهای لازم شده، هر چند هیچگاه رابط غیرفارسی برای آن تهیه نشد (تجربه‌هایی که بعداً در طراحی رابط HODA ScanDoc استفاده شد).

نظر کلی

یک کلمه: Bloatware!‎ ،من برنامه‌نویسی C#‎ را با این برنامه شروع کردم. با توجه به این که برای طراحی بعضی قابلیتها مجبور شده‌ام سراغ کتابخانه‌ها و کدهایی بروم که از اساس چندان خوب نوشته نشده‌اند این مسأله میزان درهم‌تنیدگی و پیچیدگی کار را افزایش داده. در کل، از نگاه بیرونی بدون توجه به کد، مزیتش این است که «کار می‌کند» و تمام کارهایی را که در راهنمایش ادعا شده انجام می‌دهد واقعاً انجام می‌دهد 😉 . اگر فرصت و رخصتی بود دوست داشتم آن را به صورت پیمانه‌ای و با ساختار افزونه‌ای (Plugin) و با استفاده از قابلیتهای جدید سکوی ‎.NET‎ از نو طراحی کنم.

برخی برگه‌های روبان آراکس
گزینش قابهای PDF
پوشه‌بندی در آراکس
بدلخواهسازی رنگهای ناحیه‌ها
رنگبندیهای آراکس

ARAX Server و کنترلهای کلاینت آن

کاربری

نرم‌افزار سرور OCR و همینطور تولید سند (RTF، PDF و TXT) با SDK سمت کلاینت و ابزارهای مانیتورینگ و پیکربندی تحت شبکه

زبانهای برنامه‌نویسی

C#‌‎ و C++‎ (البته در تولید برنامه‌های نمونه برای برنامه‌نویسان از زبانهای Delphi، Viusal Basic و JavaScript نیز استفاده شده)

مشارکتها

غیر از موتور بازشناسی که همان موتور بازشناسی استفاده شده در نسخهٔ رومیزی است و کار جدیدی برای این مجموعه روی آن انجام نشده (به غیر از ایجاد یک DLL سمت کلاینت بدون امکان بازشناسی و فقط با قابلیت پیدا کردن خودکار الگوی ناحیه‌بندی که با حذف کدهای اضافی ایجاد شده) و همینطور یک کلاینت دلفی به عنوان برنامهٔ نمونه که برای آزمایش کاربری و همچنین به عنوان یک برنامهٔ نمونه تهیه شد و البته بعداً توسط خود من کامل شد باقی کارهای مرتبط با این مجموعه -که بسیار پرحجم و پرزحمت هم بوده- توسط شخص من انجام شده.

اجزا و قابلیتها

  • سرویس‌دهنده (سرویس ویندوزی مبتنی بر ‌‌.NET‎): برنامه‌ایست که روی پورتهای شبکه منتظر درخواستها می‌ماند و درخواستهای دریافتی را پس از ارائهٔ کدهای پیگیری در صف پردازش قرار می‌دهد یا همزمان پاسخ می‌دهد. وضعیت جاری همیشه بر روی پایگاه داده‌های SQLite نوشته می‌شود و در صورت بروز مشکل و راه‌اندازی مجدد وضعیت قبلی را بازیابی می‌کند.
  • پیمانهٔ پیکربندی: برنامه‌ای که امکان تغییر تنظیمات سرویس‌دهنده را برای کاربر مدیرسیستم فراهم می‌کند (از طریق شبکه با سرویس‌دهنده ارتباط برقرار می‌کند).
  • پیمانهٔ الگوهای ناحیه‌بندی: برنامه‌ای که امکان تعریف متمرکز الگوهای ناحیه‌بندی (همانند الگوهای ناحیه‌بندی آراکس رومیزی هستند به علاوهٔ ناحیه‌هایی که قابلیت نامگذاری دارند و فیلد خوانده می‌شوند و مقادیر آنها به کمک نامشان توسط کلاینت قابل تمایز از سایر ناحیه‌هاست)
  • سه برنامهٔ بالا، در نسخه‌های نهایی در قالب یک برنامهٔ ویندوزی (یک برنامهٔ معمولی و نه یک سرویس) ترکیب شدند (به دلیل مشکلاتی که فرایند محافظت و قفلگذاری ایجاد کرده بود).
  • پیمانهٔ پایش: برنامه‌ای که تحت شبکه قابلیت نمایش وضعیت سرویس‌دهنده، صف کارها را برای تمام کاربران و همینطور کنترل و توقف عناصر موجود در صفها را برای کاربر مدیر سیستم فراهم می‌کند.
  • کنترل اکتیواکس آراکس: این کنترل که به صورت Mixed Mode تهیه شده بود در واقع رابطی برای برنامه‌های غیر داتنتی با هستهٔ کوچک شده‌ای از آراکس رومیزی در قالب یک DLL است و امکان برنامه‌نویسی سمت کلاینت را برای ارسال درخواستهای OCR و تولید سند فراهم می‌آورد.
  • کنترل هایلایت: این کنترل اکتیواکس نیز به صورت Mixed Mode تهیه شده و حالت ویژوال دارد و می‌تواند امکان برجسته کردن کلمات کلیدی جستجو شده در متن OCR شده را روی تصویر آن فراهم کند (علت تهیهٔ چنین کنترلی آن بود که شرکت تمایل نداشت اطلاعات موقعیت کلمات خوانده شده را در اختیار برنامهٔ مشتری بگذارد).
  • کار دیگری که البته جزئی از این محصول نیست ولی از جنس آن است یک DLL برای فراهم کردن دسترسی به محتوای فایلهای ASD تولید شده توسط نسخهٔ رومیزی آراکس است که امکان انتقال محتوای این فایلها را به پایگاه داده‌ها در یکی از محصولات مبتنی بر دلفی شرکت (با استفاده از نمونه برنامهٔ دلفی تهیه شده توسط خود من) فراهم می‌کرد.

نظر کلی

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

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

تصاویر و توضیحاتی راجع به این مجموعه در این نوشته آمده است، هر چند بعد از آن تغییرات زیادی در برنامه‌ها به وجود آمد و این نوشته چندان به‌روز نیست.

HODA ScanDoc

کاربری

نرم‌افزار اسکن (تصویربرداری از طریق TWAIN)

زبانهای برنامه‌نویسی

C#‌‎ و C++‎

مشارکتها

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

قابلیتها

  • امکان تصویربرداری سریع از اسناد با استفاده از اسکنرهای InoTec مدلهای SCAMAX M06، همینطور یک مدل از اسکنرهای پاناسونیک با استفاده از رابط TWAIN با پشتیبانی از تقریباً تمامی امکانات پیکربندی اسکنر اینوتک در رابط برنامه
  • ارائهٔ رابط منعطف و نوآورانه برای تعیین الگوی نامگذاری تصاویر، مسیرهای ذخیره و دسته‌ها و خروجیهای تولید شده توسط افزونه‌های پس‌پردازش با قابلیت تعریف اجزای جدید نامگذاری از طریق افزونه‌ها با تعداد زیادی جزء پیش‌فرض همانند شمارنده (با قابلیت کاهش و افزایش و نعیین گام تغییر)، ساعت (هر یک از اجزا تا میلی‌ثانیه)، تاریخ (شمسی، میلادی، هر یک از اجزا) و …
  • پشتیبانی از فیلدها (عددی، رشته‌ای، انتخابی) جهت کاهش تکرار در الگوهای نامگذاری
  • پشتیبانی از افزونه‌های پس‌پردازش (Plugin)
  • پشتیبانی از ورود تصاویر موجود به سیستم (جهت اعمال پس‌پردازش توسط افزونه‌ها، یا تغییر الگوی نامگذاری) با پشتیبانی از افزونه‌های درون‌ریزی
  • تهیهٔ تعداد قابل توجهی افزونهٔ پس‌پردازش شامل افزونه‌هایی برای کنترل اسکنر (توقف اسکن، ایجاد خودکار دسته‌های جدید و …) بر اساس شرایط تصویر دریافتی، افزونه‌ای برای ایجاد تصاویر بریده شده، یا OCR انگلیسی ناحیه‌های تعیین شده یا استخراج مقادیر بارکدها در ناحیه‌های از پیش تعیین شده (دو مورد آخر با استفاده از کتابخانه‌های بازمتن)، کلاینتی برای ARAX Server، افزونه‌ای جهت بارگذاری شمای فرم طراحی شده توسط FormDesigner (بالا توضیح داده شده)، تعیین پاسخنامهٔ آزمون و استخراج نتایج از تصاویر حاصل از اسکن و نهایتاً تولید کارنامه، افزونه‌ای برای ذخیرهٔ اطلاعات تصاویر دریافتی و همینطور خطاها و رویدادهای توقف و شروع اسکن در یک پایگاه داده‌های SQL Server و …
  • امکاناتی اولیه برای مدیریت کاربران و تعیین دسترسی (عملیاتی نشده)
  • رابط دوزبانهٔ فارسی و انگلیسی برای تمام اجزا

نظر کلی

اگر بخواهم از بین کارهایی که در این شرکت کرده‌ام بهترین نمونه را از لحاظ کدنویسی انتخاب کنم این یکی را انتخاب می‌کنم. هر چند استفاده از XML برای ذخیرهٔ وضعیت و همینطور استفاده از ساختار پوشه‌ای فیزیکی برای ذخیرهٔ وضعیت دسته‌ها انتخاب چندان مناسبی به نظرم نبوده، هر چند که کد کتابخانهٔ ارتباط با اسکنر (TWAIN) عملاً بسیار پرحجم شده و می‌شد بهتر نوشته شود و البته کد تکراری و مشکلات حافظه‌ای نیز دارد اما در کل برای برنامه‌نویس متوسطی مثل من این نمونه به نظرم قابل قبول است. بر خلاف آراکس مستندات زیادی برای این یکی تولید نکرده‌ام و دو راهنمای سریع برای کاربر تنها مستندات تولید شده برای آن است. حجم کدنویسی نسبتاً بالاست (البته قابل مقایسه با آراکس نیست، اما مثلاً در سمت C++‎ تعداد زیادی از قابلیتهای اختصاصی TWAIN اسکنر اینوتک با استفاده از مستندات آن پیاده‌سازی شده‌اند) و تعدادی از اجزای رابط کاربری آراکس نیز در این برنامه مجدداً استفاده شده و بعضاً تغییرات و تصحیحاتی داشته‌اند به گونه‌ای که با کد اولیه سازگاری ندارند (کنترل انتخاب نمایه‌های بند انگشتی)، از اجزا و کتابخانه‌های بازمتن (LOG4NET و یک کد آماده برای نمایش سرعت اسکن، اجزایی از کتابخانهٔ LibTiff، epeg و …) نیز در تولید این برنامه استفاده شده اما حجم استفاده در حد آراکس نیست و بر خلاف آراکس تغییرات چندانی نیز در کدهای ضمیمه شده اعمال نشده. کار، اصلاً کامل نیست و اگر بودم طرحهای زیادی برای این برنامه داشتم. شمارهٔ اولین ویرایش آن 2.0 است (به لحاظ آن که شرکت پیش‌تر برنامه‌ای به همین نام داشته) و آخرین ویرایش آن در زمان حضور من 3.5 (فکر می‌کنم) بود. کد اولیهٔ کتابخانهٔ ارتباط با TWAIN را از برنامهٔ کوچکی که پیشتر با استفاده از کدی موجود بر روی اینترنت تهیه کرده بودم (کاملاً با Visual C++‎) به اسم BatchScanWizard که با اسکنر دیگری کار می‌کرد برداشته‌ام.

پنجرهٔ اصلی سامانهٔ تصویربرداری از اسناد هدی (رابط فارسی)
پنجرهٔ اصلی سامانهٔ تصویربرداری از اسناد هدی (رابط انگلیسی)
نامگذاری تصاویر (رابط فارسی)
نامگذاری تصاویر (رابط انگلیسی)
افزونه‌های پس‌پردازش (رابط فارسی)
افزونه‌های پس‌پردازش (رابط انگلیسی)

کارها و برنامه‌های دیگر

تعداد برنامه‌های خرده‌ریز که در هدی سیستم نوشته‌ام بسیار زیاد است: رابطهایی برای نرم‌افزار OCR کارت ملی (هم نسخهٔ دلفی و هم نسخهٔ C#‎)، رابطی برای یک نرم‌افزار تصحیح نتایج آزمون (مبتنی بر کمپوننتهای نرم‌افزار iReadDoc هدی) و …. علاوه بر آن کارهای متنوع دیگری هم غیر از برنامه‌نویسی آنجا کرده‌ام که تهیهٔ مستندات مختلف، فهرست کردن ایرادهای زیادی از اسکنرهایی که با آنها کار می‌کردم (نرم‌افزاری و سخت‌افزاری) و تعامل با تولیدکننده‌های آنها جهت رفع ایراد، تهیهٔ اسکریپتهای نصب (نصاب تمام برنامه‌های هدی را من تهیه کرده‌ام)، تست و مستندسازی قابلیتهای سخت‌افزارهای مختلف و … از جملهٔ آنهاست.

BatchScanWizard
برنامه‌ای که ظرف یک ساعت نسخهٔ اولیه‌اش آماده شد
یکی از اولین کارهایم برای شرکت، چند ساعت زمان برد
خروجی گلوبالایزر (اصل برنامه را هم خودم نوشتم)
رابط این برنامه را من نوشتم