linux

gedit และ vim เพื่อการทดแทน textmate

ไม่เคยใช้ mac หรือนะ เลยไม่เคยมี textmate แต่คิดว่า gedit นี่ก็โอเคแล้ว Gmate: http://github.com/lexrupy/gmate/ วิธีลงก็

$ git clone git://github.com/lexrupy/gmate.git   
$ cd gmate 
$ sh install.sh
แจ่มสุดๆ ใช้ gedit open file ส่วนบางครั้งมันอยากแก้เร็วๆ เลยใช้ vim vimfile: http://github.com/akitaonrails/vimfiles วิธีลงก็
$ git clone git://github.com/akitaonrails/vimfiles.git .vim
$cd .vim
$ git submodule init
$ git submodule update
$ cp vimrc ~/.vimrc
ของอีตา akita ก็ดีอย่างคือเวลา module อื่นๆ มัน update เราแค่ทำคำสั่ง
git submodule update
มันก็ update

[...]
Published on Mon, 23 Nov 2009 16:16
0 comments

คิดจะเปลี่ยน typo เป็นอย่างอื่น

ตอนแรกกะว่าจะเปลี่ยนblog engine ไปใช้อย่างอื่น จะได้เก็บ resource ไว้ให้ลูกค้าใช้ ว่าจะเปลี่ยนเป็น Mephisto น่าจะกิน RAM น้อยอยู่ หรือไม่ก็ไปใช้ drupal wordpress ไปเลย หลังจากนี้จะเล่าประสบการณ์การไปทำ เปลี่ยน Desktop ในองค์กรมาใช้ ubuntu linux[...]
Published on Thu, 22 Oct 2009 06:59
0 comments

Ruby Fork

จากครั้งที่แล้วผมอยากจะเขียน ruby สักอันไว้ทำการ stamp ลายเซ็นพร้อมค่า exif ลงในรูป จากการลองเขียนเป็น thread แล้วปรากฏว่าไม่ค่อยมีประโยชน์เท่าไหร่กลับกลายเป็นว่ามี overhead ขึ้นมาเพียบและก็ทำงานไม่ครบได้ทุก core ที่มี งานส่วนใหญ่ในการทำงานเกี่ยวกับภาพนี่จะเป็นในด้านคำนวนซะเยอะ เลยเขียนเป็นลักษณะ fork ออกมาจะดีกว่า
พอลองได้เขียนก็ได้แนวคิดมา 2 แบบ คือ
  • ทำงานแบบเป็น lot คือทำพร้อมกันที่ละเท่าๆกัน แล้วรอให้เสร็จหมด ค่อยเริ่ม lot ต่อไป แบบนี้ถ้ามี process ใน lot เสร็จก่อนเพื่อนก็ต้องรอ
  • แบบที่สองคือเริ่มทำงานให้เต็มตามที่เรากำหนด ถ้า process ไหนเสร็จก่อนก็เอา process ใหม่มา run ได้เลย แบบนี้จะทำให้การทำงานต่อเนื่อง
แบบนี้คือการทำงานแบบเป็น Lot NUMFORK = 2 getImg = Dir['*.jpg','*.JPG','*.Jpg','*.jpeg'].sort.reverse Dir.mkdir("stamped") if !File.exist?("stamped") numFork = 0 while !getImg.empty? numFork = numFork + 1 photo = getImg.pop Process.fork{stampit(photo)} if numFork == NUMFORK Process.waitall numFork = 0 end end Process.waitall ส่วนแบบนี้คือการทำงานแบบต่อเนื่อง NUMFORK = 2 getImg = Dir['*.jpg','*.JPG','*.Jpg','*.jpeg'].sort.reverse Dir.mkdir("stamped") if !File.exist?("stamped") numFork = 0 while !getImg.empty? numFork = numFork + 1 photo = getImg.pop Process.fork{stampit(photo)} if numFork >= NUMFORK Process.wait numFork = numFork - 1 end end Process.waitall อย่างนี้ก็สบายใช้งานคุ้มทุก core[...]
Published on Thu, 04 Sep 2008 16:29
0 comments

