[生活筆記] 2019 Interview 心得分享

前言

在 N 社 4 年了,一直以來都有一個習慣,就是每年都會定期開 CV,
有好的機會就去面試看看。
部門主管 C 哥在這部份相當開明。
我印象深刻是剛進公司時,他要大家寫 1 年後的履歷寄信給他再跟他 1-1。
他也鼓勵有好的機會就去試,重點是「以終為始」,搞清楚自已要的到底是什麼 ?

理由

有比沒有好一點的敏捷

我是一個理論的實踐者,如果有我認同的理想,
就會試著去實踐,可惜「理想很豐滿,現實很骨感」,
理論與實踐往往總是有一條橫溝。
這不是我想走的主因,但是如果我能找到橫溝一處較窄的地方。
我想我會毫不猶豫的走過去。

打不敗的通膨

另一個理由就更現實了,「薪資」基本上 4 年來是沒有調整的,
當然我的計算方式比較特別。我是會考慮通膨率,
此外,在這個大前端的時代不知道為什麼我好像選錯了邊,
不得不說 F2E 的價金較高機會也較多。
而我在 C 社時期,其實是前後通吃的,但是不包含切版。
在 N 社我不止一次想轉換到 F2E 卻有以下幾個卡點,

  1. 缺乏實際行動,僅止於與 F2E 主管聊聊的階段
  2. 切版在 N 社 F2E 是必備技能,但不是我職涯規劃中準備投資的項目
  3. 過舊的技術棧 Angular 1.0 與 KnockOutjS 還有 KendoUI 等…
  4. F2E 與 RD 部門的 Silo

重點我想還是在 1 ,其它項目其實都有漸漸在改變。

工作內容

再延申到最後一個原因,想作的事與正在作的事。
其實我很清楚,這兩者要相同並沒有那邊容易,
想作的事還很模糊,而正在作的事很無聊。
過去一年基本上只是在抽字串,
或是將功能搬到 A 市場, 再搬到 B 市場,
而且真的只有搬,有沒有人用都不知道,業績如何也不知道,團隊作起來很沒有成就感。

而跟主系統(台灣市場)比較起來,A/B 市場規模相對小,人力也少,
當有產品需求調整的情況,往往犧牲的都是 A/B 市場的,再由我們開發補丁作修正。
而不是一開始就以一個國際化的產品在設計產品,這樣作下來漸漸就提不勁了。

就業一段時間應該都知道,只有功勞沒有苦勞。
不賺錢,沒資源,更不賺錢,更沒資源是一種惡向循環。

我的解決方案,重新定位團隊目標,
所以我非常強力推動幾個項目的國際版標準化,
因為我認為這才是我們的核心項目。

彼得效應

彼得效應其實是我在 C 社的功課,簡單的說就是碰到天花板了。
不論在能力上、薪資上或是發展性上都到了一個瓶頸,
這問題不只在我身上,在我的同儕、我的主管以及我周邊所有的人身上,
我以前會考慮,要如何才能延續我技術人員的生涯?
特別是在這個變化如此快速的時代。

目前我還沒有一個很完整的答案,不過我周邊的人離開了原本公司之後,
又遇到了相同的問題,討厭的主管/討厭的政治環境/討厭的工作內容,
在不同的公司,卻有相同離開的理由…
我目前的想法,不再只以「技術人員」作考量,
在薪資可接受的範圍下,我作為一個人,作為「我自已」我要如何讓自已盡可能的發展 ?
純技術是不是自我設限 ? 主管不會領導,那我能不能反過來引導他 ?
環境不喜歡,我能不能改變它 ? 人不喜歡,我能不能找到志同道合的夥伴 ?

身體因素,眼花花心慌慌

去年 5 月身體微恙,其實自已有點被嚇到,
劇烈的頭痛外加短暫的視力消失,
N 社一直以來都有鼓勵用下班時間進行一些工作的文化,
包含午休時間的「分享」或讀書會,對我來說沒有不好,
但是貪多不得,反而傷害了身體,
這次病後,比較會注意自已的飲食與作習,
畢竟留得青山在不怕沒柴燒。

面試記錄

講了一堆現在才要進到主題。
先講結論,我愛的人不愛我,愛我的人我不愛。

Nxxx Bxxx

純網銀的公司。慕名 N 社前 HR 大主管之名而去,
面試機會好像很難拿到,但是我運氣蠻好的,拿到了面試機會。

總共有三面,
第一面是技術職的面試(60mins),只有閒聊工作上的經驗,沒考什麼技術。
有三個技術主管,聊起來的感覺人都蠻和善的。
技術棧並不確定,但是有很多機會,什麼都可以嘗試的感覺。
不太熟悉敏捷,但是宣稱一定會跑測試與自動化等功能。

第二面是 N 社的前主管(30mins),合作的機會不多,所以互相聊了一下公司的進況。
另外我問了一些新聞八掛(肥貓啊、排名最後啊…),也很坦率的回應,
他敢說我就敢信,基本上沒有逃避閃躲問題我覺得就 Ok 了

第三面是總經理,基本上不問你問題,
而是請你問問題,但是我覺得我沒有準備的很好,
只有問一下目前的目標與挑戰,回答是「活下去」

Offer : Get

Txxxx

社群上有名的「敏捷」公司,遊戲產業,
剛好有認識的人介紹之下去面試。

面試的內容,程式題一題,DB 題一題,
不過相當的簡單,不太像是在找 Senior 的題目,
剩下的就是閒聊,不過可能是我聊的沒有很好,另外一個可能性,就是薪資的問題所以沒有上。

