12/28/2011

發展超快JQuery

發展超快JQuery, Javascript,以前在Java設計過想法、Patterns都搬到Javascript環境中Orz

12/26/2011

自行架設Wordpress移至Google Blogger

將自行架設Wordpress服務換成Google Blogger, 很單純的原因就是不想自行維護。 目前Blogger看起來非常不錯用,跟本像極Gmail介面,相信Google網路服務品質。

12/24/2011

郭董:永不放棄就沒有人能打倒你!


避免失敗特質:
熱情、勇氣、正面思考

談實作的重要
"技"手字旁 用嘴就變"吱",把呆板、無趣的工作做到精 你才會有創意。

11/17/2011

How to build Tapestry 5.3.x Source Code

Tapestry 5.3 之後捨棄了Maven (個人還是覺得應該繼續用Maven),使用Grandle工具類似Maven, 現在尚未有時間理解它。

Then, how to Build?

  • brew install gradle
  • svn checkout https://svn.apache.org/repos/asf/tapestry/tapestry5/trunk tapestry-project
  • cd tapestry-project
  • gradle idea (create a project file for Intellij Idea)
  • gradle install

9/18/2011

如何刪除finder's favorites

Mac Lion finder 我的最愛還滿好用的,但是如何編輯刪除它?

真是怪招一堆:

按下Command key + Dragging item

7/11/2011

Install Macvim

macvim

macvim 是針對mac osx 所做調整,讓您使用vim更溶入osx環境中。

最容易安裝方式: Homebrew

[code lang="bash"] sudo brew install macvim [/code]

不過建議使用ruby 1.8.x 版本,目前似乎不支援Ruby 1.9.x版本,否則會見錯誤

[code bash="bash"] Vim: Caught deadly signal SEGV Vim: Finished. zsh: segmentation fault [/code]

7/07/2011

Mac osx 字典尚有其他用途

原來Mac Dictionary還可以當API手冊來使用,讓你在寫程式快速查詢API說明。

mac dictionary

當按下 control + space (呼叫mac spotlight) , 輸入keyword

Screen shot 2011-07-07 at 下午2.23.35

安裝

下載並解壓於至 ~/Library/Dictionaries/中,設定Mac Dictionary 查詢順序。

雖然已經是舊文,在還不知道些技巧之前我幾乎不會想用Mac Dictionary。

另外一個問題如何做字典檔(網路上好像沒有資源),只看到Apple 開發文件,不然真想連JDK文件一起匯進去Orz!

參考

http://priithaamer.com/blog/ruby-on-rails-dictionary-for-macosx

7/06/2011

Web Frameworks 效能比較

JT Dev所做各種架構 { Rails, Wicket, Grails, Play, Tapestry, Lift, Context and JSP/Servlets}效能比較,這也是每年必上演的戲碼。

concurrent user graph image from http://www.jtict.com

選擇架構考量因素也包括效能、上手時間、資源、發展性。目前個人常用的兩個架構,Tapestry雖然效能上非常不錯,不過學習曲線非常高(也算是冷門)。 Rails在開發過程真的令人快樂,但是效能部份還有進步空間!

這個比較缺點尚未看得到memory消耗問題。

6/29/2011

Build Strategy Pattern

繼上一篇Strategy Pattern 討論到程式碼並不完美,主要缺失必須要瞭解每個算法與Context才能自在使用。比較好處理方式可將Context包裝成CompressionFactory或CompressionService方便其他人呼叫使用,但如何去建構?

自行撰寫雖然也不是問題,但似乎太浪費時間在處理此細節。

Tapestry IoC framework提供 StrategyBuilder 容易建立Strategy Pattern

A service implementation builder that operates around a StrategyRegistry, implementing a version of the Gang of Four Strategy pattern. The constructed service is configured with a number of adapters (that implement the same service interface). Method invocations on the service are routed to one of the adapters.

6/28/2011

Strategy Pattern

策略模式(Strategy Pattern)根據不同的環境條件,選擇最適當演算法(一組同性質算法)來使用。

wikipedia Strategy pattern

the strategy pattern (also known as the policy pattern) is a particular software design pattern, whereby algorithms can be selected at runtime. Formally speaking, the strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.[1]

策略模式算日常開發滿常使用模式,尤其是做專案時,使用者常常會開出這樣子需求, 根據{A -> A_activity, B -> B_activity, C -> C_activity...}對於這些{A, B, C...}_activity幾乎非常相似應該也可說是同性質活動,同時還要求日後可擴充。

最常見的範例 每一種不同產品{book, nb, pc...}類型有不同折扣數;不同的壓縮{zip, rar, gz...}有不同的壓縮算法;不同的檔案格式{doc, exe, xls...}有不同的處理邏輯等。

所以可定義有一組同性質算法,並將每種算法封裝起來,讓它們可根據不同的條件來互換使用。

策略模式結構:

strategy pattern

6/22/2011

使用多個相同Polymorphic Association無法解決在相同的Model

