natsu 積分 0

但事實上,在 release branch 打 tag 就足夠了。何必需要 master branch? 最後還是可以在 git tag 上面找到所有的 release tag 不是嗎?

master branch 可用來指出最新的正式發行版本。

人為的從 tag 上的版本號來看也可以找得出最新的正式發行版本,但是若 tag 的數量多的話可能就不好找了。

natsu 積分 1

那應該也可以用 reset1 的方式直接把 master 分支設成與 release 分支相同

這樣連全部都刪掉再重加的動作都不用,就可以保證 code 一定是最新的,而且不用顧慮 conflict ...

不過這麼做的前提是要確定 release 分支的檔案一定是最新版 ...

natsu 積分 0

把該 release 分支的所有檔案(除了 .git 資料夾)複製一份出來,切到 master 分支然後把所有檔案(除了 .git 資料夾)都刪除,然後把剛剛複製的檔案搬過來。你沒看錯,我們用直接覆蓋檔案的方式,而不是用 merge 指令,這樣會省掉很多麻煩。

應該不至於需要把所有檔案都刪除吧?Git 不是有 fast-forward1 的功能嗎?

natsu 積分 0

竟然還有天氣同步功能!?真是有創意。

等於已經整合了地圖和天氣兩個 APP,不知下次會再整合什麼 APP?

natsu 積分 0

電商平台一開始讓商家免費使用,待商家習慣後再開始收錢,聰明!

natsu 積分 0 編輯於

這個情境真的很難重現,主要是要讓 thread 夠忙來不及更新資料才會發生 ...

就算只是單純的把 System.out 移到外面來,也會影響執行結果:

public class VolatileTest {
    private static volatile int MY_INT = 0;

    public static void main(String[] args) {
        new ChangeListener().start();
        new ChangeMaker().start();
    }

    static class ChangeListener extends Thread {
        @Override
        public void run() {
            int local_value = MY_INT;
            while ( local_value < 5){
                if( local_value!= MY_INT){
                    //LOGGER.log(Level.INFO,"Got Change for MY_INT : {0}", MY_INT);
                    //System.out.println("Got Change for MY_INT : " + MY_INT);
                    local_value= MY_INT;
                }
                //原本是 local_value != MY_INT 才會印出 Got Change ...
                System.out.println("Got Change for MY_INT : " + MY_INT);
            }
        }
    }

    static class ChangeMaker extends Thread{
        @Override
        public void run() {

            int local_value = MY_INT;
            while (MY_INT <5){
                //LOGGER.log(Level.INFO, "Incrementing MY_INT to {0}", local_value+1);
                System.out.println("Incrementing MY_INT to " + (local_value+1));
                MY_INT = ++local_value;
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) { e.printStackTrace(); }
            }
        }
    }
}
natsu 積分 0

要發感謝函至少要打 300 字 ...

natsu 積分 0 編輯於

針對商務筆電要優先考慮筆電機身的耐用性,I/O 端子的完整性與週邊設備的需求,這樣才能應付商務人士在使用筆電的各種環境需求

真的超耐用,我手上的 ThinkPad T410i 被我操了 7 年了還是頭好壯壯的。

對他來說他很喜歡小紅點的設計,讓他的雙手不用離開鍵盤去使用觸控板,這會中斷他工作的思緒,另外當然也有許多消費者的反饋,因此現在不會有移除小紅點的計畫。

除了小紅點,我個人還喜歡 UltraBay靜音按鈕 的設計。

放入更大容量的電池,來增加筆電整體的續航力

電池容量不足確實是缺點...

ThinkPad 設計團隊還是想要維持既有的鍵盤敲擊回饋感,雖然從 10 年前 2.5mm 的鍵程改為目前的 1.8mm 鍵程設計,但他們還是花了許多心思,去維持鍵盤敲擊的舒適感與回饋感,並能確保筆電的輕薄性

在日本橫濱的 ThinkPad 大和實驗室,也會進行 ThinkPad 系列筆電的品質與耐用度等相關測試

有這麼強的 Design 和 QA 難怪 ThinkPad 會成為筆電中的經典!

但轉換到 Lenovo 主導之後

但轉換到 Lenovo 主導之後... 就對資安方面1沒有信心了...

natsu 積分 1 編輯於

原來如此,所以 Valhalla 要做的事就是把物件裡用到的多個 primitive 放在連續的記憶體空間中,以減少記憶體指標 (reference) 的使用。

以 char[] 來說,JVM 只需要知道開始的位置及陣列 (array)長度 (length),即可存取到陣列 (array) 裡面的任一元素 (element)值 (value), 而不用每個元素 (element) 都去紀錄值(value) 所在的記憶體指標 (reference)

natsu 積分 0

放在 stack, 脫離作用域就釋放

對吼,除了 heap 之外還有 stack 可以放資料到記憶體中 (stack 太少被提到了,差點忘了它的存在...)

但若是宣告在物件裡的 primitive 就會被放到 heap 中了吧?

natsu 積分 0

value type 就不會在 heap,不需要被 GC (跟 primitive 一樣)

請問一下,若不是放在 heap 中,那是放在哪裡?

沒有 GC 的話,value type & primitive 佔用的記憶體會被釋放嗎?

