中國上海四天三夜

3 月中的時候到上海待了四天三夜,來紀錄一下這幾天的感受。推薦行程在網路上應該可以查到很多,所以不細寫行程,會紀錄發生的一些事情跟感想。

食物

先分享上海的食物,在網路上搜尋的話,應該會發現很多小籠包、煎包之類的店,這幾天吃過了幾家分別有:

南翔饅頭店

南翔饅頭店

在豫園附近的南翔饅頭店,可以「打包」(臺灣用語:外帶)與內用,當天排隊很長,我們選擇外帶,在點餐的時候,有分結帳、取餐的窗口,結帳的店員會敲打窗戶旁邊,感覺會像是叫客人快點餐、付錢,感受蠻差的。

點了蟹黃灌湯包、鮮肉小籠,自己比較喜歡第一個蟹黃灌湯包,是吸管插在包子內,吸裡面的湯汁,第二個沒那麼喜歡是因為,在上海吃包子蠻多人會加醋,完全沒辦法接受當地醋的味道。 繼續閱讀 “中國上海四天三夜”

中國上海四天三夜

開源的 IndicatorBarView-Android UI 元件

專案網址:https://github.com/ymhuang0808/IndicatorBarView-Android

授權:Apache License Version 2.0

為什麼開發?

這是自己的第一個 Android 開源專案,會建立這一個專案是因為自己的另外一個開源專案要用到數值指針的 UI component (謎之音:那個專案還躺在電腦中…),簡單說有點像溫度計,但是,沒有找到合適的 component。想了之後,先把這個 UI component 先開源出來好了,不過,還有蠻多事情還沒完成的 (請看 TODO),只是開源出來,能逼自己快點把這個專案弄得更成熟,或許也有更厲害的人能貢獻,這樣就自己不用寫太多了 (誤)

躺了超久的專案

如果去看 commit log 的話,會發現從 2016 年 08 月底就在動了,過了半年才有個雛形 (都已經從 Android 7.0 到 7.1.1 了)。

記得大學時候的專題,還一度想自己寫 Android 的 custom view,但是當初對 Android、Java 的熟捻程度還不夠,一直沒踏出第一步。寫 custom view 自己覺得還蠻苦的 XDD,尤其是 debug 的時候,經常遇到 Canvas, Paint 有執行,但是在 App 中就是沒出現,後來才發現,經常是 Canvas 指定的 x, y 值超出螢幕視線外,還有是 Paint 的顏色是白色 (因為背景是白的呀… 倒)。

BTW,如果有興趣開發 Android custom view 的開發者,推薦可以去觀看 Droidcon NYC 2016 – Measure, Layout, Draw, Repeat: Custom Views and ViewGroups,影片中提到蠻多開發 custom view 需要注意到的事項,會讓自己對 custom view 有更多的認識。

開源的 IndicatorBarView-Android UI 元件

找出網站中的混合內容 (mixed content)

Google 在 2014 年宣布 HTTPS 將會是搜尋排名的參考之一(相關連結:Official Google Webmaster Central Blog: HTTPS as a ranking signal),到了最近也宣布 Chrome 到了 2017 年 01 月的 Chrome 56 中(相關連結:Google Online Security Blog: Moving towards a more secure web),將會把不是採用 HTTPS 的輸入密碼或信用卡卡號的網站標示為 Not secure(動作超大),最後,會連不是 HTTPS 的網站都標成 Not secure…

blog-image-1
圖片來源:Google Online Security Blog

在把網站從 HTTP 轉到 HTTPS,除了需要調整網頁伺服器上的設定、申請憑證,及把來自 HTTP 的連線都轉到 HTTPS 之外,更費時間的是要確保沒有混合內容 (mixed content) 的情形。

什麼是 mixed content

來看看 Mozilla 的定義:

如果以 HTTPS 傳輸的頁面含有以 HTTP 傳輸的明文內容,則這個連線就只有部分加密:也就是說,未加密的內容就有可能被竊聽或是被中間人修改,連線也就不安全了。當網站發生這樣的情況時,我們說這個頁面含有混和內容

— 取自《混和內容 – Security | MDN》

簡單來說,如果 HTTPS 的網頁中有包含了 HTTP 的連線,就是網頁中有 mixed content。

例如,連線到 https://fmbase.tw/secure-page/,網頁伺服器回應 HTML 給瀏覽器去解析,當有像 <img src=””> 的標籤,需要再發出 HTTP(S) request 來取得圖片,如果當圖片是 HTTP 資源的時候,這個網頁就有 mixed content。

