วันพฤหัสบดีที่ 8 ตุลาคม พ.ศ. 2552

Que Sera Sera What ever will be will be

Que Sera Sera What ever will be will be.
ประโยคประทับใจอีกประโยคหนึ่งที่โดนใจผมอย่างรุนแรง พลันกลับทำให้คิดได้ว่า อะไรจะเกิดมันก็ต้องเกิด พร้อมกับตอกย้ำความเชื่้อที่มีอยู่ในจิตใจว่าทำวันนี้ให้ดีที่สุด เพราะอะไรจะเกิดมันก็เกิด




โฆษณาไทยประกันชีวิต whatever will be will be (Que Sera Sera) - ดูวิดีโอทั้งหมด กดที่นี่

วันพุธที่ 7 ตุลาคม พ.ศ. 2552

Flash,Flex and Web3D

ด้วยความพยายามที่หลากหลายในการใช้งานไฟล์ X3D blog นี้เป็นอีกหนึ่งคนที่ศึกษาอะไรที่คล้ายๆกัน

SKP2X3D น่าสนใจทีเดียวเชียว

มาทำให้ Dreamweaver CS3 เห็น GSP ไฟล์กันเหอะนะ

ที่มา: Open .GSP file with Dreamweaver CS3

หลังจากที่เกิดอาการเซ็งกับการนั่งแก้ html tag ใน netbeans 6.7.1 ก็เลยคิดว่าอยากใช้ adobe dreamweaver CS3 ขึ้นมาตะหงิดๆ แต่ว่าทำไมมันไม่มี GSP ไฟล์หละเนี่ยทำไงดีว่าแล้วก็ไปเจอเข้ากับบล็อกนี้เค้าก็เลยเก็บเอามาฝากแต่อยากจะบอกว่าำตำแหน่ง config file เนี่ยเครื่องผมเป็น xp แต่มันเก็บใน Application Data/ folder ครับ

วันอาทิตย์ที่ 4 ตุลาคม พ.ศ. 2552

Update Netbeans 6.7.1 แก้ปัญหาการมองไม่เห็น Plugin ในgrails 1.1 แล้ว

หลังจากที่ใช้ netbean 6.5 อยู่มานานก็พอปัญหาหาว่า IDE ไม่สามารถลิงค์ library path ของ plugin ในgrails 1.1 ได้ ทำให้เวลาเขียนโค้ดมันจะฟ้องว่าเราเขียนผิดแต่ว่า คอมไพล์ได้ไม่มีปัญหาอะไรการใช้งานก็คงจะไม่ค่อยสะดวกแต่พอใช้การได้ไปเรื่อยๆ
จน เมื่อวานได้ลองเข้าไปตรวจสอบ เวอร์ชัน update ของnetbean ก็พบว่าได้เปลี่ยนมาเป็น 6.7.1แล้วซึ่งเค้าก็บอกว่า fix bug ตัวนี้สำหรับ grails 1.1 ขึ้นไปแล้วด้วย ว่าแล้วก็โหลดมาลงเลยครับ

netbeans 6.5 จะิเห็นว่ามันมองไม่เห็น library ของ plugin


แน่นอนว่าหน้านี้ก็ไม่เห็นเช่้นกัน

ปัญหาหลักๆก็คือ directory ที่ใช้เก็บ plugin มันถูกเปลี่ยนไปตั้งแต่ grails 1.1 ดังนั้นผมก็ทนใช้มันไปแบบยังไม่รู้ว่าจะแกยังไงดีจนเอาตัวใหม่มาลง netbeans 6.7.1 ก็พบว่า happy ครับ

นอกจากไม่มี error แล้วยังขึ้น suggestion ด้วยยิ้มเลยครับ

วันพฤหัสบดีที่ 1 ตุลาคม พ.ศ. 2552

Grails, GORM, Domain Classes and Enum

วันนี้มีปัญหาเรื่องการสร้าง enum ในเกรล์ ไปได้ข้อมูลดีๆมาจาก blog นี้


ด้วยการสร้างคลาส enum โดย java แล้วสร้างmethod ในการสร้าง arrayList ให้ Gorm access ได้นั้นนอกจากจะแก้ปัญหา enum ในเกรล์ได้แล้ว scaffold เองก็มองเห็นโดยที่ไม่ต้องทำอะไรเพิ่มเติมใน bootstrap หรือ config เลยทีเ่ดียว

Set up Tomcat 6.0 startup service บน UBUNTU

หลังจากทำตาม tutorial ต่างๆมากมายเพื่อให้สามารถ startup tomcat เองหลังจากที่ทำการ reboot OS โดยการเพิ่ม script ดังนี้

sudo vi /etc/init.d/tomcat

แล้วก็เขียน script ตามนี้

# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

export JAVA_HOME=/usr/lib/jvm/java-6-sun

case $1 in
start)
sh /usr/local/tomcat/bin/startup.sh
;;
stop)
sh /usr/local/tomcat/bin/shutdown.sh
;;
restart)
sh /usr/local/tomcat/bin/shutdown.sh
sh /usr/local/tomcat/bin/startup.sh
;;
esac
exit 0

แล้วก็จัดการเปลี่ยน script ให้สามารถ execute ได้

sudo chmod 755 /etc/init.d/tomcat

แล้วก็เพิ่มstart up link ใน RC

sudo ln -s /etc/init.d/tomcat /etc/rc1.d/K99tomcat
sudo ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat

ผลปรากฎว่ามันไม่ค่อยจะwork เท่าไหรกับ tomcat 6.0 โดย service มันจะถูกเรียกขึ้นมาได้ปกติแต่กลับทำงานไม่ได้ซึ่งคาดว่ามาจาก bug ของ tomcat 6.0 ที่มีปัญหาเมื่อ รันบน IPV6 ครั้นจะเอาIPV6 ออกก็อาจจะกระทบ service บางตัวที่รันบน IPV6 ก็เลยได้ solution มาว่าต้องเปลี่ยนให้มันรัน JSVC daemon แทน โดยการ compile jsvc ที่ได้มาก่อน

cd $CATALINA_HOME/bin tar xvfz jsvc.tar.gz
cd jsvc-src
autoconf
./configure
make
cp jsvc ..
cd ..

แล้วก็เปลี่ยน startup script ให้รัน JSVC แทน

#!/bin/sh
#
# Startup script for Tomcat, the Apache Servlet Engine
#
# chkconfig: 345 80 20
# description: Tomcat is the Apache Servlet Engine
# processname: tomcat
# pidfile: /var/run/tomcat.pid
#
# Mike Millson <*******@meritonlinesystems.com>
#
# version 1.02 - Clear work directory on shutdown per John Turner suggestion.
# version 1.01 - Cross between Red Hat Tomcat RPM and Chris Bush scripts

TOMCAT_PROG=tomcat
JAVA_HOME='/usr/java/jdk1.5.0_06'
CATALINA_HOME='/home/tomcat/'
DAEMON_HOME=$CATALINA_HOME/bin/jsvc
TMP_DIR=/var/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

# if TOMCAT_USER is not set, use tomcat like Apache HTTP server
if [ -z "$TOMCAT_USER" ]; then
TOMCAT_USER="tomcat"
fi

RETVAL=0

# start and stop functions
start() {
echo -n "Starting tomcat: "
chown -R $TOMCAT_USER:$TOMCAT_USER /home/tomcat/*
$DAEMON_HOME \
-user $TOMCAT_USER \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Djava.io.tmpdir=$TMP_DIR \
-Djava.awt.headless=true \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile '&1' \
$CATALINA_OPTS \
-cp $CLASSPATH \
org.apache.catalina.startup.Bootstrap
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \

RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
return $RETVAL
}

stop() {
echo -n "Stopping tomcat: "
PID=`cat /var/run/jsvc.pid`
kill $PID
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/tomcat /var/run/tomcat.pid
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
# Ugly hack
# We should really make sure tomcat
# is stopped before leaving stop
sleep 5
start
;;
*)
echo "Usage: $0 {startstoprestart}"
exit 1
esac

exit $RETVAL

เรียบร้อยโรงเรียนไทย
นิทานเรื่องนี้สอนให้รู้ว่าของใหม่ก็ไม่ดีเสมอไปเน้อ

วันพุธที่ 30 กันยายน พ.ศ. 2552

Jsecurity error when using tomcat

หลังจากงมและงงกับ bug ตัวนี้มาเป็นอาทิตย์ (แต่ถ้าคิดเวลาทำงานจริงก็คงซัก 3 ชม เห็นจะได้)
คือเมื่อหลังจากลง Jsecurity ใน grials แล้วช่วงแรกก็ทำงานได้ปกติ แม้ว่าจะลอง deploy ลง production ซึ่งเป็น tomcat 6.0 บน ubuntu ก็ดูเหมือนว่าจะไม่มีปัญหาอะไรจนกระทั่งไปเซ็ต SecurityFilters

auth(controller:"*",action:"*"){
before={
// This just means that the user must be authenticated.
// He does not need any particular role or permission
accessControl{true}
}
}

แล้วรันบน netbeans & Jetty ก็ยังคงไม่มีปัญหาอะไรแต่เมื่อ deployลง production มันก็ด่ามาทันทีครับ
SEVERE: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageResponseWrapper.sendError(GrailsPageResponseWrapper.java:82)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:118)
at org.codehaus.groovy.grails.web.sitemesh.GrailsContentBufferingResponse.sendError(GrailsContentBufferingResponse.java:71)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:745)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:332)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.processFilterChain(UrlMappingsFilter.java:263)
at org.codehaus.groovy.grails.web.mapping.filter.UrlMappingsFilter.doFilterInternal(UrlMappingsFilter.java:205)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.obtainContent(GrailsPageFilter.java:221)
at org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter.doFilter(GrailsPageFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jsecurity.web.servlet.JSecurityFilter.doFilterInternal(JSecurityFilter.java:382)
at org.jsecurity.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:180)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.servlet.filter.GrailsReloadServletFilter.doFilterInternal(GrailsReloadServletFilter.java:101)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:65)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.studentsonly.grails.plugins.uiperformance.CacheFilter.doFilter(CacheFilter.java:71)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)

หลังจากงมอยู่นานก็ค้นพบว่า ตัว tutorial ก็ได้เตือนไว้แล้วว่าจะไม่work ต้องทำตามนี้ด้วย

In Grails 1.1 with the config "jsecurity.legacy.filter.enabled = true" you now must make sure, that you always has a controller, for example localhost:808/myApp won't work. Goto "grails-app/conf/UrlMappings.groovy" an define:

"/"(controller:"public", action:"index")
Of course you must than write your PublicController.

You now have a secure web application!

หลังจากนั้นทุกอย่างก็ราบรื่นดี นิทานเรื่องนี้สอนให้รู้ว่า อ่าน tutorial ดีๆก่อนจะไปโทษนู่นโทษนี่

First Blog

Welcome To My Blog.

I will Log everything that I've got during build up my project