顯示具有 基礎 標籤的文章。 顯示所有文章
顯示具有 基礎 標籤的文章。 顯示所有文章

2009年7月20日 星期一

複習Groovy (3) - Sql

針對自己的小作業複習Groovy,所以把Groovy Sql看看。因為小作業需要ResultSet Metadata,所以第一步搞定資料庫連線之後,第二步就開始搞看看ResultSet Metadata,最後就寫一個簡單的程式用comboBox帶出所有的Basic AssetType然後用table帶出該AssetType的ResultSet Metadata。一切隨性,下了班玩自己喜歡的東西好玩就好。


My HomePage Link

2009年7月14日 星期二

複習Groovy (2) - SwingBuilder - table -- cellRender & closureColumn

Preface

寫FTCS XMLPost tool和看書進度緩慢,這個算是寫FTCS XMLPost tool想用的東西。主要的想法是有一塊用JTable來呈現
該Basic Asset Type table的Metadata,然後我可以用勾選的方式,最後產生XMLPost執行的ini設定檔。^^純粹是初步想法
希望會堅持下去用SwingBuilder做完,而不會做到一半覺得改用Wicket做比較快(雖然對我而言是事實)。

Environment

  • Groovy 1.6.3

  • Sun JDK 1.6.0_10

最初版本和想法

最初是Groovy in Action裡面有關table的範例,作者使用了propertyColumn展示這個componet的做法和功能。以我這個Swing門
外漢想的到,距離心理想要做的東西,針對table還要玩出下列兩項

  1. closureColumn

  2. cellRenderer, cellEditor

測試用的殼

Listing. GroovyTest.java


package script;

import java.io.FileNotFoundException;
import java.io.InputStreamReader;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class GroovyTest {
public static void main(String[] args) throws ScriptException, FileNotFoundException {
if(args.length != 1) {
System.err.println("Missing Required Parameter");
System.exit(-1);
} // if

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("groovy");

engine.eval(new InputStreamReader(ClassLoader.getSystemResourceAsStream(args[0])));
} // main()
} // GroovyTest class

closureColumn property

就只是根據書上的範例多的data加一個欄位,用closureColumn來呈現,特別用selected順便在下一個可以用checkbox來
呈現和設定這欄的資料。

Listing. tabDemo0.groovy

package script

/**
* @author Terry
*
*/
import groovy.swing.SwingBuilder
import java.awt.BorderLayout
import javax.swing.JCheckBox
import javax.swing.DefaultCellEditor
import javax.swing.WindowConstants as WC

def data = [
[nick:'MrG', full:'Guillaume Laforge', selected: false],
[nick:'jez', full:'Jeremy Rayner', selected: false],
[nick:'fraz', full:'Franck Rasolo', selected: false],
[nick:'sormuras', full:'Christian Stein', selected: false],
[nick:'blackdrag', full:'Jochen Theodorou', selected: false]
]

swing = new SwingBuilder()

generateAction = swing.action( name: 'Execute', closure: {
for (Map row : data) {
println row
}
})

frame = swing.frame(title: 'SwingBuilder - table 踹踹係',
defaultCloseOperation: WC.EXIT_ON_CLOSE) {
panel(layout: new BorderLayout()) {
scrollPane(constraints: BorderLayout.CENTER) {
table() {
tableModel(list: data) {
propertyColumn(header: 'Nickname', propertyName: 'nick')
propertyColumn(header: 'Full Name', propertyName: 'full')
closureColumn(header: 'Import ?',
read: { row -> return row.selected },
write: { row, newValue ->
row.selected = newValue })
}
}
}
hbox(constraints: BorderLayout.SOUTH) {
button( 'Execute' ) {
action(generateAction)
}
}
}
}
frame.pack()
frame.show()

Figure. 程式執行結果



cellRenderer, cellEditor property

對Groovy還沒有到那種感覺的程度,所以就只能按照對Swing的了解用Java的方法搞。所以寫了
一個TableCellRenderer。所以先看到的是CheckCellRenderer.groovy之後在tabDemo.groovy裡面
cellRenderer property就設定這個自訂TableCellRenderer,至於CellEdtor則使用DetaulCellEditor
餵給他JCheckBox的物件就可以了。


Listing. CheckCellRenderer.groovy

package script

import java.awt.Component
import javax.swing.JTable
import javax.swing.JCheckBox
import javax.swing.border.EmptyBorder
import javax.swing.table.TableCellRenderer

class CheckCellRenderer extends JCheckBox implements TableCellRenderer {

CheckCellRenderer() {
super()
setOpaque(true)
setBorderPainted(true)
setBorder(new EmptyBorder(1, 1, 1, 1))
setHorizontalAlignment(JCheckBox.CENTER)
}

public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
setSelected(value)
setForeground(table.getForeground())
setBackground(table.getBackground())
return this
}
}

