Adding svn repos to github

Posted by PunNeng, Sun Jul 27 23:43:00 UTC 2008

ช่วงนี้กำลังต่อสู้กับ git อยู่ครับ แล้วก็ยังมึนๆ กับมันอยู่ ยังไม่ค่อยเข้าใจอะไรกับมันมาก
แล้วยังกระแดะจะให้มันมาใช้คู่กับ svn อีก ก็ Capistrano บน Dreamhost มันใช้ได้แค่ svn นี่หว่า ก็มาลุยกัน

สมมติว่าติดตั้ง git-svn ไปแล้ว
ก็ clone repo ก่อน

$ git svn clone http://svn.yoursite.com/your_project --trunk=trunk
มันก็จะ init ค่าต่างๆ ใน .git/config สำหรับ svn ให้ แล้วไป init ค่าสำหรับ github
$ git remote add origin git@github.com:YourUsername/your_project.git
$ git push origin master
ก็ลองดูใน .git/config ดูนะครับ ว่ามัน config อะไรเพิ่มไป ใส่เพิ่มว่า
[branch "master"]
    remote = origin
    merge = refs/heads/master

แล้วก็แก้งานไป ตามปกติ แล้วลอง

$ git status
$ git add .
$ git commit -m "your comment"

ณ ตรงนี้ มันจะไปแก้ refs/head/master เป็นค่าๆ นึง ซึ่งเป็นค่าใหม่
ถ้า push จะปกติดี
แต่ปัญหามันอยู่ที่ ถ้า

$ git svn dcommit

ไปก่อน มันก็จะไปจัดการในส่วนของ svn ให้ แต่มันจะไปแก้ refs/head/master เป็นอีกค่านึง(ต่อจากอันเก่า)
พอสั่ง push คราวนี้ จะไม่ได้แล้ว มันจะขึ้นว่า

error: remote 'refs/heads/master' is not a strict subset of local ref 'refs/heads/master'. maybe you are not up-to-date and need to pull first?

อันนี้ เป็นสิ่งที่ยังงงอยู่ ผมเข้าใจว่า ค่าเก่า(ก่อน commit) กับค่าใหม่(หลัง commit) มีอะไรเชื่อมกันอยู่ ถ้า push ก็จะได้ปกติ
แต่ถ้า dcommit แล้ว push มันคงเอาค่าเก่า(ก่อน commit ค่านี้จะอยู่บน github ด้วย) มาทำอะไรกับค่าใหม่กว่า(หลัง dcommit) สิ่งที่เชื่อมกันอยู่ คงจะไม่ถูกต้อง เพราะมันเหมือนกระโดดไปสอง step ใครก็ได้ กรุณาช่วยหาคำตอบให้ผมหน่อยนะครับ ขอบคุณล่วงหน้าครับ อุอุ

วิธีซ่อมคือ

$ git pull origin master

เป็นอันเสร็จพิธี

ถ้า push ก่อน แล้ว dcommit มันจะตรวจว่ามีการแก้ล่าสุดหรือเปล่า กรณี้นี้ ไม่มีการแก้ไขล่าสุด มันจะ reset refs/heads/master เป็นตัวเก่า เลยปกติ
เพราะฉะนั้น ก็ push ก่อน dcommit ละกัน

1 comment | Filed Under: General | Tags: git github howto subversion

Inverse Captcha

Posted by PunNeng, Fri Jun 06 16:59:00 UTC 2008

ดีใจมากครับ ในที่สุด blog ผมก็หมดปัญหาเรื่อง spam ไปเสียที เย้..

ทีแรกก็ใช้ akismet ก็ดีอยู่แล้ว แต่มันก็แสดงว่ามีอะไรเป็น spam บ้าง มันขัดหูขัดตามผมเหลือเกิน จนคิดว่าต้องใช้ captcha ช่วยละ

หลังจากการ search หา plugin ดูใน google ตัวแรกที่เจอคือ Inverse Captcha ครับ แค่ชื่อก็น่างงแล้ว

แต่หลังจากใช้ไป 1 อาทิตย์ ไม่มี spam หลุดมาสักตัว(ใน blog ของ Sven Fuchs เอง เขาก็ทดลองเดือนนึง) ไม่ต้องมี captcha แปะให้น่ารำคาญ ไม่ต้องเพ่งตัวอักษรที่อ่านยากแสนยาก

หลังจากที่ลองเล่นดูแล้ว ก็ได้ความว่า

ในหน้า post ลอง view source แถวๆ กล่อง comment จะมี input ประมาณนี้

comment[author]
comment[author_email]
comment[author_url]
comment[body]

แต่หลังจากที่เอาไอ้ inverse captcha นี้มาใส่ หน้าตาจะกลายเป็นแบบนี้

comment[author]
comment[author_xxxxxx]
comment[author_url]
comment[body]
comment[author_email] #display:none;

สิ่งที่เปลี่ยนไปคือ จะมี author_xxxxxx ซึ่ง xxxxxx นี้ จะถูก generate มาอีกที จะเรียกว่า random key ละกัน
แล้วตรงส่วนของช่อง email ปกติ ก็จะถูก display:none ไว้
อธิบายได้ว่า ถ้าเป็นคน จะมองไม่เห็นช่องนี้ แล้วก็จะไม่ใส่
แต่ถ้าเป็น bot มันจะ post email มาแน่นอน
ทำให้รู้ว่า ถ้าหากใส่ email มา แสดงว่าไม่ใช่คนแน่นอน