感覺比較差的兩點,
一個是 T 社找了我兩次,
兩次 HR 都說不論是否錄取都會通知,
但是兩次都沒有通知,
第二次去面試前我還有特別在通訊軟體上與 HR 確認是否會告知結果,
但是仍然是無聲卡。

第二點是兩次面試的題目一模一樣,
完全沒有變化,面試官也知道但好像也不是很介意,
但是以我面試者的角度會覺得這間公司在招慕上沒有什麼鑑別度。

Offer : 無聲卡 * 2

Cxxxxxxxx

主要作工程師媒合平台,是我非常喜歡的一間公司,
也是第一次線上面試,問題蠻廣泛的,但是我覺得我都回答得出來
只有問了一題 ACID 我沒有回答的很好,我有另文記錄。
總之就是我對 DB 的認識停留在預設值,而沒有考慮應該商業需求可能的調整。

另外我作了一些線上面試的小小 Retro,稍稍記錄一下

  • 面向光源,不然你會臉會很黑
  • 保持背景單調乾淨
  • 跟同居的事先說好有面試,避免臨時打擾
  • 儘可能讓攝影機高過你的頭,不然看起來會很肥
  • 就算是凌晨面試也要梳洗,看起來比較有精神
  • 網路可能有延遲,可以稍等一下再回答問題

Offer : Reject

Fxxxxxxxxx

後面好像有個富爸爸的收據公司,數位轉型作 CMS,
而且只針對 mobile 製作,聽起來工作內容蠻輕鬆的。
不過他們的瓶頸在 DB ,所以要找一個後端懂 SQL 的人。
只有一面,介紹產品還有面臨的問題,
技術棧算蠻新的,不過沒有 CI/CD 與自動化等工程。

CMS 是我蠻喜歡的 Topic , N 社現在也有在作,
但是我最後還是拒絕了。

主要的原因可能是,我覺得技術上好像沒有辦法在那邊得到進步。

Offer : Get

Axxxxxx

微軟 Teams 服務的合作廠商,主要作數位電話相關。
也是朋友介紹的公司,應該是第二次找我,
因為之前沒有很強烈的離職意願,所以沒有去面試。
特色的早上班早下班,大概 5 點就能下班了,據說不太加班,
一面,與美國主管線上訪談,這次有吃到 Cxxxxxxxx 的經驗,
所以聊得蠻順利的,美國主管有技術底,會講中文所以溝通無礙,
不過我一直以為他是美國人,其實是台灣人的樣子,只是在美國待久了有點口音。

二面,跟台灣當地主管面試,介紹產品與閒聊,
老實說工作環境與地點還有薪資我都蠻 OK 的,
當初有考慮過接收 Offer 的。
最後就是跟朋友閒聊,朋友是 C 社的前同事。
基本上就是一個小公司,產業蠻穩定的,那個職位也有很多機會,
但是成長就要靠自已了,現在想想還是會覺得放棄可惜。

Offer : Get

小結

我覺得定期作面試是很有幫助的,
他能帶來以下的好處,

  • 了解市場需求,直接面對第一線的招幕才知道現在含金量最高的技術是什麼
  • 了解自已,過程中不斷評估自已要的東西(薪資、成就感、穩定、福利、名氣…),什麼都是假的,離開(或留下)才是真的
  • 了解不足與市場的差距(特別是技術面)
  • 與不同產業的技術主管聊天,技術只是一種手段,不要忘記背後的商業目的

家家有本難唸的經,不同的公司也有不同的難處,
時時檢視自已所處的環境,換或不換你都可以選擇,
成為更好的自已。
開始準備 2020 的履歷囉。

最後謝謝所以推薦我與面試我的人。

後記

我在 2020 年 3 月前往 A 社,擔任 Scrum Master。
階段性任務完成後,2021 年 10 月離開 A 社,11 月就職於 T 社。
2022 年 1 月 A 社相關的開發量能轉移到尼泊爾,台灣部門解散,
雖然老闆與前同事有邀約相關新的工作機會,但已任職於 T 社的情況下,
不想過度操勞自已的身體,並沒有兼任相關職務。

20210322 更新

關於 N 社的新聞與社評幾則

(fin)

[生活筆記] Swing Dance 雜記

學習 Swing 大概滿周年了,最初的理由已經有點忘記了;
為了避免忘掉更多東西,還是隨手記錄一下自已的一些小小想法。

波動的感覺

在新手期的階段有一件有趣的事,在牽起 Follower 手的時候,
大概就知道這個人有沒有跳過舞,基本上會有波動從對方的手傳遞過來,
正常來說這個波動應該是上下的,有時候會遇到左右或是扭扭的波動,
也有波平如鏡的狀況。

Lindy 的基本動作之一是 Bounce,它帶來的波動應該是上下,而且是下律動的。
所以如果感覺到不太一樣的波,大概可以猜這個人之前有跳過別的舞蹈,
準確率還蠻高的,只是現在我好像感覺不太到了。

與武術的關係

上面提到了波,就聊聊舞與武的關係,因為不知道為何我腦海總會出現「波動拳」三個字。
除了波以外,練基本步跟 Bounce 就好像是在蹲馬步,跟 Follower 練習就好像在練套路(Kata)
而 Social 場合就像是賽際過招,年度大型 Event 就是天下武術大會的概念。

目的

跳舞的目的很抽象,不像其它的運動,有明確的目的,例如把球投進籃子裡或是率先衝過終點線。
我給自已訂了一些目標與原則,
首先要讓 Follower 感到安全,
同時不能讓他感到無聊,整個過程必須是有趣的,
最後一定要讓 Follower 跳得好看。
如果 Follower 被誇獎跳得很美,Leader 才算成功。

規則