My Failure with Ruby Multi-Thread

คือว่าผมใช้ debian + ruby + rmagick เขียน script เพื่อที่จะทำการ stamp รูป แต่มาได้ความคิดว่า อย่าง convert เนี่ย ถ้าเราเรียก $ convert -resize 1600 *.jpg มันจะใช้ cpu 1 core เต็มๆ แต่อีก core จะชิวๆ หรือไม่ทำงานยุ่งเกี่ยวกับ convert เลย ก็เลยลองให้มันทำ $ convert -resize 1600 *[02468].jpg & $ convert -resize 1600 *[13579].jpg & ผลลัพท์ที่ได้คือมันใช้ 2 core ทำงาน เป็นเพราะ shell เรียก convert นี่เป็น native ซึ่งมันจะไปทำงานแบบ fork จึงได้ผลลัพทธ์ดังกล่าว จากที่อ่านมา Fork คือ Heavy Weight Process ที่แยก resource กันชัดเจน ส่วน Thread คือ Light Weight Process ที่แบ่งปัน resource ซึ่งกันและกัน แต่ปัญหาอยู่ที่ว่าคือผมเขียน ruby คิดว่าถ้ามันเป็น thread ก็จะน่าได้ผลลัพธ์เช่นเดียวกับการ fork 2 ครั้ง แต่ผลลัพธ์ที่ได้กลับกลายเป็นว่า การทำงานนั้นไม่เต็ม 2 core คือใช้เพียงแค่ 1 core เท่านั้น จากการศึกษาเพิ่มเติมได้ผลออกมาว่า thread นั้นมี 2 แบบคือ user space และ kernel space
  • Kernel space จะเป็น thread แบบ native คือ kernel จะเป็นผู้จัดสรรและสับเปลี่ยน ก็จะได้ประสิทธิภาพตามคุณภาพของ kermel + cpu
  • User space หรือเรียกอีกอย่างว่า Green thread คือ thread ที่ทำงานแบบ time slice โดยผู้รับผิดชอบคือ VM (Virtual Machine) ในกรณีของผมคือ ruby นั่งเอง VM จะทำหน้าที่จัดสรรและสับเปลี่ยน เสหมือนเป็นการจำลอง thread อีกที ผลที่ได้คือ kernel เห็นเป็นเพีบง singel thread จึงทำงานได้เต็มที่แค่ 1 core
สรุปได้ว่า thread บน ruby นั้นป็น green thread จึงได้ผลลัพธ์ดังกล่าว ทางแก้ตอนนี้คือเขียนให้ ruby นั้น fork อีก process ไม่ใช่ว่า ruby thread จะไม่มีประโยชน์ ไว้จะลองเขียน ประโยชน์ของ ruby thread ดู[...]
Published on Wed, 03 Sep 2008 16:57
0 comments

ufraw convert Nikon raw to jpg

วิธีการแปลงไฟล์จาก .nef ซึ่งเป็น raw จาก nikon ไปเป็น jpg ทำได้โดยติดตั้ง ufraw ลงบนเครื่อง หลังจากนั้นเปิด program เลือกภาพ ตอนแรกๆ สีจะดูจืดมากๆ เป็นเพราะ color profile ของรูปไม่ถูกต้อง โดน default เป็นค่า sRGB ก็ให้ทำการ download ค่าสีที่ถูกต้องจากหน้าเวบของ ufraw ได้เลยเลือกปรับแต่งสีให้โดนใจ แต่ส่วตัวผมใช้ Input profile ของ nikon D80 + Color Matrix, output ใช้ sRGB + intent Perceptual, Display ใช้ sRGB + intent Disable soft proofing
หลังจากนั้นก็ save แล้วมันจะสร้าง .ufrawrc ไว้ที่ home ของเรา เหมือนเป็นค่าที่เราตั้งเอาไว้ หลังจากนี้ถ้าจะทำการ convert ที่หลายๆไฟล์ ก็ทำไม่ยากแล้วโดยเรียก


