2015年12月30日 星期三

軟體架構有用嗎?

寫程式需要先來個架構嗎?
之前的案子沒寫軟體架構,還不是照樣做?

初接觸軟體架構的開發者,
常常會有類似的疑問。
通常我們會聽到「浪費時間」、「沒必要」等答案。

可是仔細想想,不只是軟體,
人類處理複雜事物,
都習慣於拆分成小區塊來處理。
軟體架構做的也就是這件事,
做法上完全符合人類處理事情的基本概念。

從實作的觀點來看,
一個軟體系統開發者通常不只一位,
要區分每個人的責任區,
就需要先拆解系統嗎。
如果不先拆解系統,那要如何分配每個人的任務呢?
同時軟體架構圖也是系統的整體面貌,
架構出來的幾張圖應該能表現出整個軟體的功能與目標。
否則的話,這個架構圖表達的就不夠完整。
團隊的所有成員都應當要能從這張圖看出共同的目標。

2015年12月18日 星期五

Running jar with multiple libraries

(A) Using Eclipse to export jar with Manifest file

1 Save new manifest in Export jar's JAR Manifest Specification page

2 Edit saved manifest file
    add  Class-Path:  lib/a.jar lib/b.jar lib/c.jar ... one parameters for single jar

(B) Using .sh file

1 Add -Djava.ext.dirs option

java -Djava.ext.dirs=libfolder -jar test.jar

Return different value from one function

public enum ReturnDifferent {

IntegerType,DoubleType,StringType;

  @SuppressWarnings("unchecked")
    public T comeback(String value) {
        switch (this) {
            case IntegerType:
                return (T) Integer.valueOf(value);
            case DoubleType:
                return (T) Double.valueOf(value);
            default:
                return null;
        }
    }
}

Unit Test:
public class ReturnDifferentTest {
@Test
public void testReturnDiff()
{
  Assert.assertTrue(ReturnDifferent.IntegerType.comeback("1") instanceof Integer);
    Assert.assertTrue(ReturnDifferent.DoubleType.comeback("1") instanceof Double);
}
}

Java thread number

JVM 相關參數 -Xms, -Xmx, -Xss
Linux 系統相關

/proc/sys/kernel/pid_max,
/proc/sys/kernel/thread-max,
max_user_process(ulimit -u),
/proc/sys/vm/max_map_count。