Listing. tabDemo.groovy

package script

/**
* @author Terry
*
*/
import groovy.swing.SwingBuilder
import java.awt.BorderLayout
import javax.swing.JCheckBox
import javax.swing.DefaultCellEditor
import javax.swing.WindowConstants as WC

def data = [
[nick:'MrG', full:'Guillaume Laforge', selected: false],
[nick:'jez', full:'Jeremy Rayner', selected: true],
[nick:'fraz', full:'Franck Rasolo', selected: false],
[nick:'sormuras', full:'Christian Stein', selected: false],
[nick:'blackdrag', full:'Jochen Theodorou', selected: false]
]

swing = new SwingBuilder()

generateAction = swing.action( name: 'Execute', closure: {
for (Map row : data) {
println row
}
})

frame = swing.frame(title: 'SwingBuilder - table 踹踹係',
defaultCloseOperation: WC.EXIT_ON_CLOSE) {
panel(layout: new BorderLayout()) {
scrollPane(constraints: BorderLayout.CENTER) {
table(cellSelectionEnabled: false) {
tableModel(list: data) {
propertyColumn(header: 'Nickname', propertyName: 'nick')
propertyColumn(header: 'Full Name', propertyName: 'full')
closureColumn(header: 'Import ?',
cellRenderer: new CheckCellRenderer(),
cellEditor: new DefaultCellEditor(checkBox(horizontalAlignment: JCheckBox.CENTER)),
read: { row -> return row.selected },
write: { row, newValue ->
row.selected = newValue } )
}
}
}
hbox(constraints: BorderLayout.SOUTH) {
button( 'Execute' ) {
action(generateAction)
}
}
}
}
frame.pack()
frame.show()

Figure. 程式執行結果



Reference

  • Groovy Web Site

  • Groovy in Action, First Edition

  • Swing, Second Edition


Terence Chao, 2009/07/14

2009年7月7日 星期二

複習Groovy的第一章

最近被Manning的Groovy in Action 2Ed預購所吸引...60% off的吸引力太大,就敗了Groovy in Action第二版。因此也把書櫃裡的Groovy in Action第一版拿出來複習一下。自己學東西都是不注重用不用的到,只在乎自己爽不爽,因此學的很發散也忘的很快。哈,記憶體有限很快就purge掉。
因為google要關閉page creator本來打算把用部落格作筆記的做法關掉,一方面也很討厭自己在筆記本唉唉叫的做法,又不是有病幹麻管別人那麼多閒事。為了備份方便,後來改用html搞,沒啥美工天份反正自己看不礙眼就好。網站先放在so-net個人網頁。

2009年6月23日 星期二

Wicket – Write out Binary WebResource

製作ResourceLink的時候,原本都是用WebResourceCSV檔或文字資料。剛好遇到要透過POIHSSFSpreadSheet出來,參考ByteArrayResource,如果只是單純使用ByteArrayResource也可以,因為我打算維持自己之前webresources的做法把自己寫的IExportableDataProvider傳進來再製作出要export的內容。這邊只是POC確定可以跑的版本,不包含任何該公司的資訊。



PDF Document here

2009年4月14日 星期二

[Fatwire Content Server] 自己猜測的部分Data Model



四月以來諸事不順、心情不佳,煩到一個不行
把前幾個月來工作時陸陸續續整理的東西,既然是沒用的東西放上來應該也沒差 (link)
壓縮檔中
1. 用DBDesigner 4做的Data Model,Data Type都是用MySQL的
2. 圖檔是export出來的東西

這幾天整理自己的lab發現
1. 以前用velocity寫的Masm32的makefile產生程式不見了
2. 竟然看不太懂自己之前寫的Win32 Assembly程式
...也一整個無言

附上一張同事問到的SystemSQL Result Cache問題的解決圖
在deftable這欄透過逗號分隔設定相關的table,當這些table透過Advance UI變更的時候就會清掉該筆SystemSQL的result cache (這個是同事問到的答案)。

2009年2月27日 星期五

UTL_I18N.UNESCAPE_REFERENCE Note

遇到Numeric Character Reference表示的文字檔,因此找到Oracle的UTL_I18N這個package來幫忙轉換內容。大概紀錄一下UNESCAPE_REFERENCE和ESCAPE_REFERENCE的簡單使用方法。見PDF文件...搞定,睡覺去

PDF Document here

2009年2月11日 星期三

Filter Operation Notes

