2015年12月28日 星期一

[javascript] not not (!!) 運算

!!false===false
!!true===true
 
!!0===false
!!parseInt("foo")===false// NaN is falsy
!!1===true
!!-1===true// -1 is truthy
 
!!""===false// empty string is falsy
!!"foo"===true// non-empty string is truthy
!!"false"===true// ...even if it contains a falsy value
 
!!window.foo===false// undefined is falsy
!!null===false// null is falsy
 
!!{}===true// an (empty) object is truthy
!![]===true// an (empty) array is truthy; PHP programmers beware!

2015年11月2日 星期一

[Multithread] Java multithread

Java multithread - 1


在開發多執行緒程式時,常發生的問題是共用資源非同步問題,就像工作一個人做好好的,多一個人沒有協調好就是來添亂的,除了叫他麥來亂之外,可能好好協調才是增加產能的好策略。

本系列文主要把之前遇過的一些多執行緒問題紀錄一下,然後一些資料參考這本書和部分本人的記憶,如果有疏漏或是錯誤也請不吝指教。

問題


  • 共用物件
  • 多資源資源鎖定
  • Job - Worker
  • 排程

Java - Syncronized


  • syncronized method
  • syncronized block

Java - Thread


  • wait
  • sleep
  • join
  • yank
  • notify/notifyAll
  • interrupt
  • Thread/Runnable
  • Mutax Object

Queue Design


Worker Design


Job

[maven] profile - activation

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

profile 設定裡面除了 id, build 之外還有個蠻有用的設定

activation 可以用來設定啟用這個 profile 的條件 (哇喔~~~)

指定 JDK 1.4
  1. <activation>
  2. <jdk>1.4</jdk>
  3. </activation>

JDK 1.3~1.6前
  1. <activation>
  2. <jdk>[1.3,1.6)</jdk>
  3. </activation>

特定 OS
  1. <activation>
  2. <os>
  3. <name>Windows XP</name>
  4. <family>Windows</family>
  5. <arch>x86</arch>
  6. <version>5.1.2600</version>
  7. </os>
  8. </activation>

有 debug 這個 property
  1. <activation>
  2. <property>
  3. <name>debug</name>
  4. </property>
  5. </activation>

environment 設定成 test -Denvironment=test
  1. <activation>
  2. <property>
  3. <name>environment</name>
  4. <value>test</value>
  5. </property>
  6. </activation>

沒有某個檔案或資料夾
  1. <activation>
  2. <file>
  3. <missing>target/generated-sources/axistools/wsdl2java/org/apache/maven</missing>
  4. </file>
  5. </activation>

預設啟動
  1. <activation>
  2. <activeByDefault>true</activeByDefault>
  3. </activation>

2015年10月17日 星期六

[maven] profile 使用

最近專案在發佈的時候,需要把 war 檔案中的 config, jar 等檔案移出來的需求

看了一下 maven-war-plugin 的範例文件

把專案設定丟出來加些說明

1. 在 pom.xml 裡面增加 profiles 不同的 profile 可以適用不同環境的上版參數設定

2. profile 裡面主要有三個 plugin,設定大概如下方說明

3. mvn clean install -Dmaven.test.skip=true -Puat

-P 就是指定 profile 的意思

Eclipse version


threads 跟 skip Tests 都是自己加的 不需要可以自己移掉


--- plugin 示意

  •  maven-war-plugin : 
    • 處理 war 檔案包裝,包括檔案過濾、web.xml 指定、其他資源載入等
  • maven-compiler-plugin
    • java 編譯相關參數,設定編譯用參數,顯示提示等
  • maven-resource-plugin
    • 將設定檔案移動至指定位置

2015年9月17日 星期四

[log4j] 顯示 SQL & 參數值

log4j.properties 設定

log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate=ERROR



org.hibernate.SQL 用來顯示 PeparedStatement
org.hibernate.type.descriptor.sql.BasicBinder 用來顯示 bind 的值

2015年9月5日 星期六

Log4j - Addtivity & Category

一個一直沒有去弄清楚的東西

additivity

https://logging.apache.org/log4j/2.0/manual/configuration.html#Additivity

同一個訊息可以在多個 logger 中被輸出到同一個 appender

這樣訊息很明顯是會被輸出多次

additivity = false 就是讓這個 logger 的訊息不要被輸出的意思

properties 版本

log4j.rootLogger=INFO, console

log4j.logger.package.name=INFO, console
log4j.additivity.package.name=false;

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %-5p %c - %m%n


---

Category

http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Category.html

一個被捨棄 (deprecate) 的類別

Category category = Category.getInstance(TargetClass.class);

Logger logger = Logger.getLogger(TargetClass.class)

當初用的時候好像就已經只有看到 Logger 了

Category 這個關鍵字就是偶而會出現在設定檔案裡面,讓人覺得煩躁 XDD

反正就不要再使用囉!!!


2015年8月11日 星期二

[Maven] 基本 plugin

mvn [<goal(s)>] [<phase(s)>]

goal: <plugin>:<goal>

-- goal --
archetype:generate
    http://maven.apache.org/archetype/maven-archetype-plugin/
help:help
 
compiler:compile

    http://maven.apache.org/plugins/maven-compiler-plugin/
war:war

    http://maven.apache.org/plugins/maven-war-plugin/
jar:jar

    http://maven.apache.org/plugins/maven-jar-plugin/
dependency:help

    http://maven.apache.org/plugins/maven-dependency-plugin/
source:help

    http://maven.apache.org/plugins/maven-source-plugin/

checkstyle:checkstyle

    http://maven.apache.org/plugins/maven-checkstyle-plugin/
pmd:pmd

    http://maven.apache.org/plugins/maven-pmd-plugin/

ant:ant

    http://maven.apache.org/plugins/maven-ant-plugin/
antrun:run
    http://maven.apache.org/plugins/maven-antrun-plugin/


tomcat6/7
    http://tomcat.apache.org/maven-plugin-2.2/context-goals.html
cargo (支援多種 container 發布)
    https://codehaus-cargo.github.io/cargo/Home.html

-- phase --
clean
compile
deploy
install
test
package

2015年8月10日 星期一

[bash] 指令速記

查出 process 並用 username 過濾
ps -ef | grep username

透過 awk 篩選出 container id 並且在 docker 中移除
docker ps -a | grep imageName | awk '{print $1}' | xargs docker rm {}


篩選特定的 pid 然後 kill
ps -ef | grep ping | grep -v 'grep' |  awk '{print $2}' | xargs kill

看檔案的尾巴
tail -f

2015年8月9日 星期日

[CLI] zip/unzip, jar command

最近很常在 linux 上作業,特別是操作 weblogic 和裡面的 jar/war 檔案

原來都透過 zip/unzip 來處理檔案

常見的用法是

建立壓縮檔
zip -r zipfile.zip sourceDir

-r recursive (很好記)

解壓縮檔案 (可不加 .zip)
unzip zipfile -d targetDir

-d directory (很好記)


這樣就很方便了,不過使用 jar 可以滿足一些些虛榮心

(補)(原來之前已經寫過了,不過看起來出以前比較不會用指令)

建立壓縮檔
jar cf jarfile -C sourceDir *.class

-C 會從 sourceDir 中尋找檔案再進行建立,可以包括多個 -C

解壓縮檔案
jar xf jarfile

c create
x extract
u update
t table of contents
m manifest file
f file
0 no compress (create only)
v verbose

------

以下是 man 出來的語法