分類
Architectural Pattern Techniques

[架構師][技巧] 技術雷達

甚麼是技術雷達?

技術雷達是一種評估工具,用來判斷軟體領域中各種技術並對這些技術應採取什麼行動的方法。(來源為 ThoughtWorks,參閱這裡)

象限

技術雷達本身是一個切割成4等份的圓形,這4等份各為技巧(左上),工具(左下),語言框架(右上),平台(右下),代表技術種類(在官方網站中稱為象限)。

技術種類如下:

1.工具
軟體開發的各種工具,範圍很廣,包含IDE,資料庫,版控等等。

2.語言框架
大部分是開源的程式語言,函式庫,框架等等

3.技巧
可強化軟體開發的實務技巧,包含各種設計實踐(模式/原則/開發法/建議/演算法)

4.平台
可在其上建構技術的多樣平台,包含作業系統,微服務,分散式系統

要注意的是象限並不是雷達的重點,只是放置技術的分類。

圓環

在圓形中從圓心由內而外分為四層,各為採納(第1層)(最內層),試驗(第2層),評估(第3層),暫停(第4層)(最外層),代表採取行動。(在官方網站中稱為圓環)。

採取行動如下:

1.採納
已被證實成熟,應該立即使用的技術,但要注意並不代表應該在任何情況下都使用,必須經過評估。

2.試驗
可以使用的技術,但還未被充分證明。重點在知道如何使用這項技術,可以在一些無關緊要的專案實施。

3.評估
可以了解並釐清未來是否會對組織造成影響。進行Survey,開發探索,研究計畫,會議,但還不需要實施在專案中。

4.暫緩
可能是技術不夠成熟或被錯誤使用,別在專案中引入。

項目

出現在雷達上的單一圓點就是項目,代表目前出現的軟體技術。項目位置會不斷變化代表其應該採取的行動

在 ThoughtWorks 實際的技術雷達如下

Radar From ThoughtsWork

透過這四層及四等份就可列出應該對什麼技術採取什麼行動,畫成表格如下

技術種類\進行動作採納試驗評估暫停
技巧應該採用的技巧應該試驗的技巧應該評估的技巧應該暫停的技巧
工具應該採用的工具應該試驗的工具應該評估的工具應該暫停的工具
語言框架應該採用的語言框架應該試驗的語言框架應該評估的語言框架應該暫停的語言框架
平台應該採用的平台應該試驗的平台應該評估的平台應該暫停的平台

建立雷達的策略

ThoughtWorks 每半年會更新一次雷達,基本上可以根據該雷達來挑選想採取的行動和技術,也有提供建立私人雷達的方式,參閱這裡

另外每個不同的組織都有不同的商業目標,要發展的軟體策略也不盡相同,因此最好自行建立組織本身需要的技術雷達。

對於架構師而言,廣度應該優先於深度(但不代表深度不重要),在加入項目的策略上應該盡量讓項目平均分佈在四個象限,而不是讓項目全集中在某個象限或某個象限只有一個項目。

也要特別注意別輕易引入暫緩的項目。若採納的項目和自己專業有關但還很陌生,也請花一些時間進行了解(測試式學習是一個好的開始)。

分類
書摘

[書摘] 系統設計面試指南

無論是參與面試或釐清需求,系統設計常常令人感到困惑,不知如何進行。

我想,原因大概有兩種。

首先,不同領域的系統通常都有不同的設計要素,如何找出這些要素進行提問?

其次,即便提出疑問找出重點,接下來要如何針對這些要素進行高層設計或規劃?

《系統設計面試指南》對於系統設計的初步規劃或高層結構提供合適的解決步驟。

這些步驟包含如何尋找系統設計的要素以及如何對這些要素進行設計規畫,對於經驗不足或想加強系統設計高層結構的相關經驗者會有很大的幫助

作者提出的解決步驟分為以下四個流程,

1.了解問題並確定設計範圍