natsu 積分 0 編輯於

原來從這版開始有支援並行運算!

而且有支援 Java 9,不過 Gradle 的網頁是說 Java 7+1 就可以跑 Gradle

natsu 積分 0 編輯於

Reduced memory usage: No additional memory is used to store object metadata, such as flags facilitating synchronization, identity, and garbage collection.

但是這樣的話 value types 要怎麼被 GC 回收?

不過從 jvisualvm1 看起來,通常 java application 比較佔記憶體的大都是 char[], byte[], int[], ...,所以 value types 確實有機會減少記憶體的使用

Primitives do not currently support qualified method calls or field access (i.e. use of the dot operator)

Primitive types 也不能表達 null... 所以還是需要 wrapper class

The Minimal Value Types article goes into great detail on this initial exploratory implementation and although this first cut includes many approximations of the eventual implementation (such as the use of an annotation to denote a value type rather than an express keyword for this purpose), it provides a promising path for the eventual inclusion of value types into Java.

可能需要增加新的 annotation,所以舊的程式沒辦法直接用...

不是已經有 string pool 的概念了嗎?類似的方法套用到 value types 不知可不可行?

natsu 積分 0

現今有不少JavaScript程式庫都提供便於使用的實作,只是HTML5認為,畢竟從1999年發展到現在了,網頁應用程式幾乎都需要這些功能,那麼,就該由瀏覽器本身提供,而非把責任丟給開發者。

Grid 元件也很常用啊 (例如:jqGrid1, Angular UI Grid2),可惜瀏覽器本身沒有支援 ...

如果想要大致瞭解HTML5的功能輪廓,〈HTML 5 教程〉(https://goo.gl/VxpfmV)與〈HTML5 Introduction〉(https://goo.gl/nZ3Z6w)應該就足夠了

Can I use... Support tables for HTML5, CSS3, etc:3 也是個不錯的網站

natsu 積分 0

javadoc.io1:沒想到還有專門放 javadoc 的網站,讚~

可惜我要用的 library3 沒有在 Central Maven Repository2 中,所以沒辦法在 javadoc.io1 上用...

natsu 積分 0

雖是舊文,但有需要的時候還是值得一看。

natsu 積分 0

所以這是個好理由買 Macbook,而不是買 Thinkpad (中國製) 嘍 ...

雖然也不知道 Macbook 是否真的安全 ...

natsu 積分 0 編輯於

雖然標題這樣下,但我覺得其實不只女性,這是社群一個很 general 的可怕矛盾。

  • 如果社群領袖持續參與社群活動,就不可能在專業生涯進展
  • 如果想在發展專業,就不可能密切參與社群活動
  • 沒辦法在社群接觸真正的意見領袖;接觸過的人如果往上爬,你就再也看不到他了

參與社群活動就真的不能在專業生涯上進展嗎?不是應該有加分作用?

這造成很多很弔詭的現象,例如很多在社群貢獻的人會被 underrecognised,像我們的主編 Vinta ㄉㄉ就應該要有更多人認識才對 我這樣會不會太狗腿;因為知名度不夠,沒辦法進入主流視野,就拿不到該有的資源。

這造成很多很弔詭的現象,例如新竹科學園區的 IT 部門,裡面的強者就應該要有更多人認識才對;不過雖然沒什麼知名度,但手上的資源卻很豐富

另一方面社群即使再良心立意再好對成員多有用,即使成員一個一個成長,社群本身仍然會像垃圾接案公司一樣,永遠原地踏步——因為強者練完功就會離開,留下被他們吸進來的 junior。

另一方面竹科有些大公司有所謂的保密協定,強者進去後就只能從社群裡面接收資訊,而不能把資訊回饋給社群,所以社群本身只能靠自己想辦法 ...

搞社群一段時間的可能多少都有這類矛盾吧,像 PyCon Taiwan 最近幾年也是結婚的結婚生小孩的生小孩出國的出國開公司的開公司(對我就是在講你和你和你和你不要懷疑)。當然大家發展得這麼好作為朋友超開心的啊,但是也同時會在想這好像沒辦法成為永續的社群模式,實在令人擔心。這個問題很難看到立即的影響(跟全球暖化有點像),大概也不會有人關注這篇吧,點閱率大概會在本期墊底,不過還是希望有更多人能注意到這個現象,而不是哪天熱浪襲擊歐洲才開始動作。

除非把網路上的討論區、部落格、電子報 ... 等有技術文件的網站都關起來,才會有更多人 (或者是號稱要盡社會責任的公司) 注意社群的重要性吧!

natsu 積分 0 編輯於

舉個例子:

我用 Firefox 2 --> Firefox 3 --> Firefox 4,每次升級好像都有一些不同 ...

後來遇到 Firefox 學 Chrome 一樣刷版本號1,我就感覺不出每次升級的差異了 ...

直到 Firefox 要把 NPAPI2 拿掉 (算功能變更),我才真的發現明顯的變化 ...

所以我覺得刷版本號不是好的作法 ...

natsu 積分 0

呃... 所以是在 Windows 跑 Linux 的 console ...

看到「Windows Subsystem for Linux」還以爲是 ...