2019年11月16日 星期六

[C] 查看目前程式的記憶體用量 @ macOS 10.15

記得碩士生活很常被記憶體追殺,那時都是靠 unix tools 或是 /proc/ 查看指定的記憶體,都忘了其實是靠 process 自己去查詢資料,這次工作要協助 debug 抓資訊,就把它完成了:

#include <stdio.h>
#include <stdlib.h>

// Memory Usage
#include <sys/types.h>
#include <sys/sysctl.h>

void simple_wait() {
size_t wait_buf_size = 32;
char *wait_buf;
wait_buf = (char *)malloc(wait_buf_size * sizeof(char));
getline(&wait_buf, &wait_buf_size, stdin);
free(wait_buf);
}

void show_memory_usage() {
struct rusage usage;
printf("\n-- Memory Usage -- Begin --\n");

if(0 == getrusage(RUSAGE_SELF, &usage)) {
printf("\tBytes:\t%ld\n", usage.ru_maxrss);
printf("\t= \t%.3f KB\n", usage.ru_maxrss / 1024.0);
printf("\t= \t%.3f MB\n", usage.ru_maxrss / 1024.0 / 1024.0);
} else {
printf("\tREAD ERROR\n");
}

printf("-- End -- Memory Usage --\n");
}

int main(int argc, char *argv[]) {

show_memory_usage();
printf("press enter to continue\n");
simple_wait();

return 0;
}


用法:

$ gcc t.c
$ ./a.out

-- Memory Usage -- Begin --
Bytes: 671744
= 656.000 KB
= 0.641 MB
-- End -- Memory Usage --
press enter to continue


只是在 man page: https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/getrusage.2.html 的描述:

ru_maxrss    the maximum resident set size utilized (in kilobytes).

但看數據總覺得是 bytes 啊 XD 先記錄起來,有空再追蹤

2019年10月18日 星期五

零產出的時代

黑白拍

囧...最近沒什麼產出,開始感受到時間/年紀的殘忍。有些點子想執行,偏偏熱情很快燃燒殆盡,不太能像以前一個月、三個月就衝出點東西。也有可能年紀變大後,面對襲來的現實不能持續裝傻。

今年還剩最後一季,該想想如何像以前那樣,持續的累積東西,就算再慢,也可以靠版本控制快速回顧、接續開發。

2019年10月7日 星期一

喝杯茶,聊聊天

西門町聚餐

又好一陣子沒聚餐了,甚至忘了上次聚餐到一半接到電話就趕去外婆家。大概三年沒來這間,這次順應著研究所同學休假回國,幾個人聚了起來,湊合湊合成了個圓桌。

差不多到了那個年紀,彼此不會羨慕彼此的生活,有的有家庭,有的有事業,有的有愛情,有的有等待,不約而同地都有著數不完的故事。東說一下,西指一下。說聊得起勁卻還是有些生疏,說聊得太淡然,卻有能鏗鏘有力的道述著不是。

這肯定是中年大叔的聚餐吧?說話點到為止,不會分享得太多,卻一被問起就一整個像粽子被拉起來。別有一番風味。

2019年9月26日 星期四

[開箱] 眾籌 - Hidden 2 隱形筆電架

Hidden 2 隱形筆電架

被學長推坑,晃了兩個禮拜才去下單買了兩組輕薄筆電架。沒想到今年下半年起,終於開始在眾籌網站在購物了 XD 其實眾籌網站已經不是眾籌,而是行銷用途,所有的新品幾乎都靠眾籌在推銷。這款大概是...今年花最少錢的眾籌案子,還有兩個稍貴的還沒發貨。

之前看非 coding 的同事用個高高的筆電架,總覺得要打字不會因為高度而很難打很快嗎?這次換我來體驗一下,究竟長久用下去到底有什麼變化。

2019年9月20日 星期五

jq 指令筆記 - 整理 JSON 資料,使用 select / index 過濾關鍵字

用 jq 去整理 api/json 的資料的。整個需求是:

  • API 回傳的 JSON 資料中,是一個 array 形式,裡頭的元素是 key-value pair
  • 透過 jq 把符合我需要的 資料列出
  • 檢查在某些條件上,有哪些東西,最後回歸到 comm 的工具幫忙導出結果進行比較

筆記一下 jq 項目:

$ cat /tmp/api.json | jq '.["data"]'
[
  {
    "field": "hello"
  },
  {
    "field": "world"
  }
]
$ cat /tmp/api.json | jq '.["data"] | .[] '
{
  "field": "hello"
}
{
  "field": "world"
}
$ cat /tmp/api.json | jq '.["data"] | .[] | select (.field | index("e") > 0) '
{
  "field": "hello"
}
$ cat /tmp/api.json | jq '.["data"] | .[] | select (.field | index("e") > 0) | .field '
"hello"


如此,可以結果導入檔案,如果需要比較檔案內的差異,就可以用 comm 指令來做事