2.提出高階設計並取得認可

3.深入設計

4.彙整總結

書中分別提到各個流程概要內容為

1.了解問題並確定設計範圍

請認真思考系統本身且提出問題,這些問題是用來釐清需求的條件和假設。千萬不要立即提出解決方案,這只會讓你迷失方向,重要的是務必了解需求的具體內容並釐清這些內容中不明確的地方。
有幾個幫助提出問題的清單:
a.系統需要那些特定功能
b.使用者數量
c.擴展速度(3個月 / 6個月 / 1年)和擴展規模
d.可以使用那些現有技術來簡化設計

2.提出高階設計並取得共識

這個流程的目標為設計出系統的高層規畫並和需求者(可能是面試官)達成協議。
a.提出設計藍圖並要求需求者提供回饋
b.在紙或白板上用方框圖畫出關鍵元素,這些關鍵元素可能是客戶端,API,Web伺服器,資料庫,快取,CDN,訊息佇列等等
c.用粗略估算評估設計藍圖是否符合需求中的條件

3.深入設計

大多數的情況下會根據步驟 2.的高層設計藍圖,進行各個要素的擴展。 因為系統在不同情境下關注點也可能不同,有時候可能關注於高層設計,有時候可能關注於效率瓶頸,此時就必須和需求者(可能是面試官)對設計中的各個元素達成共識並確認優先順序。

另外要注意的是請小心時間管理,不要陷入瑣碎細節。

4.彙整總結

最後的步驟需求者會對後續情況提問或自由討論關於系統的其他主題,可以關注的方向如下:
a.系統瓶頸和改進作法
b.重新檢視設計
c.討論系統異常情況(伺服器故障/網路斷線等等)
d.規模擴增該如何處理
e.其他改進方案

談到這裡,如果對本書有興趣的話,還需注意以下兩點:
1.本書談論高層設計,所以只會有非常少量的程式碼。
2.討論的系統種類還不夠全面,有點可惜。

方格子 – 同步發文

Matters – 同步發文

分類
React Native

[React Native] ERROR Metro Bundler can’t listen on port 8081

Situation

在Terminal輸入 npm start ,Console回應 ERROR Metro Bundler can’t listen on port 8081

Action

在MAC上先使用 sudo lsof :8081 查詢哪些服務使用8081,接著再輸入 kill -9 PID 號碼 來終止該服務,如下

%sudo lsof -i :8081
COMMAND   PID       USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node    20537       user   40u  IPv6 11ae1baafc8ed7aa87      0t0  TCP *:sunproxyadmin (LISTEN)
%kill -9 20537

Result

輸入 npm start 之後可重新啟動

分類
React Native

[React Native] build failure : DeviceException: No connected devices!

Situation

在編譯 Android 版本時,輸入 npx react-native run-android,console 回應 com.android.builder.testing.api.DeviceException: No Connected devices,如下

Action

透過 Android Studio – AVD Manager 啟動虛擬裝置或將直接連接實體裝置皆可

Result

錯誤不再出現

分類
React Native

[React Native] build failure : The SDK directory ‘xxx’ does not exist

Situation

輸入 npx react-native run-android,console 回應 The SDK directory ‘xxx’ does not exist,如下

Action

到專案根目錄/android/ 找 local.properties 檔案,如果沒有就建立一個。

接著開啟該檔案並查找sdk.dir,確認sdk.dir是否正確對應到已安裝的Android SDK path。

Result

該錯誤不再出現

分類
Web

[Web] 強化 ASP.NET Web Form 網站安全性 Content Security Policy(CSP) 和 HTTP Strict Transport Security(HSTS)

Situation

因為公司有和 2330 合作,2330 偶爾會稽核公司底下的外部網站。

這次輪到小弟負責維護的網站被稽核,抓出兩項安全性缺失分別為 CSP(Content Security Policy) 和 HSTS(HTTP Strict Transport Security)。

