تلاش‌های من برای خروجی epub گرفتن از کتاب Competitive Programmer’s Handbook

پیش‌نوشت: این نوشته به ندرت با تلاش‌های دیگه‌ی من به‌روزرسانی می‌شه. در حال حاضر فقط لیست تلاش‌های ناموفقم رو این‌جا می‌ذارم و به زودی نوشته رو کم‌کم به روزرسانی می‌کنم.


بعد از خوندن Things to Make and Do in the Fourth Dimension تصمیم گرفتم برای بیشتر آشنا شدن با مباحث درس الگوریتم‌مون بجای خوندن کتاب مرجعش کتاب Competitive Programmer’s Handbook که جادی معرفی کرده بود رو بخونم ولی فهمیدم که نسخه‌ی epub یا mobi برای مطالعه توی کیندل نداره و فقط نسخه‌ی PDFش منتشر شده. تصمیم گرفتم تلاش کنم و از فایل‌های tex برنامه خروجی بگیرم.

اول از همه توی صفحه‌ی گیت‌هاب اون مخزن رو توی Github Desktopم باز کردم. اگه دوست ندارید با ابزار گرافیکی کار کنید این کار من با اجرای دستور git clone https://github.com/pllk/cphb.git یکیه. توی ویندوز هم می‌تونید با choco install git گیت و CLIش رو روی سیستم خودتون نصب کنید. (به این شرط که سیستم مدیریت برنامه‌ی chocolatey رو نصب داشته باشید – نصبش پیشنهاد می‌شه و برای نصب ابزارهای مورد نیاز این‌جا هم می‌شه ازش استفاده کرد)

اولین جست‌وجو منو به برنامه‌ی pandoc رسوند. بنابراین توی فولدری که کلون کرده بودم رفتم و دستور pandoc book.tex -t epub -o book.epub رو اجرا کردم (قبلش choco install pandoc) و چند صفحه‌ی اول کتاب توی calibre epub viewer به نظر خوب میومد. برای همین کامیتش کردم و پول ریکوئست رو فرستادم و فایل رو هم توی کیندلم فرستادم که بخونمش.

موقع خوندن متوجه شدم که فرمول‌های ریاضی به شکل خیلی بدی نمایش داده می‌شن. مثلن

توی فایل epub:

توی فایل PDF:

یا مثلن توی فایل epub:

 توی فایل PDF:

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

 چیزهایی که امتحان کردم و جواب ندادن تا الان این‌ها بودن:

  • خروجی گرفتن با epub3 با دستور pandoc book.tex -t epub3 -o book.epub و تستش توی calibre viewer که چون کالیبره از کتاب‌خونه‌ی MathJax موقع نمایش کتاب استفاده می‌کنه، خروجیش با خروجی کیندل یا Edge یکی نیست.
  • ایده‌م اینه که باید یجوری به پنداک بفهمونم که فرمول‌های ریاضی رو به عکس تبدیل کن به جای MathMl ولی موفق نشدم هنوز.
  • از --webtex هم استفاده کردم ولی به خاطر محدودیت اینترنت توی خونه خیلی کند بود و توی سرور هم به دلایل نامعلوم پروسه وسطش کیل می‌شد که هنوز فرصت نکردم بررسیش کنم ببینم چرا این‌جوری می‌شه.
  • مشکلم با خروجی html گرفتن و تبدیلش توی کالیبره اینه که مطمئن نیستم بتونه فهرست رو درست تبدیل کنه. ولی فرصت نکردم امتحانش کنم.
  • فیلتر pandoc-eqnos رو با دستور --filter pandoc-eqnos تست کردم ولی تستش بیهوده و بی‌دلیل بود 🙂 در واقع شانسمو امتحان کردم صرفن
  • یک‌سری تست بیهوده‌ی دیگه هم داشتم با دستور --mathjax و --self-contained ولی به نتیجه‌ای نرسید.

در نهایت به یک‌سری لینک رسیدم که هنوز فرصت نشده بررسی‌شون کنم و برای مراجعه‌ی آینده این‌جا می‌ذارم

اگه نظر یا راه‌حلی دارید خوشحالم می‌شم باهام در میون بذاریدش 🙂


پی‌نوشت: در حین نوشتن به تاریخچه‌ی دستوراتی که توی پاورشل اجرا کرده بودم نیاز پیدا کردم. در کمال تعجب فهمیدم دستور get-history کار نمی‌کنه. (در واقع صرفن تاریخچه‌ی دستورات همون پنجره‌ی پاورشل رو بر می‌گردونه که به دردم نمی‌خورد) ولی Arrow Keyها (کلید بالا و پایین) کار می‌کنن و دستورات قبلی رو میارن. این‌جا فهمیدم که توی ویندوز ۱۰ تاریخچه توی فایل C:\Users\username\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt ذخیره می‌شه.

من چجوری وردپرس‌های سرورمون رو آپدیت نگه می‌دارم

ما همیشه برای آپدیت وردپرس توی سرورمون مشکل داشتیم. وردپرس به فولدر خودش دسترسی نداره بنابراین نمی‌تونه خودش خودش رو آپدیت کنه و با FTP سرورمون هم درست ارتباط برقرار نمی‌کرد و نمی‌تونست از طریق FTP هم خودش رو آپدیت کنه. چون مطمئن نبودم که از نظر امنیتی اوکیه که دسترسی IUSR و IIS_IUSRS به کل پوشه‌ها رو کامل کنم، با پاورشل اسکریپتی نوشتم برای دانلود و آن‌زیپ‌کردن آخرین نسخه‌ی وردپرس فارسی از سایت وردپرس (دومین اسکریپت پایین)

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

و اگه بخوام یکم جلوتر برم، می‌تونم توی Task Scheduler بگم که مثلن هفته‌ای یک بار این اسکریپت اجرا بشه و این‌جوری مطمئنم که وردپرسم با حداکثر یک هفته تاخیر همیشه آپدیت می‌مونه 🙂