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

2014年10月23日 星期四

g0v & Git Cafe

Topic #1 g0v零時政府 & open data

講者:江明宗

一、簡介g0v與open data

  • g0v -> 為了補足gov的不足而成立

    • g0v 社群 motto :「不要問為什麼沒有人這個?先承認你就是『沒有人』,因為『沒有人』是萬能的!」

  • open data 的五個等級

    • 1.open licence : 開放文件的存取
    • 2.RE : 提供的文件可再使用/修改
    • 3.CSV : 純文字開放格式
    • 4.Url : 有固定的網址存放資料
    • 5.Ld : 除了自己的資料,還能跟別人的資料連結在一起

二、g0v專案

  • Case 1:開放政治獻金
    • 起因:監察院的資料必須到場查閱
    • 2013開始
      • 進監察院取得紙本資料,再將其掃描成電子檔
      • 因為圖片幫助不大,考慮用openCV按照掃描完成的表格切割
      • 工程師設計出一個網站,用來比照文字與圖片
    • 2014/04/19 專案正式公開
      • 24小時內,完成7個專戶,共309,666個文字比對
    • 截至目前,取得了28個專戶資料,但仍只是冰山一角(監察院有約6000個專戶)
    • 未來展望:將公司之間的投資關係畫做關聯圖,以釐清政治人物與企業之間的關係
  • Case 2:
    • 政府的選舉公報在2天前才會發出
      • ->要在 2 天內看完十餘名的候選人的資料
    • 減少盲目投票,讓民主社會的台灣更進步
      • 所以我們成立了一個網站,匯入村里等行政區以及選舉資料庫的資料,羅列出所有候選人的政見,並透過tag分隔出政黨、選區等等
    • 在Hackpad上線上編輯
      • 發佈想要整理的格式,轉發至ptt、FB
    • 運用newsdiff資料取得候選人相關新聞,並且將其比對
    • 2014/7月時,GitHub開始有人傳送PR
    • 2014/9月,匯入中選會登記概況

Topic #2 Git Cafe

講者:林旅強 Legist Qiang

一、Git Cafe與Git
  • 代碼託管 + Open Source 協作平台
  • 版本控制:
    • 對修改留下log,可以輕易知道改了什麼以及回復先前的文本
    • Git就是一個多人版本控制系統
      • 分散式,每個人的本機端都有一種套的版本
