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 產生驗證碼,強化帳戶安全

Laravel5.5安裝



安裝  Laravel5.5 前,需要 PHP7.0 以上!
(前陣子剛好試了將本機PHP從5.6升級PHP7.0.25)

1. 下載並安裝 Composer 。

   2019/07/18補充:
         choose the command-line php you want to use,就是要選php.ext

2. cmd下,執行:composer global require "laravel/installer"
3. cmd下,到目標資料夾中,建立一個blog專案,執行:laravel new blog
 ※這裡要等待一下,中間會跑安裝過程,最後看到以下兩句就建立完成了。
  Package manifest generated successfully.
  Application ready! Build something amazing.

 2018/11/21補充:
     composer 安裝laravel都是預設最新版,如果要裝舊的自行加上版本。
  composer create-project laravel/laravel [ProjectName] 5.4.*

4. cmd下,到blog資料夾裡,執行:php artisan serve,就會出現以下句子:
    Laravel development server started: <http://127.0.0.1:8000>
 就可以用瀏覽器開啟 http://127.0.0.1:8000 ,出現以下畫面,就代表安裝成功!


5. 學習Laravel第一小步,來個Hello World!
 修改 blog/routes/web.php
Route::get('/', function () {
//return view('welcome');
return 'Hello World!';
});


PSR-4: Autoloader


網址:PSR-4: Autoloader


Specification

(1) "class" 是指所有的類別classes,介面 interfaces,特性traits,和其他相似的結構。
(2) 一個完整 class 名稱有以下格式:
 \<命名空間>(\<子命名空間>)*\<類別名稱>
 \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
  • 完整 class 名稱 “必須” 包含頂層命名空間名稱,也被稱為vendor namespace
  • 完整 class 名稱 “可能” 包含一個或更多次級命名空間名稱。
  • 完整 class 名稱 “必須” 包含一個尾端類別名稱
  • 底線在完整 class 名稱的任何位置都沒有特殊意義。
  • 完整 class 名稱裡的英文字母 “可以” 是大小寫混合。
  • 所有 class 名稱 “必須” 以區分大小寫的方式被參考。
(3) 當載入對應完整 class 名稱的檔案...
  • 接在完整 class 名稱(的命名空間前綴)之後,一個或多個前導命名空間和接續的命名空間(不包含前導命名空間前的分隔符號),至少會對應到一個「基底資料夾」。
  • 在「命名空間前綴」之後,接續的命名空間名稱會對應到「基底資料夾」下的子資料夾,命名空間分隔符號代表了資料夾的分層。子資料夾 “必須” 符合命名空間名稱的大小寫。
  • 尾端 class 名稱對應到以 .php 結尾的檔案,檔案 “必須” 符合 class 名稱的大小寫。
(4) 自動載入實作 “不可” 拋出例外, “不可” 發出任何等級的錯誤,並且 “不應該” 回傳任何值。

Examples

下表展示了符合規範完整類名、命名空間前綴和文件基目錄所對應的文件路徑。
完整 class 名稱命名空間前綴基底資料夾對應檔案路徑
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

PSR-2: Coding Style Guide (下)


網址:PSR-2: Coding Style Guide

PSR-2 (上)

Control Structures

(1) if, elseif, else
 {與if, elseif, else要在同一行,不用換行。
 }與elseif要在同一行,不用換行。
 }與else要在同一行,不用換行。

