Chrome OS 64:多支App能同時執行


NEWS:Chrome OS 64終於可以背景執行Android App,多支App能同時執行了

Chrome OS 64預覽版有一個名為Android Parallel Tasks的功能,開啟後可以同時展示Chromebook正在執行的Android apps,在工作列上也會看到圖示顯示已開啟的app。
在沒有背景執行功能的裝置上,只要使用者新開另一個app,則原先使用的app就會暫停運作,而如果沒有儲存,該app也會遺失資料。在智慧型手機等螢幕較小的裝置上,多個app同時執行沒有太大意義,只會加速電池的耗盡。但在Chromebook筆電上一次只能執行單一app則令人無法忍受。
ChromeUnboxed網站的影片顯示,安裝Chrome OS 64預覽版的筆電在開啟這項功能後三個app同時維持執行狀態,沒有暫停或資料遺失的情況。

的確在手機上要支援多app同時執行,只會讓手機效能減弱,也沒有太大的感受,但不同的裝置上能作業的範圍與功能就不同了,能多app執行,在測試上也比較方便。

工作雜記:固定的條列清單修改


工作上要修改一個舊有的網站,發現很多條列式項目是直接用HTML編寫的,不是抓資料庫裡的資料,當資料量大時編寫HTML反而很花時間,何況該項目還不出現在同一個地方!

修改前

原HTML
<input type="checkbox" name="test[]" value="1" />銷售儲備主管
<input type="checkbox" name="test[]" value="2" />銷售顧問
<input type="checkbox" name="test[]" value="3" />技師
<input type="checkbox" name="test[]" value="4" />服務專員
<input type="checkbox" name="test[]" value="6" />行政專員
<input type="checkbox" name="test[]" value="5" />零件專員
<input type="checkbox" name="test[]" value="7" />企劃專員
<input type="checkbox" name="test[]" value="8" />顧客滿意專員
<input type="checkbox" name="test[]" value="9" />總務專員
<input type="checkbox" name="test[]" value="10" />銷售企劃


修改後


網站用的是smarty

PHP
$SMT->assign('LIST',$LIST);

html
<{foreach from=$LIST key=k item=v}>
   <label><input type="checkbox" name="test[]" value="<{$v.ItemID}>" /><{$v.ItemName}></label>
<{/foreach}>

改完後只要將項目匯入資料庫,就不用再修改HTML了!

英國立法將10Mbps網速定為市民基本權利


新聞:英國立法將10Mbps網速定為市民基本權利

英國通訊傳播管理局認為10Mbps才能滿足一般家庭的上網需求,可順利存取串流音樂、串流影片、下載音樂,甚至花較長的時間下載HD電影。

網路果然已經是現代人不可缺少的要素之一了, 連英國政府都要將網速定為基本權利,代表更多的行為都將與網路密不可分。

PHP:Instruction separation


剛好看到這篇文章,做個記錄:PHP末尾的結束標籤,在純PHP為何不要使用呢!?

文件末尾的 PHP 代碼段結束標籤是選擇性的,有些情況下當使用 include 或者 require 時省略掉會更好些,這樣不期望的空格就不會出現在文件末尾,之後仍然可以輸出回覆表頭。在使用輸出緩衝時也很便利,就不會看到由包含文件生成的不期望的空格。     


參考文章:
(1) Instruction separation

川普簽署法案全面封殺卡巴斯基


新聞:川普簽署法案全面封殺卡巴斯基及相關業者的產品服務

因通俄疑雲,美國政府先是在7月限制採購卡巴斯基,9月更要求政府單位移除卡巴斯基相關軟體,周二川普簽署的國防法案,進一步禁用卡巴斯基相關的產品及服務,並將與其合作、股份關係的業者列為拒絕往來戶。
因為俄羅斯駭客早在 2015 年就運用卡巴斯基進行過類似行動。當時美國國家安全局(NSA)一些承包商將機密文件放在家中電腦而非公司,駭客便透過家中電腦安裝的卡巴斯基獲取相關資料。

