29 กันยายน 2009

Wallpapercast for Mac

เรื่องของเรื่องคือ Windows 7 กำลังจะออกหรือออกแล้วก็ไม่รู้ไปตามข่าวเอง แต่มีอย่างนึงที่น่าสนุกที่เพื่อนผม @FordAntiTrust บอกว่า Windows 7 สามารถทำอะไรประมาณว่าไปเอารูปจาก feed แล้วมาทำเป็น Wallpapercast ด้วยความที่เราก็ชอบถ่ายรูป(สาวๆ)อยู่แล้ว ก็มีรูปเยอะ แล้วก็อยากจะเอารูปไปลงช่วยเพื่อนเหมือนกัน แต่ตัวผมใช้ Mac อยู่ก็มานั่งหาว่า เอ้... จะมีอะไรบน Mac ที่พอจะทำอะไรได้อย่างนี้มั้ย

แล้วก็เข้าไปดู iPhoto ก่อนเลย ปรากฎว่ามีแฮะ OK งั้นมาเริ่มกันเลย ซึ่งบอกว่าง่ายมาก

เริ่มจากไปที่ iartwrk.com

Screen shot 2552-09-29 at 2.15.55.png

เลือกหัวข้อรูปที่ชอบตามแต่ใจ จากนั้นให้คลิกที่ Photo Feed

Screen shot 2552-09-29 at 2.16.06.png

copy url มา (จริงๆ คลิกขวาแล้ว copy url จาก link หน้าที่แล้วก็ได้)

Screen shot 2552-09-29 at 2.16.30.png

เปิด iPhoto > File > Subscribe to Photo Feed...

Screen shot 2552-09-29 at 2.16.42.png

วาง url ที่ copy มา

Screen shot 2552-09-29 at 2.16.51.png

แล้วก็จะปรากฎ feed ของรูปเหมือนด้านล่างนี้

Screen shot 2552-09-29 at 2.17.02.png

จากนั้นเข้า System Prefences เลือกดังรูป

Screen shot 2552-09-29 at 2.17.23.png

ก็จะมีอัลบั้มที่ถูก feed มา เราก็เลือกได้ตามใจ

Screen shot 2552-09-29 at 2.17.43.png

โดยรวมแล้วก็คงจะมีเท่านี้หละครับ เห็นมะว่า Mac มันง่าย :p

Bookmark and Share

11 กรกฎาคม 2009

เพิ่มเงื่อนไขให้ array ของ conditions ใน find

ตามปกติใน :conditions ของ .find นั้นจะเป็น Array ของ conditions แต่ว่าหากเรามีความจำเป็นที่จะต้องเพิ่มเงื่อนไขลงไปนั้น จะทำยังไง

ตาม code ข้างล่างนี้เราจะเพิ่มความสามารถให้กับ Array โดยจะเพิ่ม method ที่ชื่อว่า add_condition ลงไปดังนี้

Array.class_eval do
  def add_condition(condition, conjunction = 'AND', enclose = false)
    return self unless condition

    if enclose
      self.first.insert(0, "(")
      self.first.insert(-1, ")")
    end

    condition = condition.dup
    if condition.is_a? Array
      self[0] = (self[0])? self[0] + " #{conjunction} " + condition.shift : condition.shift
      condition.each {|c| self.insert(-1, c) }
    elsif condition.is_a? String
      self[0] = (self[0])? self[0] + " #{conjunction} " + condition : condition
    else
      raise "don't know how to handle this condition type"
    end

    self
  end
end

ตัวอย่างการใช้

conditions = ['active = ? and type = ?', true, 2]
conditions.add_condition ['person_id IN (?)', [345, 347, 387]]

ที่มา : http://snippets.dzone.com/posts/show/5147

Fix by : @manat

Bookmark and Share

10 มิถุนายน 2009

ให้ Rails ต่อ Database ได้หลายตัว

database.yml หน้าตาปกติ

development:
  adapter: mysql
  encoding: utf8
  database: something_development
  username: root
  password:
  host: localhost

ให้เพิ่มการตั้งค่าของฐานข้อมูลที่ต้องการเพิ่มเติมลงไป

