Showing posts with label script. Show all posts
Showing posts with label script. Show all posts

Sunday, February 21, 2010

Зургийн файлыг PDF рүү хөрвүүлэн нэгтгэх нь

Төслийн эхлэл болоод төгсгөл шатанд хэн хүнгүй бичиг баримттай зууралдах хэрэгцээ нэлээдгүй гардаг. Шивээд нэг файлд эмхэтгэдэг word, excel мэтийн баримтууд бол яах вэ, асуудал алга. Аа харин тодорхой дэс дараа бүхий сканнердсан цаас, эсхүл зураг хөрөг мэт нь багагүй арчилгаа шаарддаг. Жаахан хайнга хандсан үед хөл толгой нь үл мэдэх зунгаарсан садаа болж хувирах нь ч бий.

Жишээлбэл надад тамгалаад, батлачихсан гэрээ(8 хуудас) байлаа гэж саная. Хуудас хуудсаар нь сканнердаад, 8 ширхэг зураг болгочихно. Дараа нь энэ бүгдээ Trac, Redmine зэрэг хамтын ажиллагаа, төслийн удирдлагын талбарт хуулна. 8 удаа browse товч дарахад хамаа алга гэхэд түүнийг үзэх, ашиглах хүнд баахан төвөгтэй. Болдог бол бүгдийг нь базаад нэг PDF файл болгочихмоор. Хуулахад ч, үзэхэд ч, маллахад ч амар. Тэгвэл яаж үүнийг хийх вэ?

Танд imagemagick[1] тус болно. За ингээд, алхам алхмаар хамтдаа хийж үзье. Танд дараахь зургийн файлууд байгаа гэж саная:

$ ls -lh
total 19M
-rwxr-xr-x 1 battur battur 2.7M 2010-02-21 19:24 DSC_0801.JPG
-rwxr-xr-x 1 battur battur 2.6M 2010-02-21 19:24 DSC_0802.JPG
-rwxr-xr-x 1 battur battur 2.6M 2010-02-21 19:24 DSC_0803.JPG
-rwxr-xr-x 1 battur battur 2.0M 2010-02-21 19:24 DSC_0804.JPG
-rwxr-xr-x 1 battur battur 2.0M 2010-02-21 19:24 DSC_0805.JPG
-rwxr-xr-x 1 battur battur 2.4M 2010-02-21 19:24 DSC_0806.JPG
-rwxr-xr-x 1 battur battur 2.2M 2010-02-21 19:24 DSC_0807.JPG
-rwxr-xr-x 1 battur battur 2.2M 2010-02-21 19:24 DSC_0808.JPG

Ер нь бол нэг нь л дор хаяад 3 мега байт(3008x2000) хүртэл хэмжээтэй гэвэл эднийг тэр чигт нь PDF болговол веб рүү хуулж барахгүй нүсэр том хэмжээтэй болох байх. Ийм учраас юуны түрүүнд бүх зургаа 1200 пикселийн өргөнтэй болгож хэмжээг нь багасгая(өндөр нь дагаад багасна):

$ mogrify -resize 1200 *.JPG
$ ls -lh
total 1.3M
-rw-r--r-- 1 battur battur 198K 2010-02-21 19:25 DSC_0801.JPG
-rw-r--r-- 1 battur battur 199K 2010-02-21 19:25 DSC_0802.JPG
-rw-r--r-- 1 battur battur 188K 2010-02-21 19:25 DSC_0803.JPG
-rw-r--r-- 1 battur battur 126K 2010-02-21 19:25 DSC_0804.JPG
-rw-r--r-- 1 battur battur 127K 2010-02-21 19:25 DSC_0805.JPG
-rw-r--r-- 1 battur battur 166K 2010-02-21 19:25 DSC_0806.JPG
-rw-r--r-- 1 battur battur 144K 2010-02-21 19:25 DSC_0807.JPG
-rw-r--r-- 1 battur battur 142K 2010-02-21 19:25 DSC_0808.JPG

Үүний дараагаар багассан зургуудаа нэг PDF файлд нэгтгэе:

$ convert *.JPG 201002_Geree_XYZCompany.pdf
Segmentation fault

Уул нь дээрх тушаал байхад л хангалттай боловч миний машин алдаа өгөөд явсангүй. Нэг дор олон файл хөрвүүлж дийлэхгүйгээс бус ганц ганцаар нь бол чадаад байна.