參考文章:
(1) 川普簽署法案全面封殺卡巴斯基及相關業者的產品服務
(2) WSJ:俄羅斯已經把卡巴斯基防毒軟體變成間諜工具

PHPDoc


PHPDoc是PHP註解的一種格式,像PHPStorm…等的IDE都有內建的快捷產生。

sublime 安裝外掛:Ctrl+Shift+P 然後輸入 inst 之後按下 Enter 鍵 → Doc​Blockr安裝。
vscode 安裝外掛:Ctrl+Shift+X 搜尋PHP DocBlocker安裝。

安裝後只要在class、fun…等程式上面輸入/** 再按tab就會根據已有的程式內容產生部份相對應的註解格式了。


/**
 *  函數名稱
 *        函數描述(有些會含HTML代碼)
 *
 *    @access     變數可存取的權限 (Example: Public or Private)
 *    @api        爲第三方來源的變數
 *    @author     函數建立者名稱 (Example: @author Barry )
 *    @category   函數的分類別名,可能某些工具會利用這個來分類你的方法,使好幾個方法歸為某一類,方便做辨識使用
 *    @copyright  函數的版權宣告 (Example: @copyright 隨手寫有限公司 www.barryblogs.com)
 *    @deprecated 代表不建議使用的函數,未來可能會移除這個方法使用到的某個變數,或整個方法都被刪除
 *    @example    代表這個函數使用方式可以參考某個資料,可以使用檔案位置或網址 (Example: @example http://www.barryblogs.com/)
 *    @filesource 這個函數所需的來源
 *    @global     函數內有使用的全域變數註解 (Example: @global Number $user_id)
 *    @ignore     代表這個函數或區域可以被忽略,通常會加上說明
 *    @internal   代表這個函數或區域可能只給予內部使用
 *    @license    此函數可能是含有某個版權或許可 (Example: @license http://opensource.org/licenses/gpl-license.php GNU Public License)
 *    @link       可能與某個網站有關係 (Example: @link http://www.barryblogs.com/)
 *    @method     函數有使用的方法 (Example: @method Array @this->getCategories() or @method String getUserName())
 *    @package    利用這個註解來達到細部分層結構 (Example: @package PSR\Documentation\API or @package PSR\Documentation\Doc)
 *    @param      函數要帶入的參數 (Example: @param String|Number $username)
 *    @property   如果這是一個類別的函數,在類別建構時通常會指定初始化參數,而這個函數可能會使用到某些初始化後的參數,稱之為屬性 (Example: @property Resource|Boolean $mysql_connect)
 *    @return     函數最後的回傳值或形態 (Example: @return Array|Object|Boolean)
 *    @see        函數參照或關聯的方法 (Example: @see Class User or @see BarryBlogs)
 *    @since      函數內某個使用的變數由哪個版本變動 (Example: @since v1.3376a $user_nickname )
 *    @source     這個比較特別,在函數中可以標示從 m 至 n 行 是做什麼事情 (Example: @source 14 21 Get user data)
 *    @static     靜態變數的註解 (Example: @static String $lang = 'zh_TW')
 *    @subpackage 利用這個註解來達到細部分層子結構,通常會同時使用 @package,可以參考上面的@package (Example: @package PSR
 *                                                                                                  @subpackage Documentation\API)
 *    @throws     例外處理的註解,有多種例外處理的方式,每種方式都不同 (Example: @throws InvalidArgumentException if the provided argument is not of type 'array'
 *                                                                            @throws Exception other...)
 *    @todo       計劃要進行的項目描述,一般應該會使用文字描述
 *    @uses       代表某個元素可能與其它結構有利用關係 (Example: @uses MyClass::$items to retrieve the count from)
 *    @var        變數(物件成員變數)的形態或描述 (Example: @var Boolean)
 *    @version    函數的版本 (Example: v1.3258c)
 */

/**
 * 使用者類別
 *    使用者相關的方法
 */
class User {
    /**
     * 使用者編號
     *
     * @access public
     * @var Number
     *
     * @version 1.0
     * @author Barry
     */
    var $user_id;