因為興趣而努力看Oracle的東西,也因為興趣看.NET自己覺得好玩的東西。因為不知道未來會怎樣,也不想為了用而學知識...反正好玩就好。有關Oracle execution plan裡的Filter Operation簡單的筆記。



PDF document here

BTW 熊本城寶寶看起來很不錯...希望有機會可以去一趟熊本城瞻仰加藤清正蓋的城...順便抱一隻熊本城寶寶回台灣 哈哈

2009年2月9日 星期一

dynamic sampling notes

就菜鳥所知,自從Oracle使用Cost-Based Optimization之後,statistics data對於讓Cost-Base Optimizer(CBO)產生較有效率的execution plan就相當重要。在處理SQL時,遇到沒有分析任何statistics data的時候,CBO會使用預設的資料來產生execution plan。這樣就完全仰賴『運氣』,比如說SQL Statement用到的objects的狀況和預設的差不多...Dynamic Sampling的出現可以協助optimizerhard parse的時候scan databasesegments取得對optimzation有幫助的資訊,然而在某些狀況下即使我們有分析statistics data,但是或許是因為資料的缺乏,optimizer會產生不是那麼有效率的execution plan,在這種情形下dynamic sampling也可以提供有用的資料給optimizer產生有效率的execution plan


PDF Document here

上半年
- Troubleshooting Oracle Performance (orcl)
- Oracle 11g PL/SQL Programming (orcl)
- Applied Mathematics for Database Professionals (basic)
- Lucene in Action 2Ed (java)
- Real World Functional Programming (ms)
- IronPython in Action (ms)

下半年
- Secret of Oracle Database (orcl)
- Programming Ruby 1.9 (os)
- Building Domain Specific Languages in Boo (ms)
- Applied Mathematics for Database Professionals (basic)

2009年2月3日 星期二

About EXP-00091

過了九天的年假,除了和家人、小狗玩之外,大多都是XBOX 360、WoW。雖然開始研究Oracle Execution Plan各個Operation。就從前鎮子遇到的簡單疑問開始解,會遇到通常是因為Oracle Instance的Character Set和Client不同在匯出的時候有可能會遇到的小問題。

Document here

過完年書單也瘋狂成長 -"-
排進書單新書
1. Troubleshooting Oracle Performance (兩三年沒看Oracle的東西了...,最近又開始看了)
2. Lucene in Action
3. OSGi in Action
4. Developing Web Services with Apache Axis2
5. jBoss in Action
6. Real World Functional Programming
7. IronPython in Action
8. AspectJ in Action
9. jQuery in Action (隨便翻過)