繼續閱讀 “找出網站中的混合內容 (mixed content)”

找出網站中的混合內容 (mixed content)

Laravel Homestead 新增站台

laravel logo

Laravel Homestead 是一個提供 PHP 或 Laravel 開發環環境,可以不用再花時間設定開發環境、搞爛目前本機上的環境。一開始,Homestead 會預設一個 homestead.app 的站台,但是,如果還要再開一個專案、增加新站台,該怎麼做呢?

Laravel 5.0 Homestead 文件增加更多站台裡面,有提供兩種方式:

  1. homestead provision 指令:具有破壞性,原本建立的資料庫會被刪除再建立一次資料庫架構,所以資料並沒有保留著
  2. server 指令:原本資料庫資料等都會留著,只是之後要做的步驟有點多

目前只試過第 2 個方式,因為需要把資料庫的資料留著。

繼續閱讀 “Laravel Homestead 新增站台”

Laravel Homestead 新增站台

Git Fast-forward Merge

IMG_20150327_103310

前一陣子,在 twitter 上看到 GitHub 在三月份要來臺灣做教育推廣,剛好中研院資訊所有老師在 03/23 也有邀請 GitHub 來演講。

03/23 當天是 GitHub 員工 John Britton 擔任講者,主要是介紹 Git 、GitHub 使用,自己雖然開發會用 Git 來管理程式碼,但是只對操作上比較熟悉,在整個演講中,又重新了解一些 Git 運作方式,收穫蠻多的,剛好也有人問到一個 Fast-forward 的問題,當下並沒有很清楚了解,因為,演講完之後,有 GitHub 貼紙可以拿,拿到貼紙之後,回到辦公室其實已經忘記了 XD,還好同事有問我知不知道 Fast-forward,立馬在辦公室就找了一下資料。

繼續閱讀 “Git Fast-forward Merge”

Git Fast-forward Merge

不專業 ASUS UX305FA 開箱

幫老弟買筆電,又是開始上網尋找合適筆電的動作,主要考量是 3 萬以下、不要太重 (2 KG 以下)、記憶體 4G (含)以上、螢幕大小儘量為 13吋、SSD 為主,如果是硬碟最好是 7200 RPM。

其他像獨顯、數字鍵之類的就沒有在考慮範圍內,因為,已經有 PC,如果要打遊戲,用 PC 打還比較爽。

ASUS UX305FA購入時間:2015/03/28,購入地點:台北光華商場,購入金額:2X,000

繼續閱讀 “不專業 ASUS UX305FA 開箱”

不專業 ASUS UX305FA 開箱

Ruby 存取控制

圖片作者 Jozef Krajčovič  來源 http://jozefkrajcovic.sk/
圖片作者 Jozef Krajčovič
來源 http://jozefkrajcovic.sk/

Ruby 是一個完全物件導向程式語言,不管是字串、整數等,都是類別的物件。

在物件導向內,類別 (class)主要有方法 (method) 等組成,藉由呼叫方法來改變物件的狀態,Ruby 對方法的存取控制分為三個不同的層級,名稱與其他物件導向程式語言一樣,有 publicprotectedprivate

Public、Protected、Private 存取控制

在 Ruby 這三個存取控制層級與其他語言有不同之處,從其他語言跳到 Ruby 可能會忽略掉。

  • public 可以被任何人直接存取,例如:類別的物件可以呼叫 public 方法,預設所有的方法為 public,除了 #initialize 方法為 private
  • protected 層級比 public 小,只有相同類別或子類別內,才能存取 protected 方法
  • private 不能有明確的 receiver 呼叫 private 方法,表示 private 方法只能在物件內被呼叫

還是以下藉由程式來說明會更清楚!

繼續閱讀 “Ruby 存取控制”

Ruby 存取控制

第一次用 PHPUnit 寫測試就上手

一、什麼是測試?測試的重要性?

開發者在撰寫程式的時候,程式不大可能會沒有問題,所以通常就需要驗證程式的執行是不是符合預期。測試程式能用來驗證程式程式的運作是不是正常的,並發現程式中的錯誤,以增加軟體品質。

下面是一個活動報名的系統:

測試活動報名系統

這一個活動報名系統主要提供使用者報名活動,在報名活動內還有一些子功能,像是「限制活動報名人數」,如果是這一個子功能,該如何測試呢?

直覺想到可能就需要有 20 個以上的使用者,然後讓這個些使用者分別來報名活動,如果沒超過限制的人數,使用者就能繼續報名,反之,超過了限制人數的話,使用者就無法繼續報名了。說到這裡,會覺得這是什麼測試!