(2) switch, case
 {與switch在同一行。
 case後的條件與:之間不可以有空白。
case必須縮排於switch,而break必須縮排於case。
 PHP允許case內沒有break,但需在第一個case 加上//no break註解。

(3) while, do while
 {與while在同一行。
 do與{在同一行。
 }與while在同一行。

(4) for
 {與for在同一行。
 =、<或>前後要留一個空白。
 ;之前不可以有空白,之後要留一個空白。
 第一個(之後 不可以有空白,最後一個)之前 不可以有空白。

(5) foreach
 {與foreach在同一行。
 =>前後要留一個空白。
 第一個(之後 不可以有空白,最後一個)之前 不可以有空白。

(6) try, catch
 {與try, catch要在同一行,不用換行。
 }與catch要在同一行,不用換行。
 }與finally要在同一行,不用換行。

Closures

function與(之間需留一個空白。
use前後都需要留一個空白。
{必須與function 同一行。55Function與method是要求{必須換新的一行,但closure要求{與function在同一行。
第一個(之後 不可以有空白,最後一個)之前 不可以有空白。
參數的,之前不可以有空白,而,之後需留一個空白。
參數列若提供預設值,則必須放在最後一個參數。

PSR-2: Coding Style Guide (上)


網址:PSR-2: Coding Style Guide

General

 (1) Code MUST follow all rules outlined in PSR-1.
 (2) File:
   用Unix LF (linefeed)作為換行符號。
   單純PHP不用 ?> 結束,並以以一個空白行作為結束。
 (4)  Lines:建議在每行80個字左右,最多不要超過120個字。
 (5) Indenting:使用4個space,不要使用tab。(或將編輯器的tab鍵做修改)
 (6) Keywords and True/False/Null:PHP的keyword都用小寫

Namespace and Use Declarations

 namespace宣告與use之間空一行,use與class之間再空一行。
 There MUST be one use keyword per declaration.(?)

Classes, Properties, and Methods

 (1)Extends and Implements
  extends和implements關鍵字與其類別名稱必需被宣告在同一行。
  左右大括號{}都要自己獨立一行。
 
 (2)Properties:
  屬性在宣告時一定 (MUST) 要給予初始值,不可使用var來當屬性。
  不要使用底線作為前綴,來區分屬性是 protected 或 private。
 
 (3)Methods
  不要使用底線作為前綴,來區分方法是 protected 或 private。
  Method names後一定不能有空格,左右大括號{},前面不能有空格。

 (4)Method Arguments
  在參數中,每個逗號前不要有空白,而逗號後一定要有空白。

 (5)abstract, final, and static
  abstract與final必須加在visibility之前。static必須加在visibility之後。

 (6)Method and Function Calls
  Method and Function呼叫時,參數的左右括號()前後不能有空格。

PSR-1: Basic Coding Standard


網址:PSR-1: Basic Coding Standard


1.Files
 (1) PHP Tags(PHP標籤):使用<?php ?> 或 <?= ?>,不可以使用其他標籤。
 (2) Character Encoding(編碼):一要要無BOM的UTF-8檔案。
 (3) Side Effects(從屬效應):“從屬效應”(side effects)一詞的意思是,僅僅通過包含文件,不直接聲明類、 函數和常量等,而執行的邏輯操作。

2.Namespace and Class Names
 (1) 命名空間以及類別一定要 (MUST) 依循 PSR-0。
 (2) 類別名稱大寫開始的駝峰大小寫命名法(StudlyCaps) 。
 (3) PHP 5.3 以後有Namespace的作法。

3.Class Constants, Properties, and Methods
 (1) Constants(常數):名稱由大寫字母以及底線符號所組成。
 (2) Properties(屬性) :屬性命名可以遵循 大寫開頭的駝峰式 ($StudlyCaps)、小寫開頭的駝峰式 ($camelCase) 又或者是 下劃線分隔式 ($under_score),只要統一就好。
 (3) Methods(函式):小寫開始的駝峰大小寫命名法(camelCase()) 宣告。

 

Visual Studio Code的優點


網址:為什麼我從 Sublime Text 跳槽 Visual Studio Code?

VS Code 優點 
1.開源、持續且活躍的開發
 Visual Studio Code 在早期版本就將原始碼公開在 GitHub,也是 GitHub 上成長最快速的開源專案之一。 
2.原生 Git 整合
 VS Code 直接原生整合了 Git 的基本功能,所以包含 commit、diff、resolve conflict 等等都可以直接透過 GUI 來操作。 
3.內建 debugger 框架
 各個語言的第三方套件能夠在 VS Code 上提供一致的操作體驗,包含 breakpoint、watch、call stack 等等。 
4.逐漸豐富的套件支援
 內建了套件市集的介面以及網站(Visual Studio Marketplace)。

comment的重要性



CREATE TABLE `table_name` (
`PKID` int(11) NOT NULL,
`FieldName1` int(11) DEFAULT NULL COMMENT '這是一個有comment的名稱1',
`FieldName2` int(11) DEFAULT NULL COMMENT '這是一個有comment的名稱2',
PRIMARY KEY (`PKID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='這是一個有comment的表格';

其實新增表格的語法,不是什麼很難的事,但是這次的重點就是comment!

怎麼說呢!?

最近在整理系統的表格,以前偷懶都沒有寫上comment,當系統開發到一個程度時,開始整理文件,就會發現表格一多要一一補上是一件很煩的事,如果當初有詳細填寫,只要透過語法或工具就能很快輸出資料格式了。


雖然一開始如果開發文件寫的很詳細,也是可以避免這個過程,但是還是老老實實的填寫是最好的。

WriteCodeOnline PHP


網址:WriteCodeOnline PHP


上一篇建立了PHP7的版本,但有時在一些電腦上不能安裝或想要簡易的編寫一下PHP做測式,就可以使用WriteCodeOnline PHP,不用再安裝打開網頁就可以寫PHP了,而且網站支援PHP7。


xampp中php5.6轉換到php7


網址:xampp中php5.6替换到php7

本機:window7 已安裝WAMPSERVER及XAMPPSERVER。
目的:想將XAMPPSERVER改成能隨意在php5.6和php7之間轉換。


一、將PHP7官網下載的文件解壓縮至 XAMPP\PHP7ts 目錄下。
  (PHP7ts也可以直接使用PHP7…等)

二、修改 xampp\apache\conf\extra\httpd-xampp.conf
  (修改前先備份原檔案)

三、將 XAMPP\php7ts\php.exe 修改為 php7.exe
  將 XAMPP\php7ts\php.ini-devolpment 修改為 php.ini


四、cmd 執行  php -v和php7 -v
  (這步驟雖然有執行,但不確定沒執會如何)

五、重新啟動Apache,來看看結果如何:phpinfo(); 以下是PHP7

六、再改回php5.6,看看與PHP7有何不同,以下是PHP5.6


目前僅僅安裝,還不知道PHP7與PHP5差異,再來試試看差異。




MariaDB 10新版大躍進


網址:MariaDB 10新版大躍進


MariaDB 10主要增加了3項新特色:

第一、新增高效複製功能。
   MariaDB 10可以平行複製資料以及更先進的集體提交功能(Group Commit)。

第二、增加原生NoSQL支援。
   新版增加了Connect 引擎來做外部資料管理。

第三、內建分片(Sharding)功能,MariaDB 10的Spider 引擎,可以將大型資料庫的表格分割儲存到不同的伺服器上,提升對分散式架構的支援,日後只要增加伺服器,便可增加資料庫容量。

Visual Studio Live Share共享多人同時編輯


網址:Visual Studio Live Share共享多人同時編輯


“Visual Studio Live Share讓開發團隊能夠在同樣的程式碼集(codebase)裡快速協作,不需要個別配置同樣的開發工具、設定或環境,也不必同步程式碼。”

方便的新功能,對於重覆建置環境覺得麻煩的人,就是一福音,還沒正式玩到這個功能,目前感覺有點像JS Bin。

系統分析師的工作


網址:漫談系統分析師的工作技能

一個好的系統分析師需要廣泛的了解各種領域的知識,這是我以前的想法,但是沒有人什麼都了解,文中說
我們是系統分析師而不是所謂的領域專家,我們的專業是去理解使用者的需求,進行歸納分析與轉化的工作,如何把這件事做好才是我們自己的領域知識。
所以與使用者、客戶溝通進而了解、分析才是最重要的。


摘要一下 11力真功夫: 
1.專業知識:從客戶身上快速學習與吸收領域知識的能力。
2.軟性技能:溝通力、促成力與人際關係能力。
3.聆聽:從客戶的話語中找出真正的重點。
4.面談和提問:有效釐清客戶需求的不確定性或分歧的地方。
5.分析力:找出脈絡,找出哪些是客戶真正需要的,哪些只是他們說需要的。
6.促成力:在有限時間內獲致具體的結論。
7.觀察力:要能發現客戶可能沒有提到微妙之處,從而發掘出要提出來討論的新需求。
8.書寫:清楚地描述出系統的各個面向,避免模棱兩可的詞句。
9.組織力:轉化使用者需求成系統需求,並建立出邏輯清晰的整體性架構。
10.人際關係:人的問題將遠遠比技術性問題難解決。
11.創新力:創造性的轉化,而不是機械性的將需求逐條地「翻譯」成系統需求。

Sublime Text 3 套件安裝


網址:Sublime Text 3 新手上路:必要的安裝、設定與基本使用教學

1.安裝 Package Control
  Ctrl + `→ 貼上 此頁編碼


2. [Preferences] →[Package Control] →Install Package
 或 快速鍵是:Ctrl+Shift+P 然後輸入 inst 之後按下 Enter 鍵

以上步驟就可以選擇想要安裝的套件。

目前使用的套件:
1.ConvertToUTF8:轉換Big5→UTF8
2.SublimeLinter:提示撰寫代碼錯誤
3.Doc​Blockr:自動產生區塊註解
4.SideBarEnhancements:提供許多側邊攔 (SideBar) 的右鍵選單功能

※查看已安裝的套件 [Preferences] →[Browse Packages]

軟體工程師的職業道德


網址:軟體工程師的職業道德!Code 的靈魂!

職業道德與靈魂!
  1. 對自己的程式責負
  2. 為使用者著想
  3. 不自誇,不浮實!
  4. 勇於說不知道!
  5. 擇善固執、適度讓步。

看到這個標題,很有趣,分享一下~

以我來說的話,道德就是為自己的Code負責,至於有沒有辦法注入靈魂,大概是大師才有的能力吧!

wordpress安裝五分鐘就上手


第一次安裝,果然五分鐘就上手!

官網:Wordpress

1.到Wordpress官網→下載想要的版本 (使用最新版本4.8.2)。

2.將wordpress解壓縮到本機環境。(使用XAMPP,解壓縮到htdocs資料夾下)

3.使用瀏覽器開啟路徑 http://localhost/wordpress/,就會開始跳出安裝導引了。

4.設定資料:
 ※資料庫名稱要預先新增好。
 ※使用者名稱需要能對該資料庫有建立表格,新增資料的權限。
 ※主機會址就是資料的位址。
 ※前綴使情況而定,因原本就有裝過故使用wp2_以示區別。

5.送出後,會跳出開始安裝(點選)→再次跳出網站設定(網站名稱、管理者帳號)→安裝wordpress,即可完成安裝。


6.最後會跳出後台管理登入,登入後可以開始設定自己的wordpress架構了。


目前試一下後台,有官方佈景可以設定,也試一下Menu~
要簡單的玩個網站也是一個方便的選擇。


線上的架站(https://zh-tw.wordpress.com/)

程式的效率、優化,高手必經之路…


網址:[轉載]學程式設計的人不能不看的好文章
           (文中原始轉載的網站怪怪的~)


“ 我從來沒有對我寫出來的程式進行過優化,最多就是進行詳細的測試,然後 Debug,但是這就足夠了嗎? "
文中作者這句話很有感,通常為求先完成,只要寫完達到目的就可以了,並沒有再去檢討或是思考程式的效率,久而久之就算覺得以前程式寫的醜(暴力法),其實也不會再去修改優化,通常砍掉重練的機率比較高!

作者:金蝶中間件公司 CTO 袁紅崗 
提出八點建議       (找不到原始來源)
  1. 紮實的基礎
  2. 豐富的想像力
  3. 最簡單的是最好的
  4. 不鑽牛角尖
  5. 對答案的渴求
  6. 多與別人交流
  7. 良好的程式設計風格
  8. 韌性和毅力

整合各系統登入,不難?


網址:整合各系統的登入,很簡單…嗎?

通常使用者、需求單位以為系統登入、登出就是輸入帳號、密碼,對於使用者來說就是兩個欄位,但每個系統在規劃時,都有各自的邏輯,想要整合各系統也不容易。

如果都是公司內部的系統,或許在整合上還能彼此配合修改;但如果還需要整合外部系統的登入,除了串接外,還有安全性的問題,外部系統也不太可能會配合修改,都不是三言兩語可以解決的。



FLEXBOX FROGGY



網址:FLEXBOX FROGGY

透過讓小青蛙順利的回到荷葉上的遊戲方式,學習CSS3Flexbox語法,增加趣味性,每一關卡的了解屬性與值的運用,就像在電動在破關一樣,用打怪的方式學習感覺可以降低不少痛苦,而且會想要突破關卡,就會比較主動學習了。

或許在使用者的操作手冊,思考這種方式或許讓使用者比較容易學習使用系統(XD)。

每一個屬性顯示: