網頁

2020年6月14日 星期日

Python TypeError: 'module' object is not callable

程式碼其實相當簡單
import random
random.random()

那問題出在哪?出在當初的檔名取名為 random.py 結果造成 Python 在 import 的時候造成問題。所以在取名Python 的檔名時,切記不要取成跟 Default Module 一樣的名字!

2018年5月15日 星期二

Regular Expression in Search and Replace in VIM

目標 : 把原本的特訂字串變成大寫

輸入範例 :
#define ChipEndAddr_L 0x0197
#define PAGE0 0x0198

希望得到的輸出 :
#define CHIPENDADDR_L 0x0197
#define PAGE0 0x0198

命令如下
%s/#define\s\+\([a-zA-Z0-9_]\+\)/#define\ \U\1/g

解釋
%s 指要搜尋取代的範圍是整個檔案
搜尋的字串以 #define 起頭
接著\s\+ 代表的是 \s 泛指空白的字元例如 tab, space, \+ 指的是出現至少一次
接著出現 用 \(  以及\) 包裹住的代表之後可以存入變數的字串
被\(  ... \) 包圍住的是 [a-zA-Z0-9_]\+ 也就是a 到 z, A 到 Z, 0 到 9, 還有底線隨便的字元組合

接著用 /  之後是指要替換的字串, #define 加一個空白
接著 \U 代表的是把之前找到的 \( ... \) 包圍的字串改成大寫, 這個字串用 \1 代表
如果之前在尋找的規則中有兩個以上的 \( ... \) 那數字代碼就是遞增 例如 \2
/g 代表的就是不只替代一行

2017年10月19日 星期四

Catch exit code in bash shell script

The key variable is $?

Example code :

#!/bin/bash

./execute_some_script.sh

if (( $? == 0 ))
then
    echo "the script in script was executed successfully."
else
    echo "the script in script was failed !"
fi

Also a tip for comparing variable as numeric is " if (( $var op $another_var_or_number )) "

2017年10月16日 星期一

String index V.S. Array index in Delphi

I'm used to develop code in C, however someday I meet the need which the code was written in Delphi.

The amazing fact in Delphi is the index on array and string differs ! This is really shock, it shocked me almost put hands in my mouth. 嚇得我吃手手...

In Delphi, Strings are 1-indexed, but arrays are 0-indexed.

也就是說如果有一個變數被設為 String 例如說 S:=Foo.Bar().AsString;
如果要存取 S 的第一個字元要使用 S[1] 才會是正確的字元。

If S is assigned as a string variable, the first character would be S[1] not S[0];

2017年10月12日 星期四

如何找出資料庫中的表格還有建立日期?

很簡單,要去 INFORMATION_SCHEMA 撈資料

SELECT create_time FROM INFORMATION_SCHEMA.TABLES
  WHERE table_schema = '資料庫名稱'
  AND table_name = '表格名稱'

以某次應用,每個月都會新增一張表格,而前端網頁會選擇最近期三筆新增的表格,讓使用者做選擇。這時候下的語法就是
SELECT TABLE_NAME,create_time  FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="資料庫" \
ORDER BY create_time DESC;

當然這樣的語法撈出來的是所有的 table 但是做完查詢後,不論是用 perl 還是 PHP 就可以撈出來前三筆資料知道是最近三筆新增的 table。

2017年8月23日 星期三

MySQL : Fetch Table one by one without fixed index

需求 : 從一張 table 逐筆把資料拉出來, 實現 Delphi ADO 的 Table.FieldByName( field ) 加上 Table.next

假如一張 table 有個連續、正常的 index field 沒有中斷,那麼要循序存取資料還算容易使用

SELECT COUNT(*) FROM Table_Name;

先找出所有的資料筆數

SELECT field FROM Table_Name where index=XX

然後使用 index 欄位一筆筆往下抓, 靠外部把 XX 遞增到資料筆數。可是要是 index 已經爛掉了, 不論是有跳號、還是重複號碼, 那就要使用 ORDER 搭配 OFFSET

SELECT field FROM Table_Name ORDER BY index ASC LIMIT 1 OFFSET %d

2017年8月18日 星期五

Delphi : record v.s. "packed" record

簡單結論 record 會依據結構 ( record )中最長的變數做 Alignment ,然而 packed record 不會。結果就是 packed record 佔的記憶體空間可能比 record 來的少。

範例
type
  // Declare an unpacked record
  TDefaultRecord = Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

  // Declare a packed record
  TPackedRecord = packed Record
    name1   : string[4];
    floater : single;
    name2   : char;
    int     : Integer;
  end;

var
  defaultRec : TDefaultRecord;
  packedRec  : TPackedRecord;

begin
  ShowMessage('Default record size = '+IntToStr(SizeOf(defaultRec)));
  ShowMessage('Packed record size = '+IntToStr(SizeOf(packedRec)));
end;

結果
   Default record size = 20
   Packed record size = 14

P.S. I didn't compile this code, I don't know why the size is 20 and 14. But the concept is reasonable.

Python TypeError: 'module' object is not callable

程式碼其實相當簡單 import random random.random() 那問題出在哪?出在當初的檔名取名為 random.py 結果造成 Python 在 import 的時候造成問題。所以在取名Python 的檔名時,切記不要取成跟 Default Module...