کتاب موبایل کتابخوان epub

اینم یه تجربه پراکنده دیگه!

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

کلا هم بخاطر وجود ابزار بسیار خوبی به اسم pandoc و نوشته شدن متن به فرمت markdown این عملیات تقریبا راحته!

مراحل این کار بصورت خلاصه اینهاست:

  1. اول از همه نوشتن متادیتاهای کتاب توی یک فایل خاص به اسم title.txt به فرمت yaml. این متا دیتا شامل اسم کتاب نام نویسنده و این دست اطلاعات است.
  2. تهیه کردن یک css برای تعیین فونت متن. لازم میدونم که اضافه کنم که epub یه فرمت خاص از xhtml و css یه سری متادیتای دیگه‌است که بصورت فشرده شده ارائه می شه. css بوسیله این سوئیج epub-stylesheet به pandoc معرفی می‌شه.
  3. اضافه کردن فونت‌ها درون فایل epub تا در صورتی که فایل روی خواننده مقصد وجود نداشته باشه از این فونت‌ها استفاده بشه. فرمت فونت‌هایی که بصورت رسمی پشتیبانی میشه oft و woff هست. اما استفاده از ttf و تقریبا سایر فرمت‌های فونت‌های وب هم پشتیبانی می‌شه. pandoc این کار رو با سوئیچ epub-embed-font انجام میده.
  4. اضافه کردن نحوه ورق خوردن کتاب که از راست به چپ باشه. این کار با کلید page-progression-direction توی متادیتای کتاب در فایل title.txt انجام می‌شه.
  5. برای اینکه متن‌ها هم چپ به راست باشن بایستی به تگ ‍‍‍‍‍‍ هریک از بخشها یک ویژگی اضافه بشه. اینکار بصورت مستقیم قابل انجام نبود و به همین خاطر با رجوع به میلینگ لیست pandoc و پرسیدن در این مورد با استفاده از چیزی به اسم template این مشکل هم حل شد.

نمونه انجام این کار توی شاخه epub تو github کتاب قابل روئیته.

همین!

Palm Pilot Pretotype

اینم یه تجربه پراکنده دیگه!

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

کتاب اصلی رو می‌تونید توی این آدرس پیدا کنید و لینک سایت ترجمه کتاب هم از این قراره.

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

همین!

cmake diagram

اینم یه تجربه پراکنده دیگه!

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

خب همونطور که ممکنه بدونید من توسعه اصلی کارهام در زبان‌های c و c++ هست. یکی از ویژگی‌هایی که این زبان‌ها دارن این هست که شما بایستی برای کامپایل شدن برنامه همیشه از یک IDE استفاده کنی یا از ابزارهایی مثل make برای لینوکس یا مثلا nmake در ویندوز. خب وقتی شما بخوای یه کد رو بین پلتفروم‌های مختلف و برنامه نویس‌های مختلف به اشتراک بگذاری همیشه این سوال وجود داره که دقیقا چطور میشه روند build رو یه جوری از وابستگی به سیستم عامل و حتی پلتفرم آزاد کرد. یه موضوع دیگه‌هم اینه که چطور میشه برای برنامه نویسان این آزادی رو ایجاد کرد که از IDE مورد علاقه‌شون استفاده کنند.

برای جواب به این سوالات و خیلی سوالات دیگه جامعه متن باز پروژه‌ای به نام cmake ایجاد کرده که ویژگی‌های خیلی خوبی داره و همچنین یادگیریش به نسبت آسونه!

ویژگی‌های cmake

خب اگه بگم ویژگی‌های cmake رو بصورت خلاصه بگم اینها هستن

  • امکان کامپایل‌کردن کد بدون در نظر گرفتن محل کد
  • امکان کامپایل‌کردن کد روی سیستم‌عاملهای مختلف
  • امکان تشخیص محل فایل‌ها، کتابخانه‌ها
  • مدیریت وابستگی ها
  • امکان تولید فایل‌های make برای سیستم‌های مختلف و تولید پروژه برای IDEهای مختلف

کاری که من با cmake انجام دادم

