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遊戲工作坊,感謝哈利菠菜,讓我回想起選擇資工的理由。尤其是看到桃轅傳 


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