關於這兩項安全性問題可以從 https://www.ithome.com.tw/voice/130302 或自行Google看看。

簡單的說這兩項都和 HTTP 的 Header 有關,而透過強化 HTTP Header 設定可以有效的提升網站安全性。

Action

首先我們必須找出如何偵測網站的安全性,可以很簡單的在 https://securityheaders.com/ 輸入要測試的網址來檢測。

以下是檢測網站修改前的狀態

修改前檢測結果

如上圖可以看到 Strict-Transport-Security / Content-Security-Policy / X-Frame-Options / X-Content-Type-Options / Referrer-Policy / Permissions-Policy 都是不合格的。

如果你使用的剛好是 ASP.NET 的 Web Form,可以很簡單的透過設定 web.config 來強化安全性。

請打開 web.config 並在 <customHeaders></customHeaders> 輸入下列設定

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="Cache-Control" value="no-cache" />
                <!-- Try your URL in this Scen WebSite : https://securityheaders.com/  -->
                <!-- Good Solution ref https://blog.elmah.io/improving-security-in-asp-net-mvc-using-custom-headers/ -->
                <!-- 1. Enable HSTS (HTTP Strict Transport Security) -->
                <!-- ref : https://sdwh.dev/posts/2020/10/Cyber-Security-Web-Config-Configuration/#Contentt-Security-Policy-CSP  -->
                <!-- Hide Server Information -->
                <remove name="X-Powered-By" />
                <remove name="X-AspNetMvc-Version" />
                <!-- Referrer Policy -->
                <add name="Referrer-Policy" value="No-referrer-when-downgrade" />
                <!-- Anti-Clickjacking-->
                <add name="X-Frame-Options" value="DENY" />
                <!-- Anti-XSS for IE -->
                <add name="X-Xss-Protection" value="1; mode=block" />
                <!-- HSTS -->
                <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
                <!-- 1. Enable HSTS (HTTP Strict Transport Security) -->
                <!-- 2. Enable Http Header Content Security Policy(CSP) -->
                <!-- ref :https://stackoverflow.com/questions/35851651/content-security-policy-in-asp-net-webforms  -->
                <add name="Content-Security-Policy" value="default-src 'self'" />
                <!-- 2. Enable Http Header Content Security Policy(CSP) -->
                <!-- 3. Enable X-Content-Type-Options -->
                <!-- ref : https://stackoverflow.com/questions/18337630/what-is-x-content-type-options-nosniff -->
                <remove name="X-Content-Type-Options"/>
                <add name="X-Content-Type-Options" value="nosniff"/>
                <!-- 3. Enable X-Content-Type-Options -->
                <!-- 4. Enable Permissions Policy -->
                <!-- ref https://blog.elmah.io/improving-security-in-asp-net-mvc-using-custom-headers/ -->
                <add name="Permissions-Policy" value="accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" />
                <!-- 4. Enable Permissions Policy -->
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>


Result

更改完成後再到 https://securityheaders.com/ 重新檢測,結果如下,完成 Header 的安全性設定


分類
工作哲學 書摘

[書摘] 原子習慣:細微改變帶來巨大成就的實證法則

若說大多數成功人士共通的要素是什麼,我想好習慣絕對是其中之一好習慣很重要,但要保持好習慣也很困難

很多人以短暫的衝勁,熱情來激勵自我。常見的說法就是『今年要減肥』,『這禮拜要戒菸』。

另一些人會製作計劃表,期許透過嚴謹且完美的計畫,達成目標。

可惜,熱情抵不過人性,計劃趕不上變化

好習慣的養成真的如此困難嗎?

在《原子習慣》中作者以行為學為基礎,提出四大法則與實際例子來說明如何保持好習慣,戒除壞習慣。

