2022年12月7日

PHP Laravel,來談談 Collection (一): 介紹 Collection 與 10 種常用的方法

本篇為 PHP 系列

什麼是 Collection

Laravel Collection 底層主要的資料結構是 PHP Array,也就是陣列。但 Laravel 透過 Collection 類別,將陣列進行封裝後,提供了比單純的陣列更加流暢 (fluent) 及更便利的用法。

另一方面,在 Collection 的設計概念中,也借用了部分函式語言程式設計 (Functional Programming) 的想法,因此學習 Collection 也替開發者帶來不同的思維模式。

Collection 完整名稱: Illuminate\Support\Collection

先來看一個 Collection 的簡單應用:如何把 Array 中的每個值都乘以 2?

如果是傳統的陣列,可以這樣做:

$array = [1, 2, 3, 4];
for ($i = 0; $i < count($array); $i++) {
    $array[$i] = $array[$i] * 2;    
}

在陣列的範例中,開發者要自己處理迴圈的計數,也要自己取出值,乘以二後再寫回陣列。雖然不難,但有很多細節要留意。

而在 Collection 則可以這樣做:

$collection = collect([1, 2, 3, 4]);
$collection = $collection->map(function($value) {
    return $value * 2;
});

雖然以這兩個範例來說,程式碼的量差不多,但在 Collection 的範例中,開發者不用自己處理迴圈,也不用花心力在值的取出與寫入,可以更專注在實際要做的事情。

2022年11月25日

PHP Array 迴圈作法。比較 for 及 foreach 用法

本篇為 PHP 系列

PHP 的 Array 很方便也很彈性使用,當我們想要對 PHP Array 做迴圈的時候,比較常用的兩種做法是 for 及 foreach。而在大部分的情況下,foreach 是比較建議使用的方式。

本文會針對 PHP Array 的用法稍作說明,然後解釋 for loop 及 foreach 的用法,如果你已經熟悉 Array 用法可以直接跳到後面。

PHP Array

PHP 中的 Array,也就是陣列,是由成對的 key 和 value 所組成的資料結構。 key 在大部分情況下可以是任意字串或數字。

array(
    key  => value,
    key2 => value2,
    key3 => value3,
    ...
)

2022年11月17日

PHP 如何測量程式執行時間 - 使用 time、microtime 及 hrtime

本篇為 PHP 系列

一支程式的效能有幾個重要的指標,其中一個是記憶體用量,之前的文章中有介紹過如何衡量記憶體用量,而今天這一篇文章要介紹的則是另一個重要指標:執行時間。

要如何測量程式的執行時間?其實原理很簡單,只要記錄開始時間結束時間,然後以後者減去前者就好了。

在 PHP 中有 time()microtimehrtime 可以用來取得目前時間,而這三者的主要差別在於時間的精細度。

2022年11月7日

沒有指紋辨識!從 Pixel 3 跳槽 iPhone 14 心得,電池升級很有感

▲信義A13 - iPhone 14領貨現場

上一支手機

如同標題,我的上一支手機是 Google Pixel 3。我是在 2019 年 1 月購入,實際使用到 2022 年 9 月,用了將近四年。以現代手機來說,一台手機可以用四年已經超乎預期了。

但手機用久了還是會老化,總是會有效能消退、電池壽命或其他小故障等等問題。結論就是,我的 Pixel 3 電池已經不行了,即便只是輕度上網,基本上撐不過三小時。畢竟硬體已經隔了這麼久,很多程式越來越吃資源,要維持同樣的效能,CPU 只能用更高功率運作,我認為這即便換電池也沒辦法改善了。

2022年11月5日

如何才能升遷?技術能力好就該當主管嗎?《彼得原理》的答案是 NO

在一個開發團隊裡面,通常怎樣的人會被升任為主管?以一般直覺來講,通常是開發能力最強的那一個。其實這樣的決策看似合理,但卻有盲點存在。你可能會想問,找一個開發能力最強、最獲得眾人信任的人來擔任主管,這有什麼問題嗎?

再談論這個問題之前,我們先來聊聊什麼是彼得原理。

彼得原理

根據維基百科,彼得原理的定義如下:

在組織或企業的等級制度中,人會因其某種特質或特殊技能,令他被擢升到不能勝任的高階職位,最終變成組織的障礙物(冗員)及負資產。

大家在工作的時候,是否經常覺得主管很無能?或是沒辦法認同主管的決策或做事方式?這並不是你的錯覺。

2022年10月1日

常用 PHP 物件魔術方法 Magic Method 整理

