2017年9月11日 星期一

[laravel4課程筆記] laravel4 - 手把手建立登入與欄位驗證

以下摘自 udemy Laravel 4 課程

雖然 Laravel 5 有些語法已經不太一樣,但概念上很像,
主要是這堂課是免費的,想買其他英文課程前,
可以先聽看看這堂有沒有辦法吸收,
再決定要不要下手買其他的課,
畢竟現在新同學前6hr每堂課都300實在太誘人 哈哈

下面是一些簡單的摘要


  1. control table
    1. Schema::create('table_name', function($table){$table->increments('id_name')})
    2. Schema::drop();
  2. Blade
    1. Unless
      1. 排除陣列中的某個元素
    2. 注意本課程示範的
  3. show error in browser
    1. app.php change debug to true
  4. model
    1. model name 對應的 table name 會自動加上複數 ex. class nam 為 book 對應的資料庫 table為 books
    2. setFieldnameAttribute 方法在 setvalue 時會自動觸發 (ex. $model->Fieldname)
    3. 設定好 hasMany、 belongsTo等關聯就可以簡單用箭頭取得 join的資料
    4. $fillable 欄位是允許被變更的, $guarded 相反
  5. migrations
    1. migrate:make
      1. 在 up 方法中使用 schema方法設定建立table結構的方法
      2. down方法中設定 rollback 的方法
    2. 先跑 artisan migrate:install
    3. artisan migrate
      1. 執行up方法
    4. artisan migrate:rollback
      1. 在資料被玩壞的時候執行定義好的 down 方法
  6. seed
    1. seeds 資料夾中 databaseSeeder.php 使用 $this->call($SeederName) 方法註冊自訂的seeder class
    2. seeder 中在run方法設定 modelsName::Create([colName => val]); 設定想建立的資料列, 這部分可以跟 faker 套件配合
    3. 通常會在 create 資料前 trancate table 避免因為資料被玩壞造成的非預期結果
    4. artisan db::seed 可以執行 run 方法中設定好的指令
  7. auth
    1. auth::attempt(validate_array, remember_var) 第二個參數如果給true的話儘管session過期仍會記住使用者
  8. validator
    1. $validator->passes() 和 $validator->fails() 都可以用來判斷是否驗證成功
  9. 注意:
    1. 本課程使用的 form 等一些自動產生html的方法在laravel 5 中已經不是內建的功能
    2. 設定filter.php做權限轉頁相關的設定在 laravel5 都移到 middleware 去做了

2017年9月10日 星期日

[公開課閒聊] 計算機概論第十二講 程式語言 - 台大 于天立

Ped隨手摘


  1. 程式語言大概分三~四代
    1. Machine instructions
    2. 組合語言 Assembly
      1. 容易記的記憶體名字
      2. 容易記的OP-code<operation-code> 
    3. C、C++、JAVA等
      1. 跨機器
      2. compiler and interpreter 分解譯與直譯
        1. compiler 效能較好
        2. interpreter 方便跨平台
        3. high-level primitives 一個primitive就能對應多個機械碼
  2. 自然語言與正規語言後者文法更嚴謹
  3. 程式分類
    1. 物件導向(OO)
      1. 隱藏資訊以減少程式設計師使用時犯錯
      2. 比如 封裝(encapsulation)、多型(pomorphism)
    2. 程序導向(Imperative)
      1. 找到演算法
      2. L-value = left-value
    3. 函式導向 functional 整個程式被視為一個函式
    4. declarative 定義清楚後他自己會去運算出結果
  4. control structures
    1. for、if、while 這些幾乎都是用 goto 實作而來
  5. calling procedures
    1. function name 是一個指標
    2. 有些程式語言預設會給予procedure固定 size 記憶體(local stack), 需動態配置記憶體的話宣告需額外告知
      return 後 local stack 記憶體會解放
    3. 術語
      1. local scope  、 global scope
      2. formal parameter 宣告函式中傳入的參數 、 actual parameter 實際使用函式時傳入的值
      3. function vs procedure
        1. function 會 return vallue
        2. procedure 不必 return
    4. procedure
      1. procedure header
        1. 要在function宣告前的程式碼使用時須加入
        2. ex.javascript function 宣告使用 funtion declaration 應該就是有做這個動作
      2. 參數傳遞方式
        1. call by value
          1. 替傳入的值建立一個新抽屜
        2. call by reference
          1. 傳入的是抽屜別名
        3. call by address
          1. 傳入的是抽屜號碼
    5. compiler
      1. lexical analyzer
        1. 將stament切分出最小單位(token)
      2. parser
        1. 建立語法樹
      3. code generator
        1. 產生操作碼

2017年9月9日 星期六

[公開課閒聊] 計算機概論第十一講 Algorithm - 台大 于天立

Ped隨手摘
  1. 如何評斷演算法表現
  2. 會受機器等其他因素影響
    1. 計算執行時間
    2. 執行的數量
  3. 相關指標
    1. Big-O
      1. f(n) 屬於 O(g(n)) f(n) upper bound 不會超過 big O 
      2. 指數為n總是比多項式為n來的大 ex.n100次方 屬於(=) O(2n次方)   computer science在這裡常把屬於寫成=
      3. 只在意n極大時的是否能bound住
        1. 不在意n小的時候的表現? n如何算小該如何定義? n很大的時候Big-O仍然比f(n)表現好嗎?
    2. Big-Omega
      1. f(n) 屬於 O(g(n)) f(n) lower bound 不會超過 big Omega
    3. Big-Theta
      1. f(n)既是Big-O又是Big-Omega
  4. 主要先抓三種情境 best、worst、average
    1. 因為表現會被輸入資料影響所以才需區分情境
    2. 分析通常最重視 average 有時為了預期最壞的情況會注意worst比較少注意 best的情境
  5. 演算法主要issue
    1. 運算結果正確
    2. 效能
  6. loop須注意三個屬性
    1. precoditions
      1. 進入前的狀況
    2. loop invariants
      1. 在loop中不會改變
    3. Termination condition
      1. 最後停止loop的條件

