星期五。見面

程式 | 學習 | 日記 | 玩樂

    [論文速速讀]系列文章介紹

前言

論文速速讀系列是從今年四月開始,我開始寫一些論文的中文讀書筆記,還記得第一篇是[論文速速讀]ReZero is All You Need: Fast Convergence at Large Depth,之後發現儘管自己已經陸續產出了幾篇文章,可是好像都沒正式的跟大家介紹這系列文章的由來xD

所以這篇文章就是來講講這系列文章到底是什麼,以及我會和會想寫這些文章。

論文速速讀系列是什麼?

由於在AI領域每年總是有一些非常重大的突破和應用,如果跟不上潮流很有可能就會錯失許多機會。例如,對NLP領域熟悉的話你一定聽過2013年的word2vec、2014年開始流行的attention、2018年的Bert…這些很有名的技術。

還記得Bert剛出的時候我好像剛進碩士實驗室,當時只知道這個技術屌打了當時一堆NLP的研究,但我想也想不到兩年後Bert已經造成如此大的影響力,一堆基於Bert的變形應用在各大領域上都取得了非常優異的結果。

因此,我想要藉由這系列的文章讓自己能夠更加快速的了解AI的新技術和研究,同時逼迫自己看論文xD

繼續閱讀

    [課程筆記]課程筆記系列總覽

本文記錄了自己在上課時所記錄的一些課程筆記,可以透過這邊文章連結到所有以往發過的課程筆記文章。

繼續閱讀

[課程筆記]Linux Driver正點原子課程筆記5 - 新字元設備驅動實驗

〖想觀看更多課程筆記,至[課程筆記]課程筆記系列總覽可以看到目前已發布的所有文章!〗

Course 5 - 新字元設備驅動實驗

新字元設備驅動原理

在之前的課程中了解到了怎麼註冊一個chrdev,但之前使用的api是舊版的存在著一些問題,例如register_chrdev()這個function

  1. 會佔用主設備號下的所有次設備號,浪費了很多次設備號
  2. 必須手動指定主設備號,也就是說你得先手動查詢哪個主設備號還沒被佔用,然後再去指定

所以這節課程會使用新的api來撰寫字元驅動,新版的api有兩種方式:

  • alloc_chrdev_region(): 向linux kernel申請設備號
    • 給定次設備號和名字,告訴linux要申請幾個設備號,讓linux直接幫你尋找主設備號
  • register_chrdev_region(): 給定主設備號去向linux申請
    • 給定次設備號為0的devid,讓linux自己去找該主設備下可使用的次設備號
0
1
2
3
/* fs/char_dev.c */
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,
const char *name);
int register_chrdev_region(dev_t from, unsigned count, const char *name);

不論是哪種申請方式,釋放時都是call unregister_chrdev_region()

繼續閱讀

[讀書心得]跟著柴鼠學FQ 做自己的提款機

書籍資訊

(本文是【跟著柴鼠學FQ 做自己的提款機】的讀書心得和書籍導讀,如果你看完覺得這本書對你是有幫助的,歡迎購買原作支持作者!)

你可以把這本書當成是你重獲自由的「投資工具使用說明書」,FQ就像提款機的零件,只有親手組裝自己的提款機,才能成為你收入階層的跳板,讓資產向上提升──
.低薪族,靠理財加薪
.月光族,存到第一桶金
.小資族,變優渥

本書你將學到:
.從0到1最難,喚醒投資理財為什麼重要(讓理財變積極)
.把財經術語化繁為簡,讓你成為理財國國民(看懂財經新聞、財報,不再被騙)
.投資前,先理財(記帳不再半途而廢,成為好習慣)
.破解理財迷思,不再讓錢縮水(抓出理財工具的缺陷BUG,防止隱性虧錢)
.建構被動收入的機器(懂得各種被動收入的工具、概念)
.比賺錢更困難的事(風險控管,不讓投資成果一夕烏有)

繼續閱讀

令人搖頭的羅技產品品質? G413鍵盤出保紀錄(2021年)

這篇文是講述自己對於羅技產品的親身體驗以及產品故障出保過程。

G413機械鍵盤使用體驗

羅技產品在市場上一直深受電競玩家的喜愛,想當初第一次接觸羅技產品是在研究所的時候。

當初在參加清交大合辦的”梅竹黑客松”的時候,羅技作為出題者也有參與,並且給予參加羅技組的參賽者”競賽時間內可免費體驗羅技系列產品”的福利,也因此當時在參加競賽的時候體驗到了羅技的鍵盤、滑鼠、攝影機,當初使用的鍵盤印象中就是G413

G413是羅技的機械式鍵盤,採用羅技的Romer-G鍵軸

Romer-G™ 觸感機械軸具有 1.5 公釐的短距觸發行程,這表示速度—11.5 公釐相對於標準機械軸的 2.0 公釐觸發行程。比競爭對手的標準機械軸速度快 25%。完美結合了高速、精確與安靜效能,Romer-G 觸感軸在保持清晰觸發的同時也提供可信任的觸發時機。