Secrets of the Oracle Database
Oracle Database 11g New Features (考慮要不要去升級...雖然在正港DBA眼中偶只是拿牌騙吃騙喝)
Building Domain Specific Languages in Boo (還要先看恐龍書 >"<)
Programming Ruby 1.9

大概差不多可以開始整理最近玩的Filter Operation

2009年1月13日 星期二

[Fatwire Content Server] Content Server meet jQuery

寒流冷颼颼,最近工作有機會接觸Commercial CMS的產品。有一些奇怪想法,週末終於覺得有一點點能力可以開始踹看看。主要是想嘗試在Content Server裡使用jQuery和嘗試讓Template產出JSON給jQuery用看看這樣想法可不可以...沒有實驗總覺得不踏實...太嫩了沒辦法。

PDF Document here

2008年12月8日 星期一

[Eclipse Plug-in] XML Formatter 0.0.1

看了一個多月基礎的C++標準程式庫之後,在工作之餘還是只有搞基礎東西的水平。因為工作偶而會遇到的東西,想偷懶寫些工具協助下次找問題。搞了Swing和基本的SWT/JFace/Eclipse PDE的東西...寫了一個很簡單的plugin當成自己初次學Eclipse Plug-in的第一個筆記。

PDF Document here
Plug-in file here
JDOM plug-in here

搞定睡覺去...明天還要上班

2008年9月12日 星期五

Longest Common Subsequences For Dummies

下班之後可以研究一些好玩的東西,最簡單的sequence similarity analysis - Longest Common Subsequences (LCS),簡報檔內容還是在看書做的筆記,畢竟圖像對我而言比文字容易瞭解。針對使用dynamic progrmming解LCS的部份。

寫了兩個版本,一個是最早寫的版本,第一個版本是寫一個functor來計算s和b的two-dimension array的值,然後透過一個method解讀array得到LCS的結果。後來想想用Nontype Template Parameter來搞。因為在編譯期就可以知道陣列大小,所以用Template搞就很方便。因此寫了v2版本。


Doc here
Code here

2008年9月6日 星期六

About Motif Finding Problem

針對Motif Finding Problem的學習,書上寫的很清楚可是總覺得畫圖對自己比較容易了解,所以把看書過程當中想的東西畫下來並整理一下。對自己瞭解這個東西有點幫助,也希望可以對別人也有點幫助。整裡的東西是用OpenOffice Impress搞得加上還有自己寫的Score(s, DNA)的簡單程式碼,所以包成一個Zip檔。



Document and Code Package here

2008年8月27日 星期三

Partial Digest Problem – Brute Force Algorithm Brute Force Implementation

最近白天上班被那個沒有怎樣建立、部署專案文件的有趣專案荼毒。哈!看來是上次專案工作當中被同事欺騙,都要寫從無到有安裝、部署的SOP。『大』專案好像不用這樣搞。

自從多年以前在某生物資訊公司上班時很無知的買了本 Computational Biology的書,看了一點點被嚇到,嚇到好幾年都不敢講bioinformatics這個單字。哈!過了幾年來終於鼓起勇氣再敗一本bioinformatics的書來看。哈哈!還好目前為止這次看的章節數比較多,書上大多是pseudo code,因為會的太少,所以不做看看會怕怕的。也是因為會的太少,因此這寫的實作版本也叫brute force implementation


看起來很多頁其實都只是程式碼列表,寫的才一點點。搞定 洗澡去 今天一定要早點睡 哈哈!

PDF Document here

2008年8月22日 星期五

Metaprogram for dummies

緣起是在學侯Sir說的第零境界當中一直受到相當的挫折又再度奮起繼續作戰,好像學到點東西但是又不確信是不是真的學到東西。就會東想西想些case來看看能不能自己用第零境界講的東西來做看看。這邊就是剛好看到Metaprogram的章節之後,一直在想那個東西可以拿來踹踹看,又剛好看到BSAArpin的部落格有講用Markov Chain來檢定某段DNA序列是不是CpG island,所以這邊就用來踹Unroll loops的東西。

....好難的第零境界....不過看看之後竟然發現古早以前買的『泛型程式設計與STL』好像有越來越看有的趨勢,哈!大概是假象吧!


看來template快卡關了,正好拿到An Introduction to Bioinformatics Algorithms可以交互喘息。哈哈! 搞定睡覺去...


PDF Document here

2008年8月21日 星期四

Building Board Library with Visual Studio 2008

第二個做專案的工作,據說找了很多技術高超的Java SD來搞。看了之後相當吐血,所謂沒想到那些號稱技術高超的free-lancer java SD們,除了傳說中的堅持己見、吵來吵去之外,還搞出了一個專案n種寫法、沒寫JavaDoc、沒寫註解的系統(同時也搞出Java最有名的XML Hell...一個專案分幾個Web Application,一個Web Application光Struts config就拆成將近20個...真是不簡單)...做出那樣的垃圾晚上竟然還睡的著...真是不簡單。

晚上回來還是要搞些正常的...話說以前在玩Java的時候曾經玩過一陣子Batik,就想到C++應該也有類似製作vector graphics的library,就從咕狗大神找一下,就碰到Board Library。在Windows用VS 2008 build的時候發生一些問題,所以就把自己解決的方法記錄下來,或許將來有機會要用的時候可以查的到資料。


PDF document here

2008年8月4日 星期一

Copy constructor and allocator for dummies

離職一個多月來,和很多人聊過天,也一直在思考自己的未來...最主要也在補充自己基礎知識。也在努力搞template。雖然C++的工作不會找我,很久以前也一直把template當成尖帽子的傢伙。正好趁這個時間看一下C++ template、再看了一次『快快樂樂學演算法與資料結構』哈。基礎補了一些,結果書單也多了很多(像看The Art of C++當中差點忍不住敗Programming Game AI by Example),面試當中也見識到不少公司明明沒打算理我卻能睜著眼睛說瞎話浪費我的時間的事蹟(比如說某個最近因為老闆發表文章很紅的公司,某研發單位找PG的需求有列Strtus, AJAX...,在apply該單位SD的面試的時候卻說我們部門不做presentation??一整個狐疑...大概是小弟沒唸過CS,所以不瞭解真正的presentation是啥吧!門外漢嘛!被糟蹋好像也是應該。)

呵!正因為是門外漢又不聰明,所以看到書上寫的東西就會手賤想實驗看看,不然會覺得不踏實。會踹allocator並不是想自己寫STL Container(儘管The Art of C++有一章有寫Custom STL Container),純粹只是因為看到C++ Primer其中一句話就想用allocator踹看看、實驗看看是不是真的跟書上講的一樣。另一方面也想說可以趁機學學allocator怎麼玩。

PDF document here