    /**
     * 建構子
     *
     * @param Number $user_id 使用者編號
     * @property Number $user_id 使用者編號
     *
     * @version 1.0
     * @author Barry
     */
    function __construct($user_id) {
        $this->user_id = intval($user_id);
    }

    /**
     * 取得使用者編號
     *
     * @return Number|Boolean
     *
     * @version 1.0
     * @author Barry
     */
    function getUserID() {
        if( ! empty($this->user_id)) {
            return $this->user_id;
        }
        return false;
    }

    /**
     * 取得分類資料
     *
     * @ignore Number $parent_id 上層分類編號
     * @global Class $model 模型變數
     * @see Class Model getCategories() 取得分類資料模型
     * @return Array|Boolean
     *
     * @version 1.0
     * @author Barry
     */
    function getCategories($parent_id = 0) {
        global $model;

        $rows = $model->getCategories($parent_id);
        if ( !empty($rows) ) {
            return $rows;
        }

        return false;
    }
}

PHP Framework CodeIgniter 安裝(解壓縮)


官網:CodeIgniter繁體中文


CodeIgniter 是一套 PHP 的框架,簡稱 CI。

前置作業

當然就是要有一個可以跑PHP的環境~

Laravel在下載頁面會告知PHP的版本,那 CI呢?
還好先前剛好在整理Coding Style時,在 CI 的風格指南有看到PHP的需求版本,
CodeIgniter 建議 PHP 5.6 或是更新的版本,最低需求是 PHP 5.3.7。
※PHP5.6、5.4版本就有一些差異,更不用說更新的版本PHP7了,在使用上也要注意。


安裝 (其實是解壓縮)

基本上 CI 的安裝比較容易,就是將官網上下的檔案解壓縮至目的資料夾。
然後再打開你的路徑URL,登登…就完成了!



HTTP、HTTPS、TSL、SSL初步認識


新聞:Firefox也將把HTTP傳輸的網站列為不安全

摘要:Google在今年10月釋出的Chrome 62已將所有輸入資料的HTTP網頁列為不安全,Mozilla也準備讓Firefox跟進,明年3月將正式釋出的Firefox 59將會具備隱藏功能,可將所有HTTP網頁視為不安全。

--------------------------------------------------
備註

HTTP

超文本傳輸協定(英文:HyperText Transfer Protocol,縮寫:HTTP),是 TCP/IP 通信協議(應用層),用來提供 World Wide Web上的幾乎所有的文件和數據,統稱資源。這些資源可能是HTML文件,圖像文件,查詢結果,或其他任何東西。

TSL、SSL

SSL(Secure Sockets Layer)是網景公司(Netscape)設計的主要用於Web的安全傳輸協定,SSL包含記錄層(Record Layer)和傳輸層,記錄層協定確定傳輸層資料的封裝格式。

TSL (Transport Layer Security,傳輸層安全性) 是更新、更安全的 SSL 版本。


HTTPS

