2014年11月6日 星期四

Ezgo

Ezgo

Speaker : Eric


Ezgo開源教材分享
  • Stellarium
    • 可以描繪星體的軌跡
  • MuseScore
    • 可繪製五線譜,快速調整譜面
    • 可隨音符演奏音樂
    • 配有音樂社群,分享音樂創作
  • Hydrogen
    • 節奏編曲軟體
    • 配有各種音源,操作容易
  • Fritzing
    • 備有虛擬麵包板與圖像化電路,可以用於電路設計上的教學

2014年11月4日 星期二

C4 Labs Course 4

#1. Makefile


  • makefile REF
    • Makefile學習筆記
  • 平常的編譯方式
    • gcc file.c -o file
    • make file.o -> make file
  • makefile :很多個檔案要做編譯,彼此之間有相依性,所以寫一個腳本來完成所有的編譯動作
PROJECT = test
OBJS = a.o b.o c.o //物件檔當成三個字串

all: $(PROJECT)
$(PROJECT): $(OBJS)
...編譯指令...
  • 檢查include的標頭檔是否有被改過
    • 知道誰被改過,又有誰用到它
  • 建立一個描述相依性的檔案,然後將其include到makefile中
    • command line指令:-MF
      •  產生出一個.d檔,說明完成這個.o檔需要哪些.h檔
  • 引入一個目錄內所有檔案:wildcard
    • wildcard會展開目錄內的檔案

#2.Arch Linux


2014年11月1日 星期六

MOPCON 2014 會後會

 

MOPCON 2014 議程紀錄


這次是MOPCON會後會,主要在分享ㄧ些參加心得和揭露祕辛,所以不會跟議程直接相關唷。

第一次摸去IRSlab,空間比想像中的要大些,席間有提供飲料跟小點心,是個蠻愜意社群環境。分享人是MOPCON贊助組的成員,提及了一些MOPCON內部的分工,研討會的初衷與贊助者的立場等等。

對於贊助商而言,贊助的目的無非是推銷自身的產品,不過今年有些小悲劇,因為會眾有約40%是學生,所以有些產品不怎麼迎合需求,為了拯救贊助商,只好把MOPCON的店面移到贊助商旁邊,希望幫忙挽回一點人氣~算是會議的小插曲吧。

不光是產品推銷,這次的MOPCON也成為獵人頭的手段。分享人提到,這類大型開發者聚會往往是找人才的管道,因為會來參加聚會的,通常也都是對這領域略有了解的人,不妨藉此管道找尋真正適合的人才,比起104的模糊篩選好太多了。

但是這也引發了一個問題,一個堅持在濁水溪以南舉辦的研討會,來的贊助商卻多是北部的,講者也是北下而來,而會眾族群又多是學生,這會不會把南部的資訊人才又往北拉?反而是違背了研討會的初衷。這個問題討論了整整一個小時,直到蘇教授出來Demo自製咖啡機,工作人員是認為,能把北部的資源拿來南部用,這對研討會而言是件好事,而人才流失的問題,這並不是一時半刻就能解決的,MOPCON 至今也才辦了三屆,還不算個成熟的研討會,就先放眼當下,想辦法促進南部的素質吧。

2014年10月31日 星期五

鳥哥的私房菜&國際社群參與

#1.鳥哥、鳥站與自由軟體的學習
講者:鳥哥


  • 自我介紹(?)
    • 菜鳥長大了,總該變成哥
  • 為何接觸Linux
    • 一開始是被環境所逼
      • 不過換個想法,多學學也是件好事
    • 以前的信箱都有流量限制,所以想架設mail Server給自己使用
  • 為什麼會有鳥站
    • 因為想輕鬆一點
      • 為了要讓更多學弟妹學會linux,老師就不會老是找我了
    • 所以鳥站的來源其實是
      • 預防忘記以前做過的蠢事,以防再遇上時又要花時間
    • 鳥站怎麼來的
      • 從study area跟bbs.sayya.org(已關站)學習網路、電腦及Linux的基礎
        • 內容難度較高
      • 鳥哥創造Linux.vbird.org
        • 較適合新手入門
  • 關於鳥站?
    • 一開始會引起注意的主因是鳥哥夠雞婆
      • 解決討論區上看到的各種特殊問題
    • 鳥哥有句名言:我沒有錢
      • 因為沒有錢,設備買不起,只好用點特殊方法取代
      • 所以,就得要學習一些比較特殊的技巧
        • 這其實也是件好事
  • 鳥書?
    • 鳥站的文章一定比書籍還要新
  • 近年鳥哥在玩的東西
    • 教學專用虛擬化平台
      • 起因:沒linux要教linux
      • 遇上的問題:
      • VM效能優化
        • 透過Red hat Spice
      • VM Cpu優化
        • 原先使用的是最陽春的CPU
        • 改成透過libvirt的CPU去修改
      • 對顯卡負擔較重的軟體無法使用
    • 既然有實體PC/電腦教室了,為何還需要雲端?
      • 比較省錢

#2.參與國際社群經驗談
講者:Max

Slide

2014年10月30日 星期四

C4 Labs - Meeting 3




主持的是jserv,所以也是開學以來第一次爆滿(?)。比起分享,這此更像是推坑用讀書會,書目為linux kernel development 3rd 。這本書不像OS恐龍書,它假定你對基本觀念有一部分的認知了,而多著墨在怎麼去用那些觀念,所以可能不適合新手入門,而且它的圖真的很少。

今天是第一次開講,所以只就幾個章節做了簡單的流覽。jserv分享蠻有趣的,對於內容,將談談作業系統的基本觀念與排程。

#1.排程基本

