夏末廢話數則

早就想寫的各種傷風敗俗破壞台灣社會傳統價值觀的垃圾廢話趁夏日尾端一口氣解決。

裸體與髒話與同性戀

前陣子妹子做的 BJD參加某聯展,沒想到:

  1. 跟展出藝廊繳展出費後,藝廊才說「展出不得露點」,露點的話將會用紙膠帶遮住。以及擺飾有任何問題,將以備品展出(要怎麼解讀就他們決定就對了)
  2. 大家的作品照拿去「台灣最大的印刷廠」印明信片時,對方拒絕印,原因是照片中有露點
「台灣人,民智未開,已知用火。」
- 印度歷史學家 Vankrishman Khodrasekhar (1928 - 2011)

Read More

[PyQt] How To Internationalization (i18n)?

Step by step, it’s time to skip a lot of boring explainations and just start with examples quickly:

self.tr()

Use self.tr() to surround all strings needed to be translated in Python code. (Must be in a QWidget class). For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super().__init__()
label = QtGui.QLabel(self.tr("Apple"))
self.setCentralWidget(label)

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)

main_window = MainWindow(app)
main_window.show()

app.exec_()

Read More

Python 變數命名

Python 是我學的第一個 OOP 語言,雖說號稱 Python 很好讀,但我發現變數命名在 OOP 語言裡很重要(除了 function,還有 class 和 instance),很多變數命名得很隨便的 code 還是會讓人讀得很痛苦。

寫了一陣子 Python 後,我最後是用這種命名方法:

  • 只有 class 可以且一律用開頭大寫的 CamelCase,例如HelpWindow, MainWindow
  • method/attribution/function/argument 一律開頭小寫 camelCase,如reloadFiles, applyAndWriteConfigFile.
  • instance 一律小寫加底線,例如button_box, main_window,就算只是創建完就丟的 instance(例如 Qt 的layoutpush_button)也應該要給它有意義的變數。絕對不要偷懶用縮寫寫成像是 m = QtGui.QMainWindow() ,這樣鬼知道那個 m 到底是 QMainWindow 還是 list 的 model? 我真的不懂又不是古早年代變數長度有限制,省那幾個字讓 code 更難讀到底是想做什麼…(超常見到這種鬼東西)
  • 唯一允許變數用縮寫的地方是 iterator,或只有單行的敘述如 lambda function,例如for i in range(5): ....。不過我還是常常不縮寫,因為這樣可以讓 code 讀起來更像有意義的英文,比較好懂。

這樣命名很簡單,且一看到 variable 就可以知道這些分別屬於什麼東西。至少目前我發現這樣命名還不錯,讀起來很容易。

不知還有什麼我還不知道的語言特性需要用到變數,有的話會再補上。