$ ufraw-batch *.nef --out-type=jpeg --compress=100 --out-path=./jpg --silent --overwrite

แต่ถ้าขยันๆก็แปลงไปปรับภาพไปทีละรูปแล้วกัน หุห

[...]
Published on Mon, 11 Aug 2008 10:25
0 comments

ImageMagick Resized Multiple ย่อหลายๆรูปด้วย ImageMagick

$ mogrify -resize 50% -path newdir/ *.jpg [...]
Published on Mon, 11 Aug 2008 10:19
0 comments

Make a stamped for a Photo; ทำกรอบรอบรูป

หลังจากที่ได้ D80 มาสมใจอยาก เห็นหลายๆคนเวลาแสดงรูปจะมีการแสดงความเป็นเจ้าของโดยใส่ลายน้ำหรือใส่ข้อมูล exif หรือลายเซ็นไว้ ก็เลยอยากจะทำมั่ง ใน Photoshop ก็สามารถเขียน script(java script) ให้ทำทีละหลายๆรูปได้ หรือจะใช้ ACDSee ก็ทำได้ ส่วนสำหรับบน Linux ไม่ค่อยมีข้อมูลเท่าไหร่ แต่ Tools และ Libs เพียบ เลยตกงว่าจะออกกำลังเขียน ไหนๆก็ไหนๆ แล้วเขียนด้วย ruby ซะเลย นี่เป็น version ใช้เอง แต่ก็สามารถเขียนให้ดีกว่านี้เพื่อเอาไปใช้กับงานอื่นๆได้ code License GPL2


After I got D80, I saw many people show up their photos with a water mark, signature, exif data. I think that I have to do same way. Photoshop can do with a script, ACDSee can do also but Linux have no idea about that ( I may not know). By the way ,Linux come wiht many tools and Libs so I make a decision to write a ruby script for do that. This code is under GPL2 License. This version is for my own purpose, it may not be well design.


Requirement: Ruby 1.8.6, RMagick

Usage: run script at same Photo Directory, script will generate a directory "stamped" and file name is "stamped-.jpg" [...]
Published on Wed, 06 Aug 2008 10:03
0 comments

Ultraviolet Syntax Highlight

it's support languages as follow


actionscript, active4d_html, active4d_ini, active4d_library, active4d, ada, antlr, apache, applescript, asp, asp_vb.net, bibtex, blog_html, blog_markdown, blog_textile, blog_text, build, bulletin_board, cake, camlp4, cm, coldfusion, context_free, css_experimental, css, cs, csv, c, c++, diff, dokuwiki, dot, doxygen, d, dylan, eiffel, erlang, fortran, f-script, fxscript, greasemonkey, gri, groovy, gtdalt, gtd, haml, haskell, html-asp, html_django, html_for_asp.net, html_mason, html_rails, html, html_tcl, icalendar, inform, ini, installer_distribution_script, io, javaproperties, javascript_+_prototype_bracketed, javascript_+_prototype, javascript, java, jquery_javascript, json, languagedefinition, latex_beamer, latex_log, latex_memoir, latex, lexflex, lighttpd, lilypond, lisp, literate_haskell, logo, logtalk, lua, macports_portfile, mail, makefile, man, markdown, mediawiki, mel, mips, mod_perl, modula-3, moinmoin, mootools, movable_type, m, multimarkdown, objective-c, objective-c++, ocamllex, ocaml, ocamlyacc, opengl, pascal, perl, php, plain_text, pmwiki, postscript, processing, prolog, property_list, python_django, python, qmake_project, qt_c++, quake3_config, ragel, r_console, rd_r_documentation, regexp, regular_expressions_oniguruma, regular_expressions_python, release_notes, remind, restructuredtext, rez, r, ruby_experimental, ruby_on_rails, ruby, s5, scheme, scilab, setext, shell-unix-generic, slate, smarty, sql_rails, sql, ssh-config, standard_ml, strings_file, subversion_commit_message, sweave, swig, tcl, template_toolkit, tex_math, tex, textile, tsv, twiki, txt2tags, vectorscript, xhtml_1.0, xml_strict, xml, xsl, yaml, yui_javascript [...]
Published on Thu, 31 Jul 2008 08:49
0 comments