進入排程之前,先讓我們釐清一件事:
  • Program:沒有反應,就只是個程式碼的集合。
  • Process:執行中程式的實體。
  • Thread:Process的紀錄器,告訴你這個Process幹了什麼。
一個Program能產生多的Process,每點一次程式,就會產生一個行程,多開就是這麼回事。而每一個行程,都有一個獨立自主的小空間(記憶體區塊),除了自己以外,沒有人能把它幹掉,同樣的,當這個行程掛掉時,別的行程也不會受到影響。

執行緒既為紀錄器,也是CPU分時的最小單位。一個行程通常有很多執行緒,這其實近似多工的概念。想像一個情形,如果只有一個執行緒,行程內所有的事就得都由他一手包辦,他可能要讀入檔案,又可能又呈現畫面給使用者,但是CPU一次只能分配給一個執行緒使用,這意味著我們必須等這個執行緒讀完檔案,才會有時間來回應使用者,如果前者曠日廢時,我們通常會認為是當機了。而多執行緒則把工作分攤開,我們可以有一個執行緒專職回報,告訴使用者這個行程做了什麼,而其他執行緒繼續埋頭苦幹。
但有一點要注意,多執行緒是近似分工,只是讓工作能同時啟動,真正在做事的還是處理器,如果只有一個執行緒,一個處理器,那你把它分成4個執行緒也不會比較快。事實上,在多執行緒中處理器只是快速的切換執行緒,以達到工作差不多快的效果。

排程, 其實就是如何切換行程。Linux的排程是基於分時,也就是把CPU時間切成許多片段,每一個片段可供一個行程來使用,當程式的時間配額額滿時,就會進行行程切換的操作。而判斷執行順序是來自優先權,它可能是透過一個演算法得出的,每個行程都會有個優先權,排程器(Scheduler)會透過它得知什麼時候該執行什麼程式。

我們先考慮三種行程:
  • Interactive process :會不斷跟使用者互動,需要偵測按鍵立即回覆使用者
  • Batch process:不需要和使用者互動,常在背景執行
  • Real-time process:即時性的,像是影音軟體
Linux的排程器實做了一個啟發式演算法,依據過去行程的行為,決定行程的優先權 。

此外,Linux 採取搶佔式多任務處理,也就是說當一個行程處於可執行狀態時,核心會將他的優先權和當前執行行程的優先權進行比對,若前者較大,中斷目前的行程,讓排程器挑出應當執行的行程。此外先佔也會發生在當前行程的時間配額額滿的時候,此時,一個鑑別旗標TIF_NEED_RESCHED 會被設立,讓計時器中止及調用排程器。

Execl - 第三次會議

上次的文件似乎沒什麼問題,所以今次又來了兩份新的文件。

一份是關於送餐的紀錄表,先從志工紀錄與長輩資料中讀取出每位志工與長輩,再依照日期分門對送餐紀錄進行統計,因為收到的資料是以日記,而統計結果要以月來看,所以又增加一的份月份表單。雖然觀念感覺蠻容易的,不過因為是動態的增加資料,使得這份文件極其龐大,在雲端進行debug時往往要等個2、3分鐘才會有結果,而且這可能造成了ㄧ些格式上的問題,

今次demo總會跳出ㄧ些莫名其妙的Bug,像在設定共用人員時屢屢失效,為了解決這個情形就延宕了近20分鐘,最後居然是瀏覽器的差異造成的OAO(Firefox → Chrome)。不過最大的問題還是格式出了差錯,從GoogleSheet一下載下來值又不見啦~反射性的檢查Sumproduct在逗號跟乘號之間的比對,結果居然是正確的


太棒了,我們發現了新的錯誤。
如果是平常我會這麼想,不過今天是資安project的死線,幸好我很快的發現了Bug,不然真的要爆炸了。Bug在於公式的枚舉失敗了,真是個奇葩的Bug,開檔時跳出了XML的報錯,推測應該與他有些相關,所以嘗試把全自動改成了文字格式,居然神奇的解決了?


話雖如此,也是到了11點多才完成,光是為了找錯就花了近30分鐘,現在想想真是太不值得了。

2014年10月29日 星期三

Linked list - 鍊表



1.Why Linked list ?
因為Array在使用上存在兩個問題
  1. 在宣告時,就得指定大小,如果分配太多會造成空間的浪費,若分配太少又會出現錯誤,
  2. 若要刪除或插入某個元素至陣列中,通常須對其他元素進行平移
而Linked list能透過pointer動態的分配紀憶體空間,補足了Array這兩個缺點。

2. Linked list的核心人物:pointer
  • Pointer存放的是記憶體位置
  • & : the address operator (對一個變數取得它的位置
  • *  : the de-referencing operator (這個變數的位置去取得它的值
  • e.g. :int * p = &x;
    • int * p  :宣告一個儲存int位置的pointer
    • p = &x :讓p儲存x的地址
    • 而*p形同*&x,對x的位置取值,自然能取得x的值囉
  • 誤用Pointer
    • Dangling pointer
      • pointer記錄到失效的記憶體位置(比如已經被刪除的變數),進而取到錯誤的值
    • Memory leakage
      • 忘了去deallocate不必要用的空間
3.Linked list
  • Singly linked list
    • 結構 :
      • 一個pointer的欄位,指向下一個節點(node)
      • 一個data的欄位,儲存這個節點的資料
      • 通常我們會用一個指標Head來指向第一個節點
      • 通常最後一個節點會指向NULL
    • 對linked的操作
      • 1.定義一個節點的結構(struct)
      • 2.當要新增一個節點時
        • 先分配記憶體給這個新節點
        • 把list中最尾端節點的指標指向新節點
      • 3.當要移除一個節點時 -> free