2017年6月18日 星期日

[公開課閒聊] 計算機概論第十講 Algorithm - 台大 于天立

Ped隨手摘


  1. 演算法表示法
    1. Flowchart (流程圖)
      1. 太複雜的演算法用流程圖難以表達需要靠自己簡化
    2. Pseudocode (P不發音)  虛擬碼
      1. 介於自然語言和程式語言之前,不用嚴謹的語法,主要用來表達想法
  2. 問題解決
    1. 分析、了解問題後才有辦法去提出並執行解決計畫,最後再去評估這個解法是否正確與能否用以解其他問題
    2. 老師特別強調分析問題
    3. 通常需要 top-down 和 bottom-up 並行
  3. 迴圈
    1. 包含三個必要部分
      1. 迴圈進行前的初始化
      2. 測試條件是否符合繼續的條件
      3. 更改某參數以確定迴圈會結束
  4. 插入排序法   未排序資料一次一個, 跟排序好的新陣列中每個值比較,比未排序大的值往下移一個位置,最後會多一個洞放置新資料
  5. 二分搜尋法 先拿中間值和目標值比較,較大的話只要搜尋下半部,較小則搜尋上半部,可節省搜尋時間
  6. 遞迴
    1. 終止條件需寫在最前面
    2. 由於遞迴會不斷呼叫自己,迴圈的速度會比遞迴快很多,如果可以用迴圈解的話可以考慮使用迴圈
  7. 演算法重要技巧
    1. divide and conquer (D&C)
      1. 先把問題切分成需多子問題,再一個個解決,二分搜尋法即是此種方式
      2. 每個子問題是獨立的,並不會互相影相
      3. top down
    2. dynamic programming (DP)
      1. 一樣會先切分許多子問題,各子問題間的結果會互相影響,並產生最後的結果,最短路徑問題即可用此方式解
      2. bottom up

2017年6月13日 星期二

[公開課閒聊] 計算機概論第九講 Internet - 台大 于天立


Ped隨手摘


  1. XML 現在的瀏覽器大多可以解讀
  2. 伺服器與客戶端
    1. 通常圖形運算多在客戶端、資料運算則較多在伺服器端
    2. 客戶端
      1. Java applets、Flash 需要先安裝
      2. Javascripts
    3. 伺服器端
      1. CGI、Servlets(jsp、asp)、PHP
  3. Internet協定
    1. 最簡單的四層
      1. application 建立訊息並指定要傳送至哪個地址
      2. Transport 將訊息切分成許多封包,並在接收時負責將封包組合回原訊息
      3. Network 決定要從哪甚麼路線傳送,接收封包後確認本身是否為目的地,不然繼續往下傳送
      4. Link 實作傳送與接收封包
      5. OSI有更細的七層分別(由此四層再分更細)
    2. 藉由 port 區分傳送來的資料避免丟錯應用程式
    3. TCP/IP
      1. Transport Layer
        1. TCP(transmission control protocol)  先做一次握手再傳送,適合遠端傳送
        2. UDP(user datagram protocol)  不確認對方是否想收到或是否收到訊息,直接傳送,速度較快,但較不可靠
      2. Network Layer
        1. routing 決定為 ip
      3. TCP/IP 指的是一整個套件而非兩種通訊協定
    4. 安全性
      1. 攻擊與防護
        1. Malware 釣魚攻擊 偽裝成被使用者信任的來源騙取密碼或植入惡意程式
        2. Denial of service (Dos) 阻斷式攻擊 主要靠防火牆擋ip防堵
        3. Spam 垃圾信件
        4. 可以透過可信任的VPN或是proxy連線
    5. 公私鑰加密架構
      1. SSL (secure socket layer)  可套用在各種通訊上 ex.sftp、https、ssh
      2. 互為反函數:A加密B能解密,B加密A能解密
      3. 傳送訊息時用傳送方用接收方的 public key 加密;接收方再用接收方的 private key 解密
      4. 數位簽章用以確認是對的人傳送的
        1. A先用自己的private加密再用B的public加密;B用自己的private key 解密再用A的public key解密就能確認訊息真的是A傳送的
      5. 被信任的第三方 Certificate authority(CA) 簽署過較能確定傳送方 public key 的正確性
      6. 非對稱性加密演算法現在常用 RSA
      7. 申請憑證流程:(Ped補充)
        1. 申請方會先把 public key 和網站基本資料放進CSR(certificate signing request)
        2. CA 將public key簽署完後會核發 ceriticate 給申請方
        3. 申請方將 ceriticate 作為SSL 的 public key 使用
        4. 瀏覽器中會預裝CA的public key通過認証後瀏覽器就會使用此public key加密

2017年6月11日 星期日

[一起讀書吧] PHP 與 Mysql 網頁資料庫程式設計 978-957-22-4533-0