本篇為 PHP 系列

PHP 魔術方法是一群專門給 PHP 物件使用的特殊方法,這些魔術方法會在一些特殊的情況被觸發,就好像變魔術一樣,對於魔術方法不熟悉的開發者,可能會相當錯愕。

然而,在熟悉魔術方法後,開發者可以透過複寫 (override) 這些魔術方法來改變 PHP 物件的預設行為,進而達到更靈活的運用,藉此設計更多良好的程式。

PHP 的魔術方法有十幾個,本篇整理了一些常用的魔術方法。未來也會繼續新增。

2022年7月14日

寫給 PHP 新手的物件導向教學(五):const

上一回《寫給 PHP 新手的物件導向教學(四):this,self 與 static》

前面幾回介紹了類別成員與函式的可見度,也介紹了 static,這一回會介紹類別常數 const

2022年3月19日

敏捷式還是瀑布式?其實敏捷式軟體開發不一定比較快

在軟體工程管理的領域中,有兩種常見的開發方法,分別是敏捷式 Agile 和瀑布式 Waterfall。

早年大型專案多半是瀑布式的開發,但近十年來,許多成長型的公司開始採用敏捷,敏捷開發漸漸成為討論的主流。

而說起這兩者的差別,大家最想知道的問題通常是:「使用敏捷開發後,開發的速度會變快嗎?」

而這個問題的答案是不一定。

為什麼不一定?敏捷聽起來不是很快的意思嗎?是有這樣的意思,但也有一些誤解。我們先來簡單帶大家認識一下傳統的瀑布流,再來討論為什麼敏捷的開發速度不一定會比較快。

瀑布式開發

瀑布式開發是經典的開發方式,其實我認為也比較符合一般人的直覺。主要的核心概念就是,一口氣完成整個專案。

一口氣完成整個專案,不是理所當然地嗎?對,所以才說這比較符合普通人的直覺。因為敏捷不是這樣的。

總之,整個瀑布式的開發流程大致上可以分成幾個大階段,也就是經典的軟體開發生命週期(SDLC),以下稍微簡述:

  1. 需求訪談與定義

    需求端提出對於系統的需求後,再歷經完整的需求訪談後會產生出規格文件,也會讓設計師進行介面的設計。

  2. 軟體系統分析設計

    架構師或系統分析師根據前面規劃好的規格文件,進行系統的細部規劃,例如決定要使用什麼技術,程式架構的設計等等。

  3. 功能實作及單元測試

    工程師根據系統分析的結果進行實際的程式撰寫,並測試其撰寫的程式是否正常運作。

  4. 整合測試及驗收

    針對完成的功能進行整體性的測試,並讓需求端或利害關係人進行驗收。

  5. 安裝部屬及維運

    實際將系統部屬到使用環境,並維持系統正常且持續運作。

這樣的流程,應該很符合大眾的邏輯,先有需求,然後規劃,然後設計開發、測試、上線。

2022年3月11日

軟體工程師剛畢業第一份工作要找大公司還小公司?在大公司學制度,但制度有什麼好學的?

找工作時的時候,你可能會面臨一個問題,要選擇大公司呢?還是小公司好呢?大公司通常名氣響亮,亮出名號相當神氣,當然,除了面子問題以外,很多人也說,在大公司可以學到制度,但學到制度是什麼意思?本篇就要來聊聊這個話題。

制度是什麼意思?

大家對一間公司的想像是什麼?也許你會說,不就是辛苦的勞工在底層做事,老闆高高在上,翹著腳,出一張嘴,什麼都不用幹嗎?OK,這是一種面向,但我們先不要這麼悲觀,我們還是先比較正面一點看待,這樣才有討論的空間XD。

對公司的想像有很多種,我認為,一間公司,就是一個團體一起分工合作,透過商業行為,在市場上創造了一些價值,而這些價值最後會轉換為各位勞工的薪水。

而既然是一群人一起工作,那就要有一定的規範、紀律,來定義每個人的人職責,還有該遵守的流程,否則就會亂成一團。再來,這些流程的好壞,也會決定一間公司的成就,而如果沒有採用有效率的做事方法,那就會造成成本過高,收益降低,公司獲利就不會成長。

所以制度是什麼意思?我自己解讀的方式是,制度就是公司的做事方法,包含規範、工作流程,團隊或個人職責劃分等。

2022年2月20日

三分鐘了解 docker run 跟 docker exec 的差別

docker run 跟 docker exec 經常讓 docker 的初學者感到困惑,因為用起來感覺都很像,不知道什麼時候該用哪一個,也不知道兩者有什麼差別。

