IngramChen 積分 0

java 現在會怕就好, 之前一直裝死連這種最基本的都不加

不過加了也太晚了, 就算java現在半年發一版, 但 android 通常要一二年以上才會跟上. 等於一半的人還是沒得用

koji 積分 0 編輯於

ohhhhhhhhhh 一直都有人在提的終於...

fox 積分 1

java 終於要像 c++ 那樣變成撒尿牛丸了

koji 積分 2

VIM for the win!!

我還以為 Java 老人比較愛,結果是年輕人!?

IngramChen 積分 1 編輯於

w3c 雖然有定義它們個別的意義,但語義實在是太像了,而且 b/strong , i/em render 出來都一樣,所以我覺得混用沒什麼差。

會去區分 b/strong 兩者不同的只有爬蟲,可是爬蟲應該早就可以處理 b/strong 混用的狀況了吧。

natsu 積分 0

如果只是要設定文字樣式應該是用 CSS 或 <u> <b> <i>

其他的 tag 都有特別用途,雖然在瀏覽器上顯示的都一樣 ...

  • <del> vs <s>
  • <ins> vs <u>
  • <strong> vs <b>
  • <em> vs <i>
haocheng 積分 1

大版號應該是三個: 2017.1/2017.2/2017.3

後來調整成不續訂還是可以用舊版之後大多數人都能接受啦,因為那樣就跟之前的機制差不多了

如果每天都要花好幾個小時開發 Java 的話,我覺得就算自己花錢買都划算,畢竟可以省下很多時間

IngramChen 積分 1

2017 好像總共出了 10 版? 大概是一個月更新一次的樣子。之前 Intellij 改成訂閱制大家鬧翻了,不過實際上更新的頻率很高 (高到我都開始嫌煩了),算一算訂閱制也沒多虧。

Kotlin 的更新就完全和 IDEA 脫勾了,因為 Android Studio 和一些舊版的 IDEA 都能用最新的 plugin。

IngramChen 積分 0

我猜最後 Java 大概會有一半 Kotlin 的功能吧。不過 extension method 沒學到終究還是差一大截

popcorny 積分 1 編輯於

最新的版本應該都從最新的 release branch 來。而且git tag | grep release | sort 就很快找到最新版號了

natsu 積分 0

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

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

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

IngramChen 積分 4 編輯於

a long story...

Java 現況:

 //Java10
 var rect = new Rectangle();
 rect.setX(12);
 rect.setY(10);
 rect.setWidth(300);

如果照這個 tweet 的說法,那就可以這樣寫:

 //Java++
 var rect = new Rectangle()
               .setX(12)
               .setY(10)
               .setWidth(300);

看起來好像挺不賴的?不過這有個很大的缺點: 讀程式碼的人會誤以為 .setFoo() 有回傳自己,而不是 void。Java 就是因為沒有這種潛規則所以才好讀好維護的,我個人是不願意見到這種魔改。

取而代之,應該可以借用 Dartcascade operator1

 //Dart code
 var rect = new Rectangle()
               ..setX(12)
               ..setY(10)
               ..setWidth(300);

變成 .. 就代表該 statement 會回傳自己。這在 Dart 上已經用了超過五年了,沒看到什麼負評。然後也因為有這個 operator,在 Dart 裡沒有人寫 builder pattern。大家在設計 API 時,都會認為開發者會應用 cascade operator。

如果未來 Java 不是靠新的 operator,而是靠加了 compiler 潛規則回傳 this,那還真是慘,到時就只能靠 IDE 上色幫忙了 (void 當 this 回傳時,前面那個 . 變成又紅又大 這樣)

那 Kotlin 呢?Kotlin 裡是這樣玩的:

 //Kotlin
 val rect = Rectangle().apply {
   x = 12
   y = 10
   width = 300
 }

hmm... Kotlin 裡好像多了幾個字,和一個大括號,感覺起來很囉嗦?

非也,我個人最愛 Kotlin 的設計,那個 .apply() 可不是語言的語法,那只是個 library,它靠著 Kotlin 語言內建的 extension method 和 inline lambda 兩個功能就兜出來了,不用玩花樣魔改。如果 receiver 是 null,整個 block 還可以跳過:

 //Kotlin
 fun updateDimension(rect:Rectangle?) {
   rect?.apply {
     x = 12
     y = 10
     width = 300
   }
 }

加個 ?. 就可以安全避開 null pointer exception。

Kotlin 最棒的就是語言提供很簡單,但是又強大的功能,讓更進階的 語法 都可以靠 library 實現,so powerful, so elagant!

popcorny 積分 1

感覺這篇文章的 master branch 可以不用耶,雖然他這麼說

master 上的每個 commit 都是正式發行的版本,所以每個 commit 都會打上一個 tag,例如 v1.2.3 或是 v1.2.3-客戶A ,我們把 master 分支當作版本倉庫,需要哪個版本就去 master 或是 tag 找。

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

natsu 積分 1

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

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

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

IngramChen 積分 1

很基礎,不過他講的很有趣,哈哈

chchwy 積分 0

我猜這應該是怕merge過程出錯,不是想用 fast-forward。

如果全部都刪掉再重加,就保證 code 一定是最新的,不用顧慮conflict。反正他們團隊從來不在 master 上開發,所以只有其他分支單向合進 master

natsu 積分 0

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

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

IngramChen 積分 0

不過這人的背景是 haskell, erlang

IngramChen 積分 0

我服了

不過大家還是會開,因為流量太貴了

IngramChen 積分 0

也太慘了,該不會沒聽過 linux 吧

Kros 積分 0

我去年跟客戶開會,客戶也沒聽過呢~

IngramChen 積分 0 編輯於

去翻一下自己的 blog,最早是 PostgreSQL Lob筆記1 這篇。2007 年那時我就把單位的 Oracle 給換成 Postgres 啦。

那時最好笑的是別人問我我用什麼 DB,我回 Postgres,然後那人說沒聽過...