一開始學習給的一些自我約束,不一一說明原委,反正我就是喜歡沒事找事作

  1. 不要找同一個人一直跳舞,儘可能每首都換
  2. 全場通殺,小一點的 Social 場合儘量跟每個人都跳到
  3. Follower 永遠是對的,如果 Follower 跟錯了,想想是不是自已的 Leading 不夠明確
  4. Last Song , 可以的話最後一首一定要跳

教室

Big Apple(BA)、Swing Taiwan(ST)、YM Swing(YM)、Lindy Island(艾倫)、JF Swing(JF)、Naughty Swing

台北我知道的教室大概就這幾間(2019),第一次是在 ST 上的,後來時間對不上就去 YM 學了一陣子(半年以上),
Lindy Island 上過一期 Swing Out(四堂),Naughty Swing 上過一次 Solo 。
上面的教室括號內是教室的簡稱,然後我是按照某種神祕規則排序的,不知道有人看得出來嗎 ?

給一年前的我的建議

  1. 不要先學 Charleston 。
  2. 照教室開課的順序去學,但是覺得困難的話,與其往下上,不如上複習班
  3. 不同教室類似的課通常會錯開,時間金錢許可的話都去上。
  4. 常去 Social 多聽音樂,練習、練習、練習
  5. Solo 比想像中的好玩,一定要試試
  6. Keep Learning

(fin)

[實作筆記] 用 Github Registry 作自已的 Nuget Server

目標

使用 GitHub Package Registry 建立一個自已的 Nuget Server。

步驟

前置作業

申請

GitHub Package Registry 還在 Beta 階段,需要申請才能取得試用。
過程並不複雜,在此不贅述,請再自行查找網路。

建立 Repository

實測的結果,nuget push 並無法建立 Repository ,
並且會導致發佈失敗,故必需 優先建立 Packages 的 Repository
Repository 可以包含多個專案,並獨立發佈(發佈指令詳見下文)。

建立 .nuget 文檔

請以專案名稱命名檔案,ex:Marsen.Utility.nuget
請依實際情況調整 idversionprojectUrl
特別是 version 代表的是 Packages 的版本
更多訊息請參考

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>Marsen.Utility</id>
<version>1.0.0</version>
<authors>Marsen Lin</authors>
<description>Marsen Utility</description>
<language>en-US</language>
<projectUrl>https://github.com/marsen/Marsen.Nuget.Packages</projectUrl>
</metadata>
</package>

取得授權 token

請參考 Configuring NuGet for use with GitHub Package Registry 或是 Creating a personal access token for the command line
至少需要以下權限

  • repo Full control of private repositories
    • repo:status Access commit status
    • repo_deployment Access deployment status
    • public_repo Access public repositories
    • repo:invite Access repository invitations
  • write:packages Upload packages to github package registry
  • read:packages Download packages from github package registry

下載/安裝/設定 Nuget

  1. 下載 Latest Nuget,取得 nuget.exe
  2. 設定 Path (以 Windows 10 為例)
    • 控制台
    • 系統設定>進階設定
    • 環境變數 > Path
  3. 設定完 path 記得重啟 Terminal Session

新增 Nuget Source

新增

Name 、 Source 與 UserName 網址請依實際調整參數
Password 請代入 token

1
2
3
nuget sources Add -Name "Marsen.Nuget sources" /
-Source "https://nuget.pkg.github.com/marsen/index.json" /
-UserName marsen -Password 3*******************************1

設定 Key

1
nuget setapikey 3*******************************1 -Source "Marsen Nuget Sources"

刪除

1
nuget sources Remove -Name "Marsen.Nuget sources"

查詢

1
nuget sources

打包

1
nuget pack Marsen.Package.csproj -OutputDirectory c:\local_nugets

發佈

1
nuget push c:\local_nugets\Marsen.Utility.1.0.0.nupkg -Source "Marsen Nuget Sources"

結果

GitHub Package Registry

下一步

  1. 每次都要打版號好麻煩,能不能自動化 ?
  2. 透過 CI 建立,並傳入參數作為版號 ?
  3. 每次 commit 只要通過 UT 測試就發佈.beta 版 ? CI 發佈正式版 ?

more…

參考

(fin)

[生活筆記] 2019 常用工具整理

輸入法

  • 無蝦米 (加速打字,未來不太看好,考慮更換中…)

網站

PC 工具

  • 文字比較工具
    • Win Merge
  • Git GUI
    • GitKraken(需收費)
    • Fork
  • Carnac
    • 顯示鍵盤點擊歷程
  • Windows 用 Launchers
    • Wox
  • 快速搜尋文件
    • Agent Ransack
  • 跨 PC 存放檔案
    • Dropbox
  • 截圖錄影工具
    • ShareX
    • Skitch
  • 遠端桌面管理
    • Remote Desktop Manager Free (試用中)
    • Remote Desktop Connection Manager
  • windows 仿 linux 指令
    • cygwin

筆記工具

  • Evernote
    • 專案分類
    • 職涯規劃
    • 已完成的項目
  • Notion
    • GTD
    • 周記劃
  • HackMD
    • 暫存的記錄
    • 會議/社群活動即時記錄
    • Blog 草稿
    • 共筆
  • Blog
    • 技術實作記錄
    • 社群活動記錄

瀏覽器 & 外掛

95% 使用 Chrome ,4% 使用 FireFox,極少情況使用其它瀏覽器