(以上介紹擷取自羅技官網)

繼續閱讀

[讀書心得]35歲,為什麼還沒被重用?

書籍資訊

  • 書名: 35歲,為什麼還沒被重用
  • 作者: 薛明玲口述、賴燕芳 採訪撰文
  • 出版日期: Jan 12, 2014
  • 金石堂網址: 35歲,為什麼還沒被重用

(本文是【35歲,為什麼還沒被重用】的讀書心得)

是什麼關鍵,讓鴻海、台達電、統一、旺旺成為簽證客戶?
是什麼原因,讓近百位合夥人願意提早將退休金全部結算?
一本值得反覆咀嚼的好書,告訴你如何創造自己價值、如何找出成功方法,如何走出數字迷思。

薛明玲,曾任全球四大會計師事務所之一的「資誠聯合會計師事務所」所長,也是台灣第一個和企業老闆並坐股東會的會計師。事實上,自稱「老薛」的他,是一個沒有顯赫家世、求學不順利、在台中鄉下長大的孩子。

「把每一件經過手邊的事情做到最好」,是薛明玲馳騁職場的成功心法。他曾主動將整套稅務法規整理出兩頁的「實用密笈」送給客戶,迅速建立起專業知名 度。在股東會現場,他會準備多張試算表,提供企業主隨機應變……他發現,成功企業家最在意的,不僅是財報數字正不正確,更強調邏輯思維!

他說,35歲是人生的分水嶺,心態也轉趨成熟,這時若有成功者指引方向、提供經驗,就能少走冤枉路。因此,薛明玲提供自己30多年的「職場金三角」工 作學,也分享他與鄭崇華、郭台銘、杜英宗、戴勝益等企業家領袖,深度接觸的心得,給你再出發的勇氣,縱使35歲之後,機會依舊等著你。

繼續閱讀

[課程筆記]Linux Driver正點原子課程筆記4 - Led燈驅動實驗

〖想觀看更多課程筆記,至[課程筆記]課程筆記系列總覽可以看到目前已發布的所有文章!〗

Course 4 - Led燈驅動實驗

嘗試透過driver去操作led register來達到led開關的實驗。

地址映射

Linux下無法直接對physical address做讀寫操作,因為linux會enable MMU(Memory Manage Unit),MMU的功能為

  1. virtual address (VA) <-> physical address (PA)的mapping
  2. 內存保護、register的訪問權限

對於32 bit的processor來說,virtual address的range是2^32=4GB。假設開發版有512MB的physical address,則MMU可以將512MB映射到4GB的虛擬空間。

  • 但PA有512MB,VA有4GB,要如何mapping? 這邊先不討論,有興趣的可以去看MMU的詳細介紹

繼續閱讀

[課程筆記]Linux Driver正點原子課程筆記3 - 我的第一個Linux驅動

〖想觀看更多課程筆記,至[課程筆記]課程筆記系列總覽可以看到目前已發布的所有文章!〗

Course 3 - 我的第一個Linux驅動

字符設備驅動框架

上次有說到字符驅動提供給外部的api都被定義在file_operations structs內,這個結構被定義在/include/linux/fs.h下

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* /include/linux/fs.h */
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
int (*iterate) (struct file *, struct dir_context *);
int (*iterate_shared) (struct file *, struct dir_context *);
__poll_t (*poll) (struct file *, struct poll_table_struct *);
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
unsigned long mmap_supported_flags;
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *, fl_owner_t id);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, loff_t, loff_t, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
int (*check_flags)(int);
int (*flock) (struct file *, int, struct file_lock *);
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
int (*setlease)(struct file *, long, struct file_lock **, void **);
long (*fallocate)(struct file *file, int mode, loff_t offset,
loff_t len);
void (*show_fdinfo)(struct seq_file *m, struct file *f);
#ifndef CONFIG_MMU
unsigned (*mmap_capabilities)(struct file *);
#endif
ssize_t (*copy_file_range)(struct file *, loff_t, struct file *,
loff_t, size_t, unsigned int);
int (*clone_file_range)(struct file *, loff_t, struct file *, loff_t,
u64);
int (*dedupe_file_range)(struct file *, loff_t, struct file *, loff_t,
u64);
int (*fadvise)(struct file *, loff_t, loff_t, int);
} __randomize_layout;

簡單介紹一下這個struct內的member:

  • owner: 擁有該結構的module pointer,一般設置為THIS_MODULE
  • llseek(): 用於修改當前文件的讀寫位置
  • open(): 打開文件
  • read() & write():用來存取文件
  • poll(): 用來輪詢device是否可以進行non-blocking的讀寫
  • unlocked_ioctl() & compat_ioctl(): 提供對設備控制的街口
  • mmap(): 將device memory mapping到process memory,如此就不用做繁瑣的memory copy

function pointer不用全部實現,會用到哪個就實作哪個就好。

繼續閱讀

>