Creating a certificate for Apache-SSL : สร้าง SSL ให้กับ apach

  • Create a key file:

# openssl genrsa -out key.pem 2048
  • Create a certificate request. You will be asked to give information which will be included in the certificate.
# openssl req -new -key key.pem -out request.pem
  • Create a self-signed certificate that is valid for a year:
# openssl req -x509 -days 365 -key key.pem -in request.pem -out certificate.pem
  • Concatenate the key and certificate into a single file:
# cat key.pem certificate.pem >apache.pem

การทำแบบนี้เป็นการทำแบบ slef-signing ให้ไปไฟล์เดียว ไม่ได้ทำแบบ PKI ที่มีความปลอดภัยมากกว่า แต่พอไหวๆ



ที่มา: http://cens.ioc.ee/cens/local/howtos/creating-a-certificate-for-apache-ssl[...]
Published on Thu, 31 Jul 2008 08:18
0 comments

My Motolora E680i mpkg install

วิธีลง จาก ThaiLinuxPDA.COM

MPKG Installer คือตัวติดตั้งโปรแกรมต่างๆแบบที่มาในไฟล์นามสกุล mpkg (.mpkg) สำหรับ E680i

การติดตั้ง MPKG Installer ทำได้โดย

  1. ลง LinLoader ก่อน
  2. แตกไฟล์ออกจะได้ mpkg.lin และ MPKG.mpkg นำไปไว้ในโทรศัพท์
  3. จิ้มที่ไฟล์ mpkg.lin 1 ที รอจนได้ยินเสียงคนจีนพูด
  4. restart เครื่องใหม่ หรือเปลี่ยนลำดับไอคอน แล้วไอคอน mpkg จะออกมาครับ ลบไฟล์ดอกไม้ทิ้งด้วยครับ

การติดตั้งโปรแกรมต่างๆ (.mpkg) ด้วย MPKG Installer ทำได้โดย

  1. เปลี่ยนนามสกุลไฟล์จาก .mpkg เป็น .pkg
  2. ในการติดตั้งครั้งแรกให้จิ้มค้างที่ไฟล์แล้วเลือกเปิดด้วย mpkg installer (ไอคอนรูปคอม) และติกที่ใช้โปรแกรมนี้เปิด แล้วตกลง
  3. ในครั้งต่อๆไปจิ้มที่ไฟล์ .pkg ได้เลยรอจนมีเสียงคนจีนพูด
  4. restart เครื่องใหม่ หรือเปลี่ยนลำดับไอคอน แล้วไอคอนโปรแกรมที่เราลงจะออกมาครับ

การลบโปรแกรมที่ติดตั้งด้วย MPKG Installer

  1. จิ้มที่ไอคอน MPKG Installer (รูปคอม) จะได้ไฟล์ชื่อ mpkg ในตัวเครื่อง (diska)
  2. เปลี่ยนชื่อไฟล์จาก mpkg เป็น mpkg.txt
  3. เปิดดูในไฟล์ mpkg.txt จะมีรายชื่อโปรแกรมทั้งหมดที่ลงด้วย MPKG Installer ไว้
  4. ลบชื่อโปรแกรมออกโดยให้เหลือเฉพาะโปรแกรมที่ต้องการลบไว้ และบรรทัดแรกให้เว้นว่างไว้
  5. หลังจากแก้ไขไฟล์ mpkg.txt แล้ว ให้จิ้มที่ไอคอน MPKG Installer อีกครั้งเพื่อยืนยันการลบโปรแกรม
  6. รอจนมีเสียงพูดแปลว่าลบโปรแกรมเสร็จเรียบร้อยแล้วให้ restart เครื่องใหม่ เป็นอันเรียบร้อย

[…]

Published on Mon, 28 Apr 2008 06:52
0 comments

RSS