培養習慣的四大法則為 ”明顯的提示”,”吸引的習慣”,”簡單的行動”,”滿足的獎賞”,具體來說

  • 明顯的提示:建立週遭提示及環境因素來養成習慣
  • 吸引的習慣:藉由模仿目標和正面心態來養成習慣
  • 簡單的行動:依據簡化步驟的行動因素來養成習慣
  • 滿足的獎賞:透過立即賞罰和問責機制來養成習慣

特別是最後一章 “如何從A到A+“,詳細說明如何在養成好習慣之後持續精進,更是推薦給想更上一層樓的讀者們。

今年又快到尾聲,各位朋友還記得您的今年新希望嗎? 若不想讓每年的新希望無限輪迴,請仔細,好好的閱讀本書。

方格子 – 同步發文

Matters – 同步發文

分類
Uncategorized

[Delphi] 使用 OutputDebugString 輸出訊息

Situation :

在某些情況下無法或不想使用 ShowMessage 來輸出訊息,其實還可以選用 OutPutDebugString 來輸出訊息。

Action :

調用 OutputDebugString 方法,如下

OutputDebugString(PChar('call outputdebugstgring to output message'));

記得要呼叫 PChar 處理要輸出的內容!

輸出的視窗在 Delphi -> View -> Debug Windows -> Event log

Result :

在 Event Log 視窗會出現想要輸出的訊息

分類
工作哲學 書摘

[書摘] 大局思維 : 教你如何放大格局、掌握關鍵,達成最有利的職涯擴張目標

當我們胸懷大志,勇往直前時,最大的阻礙往往來自本身或他人的非理性思考。這些非理性思考常讓人自我懷疑,中途放棄。

要如何免於自我設限的思維?

大局思維透過行為科學揪出人們的非理性思考並透過一步步設定具體目標和規律步驟達成自我理想的實現,翻轉人生

大局思維可以分為六大面向

1.目標:透過自我認知確定目標方向

2.時間:利用時間檢查規劃步驟時程

3.內在:尋找內在認同消除認知偏誤

4.外在:發現外在回饋避免偏見影響

5.環境:改變環境結構增加任務效率

6.韌性:強化個人韌性克服挫折壓力

六大面向的具體內容說明和行為科學實證

目標

首先我們必須先了解自我,探討自我的本質來確定未來目標

時間

把未來目標分割成小型步驟排定這些步驟的優先順序

內在

執行步驟的過程中,第一個阻礙就是自我認知偏誤,必須透過尋找內在認同來解除自我認知偏誤。否則這種偏誤會不斷地讓我們自我懷疑而打消念頭,中斷計畫。

外在

第二個阻礙就是來自其他人的外在偏見,如性別,種族等等根深蒂固的概念。也有可能是他人對我們自己的不了解所做出的判斷。我們必須主動發現並消除外在偏見。

環境

第三個阻礙為環境的具體條件或限制,適度改善這些限制,對於執行步驟的效率也有相當程度的幫助。

韌性

在通往目標的路上不可能一帆風順,我們必須強化韌性不被挫折打倒,以面對大大小小的困難。

本書作者 Grace Lordan 為倫敦政經學院教授,不僅專職於行為科學,也結合科學研究和自身經驗改變其生涯低潮。

如果想放大格局,穩定朝向理想目標前進,本書絕對是必須參考的著作之一。

方格子 – 同步發文

Matters – 同步發文

分類
小技巧

[小技巧]查詢 Windows 上所有的共享資料夾

第一個方式是透過指令
1.按下win-Key 輸入cmd
2.輸入 net state
3.觀察輸出視窗的項目,若有資料夾加上特殊路徑的項目通常就是共享資料夾,另一個觀察點在項目的說明欄位,這個說明欄位是對應設定共享資料時的註解,預設為空白
 
另一個查詢共享資料夾方式是透過檔案總管
1.開啟檔案總管
2.點擊左側的網路並雙擊自己的電腦名稱
3.在自己的電腦名稱顯示的資料夾就是共享資料夾