Deadlock!

private boolean insertRecordOnMultipleTables() {
      Connection conn = getConnection();
      conn.setAutoCommit(false);
      PreparedStatement ps = conn.prepareStatement("insert into person values ('Ada', 36)");
      ps.executeUpdate();
      int totalRecords = selectRecord();
      conn.commit();
      conn.setAutoCommit(true);
      ps.close();
      conn.close();
      return totalRecords > 0;
}

private int selectRecord() {
      int result = 0;
      Connection conn = getConnection();
      PreparedStatement ps = conn.prepareStatement("select count(1) from person");
      ResultSet rs = ps.executeQuery();
      if (rs.next()) {
            result = rs.getInt(1);
      }
      rs.close();
      ps.close();
      conn.close();
      return result;
}

See where the problem is?

浮點運算(IEEE 754)

今天又碰到這個問題(是人家的錯),寫下來跟大家分享一下。

double d1 = 0.6L;
String s1 = “0.6”;
BigDecimal bd1 = new BigDecimal(d1);
BigDecimal bd2 = new BigDecimal(s1);
System.out.println(bd1);
System.out.println(bd2);

其實基本上不只 Java,使用浮點運算的平台都會有這個問題。主因是二進位數字系統並不能完全表示十進位數字(大約值等於 0.5999…. 吧),要精準度高就不能用 double 而使用其他特別類別或函式庫,如 BigDecimal(如以上程式碼所示)或 GMP (C/C++)。

但以上的程式碼一早就轉成了 double,所以結果一樣會未如預期。

當你手上有鎚子…

西方有句俗語:只要手上有鐵鎚,甚麼也會看成釘子。這句很久以前就讀過了,但還是不明所以。後來長大了,見識多了,人面廣了,才發現原來自己曾經拿鎚子敲過人,也曾經被人拿鎚子追打過。

大家有沒有接觸過一件新事物,學會一套新知識,領略一種新方法,便開始在生活上積極應用,然後繼而廣之成為你生活圈子裏的推廣員,向身邊的人逢人說項?總會試過的,即使你那麼討厭以推銷為生,卻不知不覺當了推銷員。最好是大家都跟你走,然後讓世界變成烏托邦…之類的幻想,總會有的。有好方法要用當然好,但解決問題得要對症下藥,鎚子不是萬能的。同理,別人碰釘拿鎚子敲敲他,讓他腦筋清醒一點當然好;但怕他討厭被人追著敲,更怕一敲把他敲暈,況且人家用鏍絲起子用得好好的,要他用鎚子反而誤他大事。

以前 PHP 曾經是我的鎚子,直至看見有人想用這把鎚打一個 POS 出來,我才肯放手;Java 也是我的鎚子,今天我還會用(營生,沒辦法),但必要時我還是會把它收好,拿更適用的工具;C 與 C++ 也是兩把好鎚,不過我不會用,經常砸到腳,我就把它們放下了。

2038 電腦蟲子

斜點報道,還有三日便會進入UNIX Epoch + 231秒 前 30 年的倒數階段。某些較舊的系統或軟件如果以 signed int32 (帶負32位元整數)作為 UNIX 時間的儲存變數的話,便有可能出現整數滿溢錯誤,時光倒流 136 年回到 1902 (或因不能理解負秒數直接當機)。有人指這問題比2000年的千年蟲更為難搞,因為千年蟲只是文字格式可能會出現錯誤,Y2K38 則由於儲存變數限制,會涉及真正計算之中。有人擔心一些三十年期的按揭計算會首先出現問題。

不算大小月閏年,我們還有時間

幸好較新系統均採用 int64,例如 Java,暫時不會有問題。

王八四十

[via /.]最近本來是打算寫一篇最初接觸電腦的經歷,無獨有偶這個第一次接觸在今年變得特別有紀念性:這個教了我編程的王八–不,是小海龜 Logo 四十大壽。

相信碰過初中電腦課程的同學一定有跟過這隻王八打交道。大家痛苦對著黑漆漆的螢幕鍵入指令,好像 fd 40,rt 90,pu,ht,叫那隻烏龜留下白色的足印。我以前最喜歡跑 repeat,在裏面隨面打進指令,再看看小海龜會畫出甚麼漂亮的圖案。

如果大家想在緬懷一下這種古老而有趣的學編程方法,大家可以到 Logo Foundation 的網站看看不同小海龜的繪圖程式。

再說,即使你不懂編程,這隻小海龜也挺好玩的。

各編程語言優劣孰否?

文章
我要加句:各語言有長處有短處,識用的話寫乜都勁,同埋要睇番場合用邊一種語言囉…

唔知之前睇邊度 D 小朋友講過,話 C/C++ 有 pointer ,可以寫 link list,其他廢,寫唔到。

唔知之前聽人地講過,C 冇乜 function 用,好廢。

好似以前自己都諗過,PHP 又多 function,又多 syntax,真係好勁。

呢家諗番起,好好笑。