超文字傳輸安全協定(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種透過計算機網路進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密封包。HTTPS開發的主要目的,是提供對網站伺服器的身分認證,保護交換資料的隱私與完整性。


參考文章:
(1) Firefox也將把HTTP傳輸的網站列為不安全
(2) http (wiki)
(3) https (wiki)
(4) TLS (wiki)

MySQL-在WHERE條件使用IF


金額表Money
流水號時限(Deadline)等級(Level)金額一(One)金額二(Two)金額三(Three)
12017/12/311000050100150
22017/12/3120000100200300
32017/12/3130000150300450
4NULL10000100200300
5NULL20000200400600
6NULL30000300600900
7NULL400004008001200


查詢同時符合以下條件
(1) 日期2017/12/19,查詢結果為→時限2017/12/31的資料。
(2) 日期2018/01/01,查詢結果為→時限為NULL的資料。

Try 1

測試2017-12-19查詢,用OR無法得到想要的結果。
-- MySQL
SELECT * FROM Money
WHERE (Deadline >= '2017-12-19' OR Deadline IS NULL)
GROUP BY Level
結果會讓流水號7也跑出來
流水號時限(Deadline)等級(Level)金額一(One)金額二(Two)金額三(Three)
12017/12/311000050100150
22017/12/3120000100200300
32017/12/3130000150300450
7NULL400004008001200


Try 2,在WHERE裡使用IF和子查詢

測試2017-12-19查詢
-- MySQL 測試2017-12-19查詢
SELECT * FROM Money
WHERE IF( (SELECT sub_m.Deadline FROM Money AS sub_m WHERE sub_m.Deadline>='2017-12-19' LIMIT 1) IS NULL, 
 Deadline IS NULL,
 Deadline>='2017-12-19')
ORDER BY Level ASC
結果:
流水號時限等級金額一金額二金額三
12017/12/311000050100150
22017/12/3120000100200300
32017/12/3130000150300450


測試2018-01-01查詢
-- MySQL 測試2018-01-01查詢
SELECT * FROM Money
WHERE IF( (SELECT sub_m.Deadline FROM Money AS sub_m WHERE sub_m.Deadline>='2018-01-01' LIMIT 1) IS NULL, 
 Deadline IS NULL,
 Deadline>='2018-01-01')
ORDER BY Level ASC
結果:
流水號時限等級金額一金額二金額三
4NULL10000100200300
5NULL20000200400600
6NULL30000300600900
7NULL400004008001200


微軟決定把OpenSSH放進Windows 10



新聞:遠端管理好用!微軟決定把OpenSSH放進Windows 10
OpenSSH是個基於Secure Shell(SSH)的開放加密通訊協定,最常見的應用就是用來遠端登入系統,特別是基於Unix平台的Shell帳號。
過去要在Windows上存取遠端伺服器通常要仰賴PuTTY等連線軟體,微軟曾在2015年宣布要以PowerShell來完成Windows對OpenSSH的支援,這次則是直接讓OpenSSH成為Windows 10的內建功能,也被視為是微軟大力擁抱開源社群的成果之一。
雖然現在各種方便的工具都可以下載安裝,但windows可直接使用SSH再好不過。

何謂OpenSSH?OpenSSH(OpenBSD Secure Shell)是使用SSH透過計算機網路加密通訊的實現。 它是取代由SSH Communications Security所提供的商用版本的開放原始碼方案。

何謂SSH? 簡單說就是加密過的telnet。

而Telnet協議是一種應用層協議,使用於網際網路及區域網中,使用虛擬終端機的形式,提供雙向、以文字字串為主的互動功能。屬於TCP/IP協議族的其中之一,是Internet遠端登錄服務的標準協議和主要方式,常用於網頁伺服器的遠端控制,可供使用者在本地主機執行遠端主機上的工作。
明碼:當資料封包在傳輸時,該封包的內容為資料的原始格式,只要被有心人攔截,就很容易的會被知道所有資料。


參考文章:
(1) 遠端管理好用!微軟決定把OpenSSH放進Windows 10
(2) SSH
(3) OpenSSH
(4) Telnet
(5) 簡易 Telnet 與 SSH 主機設定

VSCode Version 1.19


VSCode 更新至 VSCode Version 1.19了

目前比較有感的更新是:

1.Folding improvements 在編輯器中要展開/摺疊程式碼 (點擊 +/- 符號)
 用Shift + Click (點擊+/- 符號)時,看點擊的次序,會同時展開子階層,或同時收起來。
 再次單用Click時,只會展開第一層,這個很方便,可以讓程式方便閱讀。


2.Smarter IntelliSense 更聰明的 IntelliSense 支援
 (1) 輸入程式選擇keyword後,再輸入相同的會使用最近一次的選擇,按tab就可以代出。

 (2) 輸入錯誤相反時,還是能搜尋出選項,這個很聰明啊~有時手殘就是會打錯。

3.Compare open file to Clipboard 可以拿現有開啟的檔案與剪貼簿中的內容進行比對
 這種可以將整段複製的程式碼做比對,也滿有趣的~

目前只能先玩一下,比較肉眼(肉腳)看得到的部份~其它可看保哥的介紹或是原文。

參考文章:
(1) Will 保哥的技術交流中心→Visual Studio Code v1.19 正式推出!

IDE與Editor有什麼差別!?


想爬看看別人使用PHPStorm的情況,就看到IDE這個關鍵字,什麼是IDE!?

根據wiki有兩種解釋:
IDE可能有多種含義:
● 整合裝置電路(Integrated Drive Electronics),一般作為ATA硬體的介面,主要用於硬碟和光碟機
● 整合開發環境(Integrated Development Environment),一類輔助開發電腦程式的應用軟體
以PHPSrorm來說的IDE就是第二項 IDE 整合開發環境

整合開發環境(Integrated Development Environment)
編譯式語言在開發需要經過撰寫、編譯、連結、除錯、執行…等過程,那以前處理這些過程的工具軟體各自獨立,會讓開發變得不方便。因為目前許多程式語言都摎用IDE的方式,簡單說IDE工具大致上會包含以下項目(並非一定,還需要看各種程式語言需求):
 .編輯器(Editor)
 .編譯器(Compiler)
 .連結器(Linker)
 .除錯器(Debugger)
 .執行(Execution)

從以上就可以了解到編輯器(Editor)是IDE中的一環,其實現在許多編輯器基本的功能已經做得不錯,看開發者在使用時需要什麼環境及功能也都可以外掛,逐步建置自己的開發環境也是另一種學習。


參考文章:
(1) 整合開發環境(wiki)
(2) IDE、編輯器的迷思
(3) 7 種流行PHP IDE 的比較
(4) Top Code Editors And IDE For PHP Development Of 2017

Blogger Code Pretty


之前在貼一些Code時,想區分一下跟內文的差異,但Blogger並沒有比較好的格式,雖然VSCode貼上來,會自動有顏料,但總也不是這麼好看如下:

▼以下是VSCode直接貼上來的程式碼,但間距太大,還是不好看。
Route::get('/', function () {
//return view('welcome');
return 'Hello World!';
});

【CSS方法】
爬文找了一下CSS來改善,只要將下面CSS加入Blogger裡,

code.litepretty {
    display: block; /* fixes a strange ie margin bug */
    font-family: Courier New;
    overflow:auto;
    background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y;
    border: 1px solid #ccc;
    padding: 10px 10px 10px 21px;
    max-height:200px;
    line-height: 1.2em;
}
code.litepretty.cmd {
    background-image: none;
    background-color: black;
    color: white;
}
code.litepretty.note {
    background-color: white;
    color: black;
}
code.litepretty>.imp{
    color: red;
}
code.litepretty>.info{
    color: lightblue;
}
code.litepretty>.cmt{
    color: gray;
}
加在哪裡呢?到Blooger→主題→自訂→進階→新增CSS,將上述的CSS貼上即可。


用法就是編輯HTML加上 <code class="litepretty">內容</code>

雖然可以讓Code稍為區隔,但是自已加上br也是有點蠢!

【highlight.js方法】
決定再試一個方法,使用highlight.js,選擇想要的styles,例如:Ir Black
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/ir-black.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
將hightlight的CSS與javascript加到Blogger→版面配置→新增小工具貼上上述語法,如下圖

用這個方法直接在編輯HTML時只要用下列方式:
<pre><code class="php hljs">
//程式碼
</code></pre>
就可以顯示出以下格式了,記得class要改成所要顯示的語言即可。
//程式碼
Route::get('/', function () {
    //return view('welcome');
    return 'Hello World!';
});

Route::get('about', function () {
    return 'this is about!';
});

參考文章:
(1) 美化 blogger 程式碼
(2) 網頁使用程式碼高亮的最佳作法及推薦外掛
(3) 『教學』如何美化部落格上的Code排版?推薦使用highlight.js高光程式碼!WordPress、Blog、Web都可用~       

VirtualBox共享資料夾


1.設定共享資料夾,啟動前後都可以設定
 (1)VirtualBox管理視窗

 (2)執行中的VM:如下圖在資料夾上點選右鍵,即可設定共用資料夾。



2.選擇一個實際的路徑做為設定,要記得這裡給的資料夾名稱,後面設定會用到。


3.掛載共享資料夾
 這裡可以用先前介紹利用SSH連線docker VirtualBox,會比較容易下指令,至少複製比較方便。
主要的指令為
 sudo mkdir -p /mnt/www
 sudo mount -t vboxsf -o defaults,uid=`id -u docker`,gid=`id -g docker` www /mnt/www
 設定好就可以用 ls的指令去看,資料夾有沒有掛載成功,看看放在資料夾裡的檔案有沒有正確被列出來。

參考文章:
在 windows 下用 docker toolbox 搭建开发环境

中信金誤刪交易資料


網址:行庫動態:誤刪交易資料,中信金(2891)旗下中信銀遭金管會開罰200萬元


It's blue Monday. 憂鬱的星期一(英文課大誤)

分享中信金的憂鬱(雖然已經一週前也不是星期一),誤刪資料是很嚴重的事,像中信金這麼大的公司,照理應該有很多SOP進行後才能刪除資料,或者是權限很高的人,所以誤刪會不會也不是這麼單純呢!?

在任何系統上刪除資料是都有很高的風險,刪除的資料能不能強救回來,還有刪除的權限控制,適時週期性的備份都是很重要的關鍵。

不然前陣子很常發生離職員工將重要資料刪除…造成的損失就難以估計了!

Progressive Web App (PWA)是什麼?



在看到Google將以PWA取代Chrome app時,黑人問號來了~何謂PWA!?

摘要:
何謂 Progressive Web App (PWA)  先講結論,Progressive Web App 是希望能夠讓 Web application 盡可能的在各種環境(網路環境、手機作業系統等)下都能順暢且不減功能性的運作,並讓你的 Web App 可以:
 1. 直接被使用者安裝到桌面
 2. offline 使用 (離線使用)
 3. 擁有推播功能
 4. 開啟時看不到 URL Bar(類 Native app 的使用經驗)
 5. 開啟時有 Splash Screen (登入畫面)

利用SSH連線docker VirtualBox


在嘗試建立 Docker 和 Container時,雖然有GUI的介面可以安裝,但是共用資料夾的設定…等,還是需要自己下指令,了解指令也是很令人頭疼啊!

原先使用VirtualBox的工具如下,但是不能複製也不能貼上,十分的難用~

查詢學習Docker的過程,有網友建議用SSH連線來管理Docker,就會方便許多。
剛好同事推薦了一個終端機的工具(cmder)正好派上用場。

1.開啟VirtualBox的VM後,會顯示該VM的IP。

2.打開下載的cmder,輸入 SSH docker@192.168.99.100 (看實際的IP)
 ※docker 預設的帳密是 docker/tcuser

有複製貼上的功能方便很多了~~

Docker安裝 For Win7


公司電腦是Win7版本,現在Docker windows版直接安裝的是win10,win7必需透過DockerToolbox安裝VM才能使用Docker。

1.下載DockerToolbox安裝:https://docs.docker.com/toolbox/toolbox_install_windows/
 基本上都是下一步繼續既可,安裝完成後會有Docker、Git、Oracle VM VirtualBox。
 
2.安裝完成要開啟VM時,出現了錯誤如下:

 參考此篇文VT-x/AMD-V的說明,原來是VT-x要開啟,只好重開機進BIOS設定。
 設定路徑:Advanced→CPU Configuration→Intel Virtualization Technology 修改為Enabled,儲存重開機。

3.開啟Docker
 3.1 Oracle VM VirtualBox打開VM,跑出如下畫面就安裝成功啦!

3.2 或是打開Docker Quickstart Terminal
  快速啟動Docker,會使用VirtualBox裡的default虛擬器,成功開啟如下:

  3.3 用Kitematic (Alpha)介面來設定安裝,選了Apache+PHP7來試試看,安裝完選紅框可以看到成果,有介面操作真的太方便了!
  唯一缺點是,只能default的樣子,還是待乖乖學怎麼下指令安裝。


參考文章:
(1) Kitematic (Alpha) for windows
(2) VT-x/AMD-V 硬體加速在您的系統不可用
(3) 如何啟用 Intel VT-x 和 AMD SVM?


PHP 7.2 發佈


網址:PHP久違兩年的功能性更新,7.2版更安全了!

摘要:
PHP 7.2針對安全性的更新包含了使用為最高記憶體填充率設計的Argon2密鑰導出函數(Key derivation function)解決目前現行功能的缺點,並且鼓勵開發者使用libsodium加密函式庫,並將其加入核心套件中,以避免今年三月發現可能由JSON網頁加密(JSON Web Encryption,JWE)讓無效曲線攻擊有機可乘的漏洞。另外,改進了SSL/TLS協定的常量,以及移除了遭PHP開發者詬病的Mcrypt加密函式庫。

而在程式編寫功能上,PHP 7中的Zend腳本引擎在處理哈希表(Hash table)時,會於某些特殊情況可能找不到整數鍵值,在PHP 7.2的修正,避免了發生錯誤的可能性。另外,修正了開發者在宣告需要傳遞物件或是回傳物件時會遇到的物件輸入提示錯誤。現在HashContext將使用物件擴充而不再使用支援。PHP 7.2還為Count函式傳入值加入了新的警告訊息。


無知小心得:無法跟進速度,就會變得什麼都不懂了,還在摸索PHP7的差異,現在已經7.2了,看不懂的關鍵字很多,只好再慢慢查了。

CI的PHP Style Guide


網址:CI的PHP Style Guide

CI也有自己的coding style,與之前看的Psr有些許不同:

一、Class
  PSR:必須依循 StudlyCaps 大寫開頭的駝峰式命名[PSR-1]
     PHP5.3後必預使用Namespace的方式[PSR-1]
  CI :PHP5.2以前的命名是 class Vendo_Model_Foo

二、Methods
  PSR:camelCase() 小寫開頭的駝峰式命名[PSR-1]
  CI :function get_file_properties() 底線分隔,並且全小寫字母


三、TRUE, FALSE, 以及 NULL
  PSR:keyword、true、false、null都用小寫[PSR-2]
  CI :TRUE, FALSE, 以及 NULL 關鍵字應該永遠使用大寫字母。

四、縮排
  PSR:代碼必須使用4個空格符而不是「Tab鍵」進行縮進。[PSR-2]
  CI :在你的程式碼中使用 tab 作為縮排空白,而不是空白字元。

五、大括號
  PSR:只有class、function外大括號是獨立自已一行[PSR-2]
  CI :大括號永遠自己放在一行。



雙因素授權


網址:關於密碼的雙因素授權,你應該要知道的 5 件事
原文:5 things you should know about two-factor authentication

1.雙因素授權(two-factor authentication )或是兩階段認證(two-step verification)?
 3 種授權方式
  .一種是你已經知道的,例如密碼或 PIN;
  .一種是你已經有的,例如手機或特殊的 USB 鑰匙;
  .一種是你與生俱來的,例如指紋或其他特徵。
 ★雙因素授權(two-factor authentication ),就是結合了兩種不同的授權方式,
 ★兩階段認證,則是兩次都使用相同的授權方式。

2.一個帳號走天下
 將電子郵件設定雙因素授權或者兩階段認證,是保障帳號安全的開始。

3.已完成。然後呢?
 在你常去的網站開始啟用雙因素授權。

4.該不該將裝置識別為「可信任的裝置」
 對於使用者來說,這當然非常方便,但是卻也有一定的安全隱憂。如果你在這款信任的裝置上關閉了雙因素授權,這就使得駭客可以輕鬆地盜取你的訊息,因此對於這一點也要時刻注意。

5.我有可能把自己「搞丟」了嗎?
 .大多數的網路服務都有對應的緊急計畫,例如使用備用號碼來進行恢復你的帳號。
 .少數的網路服務可以多設一組備用密碼,在需要的時候透過這個密碼來恢復帳號。
 .上述方法都無效,只能用最原始的辦法,打客服電話或發郵件去向網路服務公司的技術人員尋求協助,但必需證明「你就是你」。

補充:[教學] 開啟 Google 兩步驟驗證,使用 Google Authenticator 產生驗證碼,強化帳戶安全