Thursday, July 13, 2017

C/C++中避免unused variable造成報錯的方法(void cast of argc/argv)


一些Signal handler或是Thread(CMSIS-RTOS)的建立會要求你的的函數強制吃一些argument。

當你的compiler開 -Werror -Wall -Wunused-variable選項時,這些未被使用的變數會報錯。

這時有兩個解法。

1.void cast

例如:

void f(void * argc)
{
         (void) argc;
}

這會無害的去用到這個變數。


2.自己等於自己

例如:

void f(void * argc)
{
         argc = argc;
}

這兩招就是欺騙compiler這些變數已經被使用。

我第一次看到這寫法真的嚇到了。

以下是stackoverflow的討論。
https://stackoverflow.com/questions/21045615/what-does-voidvar-actually-do
https://stackoverflow.com/questions/8052091/void-cast-of-argc-and-argv?rq=1

Sunday, July 9, 2017

A Narrative History of BSD 心得

A Narrative History of BSD

這篇文為我修課時做的心得,由於原文是用hackmd寫的,在這裡版型會有差異(原文)
  • 什麼是BSD
    • 全名:Berkeley Software Distribution(柏克萊軟體套件)
    • 類型:作業系統(UNIX-like)
    • 創立者;Bill Joy
    • 程式語言:C
    • license:BSD license
    • 描述:常用於工作站與伺服器
    • 下圖為UNIX譜系
  • 全片大綱
    以下是以影片中Dr. Kirk McKusick的解說分段。
    • Bill Joy Era
      • 在柏克萊大學建立
      • Bill Joy時期(1BSD,2BSD)納入的軟體套件:EX(vi),pascal interpreter,C Shell
    • TCP create
      • BSD 4以後的TCP/IP建立
      • BNN與柏克萊團隊的衝突
    • lawsuit of license
      • 與AT&T的著作權問題
  • BSD歷史與<A Narrative History of BSD>提及的對照
    以下是BSD的歷史與影片中的內容相互參照。
    • 1BSD
      • 釋出:1978年
      • 由Bill Joy創立,從早期貝爾實驗室的UNIX改寫而來
        原本是Bill Joy對AT&T的UNIX進行修改,雙方彼此間是合作關係,後來Bill Joy版本與AT&T差異加大,Bill Joy因此打包釋出1BSD
      • 加入ex(vi前身)、Pascal等
      • 執行環境:PDP-11
    • 2BSD
      • 釋出:1979年
      • 主要仍由Bill Joy開發(後期版本,如:2.9、2.10、2.11等多由別人改寫)
        這些後期版本的釋出時間比3BSD來得晚多是針對在PDP-11下的BSD進行維護與修改,甚至在2.9BSD納入了一些4.1cBSD的code。
      • 加入vi、C shell、Network package(Berknet、區網服務)
      • 執行環境:PDP-11
    • 3BSD
      • 釋出:1979年
      • 柏克萊團隊合作撰寫
      • 主要是將BSD port到VAX
      • 這版的BSD開始受到DARPA(美國國防高等研究計劃署)的重視,要求柏克萊成立CSRG(Computer Systems Research Group)來維護BSD。
        • DARPA開始注重BSD的原因是因為當時美國國防部底下的協力廠商使用太多種程式語言與環境,造成統合困難,所以選用BSD。
        • BSD當時效能超越AT&T發行的UNIX,不過因為BSD內含AT&T的程式碼,所以在當時很多購買AT&T license然後使用BSD。
        • VAX + VMS(IBM建立的作業系統)與VAX+BSD的競爭
          VMS的效能測試(micro benchmark)原本都比BSD好(pipe、取得PID、ping等),後來Bill Joy等人修改至相同(4.1BSD)。另外由於BSD的可移值性比較好所以獲得DARPA青睞。
    • 4BSD
      • 釋出:1980年
      • 特色:Job Control、deliver mail、PRAM’list(待查明)、Curses library(ncurese前身,terminal的控制函式庫)、Signal
      • 開始受到DARPA注資
      • 執行環境:VAX
    • 4.1BSD
      • 釋出:1981年
      • 效能改善
      • 4.1a BSD:
        當時DARPA請BNN(Bolt, Beranek and Newman ,BBN Technologies前身)與柏克萊團隊來實做TCP/IP協定,柏克萊負責介面(socket、connect等),BBN負責底層實做。由於Bill Joy進度超前,所以他向BBN的此專案領導Rob Gurvitz要了些雛型程式,並做了Rlogin與RCP在VAX 750上測試,多次測驗後達到該測試環境的上限表現。而這些進度後來納入了4.1a BSD中。
      • 4.1b BSD:
        • 後來Samuel J Lefflerr加入CSRG,並改寫TCP/IP介面,使得4.1b BSD可以開始支援多個連線。(主要修改為,當建立連線後會回傳一個新的socket,而不是同一個socket重複使用)。
        • 另外影片講者Marshall Kirk McKusick也協助開發新的檔案系統Berkeley Fast File System。
      • 4.1c BSD:修改完Signal後,成為4.1中散布最廣版本。
    • 4.2BSD
      • 釋出:1983年
      • Bill Joy離開建立Sun公司,Mike Kareks加入
      • 納入更完整的TCP/IP程式,造成柏克萊團隊與BBN的紛爭
        由於BBN的程式未被納入,影響其聲譽,所以釋出可自行編譯版本的TCP/IP程式,造成是市面上有兩種TCP/IP程式實做的BSD,最後在效能評估上由柏克萊團隊勝出,所以4.3使用柏克萊的TCP/IP。
    • 4.3BSD
      • 釋出:1986年
      • 實做OSI分層、對虛擬記憶體系統改善
      • 用BSD license發行不含AT&T license的BSD,也就是NET/1(Networking Release 1)。
        趣事:柏克萊釋出NET/1有兩個管道,一是用1000美元購買實體版,二是透過網路下載,結果由超過千人付錢購買。
    • NET/2
      • 釋出:1991年
      • 柏克萊認為他們的BSD已經與AT&T的UNIX原始碼完全不同,所以以低價開始釋出NET/2,但也因此激怒AT&T,造成了BSDi與AT&T得訴訟。
        最後雙方和解,柏克萊針對有問題原始碼做修正
    • 4.4BSD
      • 釋出:1994年
      • 訴訟結束後的clean code與一些修正所作的釋出。
    • other distribution
      • freeBSD,NetBSD等社群版本。
  • 名詞解釋與補充
    • ZFS lawsuit
      • 時間:2007年
      • 雙方:NetApp , Sun(Oracle)
      • 內容:NetApp控告Sun開發的自由軟體ZFS(常用於freeBSD、BSD上,擁有snapshot功能的檔案系統)侵權,Sun後來也反訴回去。
      • 結果:和解收場
      • 其他:Sun贏得訴訟後,將ZFS技術帶到linux,變成Btrfs。
    • Sun lawsuit
      • 影片中Dr. Kirk McKusick提到其為Sun lawsuit專家,指的可能為Sun在JVM上的訴訟。
      • JVM lawsuit:
        • Sun vs Microsoft
        • 爭端源於MSJVM(微軟開發的JVM)
        • 結果為和解,但Microsoft結束MSJVM開發
  • 心得
    • 這影片的資訊量有點大,因為Dr. Kirk McKusick他把三小時課程壓到50分鐘內說完,而且幾乎完整敘述了BSD的歷史,還有在這歷史中衍生的TCP/IP開發事件與BSDi和AT&T的法律訴訟。從這個BSD的歷史,可以了解BSDi與AT&T訴訟的源頭。而從UNIX分出來的BSD最後也影響整個資訊產業生態。BSD對於可移植性的要求,也讓BSD仍存活於世上。
    • 我覺得Dr. Kirk McKusick對於Bill Joy的描述很有趣。他形容Bill Joy是一個可以快速找到處理一件事情的最短路徑,程式寫的很快,問題一下就解決了。不過他的code有點亂,所以需要後人的維護。沒想到早年的程式設計大師也有程式碼不易維護的問題。
    • Dr. Kirk McKusick好喜歡用at any rate這片語喔,整片大約說了50幾次吧。
  • Question
  • BSD前期(1BSD、2BSD、3BSD)的license採用BSD license與AT&T license,這個混亂的授權是AT&T許可的嘛?
  • 為什麼BSD開發到BSD 4.4 lite2就停了?變成其他發行版本?
  • DARPA為什麼會讓柏克萊以開源釋出BSD,而不是讓這些變成國防部的祕密武器?
  • 有些縮寫如PMAC、PRAM找不太到只得是甚麼