کاری که من با کم cmake انجام دادم رو سعی میکنم براتون توضیح بدم. خب ما یه کد داشتیم که برای سه تا پلتفرم سخت افزاری مختلف با سه تا کامپایلر مختلف به سه دسته کتابخانه مختلف کامپایل و لینک میشد. کد تمام این پروژه‌ها یکسان بود اما فقط توسط کامپایلرهای مختلف توی محیط netbeans کامپایل میشد. کاری که انجام دادم این بود:

  • ابتدا پروژه فعلی رو تنها برای یک پلتفرم به cmake تبدیل کردم
    • کامپایلر استاندارد رو به کامپایلر دلخواه تبدیل کردم
    • آدرس کتابخانه‌ها و header فایلهای استاندارد رو عوض کردم
    • بصورت اتوماتیک لیست تمام فایلهای پروژه استخراج میشه
  • با استفاده از پارامترها و ساختار منطقی که cmake ساپورت میکنه دو تا پلتفرم دیگه رو اضافه کردم
    • یه متغیر کنترلی تعریف کردم
    • با استفاده از متغیر کنترلی و if همه موارد بالا رو برای هر پلتفرم تعریف کردم
    • اسم خروجی باینری و فولدر اون رو بر اساس متغیر کنترلی تعیین کردم.

حالا با این حال من تنها یک فایل دارم که باهاش کار سه تا پروژه رو انجام میدم که خب این خیلی جالب و جذابه

همین!

اینم یه تجربه پراکنده دیگه!

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

دلایل عدم تولید محتوا

خب دلایل اینکه از نظر من واقعا نمی‌شه محتوا تولید کرد اینهاست:

  • نبود کیبرد! مهمترین دلیل نداشتن یک کیبرد خوب هست که شما با دردسر کم بتونی مستندات رو تولید کنی.
  • اندازه کوچک صفحه! البته این در مورد تبلت‌ها خیلی صدق نمی‌کنه اما در مورد موبایلهای هوشمند به شدت صادقه
  • نبود برنامه تولید محتوا! محتواهای متنی معمولا به فرمت‌هایی تولید می‌شوند که اکثرا برای ما در دسترس نیستند، مثلا به کمک MS Word یا MS Powerpoint درست میشن. اما نرم‌افزارهای موبایل این فرمت‌ها به شدت ابتدایی بوده و کارایی خاصی ندارند. همچنین نرم‌افزارهای مشابه هم اکثرا نیاز به اتصال به اینترنت و داشتن اینترنت سریع دارند که خیلی قابل استفاده نیستند.

زمان نیاز به تولید محتوا

خب بعد از بررسی اینکه چرا نمی‌شه از موبایل و تبلت استفاده کرد برم سراغ اینکه چه زمانی اگه راه‌حلی برای این موضوع باشه میشه از این راه‌حل استفاده کرد:

  • زمان مسافرت: شما وقتی مسافرتی احتمالا دوست نداری لپ‌تاپ با خودت ببری.
  • زمان استراحت: وقتی که شما میخوای بصورت معمول استراحت کنی و نمی‌خوای بری پای میز کارت بشینی و میخوای از این فرصت هم استفاده کنی و چیزی بنویسی

راه حل پیشنهادی من

من چندتا راه حل دارم! اولا اینکه فرمت تولید محتوا رو باید از فرمت‌های خاص به متن تبدیلش کرد و فعلا هم فرمت مورد علاقه من markdown هست.

  • ویرایشگرهای متنی خوبی برای اندروید و iOS که توان ویرایش markdown رو دارن وجود داره
  • من مشکل صفحه کوچک موبایل رو وقتی که زمان استراحتم باشه با استفاده از تکنولوژی Screen Mirroring که روی همه موبایلهای امروزی هست حل میکنم و صفحه موبایل رو میندازم روی تلوزیون.
  • مشکل نبود کیبرد رو هم من به وسیله یکی از راه‌حل‌های زیر حل می‌کنم
    • استفاده از OTG و یه کیبرد موس بیسیم!
    • استفاده از برنامه‌هایی مثل remote keyboard یا wifi keyboard. این راه حل مورد علاقم نیست چون باید از لپ تاپ یا کامپیوتر به عنوان کیبرد استفاده کنم که خب اگه میخواستم این کار رو بکنم از اول پای همون مینشستم و محتوا رو تولید می‌کردم.

همین!