October 20, 2011
Sockets Direct Protocol (SDP)
Sockets Direct Protocol (SDP)
วันก่อนได้มีโอกาสไปอ่านเรื่อง SDP ซึ่งเป็นหนึ่งใน new feature ของ jdk7 รู้สึกว่าน่าสนใจมากกก เนื่องจาก server ของ office เองถ้าไม่นับ mssql แล้วก็แทบจะเป็น solaris ทั้งหมด หึหึ ความันส์จะบังเกิดก็คราวนี้แหละ เอาละไม่พูดมาเรามาเข้าเรื่องกันเลย
เอาแบบง่ายๆละกัน SDP ก็คือ protocol ใหม่(ของผม แต่เก่าแล้วสำหรับชาวโลก) ซึ่งพัฒนามาตั้งนานนนนแล้วโดย InfiniBand Trade Association หรือ InfiniBand (IB) ซึ่งแก้งนี้มีประสบการณ์ในการ develop ‘High Performance Computing System’ อยู่แล้ว ซึ่งหนึ่งใน feature ที่มีใช้กันเยอะก็คือ Remote Direct Memory Access (RDMA) – จริงๆแล้วผมเคยเห็น feature นี้ใน IBM blade server ที่ vendor เอามานำเสนอ ตอนนั้นผมยังคิดอยู่เลยว่ามันทำได้ขนาดนั้นเลยเหรอ ถึงขั้น cpu ไป access memory ของอีกเครื่องได้ บระเจ้าาาา เทพชัดๆ- จากประสบการณ์ของทีมนี้เราคงเชื่อใจฝรั่งแก้งนี้ได้ในระดับหนึ่งว่ามันไม่ได้โม้
เรื่องการทำงานของ SDP ก็มีหลักการง่ายๆคือ พยายาม bypass TCP mechanism ไปแล้วไปใช้ SDP แทน ซึ่งเขาว่ากันว่ามันจะลด overhead ต่างๆลงอย่างไม่น่าเชื่อ จริงเหรอวะ ยังคงเป็นคำถามในใจ…. ตอนนี้กำลัง print case study ไปอ่าน ใครสนใจก็ นี่เลย : http://www.mellanox.com/content/pages.php?pg=white_papers อาจจะไม่ตรงซะทีเดียวแต่ก็เอามาดูว่าแก้งนี้มันทำอะไรสำเร็จไปแล้วมั่ง แล้วเกี่ยวกับ SDP ป่าว
การ implement นั้น สิ่งที่จะต้องทำมีขั้นตอนง่ายๆต่อไปนี้
- เตรียม SDP Configuration file ซึ่งก็ไม่ยากหาได้จาก toturial ทั้วไป เช่น http://download.oracle.com/javase/tutorial/sdp/sockets/file.html
- enable SDP ซึ่งเป็น system property ตอน run ก็เพิ่มเข้าไปง่ายมากๆ
*อย่าลืมดูเรื่อง IPv4, IPv6 ด้วยนะครับ มันมี issue ที่จำเป็นต้องทราบก่อนการใช้งาน แนะนำว่าให้ใช้ IPv6 แล้ว end-point ใหนที่ใช้ IPv4 ก็แค่เพิ่ม prefix เข้าไป
ส่วนเรื่องการ implement ในมุมของ programmer ถ้าคุณใช้ class ตามด้านล่างอยู่แล้ว ก็ไม่จำเป็นต้องทำอะไรเพิ่มเติมครับ ใช้ได้เลย แต่ถ้าใช้ 3rd Party อื่นๆก็ต้อง check based lib อีกที ^^
java.net package: Socket ServerSocket java.nio.channels package: SocketChannel ServerSocketChannel AsynchronousSocketChannel AsynchronousServerSocketChannel
ขอให้มีความสุขกับ performance ที่เพิ่มขึ้นนะครับ
December 25, 2009
Log4J DailyFileAppender
วันนี้ว่างโคตรๆ ไม่มีไรทำ จิตใจไม่ค่อยอยากจะทำงานแระ อยากหยุดอย่างเดียว 555+ จริงๆเย็นนี้จะไปดู avata 3d แหละรอมาสัปดานึงแระให้คนซาๆก่อน ระหว่างนี้หาไรทำดีกว่า จริงๆว่าจะเล่านานแล้วแต่ไม่ว่างซะที วันนี้โอกาสดีเลยจัดไป
April 21, 2009
EHCACHE
หลังจากไม่ใด้เขียนอะไรซะนาน นึกขึ้นได้มาแวะ blog เรามั่งดีกว่า
ว่าแต่จะเขียนเรื่องอะไรดีละ….
นึกออกแล้วเอา EHCACHE นี่แหละล่าสุดที่อ่านมา
เนื่องจากว่าต้องสร้าง framework ใหม่ให้ office แล้วเขาเปลี่ยน weblogic8.1 เป็น weblogic 10 แล้วไงละ?
lib weblogic portal (weblogic8) มันก็ใช้ไม่ใด้อะจิ!!! อ้าวซวยแล้ว #%$%^$$^
งั้นเปลี่ยนใหม่ก้ได้ ก็เลยมาตามหาๆๆๆๆๆ และแล้วบุพเพสันนิวาสก็พาเรามาเจอกับ EHCACHE แล่วมัน work ป่าว?
ก่อนอื่นมาดูเรื่อง performance ซะก่อนเพราะถ้ารับ load ประมาณ 200000 tx/hr. ไม่ใหวมันก็ตายยย และแล้วก็ไปเจอ ehcache performance อ่านดูแล้วมันก็น่าจะไหวนะ
จากนั้นก็มาดู architecture มันก่อน เอาคร่าวๆพอ อย่างน้อยๆให้รูแภาพรวม ว่าเราอยู่ตรงใหนของโลก 
จากนั้นมาลอง implement กันว่ายากป่าว เพราะถ้ายากก้ไม่เอา (simple is the best)
ดูๆแล้วไม่ยากแฮะ น่าจะหมูในอวย มาดูตัวอย่าง code กัน ง่ายสุดๆ ถ้าสงสัยอะไรก้ไปที่ official site
CacheManager cacheMgr = new CacheManager();
Cache memoryOnlyCache = new Cache(cacheName, 100000, false, false, 5000, 1000);
cacheMgr.addCache(memoryOnlyCache);
Element usrChk = new Element(“key”, “value”);
memoryOnlyCache.put(usrChk);
usrChk = memoryOnlyCache.get(“key”);
cacheMgr.shutdown();
จบแล้วครับ สงสัยอะไรหลังไมค์ได้คับ
May 1, 2008
JOSSO
วันนี้ว่างๆระหว่างรอเพื่อนโทรมาชวนไปดูหนังเลยหาไรทำซะหน่อย ไม่รู้จะทำไรดี นี่เลยละกัน JOSSO บุ๊กมาร์คไว้นานแล้วไม่มีโอกาสได้เข้ามาอ่านซะที
จริงๆแล้วผมสนใจเรื่องนี้มานานแล้วครับแต่ไม่ค่อยได้มีเวลามาจับซะทีมัวแต่ทำอย่างอื่นอยู่ ทีแรกบ้าพลังจะพยายาม implement เอง แต่เลิกแล้วใช้ของฝรั่งดีกว่า ดีกว่าเยอะ(คิดว่านะ) ก็เลยมาตกลงปลงใจกับอันนี้นี่แหละ JOSSO (http://www.josso.org/)
หลังจากนั่งอ่านไปซักพัก เอ… เหมือนจะดีเลยแฮะ น่าสนใจสุดๆ tomcat/weblogic/jboss/etc. มัน deploy ได้หมดเลยอะแจ๋วจริงๆ เอาละมาเริ่ม workshop กันซะที

จากรูปนะครับเอาเป็นว่าผมไม่เข้าวิชาการมากละกันเอาง่ายๆ กันเลย ตัว SSO นี่แบ่งออกเป็น 2 ส่วนหลักๆก็คือ
1. Gateway คือ ตัวที่ทำหน้าที่ user authentication ที่จะเข้ามา พูดง่ายๆก็คือหน้า login นั่นแหละ
2. Agent คือ web ทีจะเข้ามาใช้งานระบบ user authentication ร่วมกับ web อื่นๆ ใน gateway ตามข้อ 1
เห็นมะมีแค่ 2 ส่วนเองง่ายโคตรๆ จริงๆแล้ว installation manual ใน web (http://www.josso.org/confluence/display/JOSSO1/Tomcat+6.0) ก้มีพอสมควรแต่ต้องอ่านหน่อย สำหรับท่านที่จะอ่านข้ามๆมั่วๆไป มีโอกาสไม่ success นะครับ เอาละ setup ตามผมเลยก้ได้ step by step ลืมบอกไปผมใช้ Tomcat6.0 นะครับ jdk6 ผมสมุติว่าท่านทำ jsp/setup tomcat เป็นแล้วนะครับ
Setup Gateway
1. ที่ %CATALINA_HOME%/bin สร้าง file ดังต่อไปนี้
file:setenv.bat
set CATALINA_HOME=C:/apache-tomcat-6.0.16
set JAVA_OPTS=-Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.conf
file:jsso-config.xml
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?><configuration><hierarchicalXml fileName=”josso-gateway-config.xml”/></configuration>
2. Copy file josso-gateway-config.xml จาก josso\core\src\resources ที่ unzip ออกมา เอามาวางไว้ที่ %CATALINA_HOME%/bin


3. ที่ %CATALINA_HOME%/conf/ สร้าง file jaas.conf โดยมี file content ดังนี้
josso {
org.josso.tc60.agent.jaas.SSOGatewayLoginModule required debug=true;
};
4. แก้ไข file server.xml ของ tomcat โดยให้เพิ่ม
<Realm className=”org.josso.tc60.agent.jaas.CatalinaJAASRealm”
appName=”josso”
userClassNames=”org.josso.gateway.identity.service.BaseUserImpl”
roleClassNames=”org.josso.gateway.identity.service.BaseRoleImpl”
debug=”1″ />
<Valve className=”org.josso.tc60.agent.SSOAgentValve” debug=”1″/>
ไว้ที่ด้านล่างของ
<!–Realm className=”org.apache.catalina.realm.UserDatabaseRealm”
resourceName=”UserDatabase”/–>
5. จากนั้น copy file josso-credentials.xml, josso-users.xml จาก josso\core\src\resources มาไว้ที่ %CATALINA_HOME%/lib
6. จากนั้นเข้าไป folder ที่ unzip josso ออกมาแล้วพิมพ์คำสั่งต่อไปนี้ตามลำดับ
set JAVA_HOME=c:\jdk1.6.0
set CATALINA_HOME=c:\apache-tomcat-6.0.14
build.bat war
build.bat install-tomcat60
build.bat deploy-tomcat60
7. จากนั้นให้ลอง start tomcat จะสังเกตว่าไม่มี error print out ออกมาที่ console
Setup Agent อันนี้ผมแนะนำให้ setup tomcat อีกตัวขึ้นมาใหม่เลยนะครับ อย่างเช่นเครื่องผมมี tomcat6.0 อีกตัวนึง run ที่ 9090
1. Copy file josso-agent-config.xml จาก josso\core\src\resources ที่ unzip ออกมา เอามาวางไว้ที่ %CATALINA_HOME%/bin
2. ที่ %CATALINA_HOME%/bin สร้าง file ดังต่อไปนี้
file:jsso-config.xml
<?xml version=”1.0″ encoding=”ISO-8859-1″ ?><configuration><hierarchicalXml fileName=”josso-agent-config.xml”/></configuration>
3. จากนั้นสร้าง web module ขึ้นมาแล้วมี structure ดังต่อไปนี้
SimpleSSO
-index.jsp
-login-redirect.jsp
+protected
-target.html
+WEB-INF
-web.xml
โดย detail แต่ละ file เป็นดังนี้
//index.jsp
<%@ page language=”java” contentType=”text/html; charset=ISO-8859-1″
pageEncoding=”ISO-8859-1″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=ISO-8859-1″>
<title>Simple SSO</title>
</head>
<body>
This is a public resource.<br/>
<a href=”protected/target.html”>Protect Resource</a>
</body>
</html>
//login-redirect.jsp
<%@page contentType=”text/html; charset=iso-8859-1″ language=”java” session=”true” %>
<%
response.sendRedirect(request.getContextPath() + “/josso_login/”);
%>
//target.html
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
<title>Insert title here</title>
</head>
<body>
Hello world SSO!!!
</body>
</html>
//web.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”
id=”WebApp_ID” version=”2.5″>
<display-name>SimpleSSO</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<security-constraint>
<web-resource-collection>
<!– We’re going to protect this resource and make it available only to users in “role1″. –>
<web-resource-name>public-resources</web-resource-name>
<url-pattern>/protected/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login-redirect.jsp</form-login-page>
<form-error-page>/login-redirect.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role >
<description>Role 1</description>
<role-name>role1</role-name>
</security-role>
</web-app>
4. จากนั้น pack & deploy เลยครับ แล้วลองเข้าไปที่ http://localhost:9090/SimpleSSO/protected/target.html จะเป็นว่าระบบจะ redirect ไปที่หน้า SingOn จากนั้นให้เราไส่ user1/user1pwd แล้วระบบจะ login แล้วทำการ redirect กลับมาที่หน้า target.html
เสร็จแล้วครับ เห็นมะง่ายนิดเดียว ลองดูนะครับผมว่าน่าจะเป็นประโยชน์ต่อหลายๆคน เง้อหิวข้าวแล้วเพื่อยังไม่โทรมาอีก อะไรกันเนี่ยยยยยยยยยยยยยยยยยยยยยยย
May 17, 2007
Grails
Grails(http://grails.codehaus.org)
มาแว้ววววววว ในที่สุดก็ว่างได้มาเล่าซะที เนื่องจากพักนี้ฝนตกบ่อยๆ ไอ้ตกบ่อยมันก็ดีอยู่หรอกนะแต่ห้องผมน้ำมันรั่วนี้จินอนๆอยู่เซ็งเลย
เอาละเข้าเรื่องกันซะที พอดีว่าได้มีโอกาสลอง Grails ดูอะคับเลยอยากจะเอามาเล่าสู่กันฟังเผื่อจะมีคนนำไปใช้งานจริง(ก่อนผม) อิอิเริ่มเลยละกันนะ
Grails คือ ?
ผมมองว่า Grails คือ Tools ที่ช่วยในการ Generate Java Web Application โดย Web Application ที่ Generate มานี้จะครอบคลุม Function CRUD (Create,
Read, Update, Delete) น่าสนใจไช่มั้ยละอย่างน้อยก็นำมาทำส่วน admin ได้แหละ
ได้แค่ CRUD เหรอ?
ป่าวคับนั่นเป็นแค่ default การ Generate ถ้าต้องการ Function อย่างอื่นนอกเหนือจากนี้ก็สามารถเขียนเองเพิ่มเติมได้ตามใจชอบเลย
แล้วเขียนไงอะ?
ฮ่าๆๆๆ อย่าพึ่งคึกเนื่องจาก Grails นี้ใช้ภาษา Groovy ในการพัฒนา developer จึงจำเป็นต้องมีความรู้ใน Groovy พอสมควร แรกๆผมคิดจะดำน้ำไป แต่ดำๆไปซักพัก $%#@!#*?$ นี่มันเขียนบ้าไรวะ ก็เลยต้องกลับไปอ่าน Groovy มาก่อน(อิอิ) อย่างน้อยก็ต้องรู้ Syntax มันแหละ (promotion พิเศษสำหรับคอ java ไปที่นี่เลย http://groovy.codehaus.org/Differences+from+Java)
แล้ว Web Application ที่ Generate ได้มัน deploy ได้ทุก server ป่าว?
อันนี้ไม่ confirm น้าาาา แต่จะบอกว่าตัว Framework ที่ Grails มัน Generate มันจะเป็น Spring + Hibernate3 แหละอิอิ โดยส่วนตัวผมชอบคู่หูคู่ฮานี้อยู่แล้วเลยยิ่งช๊อบบบ ชอบ สำหรับบางคนอาจจะมองว่านี่เป็นข้อจำกัดก็ได้นะคับ เพราะถ้าองค์กรหรือ project ที่กำลังพัฒนาไม่ไช่ Spring + Hibernate ถ้าจะเอาตัวนี้ไป Merge ก็ต้องทำใจ
งั้น Project ผมไม่ใช้ Spring + Hibernate ก็หมดสิทธจิ?
ก็ไม่ซะทีเดียวหรอกคับ เนื่องจาก Framework ที่ Grails มัน Generate มันมี SiteMesh ด้วยนะ หวังว่าคงเอาไปช่วยไรใด้บ้าง(อิอิ)
แล้ว Tutorial เยอะมั้ย
มีข่าวดีกับข่าวร้ายเอาไรก่อน เอาข่าวดีก่อนละกันนะ Tutorial มีเยอะแยะเลยส่วนมาก Step-By-Step ด้วยนะเยี่ยมมั้ย ส่วนข่าวร้าย Tutorial ส่วนมากไม่สามารถ run ได้กับ
version 0.5.5 (lastest version) อิอิต้อง modify นิดๆหน่อยๆ(อิอิ สู้เข้านะคับ)
ขอดูตัวอย่างหน่อยจิ
ทีแรกผมว่าจะ demo ให้ดูแต่ผมว่านี่ http://grails.org/Quick+Start ก็ง่ายแล้วแหละ
โชคดีนะคับ อิอิ