如果簡單來說的話,其實兩個最大的差別是,一個啟動新的容器,一個使用正在運行中的容器

來比較官方文件上對於兩者的說明:

docker run : Run a command in a new container

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

docker exec : Run a command in a running container

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

可以看到 run 使用的參數是 image name ,而 execcontainer name

2022年2月15日

台北租屋看房注意事項,9 個篩選條件讓你避開爛房間。北漂十年的心得整理

由於念書、工作的關係,我已經在台北租屋超過十年了。在這十年間,租過不少房間、看過不少房源,也踩過不少雷,因此自己大概也整理出了一些篩選物件的條件。

其實真正要挑到好的房子有非常多要注意的地方,但是受限於預算或交通距離的考量,不太可能什麼都要求到位,只能考量自己的需求與現實來做取捨

那麼以下是我根據個人的生活習慣以及主觀意見所整理的一些租屋條件,分享給大家參考看看~

初步篩選

首先是初步的篩選,初步篩選我會根據地點預算,還有物件類型

2022年1月11日

JWT 是什麼?跟 Cookie 差別在哪裡?兩個常用使用者驗證機制的比較

JWT 概念介紹

JWT 是一種 Token,它的全名是 JSON Web Token。它由伺服器端產生後,交付給客戶端使用,Token 中會夾帶取多資訊,包含用戶的驗證資料或其他。

JWT 的表現形式是一個純粹的字串,這個字串有三個部分,分別為 Header、Payload、Signature,這三個部分會串接起來,用 . 來分隔,形成這樣的格式:Header}.{Payload}.{Signature},實際範例如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.B3GHLnjMFsZJc3K97UIWN68E8WovKxO0Qp6Ye4sVLzo

2022年1月8日

三個點是什麼?介紹 PHP Splat Operator,直接拆開 array 並讓 function 傳入不固定數量的參數

PHP 有提供一個由三個點連在一起的語法 ... ,官方稱呼它為 ... operator 三點運算子. 或稱 Splat Operator。是 PHP 5.6 版後提供的新功能,它有兩種用法:

  1. 提供參數數量可以變化的函式,也就是可以傳入的參數數量不是固定的
  2. 陣列分拆 (unpack)
本篇是 PHP 系列,更多 PHP 相關文章請參考 → PHP 系列

2022年1月6日

資工、資管差在哪?資管就是資工加管理嗎?資工數學要很好嗎?

資工跟資管系是很常被拿來比較的科系,我也很常被問這樣的問題。

其實這個問題很難三言兩語就答完整,大部分時候我可能會隨便敷衍一下,「資管就是資工加管理啊」、「沒那麼資也沒那麼管」,打發掉一些只是湊熱鬧的人。

但是如果用這樣的方式回答正在選科系的人,或正在懷疑自己在幹嘛的人,可能就有點太不負責任了。

於是我興起了寫一篇文章來稍微認真一點回答這個問題的念頭,主要的對象應該是高三跟大一﹑大二的學生吧。

不過預防針先打在前面,這篇文章是根據我個人的經驗,每間學校的資工系跟資管系還是有一點差異,建議選填志願之前,還是以各校的課程規劃為主XD

2022年1月2日

寫給 PHP 新手的物件導向教學(四):this,self 與 static

上一回《寫給 PHP 新手的物件導向教學(三):封裝,可見度與繼承》

在前面幾篇文章中,有稍微帶過 $this 的用法,因為只是簡單帶過,所以沒有詳細說明,因此在這一回,我們會討論更多關於 $this 的部分,另外本回也會討論另一個容易跟 $this 混淆的 selfstatic 的用法。

$this

$this 是 PHP 預先定義好的變數,在物件內部被用來表示自身。

2022年1月1日

2021 年終回顧與工作雜感

轉換跑道的一年

今年是個適合轉換跑道的年份,除了自己,身邊也有許多人在 2021 年換了工作。也許是疫情的關係,沒有地方可以去,多了很多在家裡靜下心來思考的時間。

以前人常常說,不要一直換工作,對履歷不好看。這是有道理的,面試官可能會覺得這個人抗壓性不高,穩定性不足,況且只待短短的時間,很難做出一些成效。所以大家都會希望一間公司至少待個一年,比較好尋覓下一份工作。

但如果不幸進到一間公司,工作內容與自己想要追求的職涯差異過大,還要死命撐下去嗎?我個人認為,若是經濟狀況尚可,還是及早認賠殺出吧。