The Unix System: Making Computers Easier to Use 心得

The Unix System: Making Computers Easier to Use

這篇文為我修課時作的心得
  • 摘要
    這部影片主要在介紹UNIX的功能與UNIX的好
    • 創造緣由:為了處理電話轉接工作還有解決問題
    • UNIX作業系統系統特色
      • time-sharing
      • portable
      • multi-tasking
      • hierachical file system
      • IPC
      • pipes
    • UNIX作業系統架構
      分層 描述
      kernel |底層與硬體溝通 、管理資源
      shell |與kernel溝通的界面
      utility program  |上層的應用程式
    • utility program範例
      • sort
      • 拼字檢查(超炫的)
      • 編輯器…等
  • 考古
    我有點好奇當時的電腦等級是如何,所以稍微找了一下youtube底下所說的DEC PDP-7規格。

圖片來源:wikipedia PDP-7
規格:
參數 數值
記憶體 4K words 可加到 64K words
CPU DEC chipset
指令速度 8 us ~ 1.5 us
儲存裝置 磁帶
售價 72000 USD (當時美金:現在美金 = 1:7.6)
這台電腦當時被稱作minicomputer,看起來一點都不mini阿。
ref:
1. Wikipedia - PDP-7
2. The Soemtron Collector
  • 心得
    在1982年那個我還不在世上的年代,微電腦才剛開始普及的年代,就有分時多工的作業系統出現,還可以做拼字檢查這類需要較多資源的程式,而且還可以播出聲音,我真的很佩服前人的程式能力,能夠資源相較現在不這麼充足的環境下創造出一個作業系統,還為其創造如此多的應用程式。而且這個作業系統與為了其而創造出的程式語言C語言到現在還是影響著整個電腦產業。
  • Question
  • 影片中的拼字檢查,是用two finger approach還是用KMP之類演算法做的?
  • 片中提到他們做出有用的程式,其他實驗室也做出有用的程式,然後彼此間交換使用,這是否是Richard Stallman Freesoftware思想的起源? 為什麼後來幾十年閉源軟體當道?
  • 片尾的小動畫是用PDP-7算出來的嘛?當時有GUI的觀念嘛?
  • 當時有Time-sharing的程式,那當時有有處理Race condition的機制嘛?