Chrome

  • tampermonkey
    • 撰寫網頁小工具
  • One Tab
    • 快速收攏大量分頁,常用在特殊主題搜尋的暫存
  • Clear Cach
    • 清快取
  • grammarly
    • 拼字校正
  • Bitbucket Diff Tree
    • Bitbucket PR 差異比較
  • JSONView
    • 當 response 為 json 時更為好讀
  • LastPass: Free Password Manager
    • 密碼管理
  • Wappalyzer
    • 分析網站使用的框架與技術
  • cVim
    • 使用 Vim 的習慣操作網頁

文件編輯器

  • Vim
  • NotePad++
  • 記事本

個人工具

  • 桌面記時器 DesktopTimer.exe

開發工具

VS Code

  • ejs
  • C#
  • Chinese (Traditional) Language Pack for Visual Studio Code
  • Cucumber (Gherkin) Full Support
  • Docker
  • Git History
  • Git Project Manager
  • GitLens — Git supercharged
  • JSON Tools
  • Markdown All in One
  • markdownlint
  • Paste URL
  • PowerShell
  • Relative Line Numbers
  • Remote - WSL
  • REST Client
  • Settings Sync
  • Snippets and Syntax Highlight for Gherkin (Cucumber)
  • Sort lines
  • SQL Server (mssql)
  • stylus
  • Swagger Viewer
  • Unique Lines
  • Vim
  • vscode-icons
  • Vue 2 Snippets

Microsoft Visual Studio Professional 2017 (預計升到 2019)

  • OzCode (付費軟體)
    • 增強除錯
  • ReSharper Ultimate (付費軟體)
    • dotCover (檢驗覆蓋率,需另外安裝)
    • 強化重構/測試
  • ILSpy
    • 反組譯工具
  • SpecFlow for Visual Studio 2017
    • BDD 開發
  • GhostDoc Community for VS2017 and Later (免費版)
    • 自動加入註解
  • ResXManger
    • 多語系 Resource 檔編輯
  • VsVim
    • Vim 支援工具
  • Snippet Designer
    • Snippet 編輯管理
  • Style Cop
    • 代碼審查
  • xUnit.net.TestGenerator
    • 加速寫單元測試(xUnit)
  • CodeMaid
    • 代碼審查 & 複雜度
  • Visual F# Tools [實驗性]
  • Roslyn Expression Evaluators [實驗性]
  • Roslyn Interactive Componets [實驗性]
  • Roslyn Language Service [實驗性]
  • Microsoft Library Manager
  • Develop Automated Tests VS2017
  • Visual Commander
  • Fix Mixed Tabs
  • Microsoft Visual Studio 測試平台
  • Microsoft Visual Studio Installer Projects
  • Microsoft Azure WebJobs 工具
  • Cloud Explorer for VS 2017

LINQPad 5 (付費)

快速檢驗 C# 語法的小工具

Terminal

  • Cmder | Console Emulator
  • Windows Powershell ISE

資料庫管理

  • Redis Desktop Manager (Redis)
  • SSMS (MsSQL)
  • Robo 3T (Mongo DB)

容器管理

  • Docker Desktop
  • Kitematic

(fin)

[實作筆記] 利用 .Net Core Project Template 加速開發

要知道的事

這篇是實作的紀錄,大部份資源都參考至 MSDN 線上文件
那裡會有更新更完整的文件支援。

前情提要

專案上作了一個跨市場的服務,以提供主服務對不同市場金流的支援。
首先有一個國際化的專案,用來制定 API 層級的標準化,
而在不同的市場,例如:馬來西亞、香港、烏克蘭等…。
在地化的項目需要建立外掛(Plugin)專案的方式進行開發…

建立一個全新的 Plugin 專案是一件麻煩的事,
首先要加入專案,再來要實作相對應的介面,
這裡指的是建立一個類別,然後繼承一堆介面,
ex:IPay、IRefund、ICheck…等,
並不包含商務邏輯的開發與實際的 API 或 SDK 串接,
而在公司的標準之下,我還必須引入一堆參考或 Nuget 套件。
同時因為國際化專案採用動態載入的機制,
有一些細節準則需要由 Plugin 專案遵循,才不會引發異常或 Runtime Error。

記錄

建立專案樣版 SOP

  1. 建立樣版資料夾,比如說 Blog.Plugin.Template

  2. 準備好你的專案檔與相關的必要檔案

    這裡的檔案你可以拿現成專案作修改,我個人是從頭手工打造了一個全新的 Plugin。
    並且去除所有不相關不必要的資料夾、檔案、參考與程式。
    簡單的來說,這是一個殼、一個專案樣版(Template)而已。
    接下來會遇到的問題「參數化」,比如說專案的名稱,資料夾的名稱,或是程式本身的內容,會依據不同的 Plugin 專案而改變的部份。
    我把它分為檔案層級與內容層級的參數化。

    • 檔案層級參數化

      表示檔案名稱或是資料夾名稱等,我有動態抽換的需求。
      我會用 F-* 作為參數名稱,比如說 F-plugin-name
      接下來將資料夾或檔案名稱想被抽換的部份改成參數名稱就好,參考下圖。
      檔案層級參數化

    • 內容層級參數化

      比如說 Class Name、Namespace、建構子或方法,甚至是預設的註解,
      簡單的說只要是檔案內容相關的文字有必要被抽換,我就會使用這個參數設定。
      我會直接使用 C-* 參數名稱,比如說 C-plugin-name
      下面是個例子。
      內容層級參數化

  3. 建立 .template.config 資料夾

  4. .template.config 建立 template.json
    template.json 可以說是整個專案樣版的靈魂部份,更多的訊息可以在 MSDN 找到,
    我只說明 symbols 節點的部份,它用來方置參數的訊息,所以需要建立一個自訂義的子節點,在這裡我命名為 pluginName,同時指定他的 type 為 parameter,
    透過設定 defaultValue 給予預設值,最後將 fileRename 指定為 F-plugin-name
    (C-plugin-name) 指定為我的內容層級參數。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {
    "$schema": "http://json.schemastore.org/template",
    "author": "MarkLin",
    "classifications": [ "Common", "SDK", "C#8" ],
    "identity": "Marsen.Blog.Plugin.Template",
    "name": "Marsen Blog Plugin Template",
    "shortName": "mbp",
    "tags": {
    "language": "C#",
    "type": "project"
    },
    "preferNameDirectory": true,
    "symbols":{
    "pluginName": {
    "type": "parameter",
    "defaultValue": "Demo",
    "fileRename": "F-plugin-name",
    "replaces":"(C-plugin-name)"
    }
    }
    }
  5. CLI 強化,在.template.config 建立 dotnetcli.host.json
    這個檔案建立的目的,是為了讓我接下來使用 CLI 建立專案時能夠指定傳入的參數。
    這裡需指定 template.json 中的 symbol 並設定

    1
    2
    3
    4
    5
    6
    7
    8
    {
    "symbolInfo": {
    "pluginName": {
    "longName": "pluginName",
    "shortName": "p"
    }
    }
    }
  6. 執行 dotnet new i 註冊樣版
    執行命令前請確定所在位置包含.template.config 資料夾與相關的檔案

    1
    dotnet new -i ./
  7. 執行 dotnet new -u 查詢樣版列表資訊確認安裝已完成

  8. 應用

    在想建立專案的資料夾底下執行 dotnet new <template_name> 語法,
    並且可以透過 CLI 指定參數,我並沒有研究 GUI 的操作,有興趣的人請自行研究,
    如果能分享給我就不勝感激。

    1
    dotnet new mbp -p Marsen2
  9. 展示

我把這個例子放在 Github 上,有興趣的朋友可以試試看。

其它

移除專案樣板 SOP

  1. 執行 dotnet new -u 查詢樣版列表資訊,可以查到專案樣版的絕對路徑
  2. 執行 dotnet new -u <ABSOLUTE_FILE_SYSTEM_DIRECTORY>

更新專案樣版

直接進入專案樣版的絕對路徑

發佈

略…

參考

(fin)

[實作筆記] AWS Auto Scaling Group

前情提要

最近將一個服務掛上雲端(AWS),使用 EC2 ,
並且實作了 Auto Scaling ,特別紀錄一下。

概觀

以下使用的都是 AWS 的服務

  1. Auto Scaling Group (ASG) :
    本篇主角,根據指定的 Policies 與 LC 加開減少機器。

  2. Launch Configuration (LC) :
    一個 ASG 背後一定要搭配一個 LC,可以說是 ASG 的生命共同體,
    用來指定 EC2 的配置,並透過 User Data 指定實體起動時所需要執行的工作。
    註: 也有使用 Launch Template 的作法,這篇不會討論。

  3. Target Group (TG):
    由 1 到多個 EC2 實體(instance)組成,用來與 ELB(ALB) 搭配。

  4. ALB :
    流量負載平衡,與 TG 作為搭配。可以依不同條件轉導到不同 TG

Auto Scaling Group

組合零件

這有點像是在玩模型玩具,各個部份的小零件可以組成一個大零件,
再將各個部件結合,完成我所要的功能。
以下是這所需要的各個零件

  • Golden Image : 由實際的 EC2 Instance 建立。並包含 Cloud Watch Agent 的配置。
  • User Data : Lanuch Configuration 的一個子項目,可以在 EC2 啟動時,執行指定的命令,比如說在 WINDOWS 透過 Powershell 抓取新版程式來建置服務。
  • Launch Configuration : 由上述兩個零件 (Gloden Image & User Data) 組成,另外還可以設定 EBS、Plocies 等設定…
  • Target Group : 用來存放相關實體(EC2 Instance)的抽象概念, 可以設定 Health Check 來確定實體的健康情況。
  • Auto Scaling Group : 透過 Lanuch Configuration 來建立實體,並且可以將實體放入指定的 Target Group 之中。並且可以設定 Policy 來實現 Scaling Out/In.
  • ALB : 負載平衡的一種,透過設定,可以將 Request 導到對應的 Target Group。

紀錄

Add CloudWatch Agent

  1. Login EC2 Instance

  2. 安裝 CloudWatch Agent

  3. 準備一個 Json 檔如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    {
    "agent": {
    "logfile": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log"
    },
    "logs": {
    "logs_collected": {
    "files": {
    "collect_list": [
    {
    "file_path": "D:\\logs\\**.log",
    "log_group_name": "/MY/Service/Worker",
    "log_stream_name": "{instance_id}",
    "timezone": "UTC",
    "timestamp_format": "%Y-%m-%dT%H:%M:%S"
    }
    ]
    }
    },
    "log_stream_name": "default-log-stream",
    "force_flush_interval": 5
    }
    }
  4. 開啟 powershell,切換目錄至 AmazonCloudWatchAgent

    1
    cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
  5. 執行以下語法

    1
    ./amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:yourjsonfile.json -s

站台加入 Health Check

  • 加入靜態檔案(ex:check.html)
  • IIS Building _80
    IIS Building_ 80
  • 設定 Target Group 的 Health Check (ex:/check.html)
    AWS Target Gropu Health Check

包成 Gloden Image

  1. 機器下 ALB

    機器下ALB

  2. 開啟 Ec2LaunchSettings.exe

    開啟 Ec2LaunchSettings.exe

  3. 透過 Ec2LaunchSettings 關機

    透過 Ec2LaunchSettings 關機

  4. Waitting Instance Stoped , Create Images

    Waitting Instance Stoped , Create Images