$ ls | grep JPG | while read name; do \
convert $name ${name/JPG}PDF; done; ls -lh
total 2.6M
-rw-r--r-- 1 battur battur 198K 2010-02-21 19:25 DSC_0801.JPG
-rw-r--r-- 1 battur battur 202K 2010-02-21 19:27 DSC_0801.PDF
-rw-r--r-- 1 battur battur 199K 2010-02-21 19:25 DSC_0802.JPG
-rw-r--r-- 1 battur battur 204K 2010-02-21 19:27 DSC_0802.PDF
-rw-r--r-- 1 battur battur 188K 2010-02-21 19:25 DSC_0803.JPG
-rw-r--r-- 1 battur battur 193K 2010-02-21 19:27 DSC_0803.PDF
-rw-r--r-- 1 battur battur 126K 2010-02-21 19:25 DSC_0804.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0804.PDF
-rw-r--r-- 1 battur battur 127K 2010-02-21 19:25 DSC_0805.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0805.PDF
-rw-r--r-- 1 battur battur 166K 2010-02-21 19:25 DSC_0806.JPG
-rw-r--r-- 1 battur battur 170K 2010-02-21 19:27 DSC_0806.PDF
-rw-r--r-- 1 battur battur 144K 2010-02-21 19:25 DSC_0807.JPG
-rw-r--r-- 1 battur battur 148K 2010-02-21 19:27 DSC_0807.PDF
-rw-r--r-- 1 battur battur 142K 2010-02-21 19:25 DSC_0808.JPG
-rw-r--r-- 1 battur battur 146K 2010-02-21 19:27 DSC_0808.PDF

Тэгвэл олон PDF файлыг нэгтгэчихдэг програм бий болов уу? Хайлаа... Байна! GhostScript[2] :) Нэгтгэе:

$gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=201002_Geree_XYZCompany.pdf -dBATCH *.PDF && ls -lh
GPL Ghostscript 8.70 (2009-07-31)
Copyright (C) 2009 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
Processing pages 1 through 1.
Page 1
total 2.9M
-rw-r--r-- 1 battur battur 289K 2010-02-21 19:28 201002_Geree_XYZCompany.pdf
-rw-r--r-- 1 battur battur 198K 2010-02-21 19:25 DSC_0801.JPG
-rw-r--r-- 1 battur battur 202K 2010-02-21 19:27 DSC_0801.PDF
-rw-r--r-- 1 battur battur 199K 2010-02-21 19:25 DSC_0802.JPG
-rw-r--r-- 1 battur battur 204K 2010-02-21 19:27 DSC_0802.PDF
-rw-r--r-- 1 battur battur 188K 2010-02-21 19:25 DSC_0803.JPG
-rw-r--r-- 1 battur battur 193K 2010-02-21 19:27 DSC_0803.PDF
-rw-r--r-- 1 battur battur 126K 2010-02-21 19:25 DSC_0804.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0804.PDF
-rw-r--r-- 1 battur battur 127K 2010-02-21 19:25 DSC_0805.JPG
-rw-r--r-- 1 battur battur 130K 2010-02-21 19:27 DSC_0805.PDF
-rw-r--r-- 1 battur battur 166K 2010-02-21 19:25 DSC_0806.JPG
-rw-r--r-- 1 battur battur 170K 2010-02-21 19:27 DSC_0806.PDF
-rw-r--r-- 1 battur battur 144K 2010-02-21 19:25 DSC_0807.JPG
-rw-r--r-- 1 battur battur 148K 2010-02-21 19:27 DSC_0807.PDF
-rw-r--r-- 1 battur battur 142K 2010-02-21 19:25 DSC_0808.JPG
-rw-r--r-- 1 battur battur 146K 2010-02-21 19:27 DSC_0808.PDF

Ингээд л боллоо до. Одоо ч хуулаад, хуваалцаад байна бид дэ хө ;)
Хэрэггүй гэж үзвэл зургаа мөн ганц хуудастай PDF файлуудаа устгана биз ээ.

Дүгнэлт:
  • Линукст хар мянган гоё програм бий.
  • Линуксчид "дугуй"-г дахин нээж цагаа үрдэггүй.
  • Линукс бол бүтээмжит хүний хөлөглөх унаа.

Тайлбар:

[1] ImageMagick® is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves.

