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