先分析一下,照上面的方法進行測試會有什麼問題:

  1. 測試案例一多,會花太多時間
    • 這時候,如果再增加報名截止日期的測試,這樣又需要再對報名功能測試一次
  2. 改了程式碼之後,需要再做一次測試
    • 日後維護時,會需要再次修改程式碼,但是,改了程式碼之後,該如何驗證修改後的程式運作上是沒問題的?所以,可能又要再次從頭做一次測試
  3. 與其他程式混在一起測試
    • 要執行報名功能的程式碼,要透過 view 的程式去呼叫。但是,這樣做測試的時候,如果測試失敗,就必須花時間去找出是報名的程式出問題,還是 view 程式

    那該如何解決這些問題呢?針對開發者來說,需要一個可以自動化、重複的、獨立的測試。

繼續閱讀 “第一次用 PHPUnit 寫測試就上手”

第一次用 PHPUnit 寫測試就上手

Docker 實作入門

目的

主要介紹 Docker 的實作,會提到以下幾個部分:

  1. 快速的建立 Docker container
  2. 管理 Docker 上的 container
  3. 下載 image 、commit 建立新的 image
  4. 經由撰寫 Dockerfile 來自動建立新的 image

在進入實作前,會簡單介紹 Docker 與虛擬化的差異、Docker 上的重要元件,接下來準備的部分會需要安裝 Docker 及先登入 Docker Hub。

 

簡介 Docker

Docker 是一個開源專案,支援多平台,從筆電到公、私有雲上能進行快速部署輕量、獨立的作業環境。Docker 使用 Linux 核心中的功能,Namespace 及 Control Groups (cgroups) 等,來達到建置獨立的環境及控制 CPU 、Memory 、網路等資源。

Docker logo

專案網址: http://www.docker.com/

繼續閱讀 “Docker 實作入門”

Docker 實作入門

用OpenShift 開發網站

openshift
圖片轉自OpenShift

從大學畢業後,要免費用伺服器還蠻麻煩的一件事情,查了許多VPS ,開發環境都不是非常好,像有些主機還是使用PHP 5.3 以下,MySQL 也不支援InnoDB Engine,服務也不沒很穩定,免費的主機也不能苛求太多,OpenShift 是由Red Hat 建置,跑在Amazon EC2上,穩定度看來是不錯的。

1. 介紹OpenShift

OpenShift 是RedHat 建立的雲端服務,屬於平臺即服務 (PaaS),可以讓開發者或一般人方便的使用架設好的開發環境,不用花費太多時間在管理系統上面。官方也蠻不錯的,提供一個免費方案,另一個基本上算免費,先看一下比較。

Free Bronze
Small Gears(1~3) *1 免費 免費
Small Gears(4個以上) X 須付費
Gear 閒置 *2 2天 X
基本儲存空間/1個Gear 1G 1G
額外儲存空間 X 須付費
rhcloud.com 上的次級網域
自訂網域
分享SSL/TLS 憑證
自訂SSL/TLS 憑證 X
付款資訊 *3 X

備註:

  1. Gear 是一個被限制的資源(如:記憶體、儲存空間等),簡單來說像是一個電腦一樣,Small Gear 的資源就是512M 的記憶體、100M swap 空間、1G 儲存空間(可付費擴增)
  2. Gear 閒置指,如果在某段時間內(免費方案是2天)沒有接收到HTTP 要求的話,會進入idle 狀態,如果有HTTP Request 進來,就會進入Started了(自己測試idle 切換到started 要等10幾秒左右)
  3. 付款資訊在Bronze 方案,是要填入信用卡資訊的,所以小心Small Gear 用超過1G的儲存空間就會開始計費…

比較起來,OpenShift 還不錯,可以自訂網域,記憶體跑小demo 、做Lab或者是小流量的網站 也不錯。官方說明中,以Drupal 來估計,Small Gear 可以Free 方案大約可以每秒15 個頁面、數百篇文章、每個月5萬個訪客,詳細得比較可以去看https://www.openshift.com/products/pricing

支援的程式語言包括,Java、PHP、Python、Ruby、Node.js、Perl等,本篇文章以PHP 為開發環境,資料庫則有MySQL、MangoDB、PostgreSQL等,如果要知道支援的版本,可以至https://www.openshift.com/developers/technologies

繼續閱讀 “用OpenShift 開發網站”

用OpenShift 開發網站