development:
  adapter: mysql
  encoding: utf8
  database: something_development
  username: root
  password:
  host: localhost

master:
  adapter: oracle
  encoding: utf8
  database: master_development
  username: user
  password: pass
  host: xxx.xxx.x.xxx

จากนั้นก็ให้เพิ่มโค้ดตอลนี้ลงไปที่ Model ที่เราต้องการ ก็สร้าง Model ตามปกติ

establish_connection :master

การใช้งานทุกอย่าง ให้ทำเหมือนปกติไม่มีอะไรเปลี่ยนแปลง

ด้วยการทำแบบนี้จะไปต่อกับฐานข้อมูลกี่ตัว กี่ที่ก็ได้

Bookmark and Share

08 มิถุนายน 2009

Web Application & Web Site

ได้มีโอกาสได้ไปนั่งคุยกับอาจารย์ของผม (@rawitat) อีกครั้งหนึ่ง และท่านก็ได้เล่าเรื่องของกระทรวงกระทรวงหนึ่งที่เค้าคิดจะกำหนดมาตรฐานวิชาชีพของคน IT ขึ้นมา ทีแรกผมก็ไม่ค่อยชอบเท่าไร แต่พอได้ฟังอีกด้านหนึ่งก็ค่อนข้างเห็นด้วย กับเจตนาของกระทรวงนี้

แต่ อืม... เจตนาดี แต่พอได้อ่านแล้วก็เหงื่อตกเหมือนกันกับข้อกำหนดต่างๆ ที่เค้าได้กำหนดขึ้นมา และอาจารย์ผมก็หันมาถามผมว่า

"อะไรที่แบ่งระหว่าง Web Application กับ Web Site"
เหงื่อตกรอบสอบ ทำเว็บมาก็พักใหญ่ แต่ไม่เคยคิดที่จะถามตัวเองอย่างนี้เลย

เปิดจาก Wiki อ่านความหมายของสองคำนี้แล้วก็ไม่ช่วยอะไรเลย เราได้อย่างมากก็แค่แปล แต่ยังมองไม่เห็นจุดที่จะแยกมันออกมาได้เลย

คำตอบมันแสนง่าย และเป็นอะไรที่ใครก็เห็นแต่ไม่คิดว่าเป็นสิ่งนี้ อาจารย์ผมเฉลยว่าสิ่งที่ทำให้ต่างก็คือ ปุ่มหนึ่งปุ่ม ถ้าเว็บนั้นมีปุ่มไม่ว่าจะทำอะไร นั่นเป็น Web Application ผมก็ยังงงๆ อยู่ทีแรก แต่พอได้ยินคำว่า Computation ก็ถึงบางอ้อเลย

โดยตัวของ HTML เองแล้วมันเป็นแต่เพียง Markup ของเอกสาร ที่เราต้องการให้แสดงได้บน Web Browser แต่ว่ามันก็ทำได้แค่นั้น มันไม่สามารถที่จะทำการใช้ for วนลูป print "Hello World" ให้เรา 10 ครั้งได้ หรือทำการบวกเลขให้เราได้ เป็นต้น

เพราะฉะนั้นเว็บที่มีแต่การแสดง HTML แต่เพียงอย่างเดียว ก็เป็นแค่ Web Site

แล้วถ้าอยากจะให้ HTML ทำธรรมดามันสามารถที่จะ Compute ได้ล่ะ ก็ไม่มาก ก็เอา Programming Language มาใส่ ที่เราคุ้นเคยในตอนนี้ก็อย่างเช่น PHP, Ruby เป็นต้น

แต่ถ้าจะอธิบายให้คนธรรมดาเข้าใจได้ง่ายๆ ถึงความแตกต่างนั้น อาจารย์ผมได้เฉลยคำตอบที่มันง่ายๆ ไว้ว่า "ข้อแตกแต่งระหว่าง Web Site และ Web Application ก็คือ 'ปุ่ม' ให้กดและมันต้องไปทำอะไรบางอย่าง แค่นี้ก็เป็น Web Application"