Revolution OS 心得

Revolution OS

這篇文為我修課時做的心得
  • 摘要
    內容與The Code有所重疊,但對於Linux,GNU,Free software,Open Source的成長其著墨較深,還有各期開發者與使用者加入Linux的情況有所描述。還有開源陣營與Microsft閉源陣營的對抗。主要內容涵蓋:
    • GNU、BSD、Linux等社群體系的建立
    • Linux成長與網路的關聯(apache project)
    • 開源社群的成長與所被業界接受(cisco採用,Oracle,Sybase等企業的貢獻)
    • 運用開源的商業模式(服務:Redhat、VALinux、Cygnus)
    • Linux Torvalds對於用Linux賺錢的看法
    • Netscape開源與Mozilla
    • Richard Stallman對於Copyleft與自由軟體理念
    • 開源與自由軟體運動的影響
      • ex:消費者可以購買不含Windows的電腦,Microsoft對於開源態度的改觀(這部影片當時Microsoft仍有點抗拒,到了Satya Nadella當任CEO時期才正式投入)
  • Note
    片中Debian社群提到的Open Source定義原文link
    • Free Redistribution
    • Source Code
    • Derived Works
    • Integrity of The Author’s Source Code
    • No Discrimination Against Persons or Groups
    • No Discrimination Against Fields of Endeavor
    • Distribution of License
    • License Must Not Be Specific to a Product
    • License Must Not Restrict Other Software
    • License Must Be Technology-Neutral
  • 心得
    這部影片彌補了我對The Code的一些疑問,為什麼Linux可以這麼成功的推廣?除了有Richard Stallman在前頭對自由軟體觀念的奠基外,還有相關社群的助力,套件如gcc、apache,gnome的出現,讓越來越多飛程式設計施予開發者都可以使用這個環境。除此之外,隨著網路泡沫化時期前的網路產業榮景,開源一詞隨這個榮景(還有Linus Torvald登上富比士雜誌),開始出現在主流媒體中,我想這也是Linux在桌上型市場仍有一席之地的原因。而我想Revolution OS這部紀錄片,不僅僅是在作業系統上對閉源商用壟斷的作業系統做出革命,還有對整個軟體生態圈做出革命。這部影片中Microsoft有點像是個壞人,但在開源軟體推廣這麼多年後,Microsoft開始做Open source,同時加入Linux Foundation,我想這也是開源軟體這個活動的一個里程碑吧。
  • Question
  • VALinux後來怎麼了,為什麼現在只能聽到RedHat?
    • VALinux離開Server服務後,改名為VA Software更專注於軟體開發,後來賣掉Jupitermedia Corporation(動畫公司)與SourceForge Enterprise Edition的版權。後來又改名為SourceForge Inx.,最後更名為Geeknet。Wiki連結
  • 1992年的Sun OS跑得比Linux慢,硬體又比較貴,為什麼還可以存活這麼久?
  • Apache是跨平台的,那為什麼大家都愛用Linux+apache?