這個問題滿難解釋,在Rails一個model下同時使用多個相同Polymorphic Association,似乎無法解決問題。

情況如下

[code lang="ruby"] class Article < ActiveRecord::Base   has_one :header_image, :as => :imageable   has_many :images, :as => :imageable end [/code]

:header_image, :images無法區隔imageable_type資訊 (imageable_type = "Article")

G大神問了一下+看了一下ActiveRecord 程式,確實無法解決,只能繞路走 single table inheritance 雖然不是我要,但是只少可以解決問題。

有空來想看看可不可以提一個 patch!

6/03/2011

Java 異質系統整合

最近幫了某家線上音樂公司開發音樂自動化轉檔需求,其中之一功能需求來至四面八方唱片業所倒檔過來資料{xml, music files}。當然系統內部已經有自已統一介面 (interface)去接來至外面倒檔,但是如何處理煩雜的來源?

整理實作問題

  1. 每家XML似乎都是不同的格式,其中有幾家有使用DDEX( Digital Data Exchange)
  2. 每家XML內容龐大
  3. 如何花最小成本開發 (資源極有限)
  4. 日後好維護前提(Orz)

選擇方案

  1. XML Parser
  2. 不管用什麼方法都是累,要摘錄資訊真的太多!

  3. Java Architecture for XML Binding (JAXB)
  4. 想法 XML <-> Binding (Schema) <-> Java

    Sun JAXB

初步實作細節

  1. XML Binding
  2. [code lang="java"] xjc工具可以把schema 自動產生對應java類別 xjc ddex.xsd [/code]

    xjc 有些物件產生並不如預期,只能硬改所產生Code

  3. Transform to java object
  4. [code lang="java"] JAXBContext jc = JAXBContext.newInstance("net.ddex.xml._2010.ern_main._32"); Unmarshaller u = jc.createUnmarshaller(); return (NewReleaseMessage) u.unmarshal(inputStream); [/code]
  5. to business domain
  6. [code lang="java"] 轉換內部系統business domain [/code]

目前架構已經上線了,維護及開發都滿符合預期。

5/31/2011

整理Vim長距離跳躍指令

整理Vim 長距離跳躍指令,日後複習。

  • nG

    直接跳到n行

  • L

    跳到畫面最後一行

  • H

    跳到畫面最上面

  • M

    跳到畫面中間

  • C-o

    回到上一個跳躍動作

  • C-i

    回到下一個跳躍動作

  • zt

    這一行呈現於畫面最上面 (top)

  • zb

    這一行呈現畫面最下面(bottom)

  • zz

    這一行呈現畫面中間 (middle? XD)

5/28/2011

Apache Ant安裝於OSX

編Jruby需要Apache Ant

  • 下載http://ant.apache.org/
  • 搬移sudo mv ant-1.8/ /usr/local/
  • 設定vim /etc/bashrc
  • [code lang="bash"] export ANT_HOME=/usr/local/ant export PATH=${PATH}:${ANT_HOME}/bin [/code]

5/10/2011

Deploy redmine to Tomcat 6

目前已經有現存Apache Tomcat 架構,不太想用mongrel或passenger來設定管理,可簡易透過Jruby跑redmine服務在tomcat server。

隨手寫下備忘錄

工作常聽網路廣播

記錄一下工作常聽網路廣播,常常找不到來源

如果有不錯廣播也可以推薦一下!

5/05/2011

adsl自動重新連線ubuntu server

不知道為什麼Ubuntu Server當adsl斷線時並不會重新連線,理論上應該是要重新連線。雖然這種狀況並不是常發生不過還是不希望服務被中斷。

解決方案可撰寫 adslman.sh 丟進排程不斷的監測Adsl是否連線。

notational velocity 實用技巧

notational velocity實用技巧繼上一篇介紹之後,已經使用了快一年了仍然是我用過最滿意的記事本,隨手整理一下相關使用技巧。