Create Launch Configuration

Create Launch Configuration

  1. Choose AMI
    Choose Gloden Image
  2. Choose Instance Type
    t2.small
  3. Configure details
    Add User Data
  4. Add Storage
    Set EBS
  5. Configure Security Group
  6. Review

Create Auto Scaling group

  1. Configure Auto Scaling group details
    Configure Auto Scaling group details
  2. Configure scaling policies

  3. Configure Notifications

  4. Configure Tags

  5. Review

參考

(fin)

[實作筆記] CPAU 加密仿登入

前情提要

登入 SQL Server 需要受到權限管控,
而在 Windows 中需要使用特定用戶身份登入時,
我們常常會選擇 runas 命令。

原始作法

大概類似如下:

1
runas.exe /netnoly /user:MyCompany\Marsen "C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\Ssms.exe"

我會寫成一個 ps (PowerShell) File 來執行這件事。
但是會有一些問題。

問題

  1. 每次登入都輸入密碼好麻煩
  2. 密碼很長又複雜,Terminal 又看不出輸入是否正確,常常會打錯
  3. 密碼如果寫在 PowerShell 中會有風險

我希望點兩下就能以正確的身份開啟 SSMS 而且密碼不會被明碼存儲

CPAU

  1. 請先下載CPAU\

    • 我採用綠色安裝,如果有必要可以設為環境變數
  2. 加密,以下的語法會產生以 MyCompany\Marsen 的身份登入執行 SSMS 的批次檔 run.bat

    1
    CPAU -u MyCompany\marsen -p *************** -ex "C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Binn\ManagementStudio\Ssms.exe" -enc -file D:\run.bat
  3. 解密

    1
    CPAU -file D:\run.bat -dec

最後只要將步驟 4 的語法存成一個 bat 檔,就可以隨時點兩下執行了。

免責聲明

雖然是加密過的檔案,不過如果被人知道你是使用 CAPU 加密,攻擊者取得檔案後仍然可以透過 CAPU 解密登入。
所以使用上一定要小心檔案不要外流,主要的優點仍然是節省打密碼的時間與打錯的風險。

參考

(fin)

[閱讀筆記] 執行力的修練

與成功有約的四個實踐原則

四個實踐原則

紀律一、鎖定極重要目標

80 % 用來維持改進日常工作,
20% 的時間與心力投入能帶來影響的目標,
尋找與使命有更直接關連的目標。

法則

  1. 不能聚焦顧於兩個以上的極重要目標
  2. 選擇能幫助打贏戰爭(高層次)的戰役(低層次)
  3. 高階領導人可以否決,但不能命令(賦予所有權與參與感)
  4. 設定「在何時之前從 X 到 Y」的終點線

問題

  1. 在我們營運的其它部份保持目前績效的前提下,哪一部份的改變能帶來最大的影響 ?
  2. 為了在這場戰爭中取勝,至少一定要打贏哪些戰役 ?

反思

影響地圖 ?
OKR

紀律二、從領先指標下手

領先指標的特徵

  1. 具有預測作用
  2. 團隊有能力影響它
  3. 領先指標可能是違反直覺的

找到槓桿(領先指標)的支點
領先指標

紀律三、設置醒目計分板

  • 優秀的團隊隨時知道自已是屬於領先還是落後。
  • 制定一個屬於「隊員」的計分板
    • 必須簡單
    • 必須顯而易見
    • 同時揭露領先與落後指標
    • 知道正在贏或輸
  • 賽局本身比計分板重要
    • 求「勝」而非求「不敗」

反思

  • 看板
  • Burn Down/Up Chart
  • 電子看板的便利,實體看版的可視性

紀律四、落實當責

為了把績效得分往前推進而向整個團隊作出承諾,並以有紀律的方式貫徹執行。

  • 《爛工作的三個跡象》
    1. 無人聞問
    2. 可有可無
    3. 無從評量

原則

  1. 每周的同一時間開會
  2. 別讓日常事項進入會議

議程

  1. 報告:報告上次作出的承諾
  2. 檢討:從成功和失敗中學習
  3. 計畫:釐清並作出新承諾

問題

  • 我可以作什麼會對領先指標有幫助 ?

反思

  • Scrum 四大會議的立會與 Retrospective

執行

極重要目標構想 目前的成果(從 X) 期望的成果(到 Y) 期限(在何時之前) 排序
領先指標構想 如何評量 排序

領先指標 Check List

  • 是否從團隊成員及其他人蒐集了大量意見與建議 ?
  • 是否有預測作用 ?
  • 團隊能不能影響它 ?
  • 它是不是可以被測量 ?
  • 蒐集他的價值是否高於成本 ?
  • 每個指標是否包含動詞 ?
  • 是否可以量化 ?

計分版主題

  1. 趨勢線
  2. 速度計
  3. 長條圖
  4. 紅綠燈
團隊極重要目標 落後指標
領先指標 1 圖表
領先指標 2 圖表

(fin)

[閱讀筆記] 學徒模式--優秀軟體開發者的養成之路

送書啦

前情提要

最近公司來了幾個來自 Build School 的學員,
作為暑期工讀生,開發一些 Side Project ,
雖然工作很忙,不過我倒是對帶新人還蠻有信心的。

這些小朋友問了一些問題,讓我想到自已剛畢業和剛從資策會出來的那時候。
有的問題很大,大到可能要一輩子都無法解決。
有的問題很小,小到聽了會笑,但對他們來說可能像是眼裡的一粒沙。

我在學習的初期,最困難的問題是不知道怎麼問問題
而過了一陣子後,我發現一個更糟的狀況,我不知道我有問題
而這本書大致上解決了我的上述的兩個問題。