The Code心得

The Code

* 系列為我修課時留下的心得

* 摘要

  • Linus Torvarlds 的生平與Linux創作背景
    包括家庭背景與當時的社經環境(ex:蘇聯解體)。
    因為Minix僅限教育用途,加上當時其他的作業系統過於昂貴(SCO Unix要20000馬克),還有just hobby等因素,開始著手開發Linux。
  • open source精神
    這裡直接節錄 Richard Mathhew Stallman 於片頭所說的話『開放原始碼就像是食譜,當有好的食譜,我們可以與他人分享,其他人可以對食譜加入自己的元素與口味,並將食譜回饋給原本的人或是繼續開放食譜下去。』,除此之外,open source不只是將程式原始碼開放下去這個動作,其背後可能同時創造了一個社群。
  • Free Software VS Open Source
    Richard Mathhew Stallman 提出的Free Software觀念與Free Software運動,還有Free Software Foundation對於自由軟體的推廣,讓人們認識到Free Software的意含,但是由於 Richard Mathhew Stallman 與 Free Software Foundation的言論通常較激進,導致齊備一些商人貶低,但是那群人們卻擁抱Open Source觀念(其實包括的軟體多有重疊),所以Eric S.Raymond認為應該倡導Open Source讓人們接受。
  • GNU/Linux對世界的影響
    GNU/Linux影響著許多開發者,還有業界一些公司,同時開發中國家的中國與印度的開發人員也對Linux有許多貢獻。Dot com風暴後影響開源軟體的發展與關注度,但是Linux作業系統卻開始進入小型裝置,如:電子鐘、手機等裝置,使一般使用者開始接觸到Linux。

* 心得

由於在高中時有在接觸Linux作業系統加上現在主要都以Linux作為我的筆電預設作業系統,對<The Code>對於Linux的歷史本身就有一些了解,不過對於Linux創立前的歷史不甚熟悉,不知道有Richard Mathhew Stallman這位在Linux開發出來前就已經開始宣揚自由軟體理念的靈魂人物,還有BSD本身對於開源觀念的殿基,讓我們可以在現今不受拘束的宣揚Open Source與使用Open Source的軟體,而且由於這些Open Source軟體的出現,讓我們這些後人可以研究這些軟體的技術,還可以貢獻所學於這些軟體中,並讓世界更美好。

* Qustion

  • Linus常說Linux kernel的開發人員的組織架構是十分扁平的,大家可以自由的提出意見,但是如果開發出Code,想要commit到Linux kernel中,到底是誰負責審理的?
  • 為什麼Linux社群最蓬勃發展?同樣是開源的BSD系統還有Minix等專案的能見度卻沒這麼高?
  • Linus說印度的基礎溝通較不好,所以可能會衍生出在地版的Linux,不知有沒有出現?
  • 另外印度網路不發達,他們如何養出這麼多軟體工程師?難道是人口基數多造成的錯覺?

精選文章

使用Ardunio Atmega2560 連接 nRF24L01+

使用Ardunio Atmega2560 連接 nRF24L01+ 關於library 目前主流有 https://github.com/maniacbug/RF24 與 https://github.com/TMRh20/RF24 這兩個。 其中TMRh20大大做...