二、Open Source
to understand the concept you should think of free as in free speech not as in free beer -Richard Stallman
  • Free software foundation
  • GNU project (GNU's not Unix)
  • 自由軟體定義
    • 有使用程式的自由
    • 有修改程式的自由
    • 有再散播程式的自由 
  • Free Software -> Open Source
    • 因為free自由總是被誤解成免費
    • The Cathedral and the Bazaar
      • Open Source之所以好,因為它的選擇性很高,就像一個市集。
      • 蓋教堂是種開發模式,而市集又是一種開發模式
  • Creative Commons
  • Community & Crowdsourcing
    • e.g. PTT 成為納莉颱風第一手訊息流通處 
三、Open Source與個人發展\
  • 把自己的code放上平台,會有自己與助教之外的人給予建議
  • 參與開源專案,發掘自己真正的興趣
  • 遇到問題,通常會去問有經驗的人,社群在業界與學界都有相當好的資源
四、如何參與社群
  • 國際社群
    • e.g. Linux Kernel,Debian,Ubuntu,Gnome...

2014年10月19日 星期日

區塊加密的工作模式

1.當message size大於或小於加密的block size時,我們通常會將其切割:
  • 比如在AES的情形下,容許一次加密的明文為128bits,那我們必須先把加密文件切割成若干個128 bits 才能進行加密處理。
2.為什麼我們需要引入各種加密型式
  • 將加密算法配合至各種需要(如上述第一個情形),同時也能增加密文的強度
3.ㄧ些常見的塊密碼工作模式
  • ECB : Electric Codebook
    • Let Plain text to P1,P2,P3,...Pn
    • Let Cipher text  to C1,C2,C3,...Cn
    • 把明文分成若干的block,各自加密,或將密文分成若干的block,各自解密
    • 弱點:重複的block + 重複的Key → 重複的密文,面對頻率分析相當危險
      • 比如加密星期二寄出的Email,Tuesday重複被加密成同樣的密文
      • 重複觀察就知道,這都是禮拜二寄出的,可以借此解出金鑰
  • CBC:Cipher Block Chaining
    • 一樣把明文分成若干塊
    • 把目前明文跟前份密文做Xor,之後再將完成Xor的明文送入加密演算法
    • 第一份明文需要一個初始向量(Initial Vector)做Xor
    • 限制:
        • Bit Flipping Attack
          • 因為傳送中有一點缺失,密文將大量改變 -> DoS
        • 需要一個IV,要讓sender and receiver 知道且不可重複

上述模式在明文被分割成若干區塊前不可執行,需要補綴處理至區塊大小
接下來的模型將明文當作位元流,可以對即時的資料進行加密

  • CFB:

    • 將明文視為位元流
      • 首先將明文切割為兩部分b-s與s
      • 將明文加密,捨棄b-s的明文,將s部分的密文與前一部份的s明文Xor得密文C
      • 把新明文左移s位,插入C至新明文
    • 限制:
      • 會有延遲,無法併行處理資料
      • 跟CBC mode一樣,錯誤容易擴散
      • 那麼,有偵測錯的方法嗎?
        • 可以加入除錯碼,可以及時發現錯誤,但要犧牲一個bit
        • PCBC mode
  • OFB:
    • 同樣的,把明文作為位元流
    •  一開始加密一個初始向量
      • 將加密後的初始向量分別傳到:
        • 1.第二個block
        • 2.與P1做Xor -> 得密文C1
      • 再來對先前傳至第二個block的IV做加密,完成後分別傳到第3個block ......
    • 優點:
      • 不依賴產生出的P1或C1, 所以不產生時間延遲
      • 錯誤不會擴散
  • CTR (Counter):
    • 加密方法:將Counter i 加密,與Pi進行Xor得到密文Ci,持續進行直到完全加密
    • 解密方法:將Counter i 加密,與Ci進行Xor得到明文Pi,持續進行直到完全解密
    • 每進行一次運算,便會將Counter++,所以稱為計數器模式
    • Counter 不應該被重複使用,避免相同明文出現相同密文
    • 類似於ECB的觀念,但放入加密器的是會變動Counter,而且Counter總是128位,所以可以視作密鑰流處理

  • 確保資料的正確性
    • message authentication
      • CBC - Residue, or CMAC , NMAC
      • HMAC
    • 核心觀念:建立一個除錯碼以及演算出除錯碼的方式,由傳送方跟接收方約定而成,接收方在獲得密文後再進行驗證。

2014年10月18日 星期六

我的紫微星哪有這麼萌!?



Speaker:楊育誠


這次的分享和之前有個很大的不同,就是製作團隊從工作室至公司,所以在企劃、創作與行銷方面有著不同的格局,也論及到較多實務上及行銷上的策略,可以說是更貼近遊戲產業的現實面吧~


#1.星耀學園是什麼樣的作品

星耀學園是以紫微斗數為題材去進行動漫化的作品,當然啦,我們不能只餵公子吃天文圖,便置入了一堆萌妹子代表各個星靈,校長也坦承這近似西洋的黃道十二宮,但是就根本來看,把紫微斗數當背景的AVG還真的是絕無僅有,這無形中也成了行銷的噱頭。

學園設定來自於烏來鄉,至於為什麼在烏來鄉?因為那裡有山有水有溫泉,簡單來說就是滿滿的特色,而且像這樣的神奇學園,如果待在大都市裡大概天天都會被查水表,也顯得競技場這類古色古香的情境格格不入。

#2.遊戲實務製作部分

設定方面往往歸類於前期企劃,而在一個大團隊中,企劃特別要講究方法。

要將企劃內容盡可能的圖像化,不必拘泥於精細度,但是一定要呈現出概念與流程,比如說要做神奇寶貝的戰鬥,企劃要告訴團隊要如何呈現,像戰鬥方式(回合or即時)、場景配置、神奇寶貝出現的位置等等。我們可以寫一個小程式來模擬企劃內容,這樣討論時不僅降低溝通上的失誤,也能更貼近實務上面臨的難點或對現有設定該加強的部分。

而說起AVG,圖量相較於程式更重,如差分圖、臉部表情、立繪,這些都是需要精雕細琢的部分,而且良好的CG對於進軍同人市場是不可或缺的,講者有特別提到,以現今台灣市場的行情,一片沒有動畫化的AVG能賣個一千片就算不錯了,成本的回收只能鎖定在同人市場,比如角色人物的周邊,日常四格漫畫以及輕小說等等。

#3.業界的發展情形

首先要面對一個現實,所謂國產遊戲,風格到底要是什麼?

講者認為,什麼風格有市場,就嘗試什麼風格。

台灣經常有一種聲音,國產遊戲該有新風格,但是到底要如何去呈現、如何去定義,退一步而言,就算呈現出了新風格,也不保證能在市場上存活。其實原創並沒有什麼風格的問題,考慮風格當然很好,但是作品要先達到及格標準才行。


進行企劃時的思考點:

1.玩票性質與長遠發展2
2.外部及內部資源的評估
  • 確保資金回收\合作對象\企劃\程式\美術
3.遊戲類型
  •     大眾或小眾,以什麼去決勝負
  •     低美術門檻/高遊戲性 v.s 高美術門檻/低遊戲性
  •     老實說,靠現今靠遊戲性出線的非常非常少
4.發行平台
  • Steam/appstore/ps平台……
5.原創or改編
6.開發規模與賣點
7.上市時間與通路
  • 避免碰撞強檔,考慮發行商
8.多波次的行銷策略
9.數據回收與後期報告
  • 數位文創投資報酬率高\風險也相當高
10.版權模式與跨平台的可能性
  • 既然決定的是數位文創,就該注重在版權授權,這在數位文創上的獲利才是最高的
11.放長線釣大魚vs炒短線型遊戲

12.策略上的盲點
  • 游擊戰與陣地戰的選擇
    • 推很多不一定紅的 v.s 拼一步會紅的
  • 海外市場的佈局策略與輸出
  • 開闢第二戰場
    • 同人/週邊/置入性行銷
  • 品牌聯名效應
  • 虛擬與實體的交叉模式
    • 透過展覽推銷遊戲
  • 時間換取空間的策略模式

2014年10月16日 星期四

自由軟體 - 台南數位文創園區

台南數位文創園區

講者 : AJ


  • 園區提供設備
    • 3D印表機
    • 雷射切割機
      • Tinkercad
        • 線上建模網站
        • 使用OpenGL,所以不支援IE
  • PanScience泛科學
  • 台灣第一大科普網路社群
    • 用輕鬆有趣的方式,推廣科普閱讀
  • Npost公益交流站
    • 關注主流媒體不關注的公益問題
    • 讓公益變成全民運動
 it's technology married with liberal arts, married with the humanities, that yields us the result that makes our heart sing
協會的初衷:科技應當與人結合,與人作互動。我們一開始就是使用PunCar把自己送進任何需要我們的地方,教導他人Excel、Google、Dropbox,用最簡單的方式,去替不會使用電腦的人解決問題,而在我們離開那裏後,改變仍能留下,讓科技與當地人結合,進而改變他們的生活。同時這也是增長自身經歷的過程,能從不會使用電腦的人的思考模式出發,換個不同的邏輯或許也會有不同的發現。

台南數位文創園區與政府合作,為任何想創業的人,想自己做小物品的人,想參與活動的人,提供空間與設備讓大家互相認識,同時也會邀請一些創業家來演講,讓每個人都有學習與分享的機會。

Queue - 佇列

Queue跟Stack一樣都是有順序性的,存與取之間有一定的規則。直觀來看,Queue其實就像隊列,排頭的當然先服務,後到的就得等前面完事才能往前走,當然,我們不考慮插隊的情形,每次要加入這個隊伍的,都必須排在隊伍尾端,所以成了FIFO(First in First out)的型式。

1.Queue ADT
  • Queue CreatQ(maxQueueSize) :創造一個空的quene
  • Boolen IsFull(quene,maxQueuesize):判斷quene是否滿了,
  • Boolen isEmpty(queue):判斷quene是否為空
  • Quene Add(queue,item):添入item是quene
  • Element Delete(queue):刪除quene中的一個物件,並把它傳回給item
Queue的操作都與Stack類似,主要有兩個不同:

其一是stack有一方是底,我們只需要一直把東西丟進去丟進去,不過quene則是兩端皆開放的,要分別處理排頭跟排尾,所以我們需要兩個變數(front , rear)來儲存quene的頭跟尾,而front與rear的初始值一樣可以當作-1,配合於isEmpty的判斷上。
  • add : rear = rear +1
  • delete : front = front +1;
第一,從上述的操作,我們可以看出quene會不斷地往右偏移,所以在判斷isFull時,我們不能僅考慮rear是否>maxQuenesize,我們要思考的是,這個隊列是不是真的滿了?如果沒滿,則要把整個隊列往左平移。

2.Circular Queue

它是一個環狀的queue,這能解決上述第二個問題,不過他也得付出一點代價,即只能放MAX_Queue_Size - 1個元素,剩下一個必須用來判斷queue為空或為滿。

3.其他quene形式
    • Double ended queue:兩端都能放且兩端都能拿的queue
    • Priority queue:元素在queue的位置跟它的priority值有關,跟進入queue的時間無關
    • Double ended priority queue

Stack 堆疊

1.什麼是Stack?

如果把input的資料當成積木,Stack就像疊積木一樣,把新加入的磚塊放在後加入的上面,要拿出也是把新加入的拿出,屬於LIFO (Last - in -First out)模型。

2. System Stack

有些語言函式的呼叫也是個Stack,比如Function A呼叫了Function B,而Function B又呼叫了Function C,用Stack結構來表示的話:

FunctionC
FunctionB
FunctionA

FunctionC會先執行,完成後才會是B與A。
當然囉,如果函式巢狀增加,這些積木也會越疊越高,而高度也是有個極限的,當到某個地步後還要疊的話,就會發生stack overflow的情形,所以在Recursive的終止條件上要特別注意。


4.Stack 的抽象資料結構
  • Stack CreateS(maxStackSize) :創造一個空Stack,並給予這個Stack最大容許儲存量
  • Boolean IsFull(stack, maxStackSize):確認stack是否滿了,避免push時把item丟入錯誤區塊
  • Boolean IsEmpty(stack):確認stack是否為空,避免pop時丟出的錯誤資料
  • Stack Push(stack,item):配合isFull使用,當還有位置放時,把item放入stack
  • Element Pop(stack):配合isEmpty使用,當裡頭還有物件,就把物件丟給item
實作stack最簡單的方法就是用一維陣列去處理它,為此我們需要兩個東西,一個是陣列stack[MAX_SIZE]來儲存,另一個就是top,用來表示目前存了多少item。

top
...
...
Stack[2]
Stack[1]
Stack[0]

在創造一個Stack時,可以把top設為一個非合理範圍,比如 -1,這樣便可在isEmpty上做判斷。
每當push就top++,如果top合理,便加入物件,pop則把top--,丟出物件。

5.一些Stack的應用

System Stack就是堆疊的基本應用,他用於在Run-time時決定Function呼叫的順序。在進行Backtracking與Recursive上,也涉及了Stack的概念。








Excel - 第二次會議

這次開會是21:00~23:00 ,比起上次挑燈夜戰到00:30,整體狀況感覺好了很多。不過感冒還是沒有好,感謝AJ提供的楊桃汁跟金桔汁,可惜我從小喝到大,現在已經對那些有陰影了。



經歷了兩個禮拜,終於成功解決了sumproduct的問題,一開始就有發現到,是資料型態上出了錯誤,但是第一次嘗試時沒有加括號才找不到參考。現在整份表單都有值了,剩下都只是些數值上的小bug。比如對於一個紀錄時間的空儲存格判斷,在Google Sheet上會判斷為12月,而Excel上會列入1月,至今我仍理不清這種詭異的邏輯。會議中AJ提議要再對值的有無進行一次確認,但是我對人數的完整性有點顧慮而沒做答覆,人工算表一個小時表示痛苦,畢竟我們也不知道業主什麼時候才會維護表,到時候總人數突然跳到就又陷入一個除錯迴圈,所以我只另外標紀了有問題的儲存格而已。

這禮拜又收到了一份新案子,內容是關於南投的社區照顧。雖然有一部分是為了分工方便,但我仍認為這類文件應該要用資料庫保存,沒匿名化的資料放在雲端實在不怎麼安全。在9月討論AJ有提到的是別自行開發,避免會期結束後程式沒人維護,不過使用現有的軟體應該也是個辦法,當然我不否認,比起Excel填表與Google文件,如何使用一個資料庫就顯得專業些,教學上也會較難以著墨。

這禮拜新學到的函式Filter,這個東西真是太酷了,他能夠對表單中的資料做篩選,如果我們給每個專案一個ID,那透過篩選ID的動作,就能用拉選的方式分隔開每個專案,宛如一個小型的資料庫。我們目前有2個表單要處理,一個是紀錄表,一個是給志工填入的總表,志工只需要在總表輸入ID/生日/案主等等的資料,就會把資料傳入紀錄表對應的ID裡,每個ID預定可以儲存20筆資料。架構是這樣,不過編寫的過程出了一些小Bug,我猜是在拉動Execl時沒有用$固定行造成的問題,因為我們將3儲存格合成1個用,比如ABC當成A用,但是在判斷時卻把A/B/C輪著用,不過學長即時的解決了這個Bug,目前這份表單看來是沒有問題的。

為了要在會議上刷些存在感,一直是我嘗試理解那些拗口函式的最大動力,還記得剛收到第一份表時,感覺就像是踏出新手區就直接打最終Boss了,有種不知如何學起的無力感,而且裡頭的用法實在蠻進階的,google也沒什麼值得參考的範例,更別提去解決問題了。不過現在來看,其實這幾次會議讓我進步蠻多的,可能跟越級打怪有點關係,我不確定以後還會不會用Excel來做統計分析,但我知道的是,我對如何應用所學更進一步。當初填組時其實是選教學組,因為我很擔心跟不上開發的腳步,但從這幾次的成果來看,其實不是個打醬油的,幸好當時選填人數不夠,不然我應不會有這段值得回味的精歷。

2014年10月13日 星期一

卡諾圖的化簡

1.認識 minterm & maxterm

Minterm   :  由輸入或輸入的補數構成的   AND
    比如有兩個輸入x,y,那minterm = xy , x’y, xy’ ,x’y’
Maxterm : 由輸入或輸入的補數構成的    Or
    比如有兩個輸入x,y,那maxterm = x + y, x’+y , x+y’ , x’+y’

->考慮DeMorgan’s theorem
    (A + B + C)’ = A’B’C’
    (ABC)’ = A’ + B’ + C’

可以進行Minterm與Maxterm之間的轉換:
    e.g. x’y’z’ = m0 = x + y + z =M0
再比如說有一個電路
    F = x’y’z’ + xy’z’ + xyz = m1 + m4 + m7,
    F’ = x’y’z’ + x’yz +x’yz’ +xy’z +xyz’ =m0 + m2 +m3 +m5 +m6
    F’’ = (x+y+z)(x+y’+z)(x+y’+z’)(x’yz’)(x’y’z)
所以說F可表達成兩個形式

    1.  5個 minterm    or   在一起 (SOP)sum of product形式
    2.  5個 Maxterm  and 在一起 (POS)product of sum形式


那有了Minterm跟Maxterm有什麼好處呢?

    若電路F表示為 x’y’z + xyz +xyz’
    上述的F稱為 canonical form,因為它有三個輸入,而且每項都有3個變數,實際上F可化簡為x’y’z +xy,但這樣就非 canonical form
    那表示成canonical form又有什麼好處?就是真值表定可表達成canonical form,比如說:
        x=0,y=0,z=1,可以寫作x’y’z
        x=0,y=1,z=1,可以寫作x’yz
        x=1,y=1,z=0,可以寫作xyz’
    所以只要有真值表,任何電路總能表達成canoncial form(SOP或POS),但是這個形式有個致命的缺點,就是他的變數很多,這間接導致了成本增加。

於是,我們需要簡化的技巧

Gate-level minimization

2.Karnaugh Map

    1.按照格雷碼填入電路輸入 e.g(00 , 01, 11, 10)
    2.圈1 or 圈 0 ,以1,2,4,8,16,32...2的次方為個數去圈,儘量多圈讓化簡達到最大效果
    3.圖視為連通的
    4.持續的圈0 or 圈1,直到所有的0或1都被圈到
    5.圈1得到化簡的F (SOP形式),圈0得化簡的F' (SOP形式),需再做一次迪摩根得F(POS形式)
   
0或1可以重複圈,但是一定要完全圈完其中一種
注意:如果一個項的變數個數跟輸入不同,比如說輸入有w,x,y,z,但F中有一項為wxy’,即缺少了z項,那麼我們就要把wxy’z與wxy’z都視為1

卡諾圖的消去原理:(x' + x) = 1

雨港基隆的製作與誕生

  講者:Erotes Studio 李處守總召



喔喔喔喔喔是TRPG的講座,自從看了ゆっくり妖夢と本当はこわいクトゥルフ神話,就一直對這個領域很感興趣,想不到Erotes Studio是從桌遊中成立的,讓我想到Sitcon當初也是為了在買消夜時有團揪,不少社團形成的原因實在是很微妙呢,

Erotes的團隊跟上次一樣都是蠻輕巧的,而且因為成員四散各洲,所以作業都是雲端進行,沒有特定的工作室,這就是我嚮往的工作環境呀~ 不過這也衍生了ㄧ些後續提到的小問題,順帶一提,講師觸手(無誤)是團隊的總召。

談談遊戲的背景,就算沒聽過雨港基隆,也該看過















2014年10月12日 星期日

串流加密法

串流加密法


像DES、AES這種將明文分為一個一個區塊(block)的稱為區塊加密,與之區隔的便是串流加密。

串流加密的精神在無論明文或是金鑰,都將其視為位元流來操作,如此一來,就不必特意去分割明文區塊,在需要處理即時資料時相當方便。
  • 區塊加密
    • DES (Data Encryption Standard)
    • AES (Advanced Encryption Standard)
  • 串流加密
    • 亂數產生器
    • A5/1
1.亂數產生器
  • 可以視為一個實際版的One - time - Pad
  • 線性反饋移位暫存器 (Linear Feedback Shift Register)
    • 移位暫存器越長安全性越高
    • 理論上 L = n 之LFSR最多可產生2^n-1的週期
      • 要為Primitive polynomial(無法再分解成2個多項式的乘積)
  • A5/1
    • 利用3個LFSR (19bits 22bits 23bits)
      • 為什麼長度要不同?
        • 因為一開始LFSR都是為0,必須要透過一個64bit的key填入,LFSR長度必須不同,初始狀態才會不同
    • 填入LFSR後再將LFSR初始狀態分別作22跟100次的打亂
    • 總是反饋最大的值
      • e.g. = maj(x3,y4,z4) = (1,1,0) = 1 (因為1有兩個)
        • 於是x3 -> x4 , y4 ->y5 ,z4不動
    • A5/1 Demo

現代加密 - AES

AES



1.AES根據金鑰長度不同分別有10、12、14個回合,每個回合各有一把128位元的金鑰

2.明文區塊(block)與狀態(state) 上的轉換
  • 將明文block轉換為16進位編碼,填入矩陣(State)
  • 同樣的,每把鑰匙也能用state表示
  • State為16進位的數字
3.操作
  • 1.SubBytes : 假設state是19,則找第一列,第九行,取代state
  • 2.Shiftrow :第一列不移位,第二列移一位,第三列移兩位,第四列移三位
  • 3.MixColumn : 把每一個行乘一個矩陣
  • 4.AddRoundKey : 讓State跟回合金鑰做XOR
  • 以上步驟進行10、12、14次,依金鑰長度而定 
4.回合金鑰如何產生?
  • 利用主金鑰產生回合金鑰
  • 每個欲加入的字元w[i]由前一個跟往前第四個字元決定
    • 若i為4的倍數,將上述兩值XOR
    • 否則將w[i-1]進行函數g運算後,再與w[i-4]做XOR
  •  函數g
    • 將w[i-1]做旋轉後與取代

6.破解AES
  • 128位元的密鑰,要2^128次
  • 差異攻擊、線性攻擊與統計攻擊對AES無效 
7.補充:Mixcolumn
  • 矩陣中相乘會不會導致state的值越來越大?
  • 思考什麼是有限體 (GF)
  • 有限體能以多項式來表示有限運算元集合
  • AES的運算是基於GF(2^8)
    • 在GF(2^8)下,加法運算被列入XOR
    • 為了使乘法有封閉性,要mod多項式x^8+x^4+x^3+x+1

2014年10月8日 星期三

C4 Labs - Meeting 2

呵呵~上禮拜還覺得很親民,這次就被制裁了



#1. Linux 程式分享

淺談在終端機上打殭屍,由於我ezgo還沒有實裝,對講者的分享不大有深刻體認,諸如:
  • ranger :終端機上的檔案管理員
  • catimg :可以在終端機上觀看圖片
  • cmus   :可以在終端機上播放音樂
  • nano   : 文書編輯器
倒是對一些有趣的程式蠻有印象的,比如

  • yes:他會一直輸出y輸出y輸出y,直到天荒地老
  • cowsay:你可以印出一頭牛,並且讓他說話!
  • < I Love nix >
     ------------
            \   ^__^
             \  (oo)\_______
                (__)\       )\/\
                    ||----w |
                    ||     ||
     
  • ponysay:wow,你可以印出彩虹小馬

  • cmatrix:

說明文件告訴你:他很酷,他很吃資源。

#2.Zend Framework
  •  Zend Framework
它是一個開源網頁應用框架,其架構是MVC。今天我們來處理這句話就好了
 推一部sitcon的研討會,我覺得講解蠻清楚的,還有附送練習題
  •  框架(Framework)
Wiki這麼告訴我們:
a software framework is an abstraction in which software providing generic functionality can be selectively changed by additional user-written code, thus providing application-specific software
簡單來說,可以把framework視為開發某個應用的大型函式庫,裡頭包含了各式各樣在開發該項應用時需要用到的功能,這些都已經是可以重複使用的組件,當然,你也可以改寫這些功能來迎合自己的需求。
你可能會對framework與IDE產生一些混淆,可以把framework當作是一個函式庫,透過它能讓你在編寫軟體時更加容易,而IDE 則是執行、編寫code來套用框架的工具。比方說Qt、.NET都是框架,而欲使用這些框架你需要一個IDE來引入他們。
  • 網頁應用框架
顧名思義,他是個用於協助網頁開發的框架,像是套用Java的JQuery、獨霸Ruby的Rails等等,而Zend Framework是基於PHP。而網頁應用框架包含了若干種架構(architectures),架構涉及了這個框架是怎麼構成的,分別有
  • Model–view–controller (MVC)
  • Push-based vs. pull-based
  • Three-tier organization
目前大多數的網頁框架是屬於MVC架構。
  • MVC架構
MVC架構的核心思想不外乎是鬆耦合,他將系統分隔成三個部份
  • Model : 用來進行演算法及資料庫
  • Viewer :就只負責呈現使用者所看到的介面
  • Controller :可以想作Model與Viewer之間的橋樑,是邏輯處理的大本營
    • 會把從Model獲得的資料傳給Viewer呈現
    • 會對Viewer上的操作進行判斷,看要讓Model中的哪支程式處理它
 這麼做不但在網站出錯時容易Debug,也能把一個大型project分案處理。

2014年10月6日 星期一

時間複雜度

-Compile time :
-Execution time

     -Program step:       
   
        Definition : a program step is a syntactically meaningful program step whose execution time is independent of the instance characteristics,which means that something like the header of a sub program, a declaration of a variable (without assignment) is not consider as program step.
        Cautious : the execution time of program steps may be different,which depends on the degree of complexity.
   
    -How to ?
        -by a global variable (count) to calculate step by step.
        -by a table on counting the product of s/e(step/execution) and frequency (Fig.1.3)
       
    -So whats the different between two methods?
        -a global variable returns a number,
        -a table presents a function of time and step. e.g. 2n+n , n is a scale of input.
   
    -The best / average / worst step count.



-The big O notation:
    -Definition :   
    f(n) = O(g(n)) iff there exist positive constants c and n0 such that f(n) <= cg(n) for all n,n>=n0

-The omega notation:
    -Definition :
    f(n) = omega(g(n)) iff there exist positive constants c and n0 such that f(n) >= cg(n) for all n,n>=n0

-The theta notation:
    -Definition :
    f(n) = theta(g(n)) iff there exist positive constants c1,c2 and n0 such that c1g(n0) <=f(n)<=c2g(n) for all n,n>=n0.

-結論:
    1.O考慮的是函數上限(Upper bound),omega則考慮下限,theta則是O跟omega的夾擠
    2.取的都是最函數趨勢影響最重要的一項

2014年10月5日 星期日

聊聊有病遊戲的東南西唄

講師:哈利菠菜

  

 

遊戲四元素:程式、美術、企劃、行銷

      
        關於程式,除了要日常研磨自身的技巧外,最重要的就是要有個原形,不論是不是遊戲設計,在設計途中更改規格都是相當危險的,這不僅將大幅延誤開發進度,更會磨損組員之間的信任關係。對於一個專案的開發,務必要與組員之間先溝通好規格,最好能夠事先繪製出一份圖表,如此途中可能發生的錯誤也能先作出應對。


        談談美術,這次的講題主要是獨立遊戲:我滿懷青春的有病測驗,其實我認為講師的工作團隊蠻特殊的,它是以講師為溝通核心,其他成員彼此不認識,在協調上自是費力些,尤其是美術這部分就費時半年。對於美術的好與壞,其實這是一個相當抽象的概念,所以我們必須要去強調設定的重要性,何謂設定?大至世界觀,區住環境,民俗風情,這些會影響角色的外貌如服飾、膚色、刺青等等,而小則至家庭背景與人物性格,它能表現出人物該有的動作與氣質。而談到如何加強設定的功力,廣泛閱讀與社交是個不錯的方法,它能讓你更了解何為一個角色。

        談到美術之間的溝通,就是要求清晰,我記得講者提到延宕半年的理由,就是他收到第一任美術的人設圖時,回覆的是「沒有悸動」。價值觀的模糊會影響達成共識的速度,半年後,講師改用一些具體的方法陳述,像是「領口要再下來一公分左右」,「裙子可以再往上提高一點點」,並且就文獻內容來跟美術溝通,效率就快了許多。


        企劃及行銷其實是一體兩面,現在APP的市場已經殺成一片紅海,單一下載量的成本翻倍提升,更必須著重在這個區域。我很認同講師提出的一個黃金圈概念:

  • 想讓玩家體驗到什麼感受 - Why
  • 想讓玩家用什麼樣的玩法 - How
  • 遊戲應該最後長什麼樣子 - What

我們往往從What去著手,比如要設計出一個轉珠遊戲,要設計出一個守城遊戲,這些都是一個遊戲的最終呈現。我們真正該著手的是Why,這個遊戲的核心是什麼?它能為玩家帶來什麼?比如神奇寶貝,通常小孩子都有一個夢想:擁有一隻酷炫的怪獸,神奇寶貝實現了,而且越來越著重在培育出「自己的」神奇寶貝,你可以跟他互動,可以把自己的願望投射進遊戲裡。再比如MineCraft,它的核心在於創作,玩家不必去研究複雜的3D模型,它提供給你模型,讓你隨心發揮,做出來還能發佈給大家觀賞,這也能帶給玩家莫大的成就感。一個遊戲該在乎的是玩家的感受是什麼,而不是一味的塞東西給玩家,跳脫What的思維框架,往往能成就一個更有趣的遊戲,推銷的核心也呼之欲出了,我想在現今的APP市場中,掌握這種思維是相當有利的。

        至於行銷方法我認為也是一個類似的概念,要有推銷的核心。思考兩個問題,什麼遊戲最好玩?什麼遊戲最有病?我想後者帶來的印象會深刻些,雖然這在某部分也會限縮住客群,哈利波菜特別於此有提到一個失誤:其實這個遊戲一開始是瞄準大學生跟OL的,不過主要下載者都來自於中小學生,這在收費策略上出了些問題,因為沒有引入My Card機制,雖然下載量相當高,成本還是不大能回收。其實這讓我蠻訝異的,一個App排行前10,累積下載量近30萬的作品居然不算賺錢,這可能令不少獨立遊戲者望之卻步。

        感謝NCKU遊戲工作坊,感謝哈利菠菜,讓我回想起選擇資工的理由。尤其是看到桃轅傳 


有劇情,有配音,有音效,有美術,又有遊戲模式,我從沒想過在大學時期能做到這個地步,這場演講真是太精采了!

2014年10月3日 星期五

自由軟體 - 俠益千里

Course 2 - 俠益千里 ‧ 扶餘海外

紀宗衡講師@真理大學資管系


  • 行動的初衷 :
讓外國的孩子看得懂外國的新聞。因為他們的家園正在一點一滴的消失,愈來愈多的草原瀕臨沙漠化,愈來愈多的土地被賣出,但是苦於地理與資訊上的隔閡,孩子缺乏了危機意識。
起床,電車,四小時辦公室或工廠的工作,吃飯,電車,四小時的工作,吃飯,睡覺,星期一,星期二,星期三,星期四,星期五,星期六,大部分的日子一天接一天按照同樣的節奏周而復始地流逝。可是某一天,『為什麼』的問題浮現在意識中,一切就都從這略帶驚奇的厭倦中開始了。『開始』,這是至關重要的。厭倦產生在機械麻木的生活之後,但它開啟了意識的運動。
-薛西弗斯神話
我把我的一切都交了出來,財產,作品,只把日記留給我自己。如果你還要折磨我,我就出走!我就出走! 
-托爾斯泰  
俠益千里,就是跳脫日復一日的框架,出走 。
  • 當我們透過資訊去服務時,不是工程上的思維,而是管理上的
    • 志工:
      • 追求更好的生活民質,透過志工想想自己究竟能做什麼
    • 因為有需求,才能達到真正的資訊應用
    • 不是透過鍵盤,而是實實切切的用自己的手去幫助別人
  • 寫程式與志工之間,究竟有什麼關係 ?
  • 青年的四個大夢
    • 一個人在17~33歲之間,如果沒有完成這四個大夢,將影響他往後會成為怎樣的人
  • GitHub
    • Social Coding : Code/do-ing together
    • 思考如何分工合作、如何做自己想做的,如何做得更好
  • 出走
    • 你敢不敢走一條未曾走過的路,從安逸的大夢中醒來? 
    • 因為走出去,而會與當地有了很深的連結,從文化,從語言,那將是跟著你一輩子的記憶,甚至改變一個人。
    • 活動 :
      • 偏鄉最大的問題,就是年輕人不回去了,即便我們現在把年輕人找回來,也必須面對他們的就業問題,於是,我們決定著手在留下這一代的年輕人。
        • Arduino + Scratch + 布袋戲
        • 讓寫程式不只有寫程式,而是包含了環境與文化
      • 2013滾滾江原
      • 2014俠益千里 : 哈薩克~台灣5500公里
        • 服務 : 
          • 建置一間電腦教室
          • 一個自由軟體與英文的培訓團隊

Course 2 - 科技啟蒙


  • 發表就是最好的記憶
  • 鼓勵實作與研究,提供一個發表的舞台
  • 科技啟蒙 = 對新手最友善的研討會

數位系統導論 - 布林代數


0.布林代數其實就是0與1的運算

1.三種布林代數的表示
  • Boolean Algebra
  • Truth table
  • Circuit Diagram
2.普遍原則
  • Closure
    • e.g. 若x*y屬於集合S,則x,y也會屬於S
  • Associative law
    • a*b*c = a*c*b
  • Commutative law
    • 1+0 = 0+1, 1*0 = 0*1
  • Identity elements
    • + : 0+0 = 0 , 1+0=0 ,such that x+0 = x
    • *  : 0*1 = 0 ,  1*1=1, such that x*1=x
  • Distributive law
    • x*(y+z) = x*y + x*z
    • x + yz - (x+y)(x+z)
  • DeMorgan's Theorem (德摩根定律)
    • (x+y)' = x'y'
    • (xy)' = x' + y'
    • 廣泛用於電路最佳化(And與Or的轉換)
      • e.g : x' + y' = (xy)' = NAND gate
    • 可以用在SOP與POS之間的轉換
  • Absorption
    • xy + x = x (x+y) = x
3.運算子優先順序
  • 括號 > NOT > AND > OR
4.邏輯閘

x與y為input
  • And  : x*y
  • Or : x + y
  • Not : x = x'
  • NAND : -> And ->Not
  • NOR :  -> Or -> Not
  • Exclusive - Or  (Xor) = xy' + x'y 相同input為0,不同input為1(互斥)
  • Exclusive - Nor  = xy + x'y' 相同input為1,不同input為0
5.Positive logic and negative logic
  • Postive logic : H =1, L=0
  • Negative logic : H=0, L=1
  • active high : 1的時候出現反應,為正邏輯
  • active low : 0的時候出現反應,為負邏輯
6.Circuit
  • Gate : 1個邏輯閘大概由2~14個電晶體構成
  • Circuit : 由多組邏輯閘構成
    •  A combination of interacting gates
    • Integrated Circuit (IC)
    • Chip 
      • A silicon semiconductor crystal that contains the electronic components for constructing digital gates.
    • Level
      • SSI
      • MSI
      • LSI
      • VLSI
  • System : 放在一個PCB(印刷電路板)上,由很多組電路構成
7.Parameters for Digital Logic Families

由於不同的製作技術,在邏輯閘上以下的參數可能會有所不同
  • Fan-Out
    • 一個邏輯閘的Output到底能夠推動幾個邏輯閘正常運作
      • 一個邏輯閘的輸出,最多能推動幾個輸入
    • e.g. Fan-out = 2,Output就只能接兩個
      • 假設1代表5V,如果接了3個,有可能一個Output只能達到2V
      • 但是不影響原本的布林函數
  • Fan - In
    • 想做Fan-Out的反面
  • Propagation delay (傳遞延遲)
    • 邏輯閘是由電晶體構成,電晶體充放電都需要時間,所以會造成延遲
    • 一個晶片裡,邏輯閘的數目有幾百萬~幾千萬個
      • 即便一個邏輯閘的延遲只有幾奈秒,加總起來仍十分龐大
      • 是用最慢產生的最終Output當成傳遞延遲
      • 所以說,晶片的表現要好,整體模組的速度要差不多快
    • 傳遞延遲跟光罩製作技術(e.g.微米,奈米)有關
  • Noise Margin
    • e.g. 1~0V之間判斷為0,4~5V之間會判斷為1
8.Computer Aided Design
  • 現在的邏輯閘動輒上百萬,我們需要電腦輔助設計(CAD tool)
  • EDA is specially used for IC design
    • HDL (Hardware Deseription Language)
      • 用來描述你電路的語言
      • tool幫你compile之後會轉換(Logic synthesis)為邏輯閘(一個實體的電路)
  • 電路實現的種類
    • ASIC 
      • 應用導向的積體電路
      • 量身打造你設計出的電路
    • FPGA & CPLD
      • 給你的是晶片,裏面cell都固定
      • 我們可以自己把電路燒上去
      • 只要電路沒有超過cell,都能應用上去 
9.NAND and NOR
  • 其餘邏輯閘都能由NAND或NOR實做而成
    • 為何使用?
      • 因為NAND與NOR容易透過電晶體實做
      • 因為NAND與NOR比起AND與OR有更低的傳遞延遲
  • 電路上的轉換要則
    • 1.2個Not = 0個Not,透過增加雙向的Not將AND或OR轉換
    • NAND與NOR之間的轉換
      • 用兩次迪摩根法則: x' + y' + z' = (xyz)'

2014年10月2日 星期四

Excel維護 - 第一次會議

第一次開會,閒聊時間比我想像來的長~~很~~多~~~,主要都在自我介紹跟分享開發經驗,不過大家都沒說幾句話,當下感覺氣氛超沉悶的崩╰(〒皿〒)╯潰,期待日後能慢慢的有話聊,至少在半年間合作愉快XD

資訊顧問,這個名號感覺纏繞著霸氣,可惜我不是吃了Excel果實的EXEX人,為了不辜負這個名號,只好照三餐問候那張圖表,看著看著就日久生情有了點心得,也寫了一些函式嘗試去改進它

不過我沒聽說過要在會議上發表啊啊啊啊啊!!!!!!!!!
    
 看到會議通知的當下

我的Excel真的只有學了一個禮拜,加上當天重感冒又跑C4 Labs,還來不及進旅店就被拖進了會議室,我在麥克風前就只是隻HP=1的風中蟾蜍。真心認為,這次的發表不甚理想,雖然我本來就是個不擅言詞的人(?),但是回想不出自己說過什麼還是頭一遭,那時可能真的就靠直覺去做判斷吧,下次應該先擬好一份簡報,至少在狀況差時還能做些應對,幸好沒被Shut down

我個人其實對除錯蠻感興趣的,不過是在ACM以外的地方,比方是這次的Excel。主要的錯誤是在Google試算表上可得的值,到了Excel裡變成 0,到了Number會少值,而錯誤是出現在多個sumproducts的Arrayformula跟vlookup上

Number會少值其實是我的誤判。Number在遇上函式不相容時,會先把儲存格內容轉為文字型態而非實際數值,這使得countif > 0會少算了浮點數。

Excel在這方面就乾脆多了,直接把所有的值都換成0,讓你不得不跟他來場生死決鬥。

除了一開始在編輯器上錯誤的嘗試之外,曾經想過把sumproducts轉換成sum,可惜功力不夠,參不透所有運算表達的意義,而且對vlookup是無解的。之後又把腦筋動到Arrayformula,結果還是Fail T_T,最後只好嘗試這兩個無效的函式剩下的的交集,都導入了其他試算表的資料,我猜應該是在這方面不太嚴謹吧,當初看到沒有用indirect就感覺毛毛的。
  
       距離下次會議還有兩個禮拜,或許有時間把一些危險的東東糾正過來,之後再對所有問題做個小統整吧~

2014年10月1日 星期三

Array - 陣列

1.陣列

陣列可想成是相同資料型態的一組集合,每個集合中的元素都會有一個索引值,透過 [ ]
陣列存取運算子,我們便能取得陣列中的元素。

2.C語言中實做一個陣列

當編譯器遇到了一個 Element_type array[SIZE] 的宣告,它會分配 SIZE 個連續記憶體給這個陣列,其中每份記憶體都足以儲存Element_type的大小。

也由於分配出的記憶體是連續的,我們能瞭解每一個元素的記憶體位置。對於第i個元素,他的位置是:
array + (i-1)*sizeof(Element_type)

還記得嗎,c的陣列是從0開始的,所以必須先執行 (i-1)。要特別注意,當i=0的時候,就是陣列本身,也是第0個元素儲存的位置,所以我們能夠這麼說:

array = &array[0]

有了每個元素的位置,利用 * 運算子就能夠依照位置取得元素的值了,若要取得第i個元素(從0開始)的值:

array[i] = *(array + i);

上述兩種取值方法是等價的。
 值得一提的是,在C語言中,我們不必對i*sizeof(Element_type)進行處理。

C4 Labs - Meeting 1



頭次聽說系上有社群應該是半年前,那時頂多看看議程跟主題,一來是因為怕進去就像個打醬油的,二來是因為真的沒什麼動力能讓我騎15分鐘的夜車。不過歷經一年悠悠哉哉的洗禮後,我終於把E罐填滿了,抱著要挑戰Boss的心情踏入了會議室......


  這次的會議花了大約40分鐘在推SITCON的坑,剩下的則是利用python來做網路爬蟲。

簡單來說,就是以學生為核心的研討會,大家各自分享所長及專業,達到教學相長的目的。 SITCON的演講題目其實蠻多元的,可惜的是2014已經結束了~~~不過沒關係,SITCON的研討會都有上傳到Youtube,隨時都能夠回味那些有趣的演講,補全2014開幕時的一個梗XD


其實SITCON有的不只是年會而已,還有Hackgen跟不少Workshop,不過Hackgen就是要直接衝code上戰場了,年會比起來就平易近人一點,而且題目也能自由挑選。就像前文說的,如果認為自己有些想分享的,也能去交稿挑戰自己,或者當場報個Lightning talk

  •  #2. 網路爬蟲
網路爬蟲是個能自動抓取網頁上訊息的程式,可以用它來搜集大量的網路資料或偵測網頁內容的變動。
而這次引入的語言是python,聽到這個語言感覺就要被制裁了,幸好有獲得學習管道,不過Mac上也沒裝只好看著指令快速閃過,印象最深刻的也就DDOS選課系統了,這樣真的沒問題嗎?  
整體概念以requests為核心,然後利用beautifulsoup(美麗的湯?)來對獲得的網站進行編碼,最後用while迴圈持續的跑,當目標網站的文字(一個元件的.text值)改變時,會跳出警告,警告內容視需求而定,demo是彈出成功入口的網頁。
爬蟲不單需要python,對HTML與CSS也要有點認知才行,否則在查找原始碼時也不知道哪些是需要的資料。