為何選擇這本書

非常好讀,你不需要從頭讀到尾。
首先是每個篇幅非常的短,大概只要 5~10 分鐘就能讀完。
再來是除了第一章外,每一大章都會有一個地圖,
讓你能看見全貌。

如何讀這本書

而每一篇都包含情境、問題、解決方案與參照,
情境與問題就像是這本書的 GPS ,
讓你知道你落在這本書的哪個點上 。
解決方案是通篇的主體,但是對我來說後面的行動更為重要,
我開始練習 Kata、寫 Blog、尋找導師大多是因這本書而開始的。

最後,都會附上相關章節的參照。
這非常有幫助,原因是在這張地圖上,
你可能會同時落在幾個點上。
那麼地圖與參照就會非常有幫助,你可以查找地圖發現有關連的章節,
也可以直接透過參照找到其它章節。

會不會是雞湯文

會不會變成雞湯,其實取決於你自已。
書上的行動,你作了嗎 ?
如果不行動,就當作喝雞湯吧。

這本書的缺點

這本書強調的是如何成為一個工匠,
如何成為一個達人。
我知道的現實是,很多工程人員到了一定的程度就會轉換職務
如果你的目標是成為管理者,業務等…職務
我想這本書在幫助上可能會少一半。
畢竟這不是一本教你管理、銷售或領導的書。

後記

現實上的工匠真的很少,這不是條發大財的路。
走起來也很辛苦,不過這是個革命的時代,
各行各業都在與軟體產業發生衝突與融合,
如果能有更多優秀的工程師,我們就不需要工程師了。

鍚將會扮演它的角色,直到這個世界不再需要鍚為止,
然後鍚就會變成金子。

El Alquimista

期許自已和看到這篇文章的你都能成為更好的工程師。

(fin)

[閱讀筆記] 第八個習慣 --- 從成功到卓越

找到自已內在的聲音

第八個習慣

  • small things listen to your head , big things listen to your heart
  • 孟加拉微形貸款的反思

    讓 99% 的人生活更好,並賺取收入成為 1 % 富者

  • Most ailing organizations have developed a functional blindness to their own defects. They are not suffering because they cannot resolve their problems, but because they cannot see their problems. — John Gardner → 看見全貌 — 李智樺(Rudy Lee)
  • 願景和心聲是慢慢演化出來的…感覺到人類的某種需求,而且他們的良知的回應試圖滿足這些需求就會出現願景
  • 個人領導(發揮影響力)是一種選擇,是一種自已必須去贏得的自由——只有當你贏得之後,領導才會變成一種選擇。
  • 3+1 的世界(Marsen Lin)
Column Core First Second Third
全人思維模式 心靈 心智 身體 情感
四種才能 SQ 精神 IQ 智力 PQ 身體 EQ 情感
人類四項基本需求 發揮影響力 學習 生活
四種才能的最高表現 良知 願景 自律 熱情
四種才能的反模式 自我 受害者心理 放縱 淪為社會的鏡子
將人物化的管理 老闆 規定 效率 控制
領導的四項職責 以身作則 探索方向 整合體系 充份授權
四大管理措施 文化 策略 結構 執行
完整工作中的全人 服務 計畫 執行 評估
  • 現況

報酬: 不公 / 一般 / 很好
尊重: 有 / 無
自主性: 有 / 無
意義: 有 / 無
愛 : 有 / 無

  • 通往卓越的地圖 vs 選擇地圖

    通往卓越的地圖

    選擇地圖

  • 目的和手段是不可分的,目的實際存在於手段之中。

  • 用於實現目的手段與目的同樣重要 — 康德

  • 只要目的合理,用什麼樣的手段都是合理的。— 馬基維利

  • 在刺激和回應之間有一段空間,我們有自由和能力選擇自已的回應

    聰明是一種天賦,而善良是一種選擇。

  • 所有事物都是經過兩次創造,一次是心智上的創造,一次是實際的創造

問題

  • 我在家庭、社區、工作單位裡感受到什麼需求 ?
  • 我是否擁有可以滿足這個需求的天賦才能 ?
  • 滿足這個需求的機會是否能激起我的熱情 ?
  • 我的良知是否在激勵我積極投入、採取行動 ?

激勵他人尋找內在的聲音

  • 領導是一種如何充份授權的藝術。
  • 對人充份授權,對物進行管理與控制
  • 工業時代的管理,老闆/規定/效率/控制

七、以身作則

  • 不論什麼時候,如果你認為問題在別人身上,那麼這個想法本身就有問題。
  • 主動,是自我授權的一種形式
  • 有的時候,在某些文化中,得到原諒比得到批准來得容易
  • 7 種自我授權
    1. 坐等吩附
    2. 詢問
    3. 提出建議
    4. 我想做
    5. 執行並立刻報告
    6. 執行後定期報告
    7. 只管去做
  • 做一個燈塔,不要當法管; 作一個榜樣,不要當批評家。

八、成為表率

  • 七個習慣

    • 主動積極
    • 以終為始
    • 要事第一
    • 雙贏思維
    • 知彼解已
    • 統合綜效
    • 不斷更新
  • 有系統的個人計劃

    • 「確定任務與價值」
    • 願景和價值觀
      1. 每日計劃
      2. 每周計劃
      3. 設定目標
      4. 確定任務和價值