這本還蠻基礎的, Ped 簡單列一下看的時候自己覺得比較有意思的地方:


  1. C4 陣列
    1. array_combine 和 array_merge 的不同
      1. array_combine($ary1, $ary2)
        • return array $ary1 為索引,$ary2 為值
      2. array_merge($ary1, $ary2)
        • return array 為$ary1與$ary2聯集, 等於 $ary1 + $ary2
        • 提醒: associative array key 相同時 $ary1 的value 會被 $ary2 取代,數字key除外
  2. C5 函數
    1. 可變長度參數
      • funtion sum (int ...$ary)
        {
             print_r($ary);
        }
        sum(1,2,3);  // array(0=>1, 1=>2, 2=>3)
    2. 靜態變數在離開函數後仍會保留到下次被呼叫,函數中宣告的變數初始值只有在第一次有效
    3. 函數配合 anonymous function 可用 function expressions 方式宣告
    4. 傳址傳址 ped 補充:將 object 指定給另一個參數時,跟傳址表現出來的行為很類似,雖然文件說不完全相同,如果不想這樣連動請使用 clone
  3. C7 傳遞資料
    1. header("Refresh:2"); 可在兩秒後重整此頁面
    2. header("Expires: 指定時間 ") 可指定 php cache 的時間,不想 cache 就設過去的時間
    3. php7 除了三元運算子有新的縮寫法
      • $a = isset($a) ? $a : '';
        $a = $a ?? '';  //與上行相同
    4. cookie 也可像陣列般命名
  4. C8 檔案上傳
    1. is_readable(path)、is_writeable(path)等可先檢查檔案權限有沒有問題
  5. C9 圖片
    1. GD 最常用的應該是縮圖功能吧
      • imagecopyresamepled()
  6. C10 錯誤處理
    1. 處理方式
      • 終止顯示錯誤訊息
      • 寫入 log
      • 自訂錯誤處理程序
    2. set_error_handler('funcName') 可指定錯誤處理函數

2017年6月4日 星期日

[公開課閒聊] 計算機概論第八講 Network & Internet - 台大 于天立



Ped隨手摘

  1. Scope
    1. LAN 區域網路   通常會配發虛擬 ip  外界傳輸無法直接傳輸至此ip 需傳輸給 router後再透過他配送訊息
    2. MAN 大型區域網路
    3. WAN 整個外部網路
  2. Topology
    1. 連線型態目前最流行的是 Bus 例如利用 hub 連線的方式,傳出的訊號會廣播給所有的人
    2. 不同 topology 通常會有不同協定
  3. 協定
    1. 協定規定好後並無強制力
    2. token ring
      1. 取得 token 的機器才能發言
      2. 只能把訊息與token往同一方向 傳遞
    3. CSMA/CD
      1. 有線網路使用,發現兩個機器同時要傳輸時會產生一隨機等待時間
    4. CSMA/CA
      1. 無線網路使用,偵測到有空的頻道時等待隨機等待時間後再傳輸能夠減少同時間傳輸的機率
      2. 發生碰撞時就重新傳輸
  4. 無線 ap (access point)
    1. 無線傳輸都是和ap溝通
    2. 無線網路標準 IEEE 802.11 (b, g, i, n, ac, ....)
  5. 連接網路的機器
    1. 以下三個機器不處理協定的轉換
    2. repeater
      1. 會把訊號增強
      2. 會將訊號廣播給所有連接中的電腦
      3. 僅能連接兩個分區
    3. bridge
      1. 類似repeater 但廣播時會分區廣播
      2. 僅能連接兩個分區
    4. switch
      1. 類似 bridge但可連接兩個以上分區
    5. router
      1. 能夠處理不同協定間的傳輸
      2. 通常也包含防火牆的功能
  6. 溝通模式
    1. server-client
      1. 網頁伺服器與瀏覽器
      2. 郵件伺服器
    2. p2p (peer-to-peer)
  7. distributed systems 可以透過網路連接 可利用 .NET 等framwork 操作
  8. Internet
    1. ICANN 負責管理domain,其會將domain管理權下放給各個 registrar
    2. 利用 gateway (通常是router) 與外界連結
    3. ip 透過 ISP(Internet service provider) 配發
    4. domain name 透過 DNS (domain name server) 可查詢對應的 ip


2017年6月3日 星期六

[公開課閒聊] 計算機概論第七講 Operating systems - 台大 于天立


Ped隨手摘

  1. scheduler 排程
    1. 管理 process table
      1. 加入新程序
      2. 移除新程序
      3. 決定哪些程序是 ready 那些是 waiting
  2. dispatcher 分派
    1. 執行程式
      1. 利用中斷的方式去切換不同程序的執行
      2. process switch 會讓系統看似一次可以同時處理很多 process 但如果資源實在太不足反而會因為 process switch 浪費過多時間
  3. critical region
    1. 當有檔案進入 critical region 時其他程式無法對該檔案同時進行寫入也無法中斷
  4. 造成 deadlock 的必要條件
    1. 競爭無法分享的資源 ex.需要寫入同一個檔案
    2. 逐次要求部分所需資源 ex.一開始需要100bytes 寫完檔案後再要100bytes
    3. 將資源分配出去後卻無法強制討回
  5. 解決deadlock 如果強制拿走某個程序的資源容易遇到 starvation 的問題
    1. starvation 新的程序又繼續拿走資源導致某個程序永不被執行
    2. 其中一個解決方法是 aging 一直拿不到資源時優先權會提高
  6. 安全性
    1. 避免不安全密碼、壞習慣
    2. 利用偵測軟體紀錄並分析怪異行為
    3. 威脅來源
      1. 病毒 把自己的程式碼依附在其他的可執行檔上
      2. 蠕蟲 能夠自行複製傳播
      3. 木馬 偽裝成其他程式背後多做了非預期的惡意行為
    4. 權限分級可有限度的防止惡意行為

2017年5月31日 星期三

[公開課閒聊] 計算機概論第六講 Operating systems - 台大 于天立