The functionality of ImageMagick is typically utilized from the command line or you can use the features from programs written in your favorite programming language. Choose from these interfaces: G2F (Ada), MagickCore (C), MagickWand (C), ChMagick (Ch), ImageMagickObject (COM+), Magick++ (C++), JMagick (Java), L-Magick (Lisp), NMagick (Neko/haXe), MagickNet (.NET), PascalMagick (Pascal), PerlMagick (Perl), MagickWand for PHP (PHP), IMagick (PHP), PythonMagick (Python), RMagick (Ruby), or TclMagick (Tcl/TK). With a language interface, use ImageMagick to modify or create images dynamically and automagically.

ImageMagick is free software delivered as a ready-to-run binary distribution or as source code that you may freely use, copy, modify, and distribute. Its license is compatible with the GPL. It runs on all major operating systems. Эх сурвалж: http://www.imagemagick.org/

[2] Ghostscript is a suite of software based on an interpreter for Adobe Systems' PostScript and Portable Document Format (PDF) page description languages. Эх сурвалж: Википедиа.

Thursday, October 22, 2009

Bash use case: Downloading Railscasts

Сүүлийн хэд хоног Rails-ийг нилээд эрчимтэй үзэж байна. Жилийн өмнө нэг ном уншсан, хэргийг нь гаргахгүй байсаар бараг мартаж орхиж. Уул нь бол зөндөө л ном байна, бүгдийг нь ухаад суухаар нэлээд цаг зарах шинжтэй. Харин rubyonrails.org-ийн документац хавиар хэсч яваад, Railscasts хэмээх нээлттэй видео хичээлтэй нэлээдгүй хэрэглүүштэй сайт байдгийг мэдэж авлаа.

Хичээлүүд нь их ойлгомжтой, амьдралтай. Товч бөгөөд тодорхой. Янзтай. Харин вебээр үзэхээр энд тэнд дарж, хуудас лоод хийхийг хүлээж суух нь жаахан залхуу хүрмээр. Болдог бол бүгдийг нь татаж аваад(import into media player list), эхнээс нь дуустал үзэх юмсан. Ер нь хоёр дэлгэцнийхээ нэг дээр нь гаргачихаад, хэрэгтэйг нь тогтосхээд үзээд байвал нь тун догь, цаг хугацааны хувьд хэмнэлттэй ч юм шиг, нэг сумаар хоёр туулай буудах тухай л яриа юм.

Сайтын html кодыг сонжихнээ тун цэгцтэй санагдсан тул жижиг робот бичээд, гүйлгэчихмээр санагдлаа. За ингээд гялс нэг скеч бичээд, жаахан дебагдаж, зүгшрүүлээд бидний робот бэлэн боллоо:

railscast_video_downloader.sh
Энэ скриптийн эх миний git repo дээр бий.


Кодын мөр бүрийг тайлбарлалтгүй байх аа, хараад л ойлгох биз. Гэхдээ скриптийн онцлогоос дурдъя:
  • Бүх видео хичээлийг татна. Хуудас дамжин crawl хийнэ.
  • Татац ямар хавтаст хураагдахыг тохируулах боломжтой. Одоогийнхоор бол скрипт байгаа газарт 'movies' хавтас үүсгээд, түүний дотор цуглуулна.
  • Татах хурдыг тохируулна. 20K/s гээд хязгаарласан тохиолдолд хавь орчиндоо балаг тарихгүй.
  • Таталт хооронд бага зэрэг амсхийнэ. Серверт тустай байж болох юм.
  • Татсан файлыг дахин татахгүй. Харин дутууг зогссон газраас нь үргэлжлүүлнэ. Тийм болохоор асааж, унтрааж, хэдэн өдөр дамнуулан ажиллуулсан ч болох нь!
За ингээд хичээлээ үзье:

Татаад авчихсан болохоор гэрийн интернэт удаан байх нь эрдэм номд шимтэх ариун үйлсэд саад болж үл чадмой ;)

Видео нь чанартай, бичлэг сайтай юм гээч! Өөр, өөрийн онцлогтой 180 хичээл байна. Сайхаан!

Тэмдэглэл:
Очко багшийн бичсэн "Ruby use case : Downloading Монголын Нууц Товчоо"-г сонирхоорой. Богинохон, цэгцтэй програм бий.

Линукс - хөгжүүлэлт хийхэд нэн таатай орчин. Хийх ёстой зүйлээ юунаас ч илүү хийх олон жижиг програмын цуглуулга. Эдгээрийг өөр хооронд нь угсарч, залгаад нилээд төвөгтэй ажиллагааг тун амархан шийдчихнэ. Бүтээмжийг их өргөнө. Юникс философи гэж тусдаа лут сонирхолтой сэдэв бий. Энэ талаар пост бичихээр төлөвлөөд, материал цуглуулж байна.