九、贏得信任

  • 儲蓄

    1. 先努力理解他人
    2. 信守承諾
    3. 誠實、開誠布公
    4. 和善、有禮
    5. 雙贏或無交易的思維方式
    6. 明確的期望
    7. 對不在場者保持忠誠
    8. 道歉
    9. 接受回饋意見
    10. 寬恕
  • 支出

    1. 先求被他人理解
    2. 破壞承諾
    3. 圓滑的操縱
    4. 冷漠、無禮
    5. 我贏你輸或我輸你贏的思維方式
    6. 破壞期望
    7. 不忠誠、欺騙
    8. 驕傲、自負、傲慢
    9. 不接受回饋意見
    10. 心懷怨恨
  • 必要的犧牲

    1. 不耐煩、自我中心
    2. 情緒、感情、時間
    3. 自我中心、傲慢、控制
    4. 自我、時間、感覺、成見、偏見
    5. 勝者為王、競爭意識
    6. 蜻蜓點水式的交流
    7. 某些社會認可、祕而不宣
    8. 自我、傲慢、驕傲、時間
    9. 自我、傲慢、驕傲、起反作用的溝通
    10. 驕傲、自我中心
  • 內在原則

    1. 相互了解
    2. 完整/執行
    3. 遠見/價值觀、統一/執行、相互了解
    4. 遠見/價值觀、完整/執行
    5. 相互尊重/互惠
    6. 相互尊重/互惠、相互了解、創造性合作、更新
    7. 遠見/價值觀、完整/執行
    8. 遠見/價值觀、完整/執行
    9. 相互了解
    10. 遠見/價值觀、統一/執行
  • 真正的付出,必須是對方願意接受的東西

  • 說謊是將問題推給未來,誠實則是將問題留給過去

  • 成年人只是大孩子而已

  • 你如何看待我的角色與目標 ? 你如何看待自已的角色與目標 ?

  • 我們自已選擇什麼樣的回應方式,是決定生活的關鍵因素

  • 信任和愛一樣

    • 愛是一個動詞,而愛情是愛的結果
    • 讓自已的情感服從價值
    • 信任需要冒險、磨練, 沒有風險是最大的冒險
  • 個人層次

    • 態度積極的好榜樣。
    • 不要抱怨、比較、批評、競爭和爭鬥。
    • 作一個燈塔式的人物,而不要作法官式的人,作一個榜樣而不要作批評家
    • 無力改變所有的事情(別人)時,改變自已
  • 人們需感覺自已被欣賞,需要感覺到自已所從事的工作是有價值的

十 融合心聲

  • 雙贏思維只要有一方願意改變就可以了

    改變得從願意改變的那個人開始 — 改變提問,改變人生

  • 傾聽的連續性

    1. 忽略
    2. 假裝在聽
    3. 選擇性傾聽
    4. 專心傾聽
    5. 以同理心傾聽 (以對方的框架思考)
  • 解決方案

    1. 你輸我贏/你贏我輸 [交易]
    2. 妥協 [交易]
    3. 相互了解(沒有共識) [轉變]
    4. 你輸我贏/你贏我輸(增加了解與關心) [轉變]
    5. 妥協(在關係上取得統合綜效) [轉變]
    6. 在問題和關係上取得統合綜效 [轉變]
  • 人們會看到同樣的事實,但是以個人的經驗加上不同的解釋,創造意義並產生行為

  • 一但你有了身分上的權利,你會認定只有一個答案是對的,自我愈強烈,愈固執,愈僵化。

  • 沉默是必要的,問一個問題「說出自已的真正想法,會比沉默好嗎 ?」

  • 兩個步驟

    1. 問「是否願意尋求一種比雙方的方法更好的解決方案 ?」
    2. 覆述對方的意見直到對方認可,確定你真正理解他的意思。
  • 第三選擇不一定是第三個方案,而是心態上真正的理解對方,而非妥協

  • 領導是一種選擇,而非一種職位

  • 與人和文化有關時,快就是慢,慢就是快

十一 同心協力

問題

  1. 你清楚了解組織的目標嗎 ?
  2. 你對組織忠誠奉獻嗎 ?

四個現實問題

  1. 市場狀況
  2. 核心競爭力
  3. 利益關系人的期望與所需
  4. 價值觀

刺蝟概念

  1. 你真正的專長是什麼 ?
  2. 你對什麼事充滿熱情 ?
  3. 人們會對什麼掏腰包 ?
  4. 你的良知期望怎麼作 ?

十二 整合體系

問題

  • 你是怎麼想的 ?
  • 成長過程中,你最喜歡做什麼 ? 有什麼優秀的表現 ?

    持續整合不只是工程的事,而是整個組織與公司的事。

十三 充分授權

  • 透過目標與責任以達到預期結果。
  • 若以授權的名義放任員工,自律也無法實現。
  • The Doctrine of Stubborn refusal — 出於良知
  • 服務型的領導人的問題
    • 工作進度如何 ? 依據看板
    • 你正在學習什麼 ?
    • 你的目標是什麼 ?
    • 我能幫你作什麼 ?
    • 作為一個幫助者,我表現得如何 ?
  • 選擇的自由與能力
    • 領導
      • 意義 : 創造性刺激
      • 愛 : 真心誠意的保證
      • 職責: 愉快的合作
    • 管理
      • 獎勵 : 自願服從
      • 恐懼 : 願意服從
      • 憤怒 : 反抗或退出
  • 為不同意見保留一席之地,建立回饋機制讓他理解別人的感受。

問題

  • 誰喜歡現在的方式 ?
  • 誰可以作 ? 誰有能力作 ? 誰有責任作 ?
  • 真正的考驗是改變能不能持久 ? → 回顧與重溫約定。(類似 Retrospective)
  • 你的建議是什麼 ? 你們的意見是什麼 ?
  • 知而不行,是為不知
  • 你所知道的東西 還不足以讓你提出合適的問題

參考

(fin)