สำหรับตัว random key ก็จะถูก generate มา ใน plugin ของ mephisto ที่ผมใช้อยู่ ดูเหมือนจะยังไม่ใช่สิ่งที่ผมต้องการเป๊ะๆ
เพราะการ refresh 1 ครั้ง ตัว random key น่าจะเปลี่ยนไป แต่หลังจากลองงัดแงะดูแล้ว ดูเหมือนว่าจะมีปัญหากับ liquid template เลยไม่สามารถจัดการตรงนี้ได้ ยังไงจะลอง implement ให้ดูละกันครับ เพราะผมว่าตัว random key น่าจะเปลี่ยนไปทุกครั้งที่มีการ refresh หน้าเว็บ

ถ้า random key เหมือนเดิมทุกครั้ง bot อาจจะฉลาด แต่ถ้ามันเปลี่ยนไปทุกครั้ง bot คงไม่ฉลาดขนาดนั้นมั้งครับ

สรุปอีกที แนวคิดนี้ แค่เพิ่ม input มาตัวนึง แล้วเอาตัวปกติซ่อนไว้ ถ้าเป็นคน จะมองไม่เห็น แต่จะเห็นช่องที่ถูกเพิ่มมา เราก็จะสามารถเขียนตรวจได้ว่า ถ้ามี post จาก email ปกติมา นั่นแหละ คือ spam แต่ถ้ามาจากช่องที่ถูกเพิ่ม มันคือคน

ผมค่อนข้างประทับใจกับแนวคิดนี้ครับ มันง่ายดี กระบวณการ post ก็ยังเหมือนเดิม

ว่าแต่มัน inverse ยังไงเนี่ย =='

ปล. เดี๋ยวจะ implement ให้ดูอีกทีครับ จะได้เข้าใจในเชิงลึกอีกที

2 comments | Filed Under: General | Tags: inverse captcha spam

GEdit looks like Textmate

Posted by PunNeng, Sun May 11 16:18:00 UTC 2008

Textmate is the best text editor I've ever used. Unfortunately, it's only on Mac OS X. As you guys know I'm a big fan of Ubuntu and I prefer GEdit.

One thing I really like on Mac OS X is font rendering and that is what I like when I'm on Textmate, it looks pretty cool so I'd like to see it in GEdit as well !!!

I knew how to do that from Tonkla(thanks a lot). That's bloody easy, just open terminal and put

$ sudo dpkg-reconfigure fontconfig-config

and then set font hinting to "None" and leave the rest of the options as default.

Install font you prefer(I prefer Monaco) then you'll get your GEdit looks like this:

GEdit looks like Textmate

0 comments | Filed Under: General | Tags: fonts gedit howto mac text editor textmate ubuntu

Debugging ActionScript with Firebug

Posted by PunNeng, Tue Apr 15 23:26:00 UTC 2008

ผมทำ flash ก้อนนึง ให้เพื่อนผมอยู่ ตอนทำก็ปกติดี แต่ตอนเอาขึ้นเว็บแล้วต้องทดสอบนี่สิ ไอ้หยาาา!! มัน trace ไม่ได้

เมื่อ trace(); ไม่แสดงผลบน browser จะ debug ยังไง ??

เมื่อก่อนใช้ xRay ก็ ok นะ trace ได้เยอะดี

แต่ตอนนี้ ขี้เกียจติดตั้ง เล่นมันง่ายๆ กับ Firebug นี่แหละ ไม่เคยใช้ ?? เข้านี่เลย -> Firebug

ใน Firebug เราสามารถ print ค่าอะไรบางอย่างได้ด้วย colsole.debug(whatyouwant); ใน JavaScript ยังมี console.log, console.info, console.warn, and console.error อีกด้วย ตอนที่ให้ flash แสดงผล ก็บน browser เช่นกัน !! อะฮ้า จัดการต่อ flash(AS3) ไปยัง JavaScript เสียเลย ได้หน้าตาแบบนี้

  1
  2
  3
  4
function firebug(msg:String):void{
  ExternalInterface.call("console.debug", msg);
}
firebug("what_you_want");

สำหรับ AS2 ก็เหมือนๆ กัน

  1
  2
  3
  4
function firebug(msg:String):void{
  getURL("javascript:console.debug(msg)");
}
firebug("what_you_want");

เฮ้ละ IE(และศัตรูอย่าง Safari/Opera) ไม่มี Firebug!!

โหลด Firebug lite ไปใช้ได้

ปล. ที่ไม่ค่อยได้เขียน blog เพราะทำ flash ให้เพื่อนผมอยู่(เป็นแพะไปซะ วะฮะฮ่า)
ปอ. ผมรัก Firebug

5 comments | Filed Under: General | Tags: actionscript firebug flash

It's back !!

Posted by PunNeng, Tue Feb 05 18:07:00 UTC 2008

หลังจากที่ซ่อม mephisto อยู่นาน(อู้มากกว่า) และแล้วมันก็โผล่มาสักที

งานนี้พระเอกผมยกให้ will paginate เลย เพราะใน rails 2.0 มันเอา Paginator ออก

ในส่วนอื่นๆ ก็ปรับเปลี่ยนโครงสร้างของ rails ใหม่ เลยทำให้ mephisto พัง ก็ต้องตามซ่อมกัน

ที่เหลืออยู่ตอนนี้คงจะเป็นระบบ cache ของ mephisto เอง ที่ยังซ่อมไม่เสร็จ

คราวนี้ คงจะเน้นเขียนเรื่อง BDD/RSpec ให้มากขึ้นครับ ฝึกกำลังภายในของตัวเองด้วย

0 comments | Filed Under: General | Tags: talk

codegent: we're hiring