Ped隨手摘

  1. 作業系統組成部分
    1. file manager
    2. device drivers  驅動程式
    3. memory manger
      1. 包含主記憶體與虛擬記憶體
      2. 當主記憶體不足時會將一些暫時用不到的資料先存到硬碟中
    4. scheduler 
    5. dispatcher
  2. linux
    1. 指的只是 kernel 其實不包含 GUI 之類的東西
    2. made by GNU
  3. MacOS
    1. base on BSD
  4. boot strapping (booting) 含意: 不求人
    1. boot loader 會去把在 ROM 中的作業系統載入到主記憶體中後再將控制權交給作業系統
    2. BIOS可以和 boot loader 溝通
  5. process
    1. process state
      1. program counter 程式跑到第幾行
      2. general purpose register  register進行的動作
      3. associated memory cell 記憶體位置
    2. process table
      1. 記憶體位置
      2. 優先順序
      3. waiting / ready

2017年5月29日 星期一

[公開課閒聊] 計算機概論第五講 Data manipulation & operating systems - 台大 于天立

Ped隨手摘


  1. pipelining
    1. 不同行為用到的電路是不同的,此技術是讓不同行為可以同時進行 ex.fetch、decode、execute 同時跑
  2. parallel 平行運算
    1. 名詞解釋
      1. MIMD (mutiple instruction mutiple data) 多個指令對多個動作 ex.pipelining  
      2. SIMD(single instruction mutiple data) 此種方式常用在多媒體上,比如一個指令讓所有像素亮度調高
  3. distributed 分散式系統
    1. 不同電腦間利用網路同時進行處理不同任務
  4. 平行與分散  常見的議題
    1. data dependency 接下來的計算依賴前一步計算的結果
    2. load balancing 工作平均分配
    3. synchronization  同步
    4. reliability 可靠性
  5. 多核心 CPU 因為資料 可進行平行運算的比例與不同核心間溝通的時間造成多核心運算加速有個極限
  6. 作業系統最大的目的
    1. 讓系統可以最大化的使用運算資源,平順的切換不同任務的進行
  7. 作業系統類別
    1. real-time  即時反應
    2. time-sharing and mutitasking  使用者可同時執行多個任務,系統切分每個任務可占用的執行時間
    3. multiprocessor 使用多核心平行進行多個任務
  8. user 僅能透過 shell 與 kernel 溝通 包含文字與圖形介面


2017年5月27日 星期六

[公開課閒聊] 計算機概論第四講 Data manipulation - 台大 于天立