快速鍵 ⌘Y - 刪除線 (todo 筆記使用) ⌘N - 新增筆記 ⌘L - 快速找到標頭與內容 ⌘J/⌘K - 上下移動不同筆記 Esc - 清掉現在查詢條件 ⇧⌘V - 貼上成為新的筆記 ⌘0 - 顯示所有書籤 ⇧⌘D - 將此筆記加入書籤 ⌥⌘L - 換版面 (Horizontal Layout) ⌘T - 加入Tag 特別用法 ⇧⌘V - 當複製URL會將URL內容變成一筆新的筆記 [[ - 內部筆記連結 nv: URL Specification allows searching for, selecting, and creating notes via a custom URL-handler (還找不到這個需求) Enabling the Services menu item (整合使用)

5/03/2011

amqp-utils工具使用

amqp-utils 工具(CLI)用來操作AMQP為基礎Queue服務( rabbitmq...),透過Command Line或Shell操作。 RabbitMQ 雖然也有rabbitmqctl但偏向系統管理面,amqp-utils剛好可以彌補rabbitmqctl資料操作不足,建議安裝。

安裝(需要ruby環境)

[code lang="bash"] gem install amqp-utils [/code] 簡易功能描述

如何刪除Rabbitmq queue資料

哎呀,想不到Rabbitmq內建rabbitmqctl管理工具不提供刪除或清除Queue功能,只能透過Third Party小工具來處理。

透過G大神瞭解amqp-utils可以解決此需求,在CentOS 環境

安裝

[code lang="bash"] yum install ruby ruby-devel rubygems gem install amqp-utils [/code]

4/28/2011

加速 PHP網頁執行

eAccelerator是一套不錯開源PHP網頁加速器,基本原理將PHP程式事先編譯過快取起來,且同時將PHP程式進行優化,號稱可以提升~30%(速度是真的提升)。

官方說明

eAccelerator is a free open-source PHP accelerator & optimizer. It increases the performance of PHP scripts by caching them in their compiled state, so that the overhead of compiling is almost completely eliminated. It also optimizes scripts to speed up their execution. eAccelerator typically reduces server load and increases the speed of your PHP code by 1-10 times.

4/13/2011

手動匯入Maven Local Repository

Sun 這個jai_imageio jar 似乎年代失修,一直找不到相對映的maven respo ,只能自行匯入本地儲存槽。

[code lang="shell"] mvn install:install-file -Dfile=jai-imageio-1.1.jar -DgroupId=javax.media -DartifactId=jai_imageio -Dversion=1.1 -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true [/code]

maven pom.xml設定加入

[code lang="xml"] javax.media jai_imageio 1.1 [/code]

3/03/2011

JDBC關與不關問題

Jdbc programming 幾乎是寫Java程式存取資料庫一定會用到東西, 當利用Jdbc執行Sql時會有下面的寫法。

[code lang="java"] try{ #run sql ... }finally{ if(rs!=null) rs.close(); if(stmt!=null) stmt.close(); if(conn!=null) conn.close(); } [/code]

自行拿connection時需不需做囉唆事情 ?

2/11/2011

轉換 mp3 tag 編碼

統一轉成Unicode

[code lang="bash"] java -jar ~/id3iconv-0.2.1.jar -e Big5 *.mp3 [/code]

1/28/2011

Java Daemon 撰寫與佈署

這篇不是真正教如何設計Java Daemon,考量如何利用別人寫好的Java Daemon能夠比較容易整合於不同環境中。 如通常不會自行開發工作排程系統,利用已成熟Quarts為基礎往上堆應用程式,雖然是已成熟Java Daemon要如何整合於不同的作業系統(Linux, Windows, Mac) ?

這個問題說難不難說簡單不簡單,解決方案也五花八門。傳統方式就是撰寫 public static void main(String[]) 統一由這一支Java程式啟動服務,然後撰寫一堆shell呼叫, 雖然問題也是可以解決但是往後系統維護管理不易也沒有統一。

Apache Commons Daemon 專案滿不錯解決方案之一

...Most multi-user operating systems already have a way in which server applications are started and stopped. Under Unix based operating systems non interactive server applications are called daemons and are controlled by the operating system with a set of specified signals. Under Windows such programs are called services and are controlled by appropriate calls to specific functions defined in the application binary, but although the ways of dealing with the problem are different, in both cases the operating system can notify a server application of its imminent shutdown, and the application has the ability to perform certain tasks before its process of execution is destroyed.

1/17/2011

How to test job in Quartz

之前工作排程都是使用Java Quartz來設計,但確沒有好好想過要如何測試 (有時候承認不夠好或許就是進步泉源),真的很不應該!

工作排程環境要模擬也確實滿複雜,但可利用Mock觀念 讓我們追縱瞭解物件內部流程,確保物件活動如預期中運作。

Java Runtime exec

使用Java執行外部指令( ls, pwd....) OSX環境執行的很好,但在windows環境確整個掛住跑不動(Java真的有跨平台嗎?),搞了一下午才弄清楚。

原本程式極為單純容易,但是會在windows 環境掛住!

最後才發現原來祕密寫在Process Java Doc說明裡:

1/13/2011

好玩VimGolf

VimGolf讓你挑戰用Vim解決各式各樣的文字編輯問題,會有分數統計排行...

  1. gem install vimgolf
  2. vimgolf setup
  3. vimgolf put [challenge ID]

vimgolf put 4d1ed78425ba287b2a000227

使用Vim解決CSV to JSON問題,vimgolf會將你所有編輯動作記錄下來算出一個分數上傳到vimgolf.com,有很多題目都很難看來Vim還不是多熟Orz!

1/12/2011

安裝rabbitmq server

在OSX環境安裝RabbitMQ Server

  • brew update
  • brew install rabbitmq
  • startup rabbitmq server

  • sudo rabbitmq-server
  • shudown rabbitmq server

  • sudo rabbitmqctl stop
  • show queues

  • sudo rabbitmqctl list_queues