จริงอย่างที่อาจารย์ผมว่าไว้ (หากว่าไม่มีใครกวนตีน ทำแต่ ปุ่ม แล้วเป็นแค่การเปลี่ยนหน้าเฉยๆ โดยไม่ได้ทำอะไรนะ) การมีปุ่มนั้น ไม่ได้แปลว่าจะมีไว้เฉยๆ มันจะต้องทำอะไรสักอย่าง ซึ่งการจะมีปุ่มได้นั้นส่วนใหญ่แล้วจะเป็นปุ่มของ form ให้เรากด submit เพื่อให้มีการทำงานบางอย่าง

สรุปแล้ว Web Application ต่างจาก Web Site ตรงที่มี Computation

Bookmark and Share

07 มิถุนายน 2009

Unfollow คนที่ไม่ได้ Follow เราใน Twitter

ก็เป็น script ง่ายๆ ที่จะดูว่ามีใครที่อยู่ๆ ไม่ว่าจะด้วยเหตุผลอะไรก็ตามเค้า unfollow เราไป แต่เราเองก็คงไม่ไปนั่งดูทั้งหมดได้ script นี้จะไปดูให้เรา และก็จะ unfollow คนๆ นั้นกลับทันที

ก่อนอื่นก็ต้องลง gem ตัวนี้ก่อน

$ sudo gem install twitter

จากนั้นก็รัน script นี้

require 'rubygems'
require 'twitter'

auth   = Twitter::HTTPAuth.new('username', 'password')
base   = Twitter::Base.new(auth)

guilty = base.friend_ids - base.follower_ids

if guilty.size > 0
  base.update "There are #{guilty.size} People you follow who do not follow you (unfollow you)"

  guilty.each do |user_id|
    user = base.user(user_id)
    base.update "Unfollowing & Block: @#{user.screen_name}"
    base.friendship_destroy user_id
    base.block user_id
    sleep 5
  end
end

เท่านี้ก็จบกระบวนความ แต่ว่า script นี่จะทำให้จำนวน require ที่ทาง twitter ให้ต่อ client หนึ่งที่ 100 require ต่อ 1 ชั่วโมง ลดลง เพราะฉะนั้นค่อยๆ ใช้อย่ารันทีเดียว เพราะอาจจะทำให้คุณไม่ได้เล่น twitter ไป 1 ชั่วโมงเลยทีเดียว

updated: เพิ่มเติมนิดหน่อย นอกจากจะ unfollow แล้ว จะ block คนคนนั้นด้วย

Bookmark and Share

05 มิถุนายน 2009

แปลงตัวเลขให้เป็นคำพูด

พอดีว่าวันนี้มีงานที่จะต้องพิมพ์ตัวเลขลงเอกสาร แต่ว่าต้องการให้เอาตัวเลขนั้นมาพิมพ์เป็นคำพูดด้วย ลองหาๆ ดูก็ไปเจอ

http://www.deveiate.org/projects/Linguistics

ก็เลยลงซะหน่อย

$ sudo gem install Linguistics
ตอนใช้งานก็ง่ายๆ แบบนี้
>> require 'rubygems'
>> require 'linguistics'
>> Linguistics::EN.numwords(99)
=> "ninety-nine"
OK สวยงาม
Bookmark and Share

04 มิถุนายน 2009

Input Standard C++

เมื่อสองสามวันก่อนทำงาน term project วิชา OS แล้วต้องใช้ภาษา C หรือ C++ (ต้องเลือก C++ อยู่แล้ว) ปรากฏว่าลืมวิธีการเขียนโปรแกรมไปเยอะเลย อย่างหนึ่งก็คือการรับ input เข้ามา วันนี้เลยไปค้นๆ ดูก็เลยไปเจอมา
// input.txt
1 2
3 4
5 6
7 8
#include <iostream>
using namespace std;

int main()
{
  int a, b, c;
  while (cin >> a >> b) {
    if (b > a)
      c = b - a;
    else
      c = a - b;
    cout << c << endl;
  }
  return 0;
}
// use
$ g++ program.cpp
$ ./a.out < input.txt
// output
1
1
1
1
ที่มา : Programming Challenges
Bookmark and Share