Ped隨手摘

  1. 電腦的結構
    1. Registers (暫存器)
      1. 通常用 SRAM
      2. 常見的有
        1. program counter
          1. 程式在記憶體中目前執行到的位置
        2. instruction register
          1. 從記憶體中取出現在正要執行的指令
    2. Bus (連接記憶體和CPU)
    3. Motherboard (主機板)
    4. CPU
    5. Main Memory
  2. CPU
    1. ALU   Arithmetic/logic unit  算數/邏輯運算元
    2. Control unit 
  3. Machine Instructions (機械指令/機械碼)
    1. 利用指令集操作CPU
    2. 組合語言(assembly)和機械指令原則上是一對一的對應
    3. 大概會有的指令
      1. LOAD 從記憶體取出資料
      2. STORE 把資料放回主記憶體
      3. I/O  輸入輸出
      4. 加減乘除
      5. SHIFT
        1. logic shift 移動方向的最後一個bit補零
        2. Arithmetic shift 第一個位(正負數) 永遠不動
      6. ROTATE
        1. 移出去的bit捕到領一個方向
      7. 流程控制
        1. JUMP 類似 goto 分為有無條件的JUMP
        2. HALT (停止流程
    4. 現在的主流是 CISC (complex instruction set computing)
  4. 詳細解釋 Machine Instruction
    1. op-code
      1. 告訴CPU要執行甚麼動作
    2. Operand
      1. 運算元指定對某個記憶體定址執行 op-code 指定要進行的行為
      2. 用以表達記憶體位置的bytes數會影響能使用的主記憶體大小 (ex.32位元最多能插 4G )
    3. 機械碼範例: 356C
      1. 3:store  5:register位置  6C:主記憶體位置
      2. 白話: 把register 位置 5 的資料寫入主記憶體 6C 的位置 
      3. 組合語言會轉成較易表示的格式: ex. STORE 5, 6C
  5. 高階語言 to Machine Instruction流程範例
    1. 寫好的C語言 compile to Object 檔
    2. Object 再和 libary link 成為一個 binary(可執行檔)
    3. compile 的方式會影響到效能因為有各種翻法
  6.  Machine cycle
    1. 組成動作
      1. fetch 從主記憶體中將指令取至register
      2. decode 解碼讓CPU知道指令的意思
      3. execute 
    2. clock  ex.3GHz 就是一秒可以跑 3*1000000000 次 machine cycle 
  7. I/O 與 CPU 間溝通至 bus 前還有一層 controller 會稍微暫存指令以免太頻繁佔據通道流量
  8. 與其他設備通訊
    1. DMA direct memory access
      1. 周邊裝置需要存取主記憶體前只需要通過一次CPU的授權
    2. 握手 Hand shaking
      1. 收到訊息後回傳通知對方已收到
      2. 比較嚴格的會先告知對方我要送訊息, 對方允許後才開始傳送
    3. 平行 / 序列 傳輸
      1. 不一定平行傳輸比較快
    4. 傳輸單位
      1. bps (bit per second) 注意不是 byte

2017年5月6日 星期六

[公開課閒聊] 計算機概論第三講 Data Storage - 台大 于天立

Ped隨手摘


  1. 二進位小數轉成十進位其實常有誤差存在,十進位常常不是二的倍數
  2. 壓縮
    1. 非失真壓縮
      1. Run-length : 一連串相同的位元在紀錄時就只記連續幾位 ex.11111 連續5bits 為1
      2. Frequency-dependent : 常用的碼用比較少位元數代表;少用的用比較長的位元數表示
        1. Huffman code
          1. 固定長度編碼接收端比較好分割,但會比較占空間。
            1. ex.A=00;B=01;C=10
          2. 利用二元樹依出現頻率由短至長編碼有機會會更省空間
            1. ex.A出現9次;B出現3次;C出現2次;D出現1次  A=0;B=10;C=110;D=111
      3. dictionary : 將常用的 pattern 用一組較短位元數紀錄他,跟frequecy有點關係
        1. LZW
          1. 不用把字典傳給接收端,因為接收端可用和傳送端同樣的演算法進行解碼
    2. 失真壓縮
      1. relative/difference : 只記錄有改變的地方
        1. ex.影像、聲音
    3. 如果原始資料重複的pattern (redundancy) 很少,反而可能會壓大
    4. Communication errors
      1. 壓縮過的資料如果有遺失會導致解碼錯誤
      2. error detection  : 可發現傳送的資料有誤,但無法回復
        1. check code
          1. 身分證字號
          2. ISBN
        2. parity bits
          1. ex.多傳一個 bit 讓資料永遠為奇數,但同時錯兩個 bit 時就沒救了 XD
          2. RAID (磁碟陣列)  
      3. error-correcting code (ECC)
        1. repetition code
          1. 多傳幾次ex.傳三次 010 因為 0 比較多所以回復成 0
          2. ex.(7,4)Hamming Code
            1. 發生錯誤時根據 Hamming distance 還原成最近的

2017年5月3日 星期三

[公開課閒聊] 計算機概論第二講 Data Storage - 台大 于天立

Ped隨手摘


  1. 聲音怎麼紀錄
    1. sampling rate
      1. bps(bit per second) 每秒鐘用多少 bits 紀錄聲音檔取決於兩個參數
        1. 取樣率
        2. 紀錄震幅用的 bits 數
    2. MIDI
      1. 由音效卡由設定好的聲音再現不同的音效卡呈現出來可能不同
  2. 整數
    1. Overflow
      1. 兩個正數加起來變一個負數或兩個負數加起來變一個正數
        1. 由於記憶體不足導致計算結果無法表達
  3. 小數
    1. fixed-point
      1. 直接換算
        1. ex.101.101 = 5又5分之8
    2. floating-point
      1. 正負 sign
      2. 指數 exponent
      3. 假數 mantissa
      4. ex.11010101 = 1(負sign) 101(1指數) 0101(.0101假數) = -(1/4+1/16)x2的一次方 = -5/8
      5. 所以轉換成十進位除不盡或記憶體不足的時候會有誤差 => Truncation Error


2017年5月2日 星期二

[公開課閒聊] 計算機概論第一講 Data Storage - 台大 于天立

Ped隨手摘
  1. 為什麼用 2 進位?
    1. 方便對應 true false
    2. 電器常用電壓作為辨別,比較好判斷 (ex.五伏電壓)
  2. 為什麼用 16 進位?
    1. 較2進位方便人類表達
    2. 2的倍數易於轉換2進位
  3. 記憶體位置本身也是以2進位表示,記憶體位置中擺著以 cell 為單位的資料,資料至少以8bits(1byte)為單位
    1. 以1D的方式排列 
    2. 現在幾乎都是隨機存取 
      1. 可直接取得目標記憶體位置的資料
  4. 主記憶體如DDR等技術都是持續供電以奈米等級的小電容紀錄01,增加容量的方式就是讓電容越排越密,越來越小
  5. 硬碟則是用磁性紀錄因為一個檔案會分開存在硬碟的不同位置,將不同位置的資料組合回一個檔案供讀取是buffer常被拿來用做的事,他會一次讀一堆資料後再整理出我們要的丟出來
  6. 各式各樣如何用二進位記錄資料說明:
    1. 文字
      1. Unicode、ASCII
    2. 圖片
      1. BMP、SVG
    3. 數字
      1. 直接從換算成2進位

2015年9月3日 星期四

php開發工具: Netbeans 常用功能分享 - 忽略不必要的檔案

本文懶人包:

有兩種方式可以忽略專案中的檔案
  1. tools->options->miscellaneous->ignored files pattern
  2. project properties->ignored folders

前面 Ped 介紹了幾種運用Netbeans的方式,相信大家在越用越得心應手後已經不斷把自己手邊的專案加入netbeans管理了吧?

越來越多的專案

這個時候相信大家在開啟Netbeans的時候都會發現速度明顯的越~來~越~慢~~,更煩人的是當在 openProjects 的時候甚至連檔案清單都開不出來,之後還會對所有檔案在背景進行掃描,Ped 自己遇到的狀況是,少則數分鐘多則近十分鐘,搜尋檔案時速度也變慢,Ped 這次就是要分享如何減低這個延遲的情況,畢竟,生命有限,把這些時間拿去玩樂不是很好嗎?XD

opprojects時點選專案只會出現Initializing ...等字樣

  • 忽略專案中的資料夾(單一專案)
首先要知道,這一切都是檔案太多造成的,開啟需要時間、掃描需要時間、搜尋也需要時間,但是很多cache、圖檔、文件檔根本沒必要掃描,我們也不會用IDE去編輯,這些檔案就是在那占著茅坑而已,Ped 在這個做法就是忽略它們,跟git、svn 的ignore差不多,首先如下圖在專案上右鍵後點選Properties選項,
點選專案屬性選項

進到Igonre Folders中,下圖中的Add Folder就可以設定哪個資料夾會被忽略了,像 Ped 就把images、cache、files之類的資料夾給忽略掉了,


這時候再重新開啟Netsbeans的話會發現速度已經變快了,但是如果有一堆專案的話不就得設到天荒地老、海枯石爛,光想到都懶了。

  • 忽略專案中特定名稱的檔案(所有專案)
還好,這部分Netbeans也想到了,在選單 Tools -> Options -> Miscellaneous 中的 Ignored Files Pattern 就是為了解決這個問題而存在的,

ignored file 在 toolbar中的option

設定此pattern即可忽略特定檔案
Ignored Files Pattern 是使用正規表達式去設定,下面是 Ped 自己設定的Ignore pattern已經包含大多圖片、cache的名稱:

^(CVS|SCCS|vssver.?\.scc|#.*#|%.*%|_svn|cache)$|\.jpg|\.png|\.gif|\.svg|\.bmp|\.ico|~$|^\.(?!(htaccess|git.+|hgignore)$).*$

不盡完善的話,Ped 順便提供一個好用的正規表達式工具,如有需要歡迎自行調整取用。

但請確認規則無誤,一旦被忽略的檔案或資料夾,之後在netbeans中都是搜尋不到的,前一個方式設定的資料夾亦同。

  • 最簡單根本的方式 - 只開啟需要的專案
進行到這邊開啟專案時應該都回復正常水準了,但是 Ped 的經驗是專案只會越來越多,遲早有一天檔案又會爆掉,這時最有效又最簡單的方式就是關閉其他用不到的專案,別讓它們常駐在projects選單中,請別太順手按了delete鍵,這會刪了該專案的資料,其實在每個專案的右鍵選單即有 close 這個選項,

close project button
養成好習慣,最近用不到的就先關起來,要用再去File->open project開啟,總之,掃描的檔案越少,玩樂的時間越多!XD

相關文章:php開發工具: Netbeans 編輯器 - 簡介與安裝

2015年8月1日 星期六

[一起讀書吧] 創智慧 - 理解人腦,打造智慧機器


打造智慧機器!聽到這副標題你該不會已經拿起工具準備就緒了吧?!可惜得讓你失望了,這可不是另一本機器人製作聖經 XD,請別忽略理解人腦這句副標題,這本書的主題主要還是放在從神經層次對新皮質如何產生智慧提出一個理論,不過作者的確是想找人和他一起造一部,有興趣可以看一看,說不定你會跟他很合拍。
首先,想製造智慧機器,總得先搞清楚,智慧是甚麼?

演化來的智慧 

許多老生長談都會被賦予智慧的稱號,大家應該都略懂略懂,不過這種時候常常也都不知道彼此說的到底是不是同一種意思,會不會你說鹽他拿糖。

在行為主義的影響下,有一陣子智慧被當作了黑盒子,以制約實驗而言,聽到鈴聲狗就會流口水,為什麼會流口水?從鈴聲到流口水這之間狗在想甚麼?不重要。只管輸入與輸出的結果,但是智慧的重點並不是最後做了甚麼,今天看了本書,看完的瞬間人們就已經理解了裡面的內容,之後不管是去小憩一下或是說故事給別人聽都不會改變已經理解的事實,理解內容當下才是智慧運作的重要時刻。

因此作者從神經科學的角度提出自己的看法:智慧就是一種記憶並做預測的能力,他稱作記憶預測模型,皮質時時刻刻都平行的自動化的提取出過去的記憶,而非進行運算,有時對方說了一句話,常常還沒說完就知道他要說的下個字是什麼就是如此,這樣才有辦法運用傳輸速度這麼慢(晶片快了10的好幾次方倍)的神經元這麼快速做出反應,他提到了幾點還算有趣,像是新皮質的特性。

新皮質的特性

序列性的儲存與提取方式讓我們很難倒背英文字母,說故事也是照著順序比較好說,一不小心還會照著看到時的順序把當下不重要的細節也一起講出來;當看到窗簾下有一隻腳,我們在腦中自然地會補完後面有一個人,這種自體連結性是經由學習而來,當多個想法被連結成一串時就被稱作思想;最有趣也很神秘的是所謂不變的表徵,可以想成是記憶在我們在腦中的索引(好像還是不太貼切),如果今天一首歌是C大調,用電腦去辨識,它會記錄每個音符,再去比對這些音符是否和記憶庫中那首吻合,今天彈奏者突然用D大調彈奏電腦就會認為這是不同的兩首歌,人類就算只聽過C大調版本,仍會說出同一首歌的歌名。這些特性也是當時電腦很難模擬的,那有辦法讓這樣的智慧運行在人造的機器上嗎?

人工智慧

人工智慧研究領域從來沒打算這麼做,傳統的人工智慧並沒有打算理解人類智慧的運作模式,他們的說法是,演化中沒有出現輪子,但人類發明的輪子還比腳更適合長途運輸,飛機也比翅膀更有效率,但作者認為這樣的方式只能解決特定問題,沒辦法類化,比如沒法拿一個下棋人工智慧幫你開車,而且除了某些規則明確的領域外(ex.下棋)當時沒有太大的進展,電腦還是難以解決一些人類可以輕易地做到的事情,因此他致力於研究神經科學,希望把智慧從新皮質中抽取出來,就像軟體一般安裝到人造硬體上,理論上如果將神經元與其間的突觸關係用矽晶片取代即可達成,一但達到,速度極快的晶片能比神經元更有效率、容量更大、又能輕易複製,加上能安裝上各種人類感官無法企及的感應器,屆時的應用相當的廣,但作者也認為這不是短時間內可以達到的目標。

這本書的內容作者2003時在TED中也有做過介紹,在過了十年後,作者在2013的 google tech talk 上有列出六點他發展這種軟體時的原則,已經有提出了一些簡單的成果,能夠預測一些工廠能源消耗等,當然還不是完成品,但看成果似乎還算準確,但在今天google無人車等擁有強大AI的成果慢慢浮現的今天,書中所述的這種擬人的智慧是否有辦法與其競爭(研究資源等)還未可知,但光對智慧究竟在神經生理層次上可能是怎麼樣運作可以略知一二就相當有趣了不是嗎?



2015年4月11日 星期六

[一起讀書吧]泰利的街角



在自由的經濟體系下,只要勤奮努力都有機會到階級的頂端。所謂的美國夢是美國文化的重要價值,但在這本書之中我們可以看到這種階級流動的崩毀,在底層的階級中所擁有的資源是如此的稀少,遑論提供足夠的資源供給家庭,在結構下出現一個又一個破敗的家庭,階級的世襲在歷史上已經不是第一次出現,既得利益者甚至將此合理化、制度化,中古歐洲封建制度、種性制度、禮法制度,而出現在泰利故事中的不就是他們所崇尚的美國夢嗎?

美國夢對於泰利這群街角住民,在某些程度甚至比百年前訴諸宗教的老梗解釋還要殘酷,以種性制度來說好了,今天你會成為賤民是因為上輩子做錯事,這輩子好好做人修身養性,還可以期待來生;但是泰利他們對自己為何身處社會底層的解釋卻被限定在:你沒用!這一切被歸咎在個人之上,沒有別的理由可以推諉,這也造就了龐大的心理壓力,現在的人憂鬱症會這麼嚴重也許與此脫不瞭干係。

加上社會對整個階級的刻板觀點,底層被化約成好吃懶做,他們的標準形象是好手好腳卻又不願意為自己的明天做打算,簡單的被歸類於失敗者,這並不是只有社會底層會發生的問題,整個社會依據職業、收入等簡單易懂的方式劃分階級,弔詭的是,這些街角的人通常被歸類為叛逆的一群人,但大社會的價值觀卻形塑了他們對自己的看法,以職業而言,為了保護自己的自尊,他們與周遭的人同樣看不起自己的職業,行動上以不屑重視工作的態度來因應,在失去了當今自我認同的重要標誌,街角的人們轉而訴諸其他的方式證明自己,最直接的就是人際關係。

街角的人們很急切的希望擁有質量並重的人際網絡,很不幸的是,資源的稀少性卻讓這些關係相當脆弱,無論是家庭抑或友情,在這些關係中也能看到暴力涉入的程度相當的高,畢竟暴力是最快令人被重視的一種方式,原本陌生的路人,平常可能連抬頭都懶得看他,當他持槍對著人時,他就會受到前所未有的關注。街角的故事中,甚至可以看到當妻子被毆打時,會將之視為丈夫重視自己的一種評估方式,畢竟除此之外,丈夫難以達到這個角色所應有的功能,又是一個街角絕望氛圍下所出現的價值。

整本書的年代背景在1960年代附近,但時至今日,整個階級繼承似乎越來越往街角靠攏,甚至擴大,失去希望的人們開始追逐眼前容易滿足的快樂,藥物成癮等社會問題層出不窮,高品質勞動力的易取得,使的教育也逐漸褪去能夠造成階級流動的外衣,也有相當多的人意識到這種狀況,但在短期內似乎難以改變,但至少需要意識到,這群社會最底層的人們也是結構下的受害者,而不是不斷的去檢討他們,畢竟異地而處時,我們的表現不見得會比他們好多少,就像 Alain de Botton在TED演講中所引述聖奧古斯丁的話:按地位來論斷人是一種罪。只以職業、收入來評斷一個人常常會忽略身為一個人應有的重要價值的。

最後,推薦Alain de Botton 這部關於成功哲學的演講,如果可以也許能夠對失敗更加寬容,也祝大家都能定義出屬於自己的成功


2015年3月17日 星期二

[前端工具]好用易學的 Bootstrap - 簡單的成串class

這套 Twitter 出的 CSS framework 相信很多人都久仰大名,這陣子因為進行需要 RWD 的專案將它拿來把玩一下,整個驚為天人,來跟大家分享一下:

官網下載或是用CDN掛上 bootstrap.min.css、bootstrap-theme.min.cssbootstrap.min.js後就可以開始使用,

用法非常簡單,常常只要按照想要的樣式把 class 串成一長串(所以才叫鞋帶吧 XD),以按鈕作為例子:

原本長這樣: <button> </button>


給予指定類別: <button class="btn btn-danger btn-lg">button</button>


class 後面那一長串的意思依序是:

  1. btn: 這個 button 要長得像我 bootstrap 風格的按鈕,就算是<a><input> 我也會讓它變成這副德性。
  2. btn-danger: 危險的顏色就是要讓它紅紅的,顏色都幫你調好了啦。
  3. btn-lg: lg 就是 large 看起來就會大大的。sm 的話呢? 有看過格雷就知道的吧(誤)。
基本上的用法大概就是這樣,舉凡:grid、表格、導覽列、下拉選單、圖片輪播甚至icon都是把HTML排一排 class 設一設就可以收工, 不用自己設太多 css 就可以有一個質感不錯的畫面,而且還是響應式的網頁,不滿它的樣式的話也可以自己再去改css,無怪乎它會這麼火紅,真的是救了許多沒有設計天分的人們!

說到icon順便提一下,其設定也相當簡單,

<span class="glyphicon glyphicon-user"></span>


本來以為這icon是圖,但如果去看 css 的話只會看到以下這段,
.glyphicon-user:before {
  content: "\e008";
}

原來它是一種圖標字型,既然是字型想當然可以調整字體大小:
<span class="glyphicon glyphicon-user" style="font-size:72px"></span>

有夠簡單吧 ^^

w3cschool 和 bootstrap官網 還有更多的範例和介紹,有需要可以看範例邊改邊學,相信很快就可以做出一個很 bootstrap 風格的網站了(雖然好像有點氾濫了 XD)。

bootstrap 還有一個很好的地方,就是他的程式碼都是開放的,對 HTML5、CSS3、js 有興趣的人多研究研究可以從裡面學到很多。

2015年2月27日 星期五

[一起讀書吧]念力 - 讓腦波直接操控機器的新科技‧新世界


念力。當初看到這本書的書名的時候真以為是本魔術教學手冊或是宗教神蹟的宣傳之類的,真是很容易讓人誤解阿XD
細看之後,還真的是本魔術成果介紹,作者團隊已經可以讓猴子完全不用動手,操作機械手臂、螢幕游標,甚至讓兩隻老鼠能夠不必說話(是說老鼠本來就不會說話啦XD)就能進行某種程度的溝通,這些,不是比魔術更像魔術嗎?

認知行為的神經生理基礎來自於整個大腦的合作互動


神經心理學在多年的發展受限於技術等原因,功能性定域論 在一段時間內成為主流,各種人類的認知功能皆是由於神經元各司其職後的結果,視覺有視覺神經元、聽覺有聽覺神經元,甚至當看到你祖母時活化的那些神經元也可稱作祖母神經元,藉由紀錄單一神經元的活動再去界定其功能,腦傷也常用以作為其論據基礎,比如布洛卡區損傷所造成的失語症就是一個明例。

但作者 Miguel Nicolelis 不斷主張,重點不是這些功能分區,認知來自於所有神經元的交互運作,也就是所謂的大腦風暴,神經元負責的功能沒有想像中那樣僵化,會隨著所進行的功能進行一種動態的調整,比如干擾盲人的視覺神經元,卻會影響實際上只需要用到觸覺的點字辨識,可見大腦的分區具備相當可塑性,布洛卡的報告常來自於對中風等大腦疾患,極可能是大規模的大腦損傷,導致不同神經元間的連結中斷而難以溝通所導致。

基於此種看法,作者團隊改變過去僅記錄單一神經元的作法,同時記錄上百個神經元的活動,並以此作為行為的辨識,成功的使猴子能夠只透過思考去進行機械手臂運動、滑鼠鼠標操作、機械人行走,甚至讓兩個腦之間藉由機器能夠溝通,一百個神經元在數以億計的大腦中,卻能有如此代表性,這也令腦機介面的實作更為可能,也可能更加拓展了對於自我的想像。

腦內對於自我的地圖並未被實際身體範圍所侷限


球拍當作身體的一部分。
這句話中的球拍可以替換成許多其他工具:菜刀、筆、螺絲起子,這些工具都會成為人體的延伸,相信這是許多人都有過的經驗,人所感覺到的自己也是不斷動態在改變,並非止於感覺神經的末梢,幻肢就是常見到的例子,車禍斷手的病人明明手已經不存在,卻不斷感受到它仍被輾壓。那當人能夠遠端操作機械手臂,機器又能回饋其感受時,自我的末端就已經從皮膚擴張到了機械手臂上,作者所進行的再行走計畫,就是想讓癱瘓的病人將自我延伸到人造的外骨骼之上(有看過明天過後的應該都了解甚麼是外骨骼 XD)。甚或當人與人之間的感知、思考、決策能夠透過機器而連通時,人與人之間自我的相互交融,在這樣的腦網相連中,你中有我,我中有你,那又會是一個怎樣的自我概念呢?

相對性腦的限制


  1. 固定能量預算限制
  2. 身體限制
  3. 個體歷史紀錄
作者對於相對性腦的限制雖然偏哲學層次但也相當有趣。固定能量限制認為當每個人能夠通過腦的血流量都有極限,所能發揮的腦功能自然就有一個瓶頸;每個人又都僅能靠著本身的五感與外界進行互動,身體限制導致我們永遠無法見著世界的全貌;個體從出生以至於結束,每個人經歷著獨特的歷史紀錄,所想望的自然也難以跳脫出個人記憶,甚至於所處時代,但這些限制是否會在自我的擴張後被打破,這又是一個值得觀察的問題。


這本書描述的遠景相當具有想像空間,也呈現了不少神經心理學研究,有些描述得比較細部,不是本領域的讀者可能要多費點心,沒時間想直接 End 的人們,也可以看看TED這部演講,作者在裡面簡單扼要的把書中的重要研究都已經陳現出來了,不管用甚麼方式,一起來體驗這場進行中的魔術盛宴吧。


2015年1月28日 星期三

[踩雷回報] Laravel Quick Start

今天心血來潮想完整的照著 Laravel Quick Start 跑一次,
由於開發環境是 win7 安裝 Homestead 的過程困難重重,
先直接從 Laravel dojo 載了wagon 體驗,卻因此在設定 route 時遇到一個雷。
如上圖的設定 routes.php 後發現只連的到 '/' ,卻連不到 user ,localhost/user 總是開啟404頁面,除非直接連localhost/index.php/user 才能吃到 route 中的設定,似乎是沒啟動 pretty urls 機制,歸納一下找到的處理方式,使用 Apache 的話可以參考看看,
  1. 先去 httpd.conf 設定 AllowOverride All ,這裡是為了對目標路徑的 url 進行重寫時從.htaccess 中讀取重寫規則 ( wagon 中已預設開啟)
  2. <Directory "/var/www/laravel/public">
        AllowOverride All
    </Directory>

  3. 在public中建立 .htaccess 檔,內部描述重寫規則,以下參考 laravel 官網 install pretty urls
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

主要是quick start 中沒有註明這段,不小心會錯過,設定好後就可以正確的導向 localhost/user 了。