發表文章

就說了,敏捷不要推動!

圖片
一個下午,以前公司的同事跑來,哭訴著在新工作中推動敏捷發生的種種慘況。 我盡可能的耐心聽完,跟大家知道的一樣,不外乎是一些常碰到的現象,長官們不支持,團隊成員後期的配合度也越來越低,數個月後看不到任何果效,反而被客戶抱怨開發品質變差,一直要配合測試『半成品』…凡此種種,導致了一個很顯而易見的結果:半年後團隊回到了原本習慣的開發方式,他則是離職謝罪,業界再添一個失敗的敏捷案例。 他說:『我不後悔,如果再來一次,我依舊會堅持推動敏捷!』 我笑笑地看著他,問道:『我以前說要怎麼推動敏捷,記得嗎?』 他看了看我,想了一會,回答:『你好像沒說過,你說的是…不要推動!』 『是啊,我以前說了,敏捷「 不要推動! 」,我不是開玩笑的!』我笑著說。 『特別是當你的主管腦袋裡面根本沒有敏捷時,推動是沒用的』我喝了一口咖啡『反過來說,當你的團隊腦袋裡充滿敏捷時,根本不用推動,屆時你想攔都攔不住。』   『那不推動能怎麼辦呢?專案狀況很糟,難道放著不理嗎?』他有點不服氣。 『不是的,平常的時候,你得要帶風向。』 『 帶風向?』他看著我,一幅不可置信的樣子。『這些人的腦袋跟XX(消音處理)做的一樣,我怎麼可能帶得了風向? 』他又補了一句『別開玩笑了。』 『你有沒有想過』我問他:『如果你連風向都帶不了,又怎麼可能推動呢?』話說完,他傻了。 『所以,關於推動,你首先要做的是其實是擴張影響力。』我接著補充道:『帶出影響的方法有很多種,除了你自己以身作則的示範之外,推薦好的書、適合的研討會、有預算的話外請講師上課、在企業內安排敏捷成功案例分享...有很多事情可以做。基本上就是,洗腦。』    『我認識某家公司的CIO,這幾年舉凡公司會議,開口必提microservices、docker,即便他不確切知道這些term到底是什麼,或許跟他心裡想的有所差異,但不論如何,這些名詞朗朗上口,這也是洗腦成功的案例…』我說道。   他打斷我:『但是…如果主管們的腦袋裡沒有敏捷,那到底塞了些甚麼XX(再次消音處理)?』   我回答:『每一個層級的主管,在意的往往有所不同,很多人以為主管愛打高空,但原則上愈高層的主管,關切的事情卻總是愈務實(現實),你必須知道他們在想什麼,然後用他們的語言去和他們對話...』我接著說...

在azure vm上加掛SSD磁碟機

圖片
隨著科技的進步,背在身上的設備有越來越小越來越輕的趨勢,這個月入手了一台surface go,十吋的大小讓你很容易放入側背的包包裏面,不過他的運算能力也有一定的限制,也因為如此,最近在azure vm上的使用越來越兇,一般開發或是日常的工作,可能都在azure vm上搞定了。 最近因為一些操作上的需要,想要在azure上擴充一台SSD Disk,隨手把流程紀錄一下。在Azure上要擴充一顆硬碟相當容易,只需要在portal選擇磁碟的部分: 按下新增之後,你會看到『建立磁碟』的選項: 點選後會看到底下畫面: 上圖一資源群組的部分,我會建議你把建立出來的disk放在跟VM一樣的群組中,方便未來的管理。而圖中二的大小,當然就影響價格,你可以參可底下的連結: https://azure.microsoft.com/zh-tw/pricing/details/managed-disks/ 大概一分鐘左右會建立完成,完成後你只需要回到磁碟管理畫面中,從下拉的選項中就可以找到你剛才建立的磁碟,點選他後按下儲存即可: 你可以能會希望,這樣操作之後,進入VM就看到一顆活生生的硬碟? 無奈事與願違: 你並不會看到立刻出現了新的硬碟,這是正常的,就好比你自己組裝電腦,把硬碟接上去之後,還得做一些動作對吧? 沒錯,請執行diskmgmt.msc : 進入磁碟管理畫面中之後,你會看到剛建立的硬碟應該會被找到: 後面的動作就跟當年自己組裝電腦完全一樣囉,把硬碟加入並且指派磁碟機代號,完成format之後,就會看到該硬碟出現了: 其實還蠻簡單的對吧。 隨著身上的設備越來越輕,網路的連線越來越快,我們正邁向一個所有事情都可以在雲上搞定的時代,唯一需要注意的是你的荷包夠不夠深,信用卡額度夠不夠大而已… enjoy it.

看看誰能存取你的Microsoft Account

圖片
這幾天在整理帳號。 我們先前介紹過 Microsoft Graph API ,你應該知道MS Account支援OAuth進行授權和身分驗證。也就是說,你透過你的MS Account登入某些網站或系統時,該應用程式可能會跟你索取你帳號的一些使用權限,那個畫面往往長得像是底下這樣(其實不只MS Account,你的google account更常被這樣使用): 最基本的,就是跟你索取你帳號的個人資料(像是姓名、email…etc.),當你用某個MS帳號登入第三方系統時,這是最常見的狀況。 但除此之外,你可能在按下『是』的時候,還同時間授予了該應用一些權限,諸如存取你的通訊錄、行事曆、或是你的onedrive檔案資料夾…等(這些權限的索取都會顯示在上面的清單中,但很多人沒有特別留意)。 一般來說,這些應用程式企圖取得這些授權並非惡意,只是為了做一些系統整合,像是把某一個預約添加到你的行事曆中、或是把手機上的照片存到你的Onedrive內這樣。 但,當某些App我們不常使用(或是該App被認為有安全性疑慮)時,你最好重新檢視一下你到底開了哪些權限給甚麼App? 底下這個位置,可以看到你到底授權了哪些應用程式存取你的MS Account。 https://account.live.com/consent/Manage 出現的畫面類似底下這樣: 你可以看到那些應用程式(或網站)可以存取你的帳號,點選編輯,將出現該應用程式可以存取你哪些資訊的細節: 畫面中列出最近一次的使用時間其實蠻貼心的,這有助於讓你更放心的決定是否要把授予該應用程式的權限刪除,一旦刪除了,該應用程式就無法拿著token去取得你的資料了。 當然,如果你要重新授予該應用程式權限,大部分的狀況下只需要重新用你的MS Account帳號登入該應用程式即可,如果你不很確定,可以看看最近一次的使用日期,如果很久沒用了,應該可以大方的將授予該應用的存取權限刪除。 趁著假日,趕快看看你的帳號到底給了哪些人(app/網站)哪些存取權限吧。

配合asp.net快速使用ngrok

圖片
最近常常需要透過ngrok來偵錯WebHook或WebAPI, 前面 曾經介紹過,當你下載了該工具之後,可以在DOS prompt下一個類似底下這樣的簡單指令來讓你的localhost網站能夠被外界讀取: ngrok http 31217 -host-header="localhost:31217" 執行後你會看到類似底下的畫面: 這表示,上面這樣的指令已經可以讓ngrok把你的 http://localhost:31217 對應到 http://c5bfcbb9.ngrok.io 這樣的動作做久了之後,常常打command line不免覺得很煩,所以乾脆寫一個簡單的batch file: 透過然後把上面這個簡單的batch file放在桌面上(或是其他你順手的位置),需要ngrok為你服務時,只需要執行它: 輸入五位數的port NO.之後,就會自動運行ngrok囉… hope it helps.

用滑鼠右鍵在檔案總管資料夾中開啟Command Line

圖片
我小時候很喜歡tom hanks演的一部電影: 阿甘正傳,劇裡面有一句對話: life is like a box of chocolates. you never know what you're gonna get. 曾經我以為,在這個最輝時期的市占率超過九成的Windows作業系統中,我會用到command line的機會應該越來越少了,但人生,就像阿甘說的,你永遠不知道接下來會碰到什麼。 好吧,我碰到的是,我已經開cmd line開到很煩的程度了,而且我時常必須在特定資料夾底下開command line,我一開始傻傻的先開啟prompt,然後透過CD指令切換資料夾。 這總蠢事做久了之後,我就想我 必須 要擁有一個功能。那就是,我想要在檔案總管裡,按下滑鼠右鍵,就出現底下這樣的選單『在此開啟CmdLine』: 然後點選之後,就自動幫我開啟prompt並且直接切換到該資料夾: that’s it. 我要的不多。 如何實現這個功能? Windows 的秘密總是在機碼裡: 只要修改你電腦上的registry,加上上面這些schema即可。如果你想比較快的完成這件事情,把上面這些指令存成一個副檔名為.reg的檔案,我已經幫你存好了: http://arock.blob.core.windows.net/blogdata201810/%E5%9C%A8%E6%AD%A4%E9%96%8B%E5%95%9FCommand%20Line.reg 然後去執行它,你會看到: 這很正常,因為修改機碼是一件危險的事情,特別是從網路上來源不明的設定檔。如果你很有勇氣地按下Yes,那會看到: 好了,現在你在檔案總管中,點選特定資料夾按下滑鼠右鍵,就會出現這個選項了: enjoy it.

使用C#開發Linebot(27) - 在發送的訊息中加上Quick Reply

圖片
LINE在2018/7月底推出了Quick Reply機制,他可以讓使用者可以更輕鬆的回覆Line bot所發送的問題,官方細節你可以參可底下連結: https://developers.line.me/en/news/2018/07/31 過去,我們要讓用戶回答Line bot的某個問題,除了透過自然語言(讓用戶隨意打)的方式,就是透過 Template Message ,讓line bot跳出一整塊大面積的選單訊息,像是: 但這樣的Tempalte Message佔用了很大一塊版面,每塊卻又只能最多放四個選項,有些時候顯得大而無當。特別是若你其實只是要用戶選擇一個簡單的答案時,根本不需要像上面這樣的Template Message又是大圖又是標題的。 這時,你可以採用底下這樣的QuickReply來解決: Quick Reply 就是上圖Menu上方的小小選項(Action),最多可以出現13個Action,並且支援postback, message, datetime picker, camera, camera roll等各種action。 要實現這樣的功能很簡單,請參考底下這樣的程式碼: 過去我們在發送訊息的時候,也是採用PushMessage,而為了支援QuickReply的功能,我們額外建立了一個TextMessage類別(第2行),你可以直接建立該物件,並指定要顯示的訊息。 接著,透過該物件的quickReply屬性,你可以在items集合中以Add方法加入想要新增的QuickReply item。 在上面例子中,我們新增了三個都是一般的QuickReplyMessageAction,該action的行為如同先前介紹過在TemplateMessage中的MessageAction一般,就是顯示一個標題,執行結果如下: 圖示則是第三個參數 new Uri(…)所指定的,別忘了必須是https並且為.png格式。 如此一來,用戶就可以直接點選上面的『特休』、『事假』、『病假』其中之一。點選時的行為就等同於用戶說了『特休』、『事假』、『病假』這幾個字一般,這就是QuickReplyMessageAction所呈現的功能。 而更精彩的是,除了QuickReplyMessageAction之外,前面提到過,還有可以讓用戶直接選擇時間日期的QuickReplyD...

使用C#開發Linebot(26) - 利用ngrok讓你的Line bot可以使用localhost作為WebHook

圖片
過去,我們大多是建議開發人員直接將asp.net WebApi所撰寫的WebHook佈署到IIS或Azure Web Site站台上去測試,勤快一點寫寫Log和try…catch,大致上基本的除錯也都能處理,但碰到真的需要設定中斷點單步執行或除錯的時候,也只能使用『遠端偵錯』這個殺手鐧了。 但無奈遠端偵錯的速度實在不快,碰到比較複雜的程式碼,跑起來需要不少的初始時間。沒有其他的辦法嗎? 其實是有的,坊間有一個可以把localhost轉成網際網路上特定endpoint的工具,稱為ngrok。 你只要從底下網址下載這個工具即可: https://ngrok.com/download 下載回來解壓縮後,其實只有一個小小的.exe檔案: 它是一個命令列工具,你只需要將你透過Visual Studio開發好的asp.net web API運行起來,然後執行底下這樣的指令: ngrok http 31217 -host-header="localhost:31217" 畫面上會出現類似底下的內容: 這表示,ngrok已經幫你把 http://c5bfcbb9.ngrok.io 這個位址的所有往來封包轉向到你的 localhost:31217 這個位置,如此一來,我們只需要在Line bot後台輸入WebHook的地方,將底下這樣的url作為WebHook位置即可: http://c5bfcbb9.ngrok.io/api/ {你的route} 你會發現,Line bot所接收到的所有訊息,如今會轉傳到你的localhost:31217的應用程式中,你可以大方的在本機電腦上測試WebHook,甚至設置中斷點了。 不錯吧? ngrok是一個好用的測試工具,但如果長時間使用可能不很適合,同時間它也有免費使用的限制,具體的費用可以參考: https://ngrok.com/pricing 但不管如何,它對於我們的Line bot WebHook測試來說,確實提升了不小的便利性,大夥不妨可以試試看。 ----------- 線上課程: https://www.udemy.com/line-bot/ 電子書: http://studyhost.blogspot.tw/2017/12/line-bot.html LineBotSDK: https://www.nuget...

使用C#開發Linebot(25) - 動態 re-issue short-lived channel access token

圖片
這是最近關於Line bot開發人員的一個很重要的議題。 在過去,我們進行Line bot開發的時候,使用到的Channel Access Token大部分都是透過Line的後台所產生的long-lived token。 (大部分? 不是全部嗎? 難道還有其他方法???) 其實是有的,Long-lived token是一個方便的做法,但它是不會過期的,除非你重新issue一個新的Long-lived token。 這雖然方便,但相對不安全。只要知道Token的任何人,都可以透過這個token成為你的bot的控制者,來發送push message訊息。 所以? 因此,LINE預計要在2018/11月終止Long-lived token,相關的公告請參考底下連結: https://developers.line.me/en/news/2018/08/13/ 這意味著,以後你 可能 (細節我還不確定,但LINE應該會有後續的相關公告與說明)就無法使用Long-lived token了。 好,那重點來了,如果不能使用Long-lived token,替代的方式是什麼呢? 是short-lived token,相關資訊可以參考底下連結: https://developers.line.me/en/reference/messaging-api/#issue-channel-access-token 從官方的說明中可以看到 short-lived token是有使用期限的,它只有30天的壽命,且,你最多只能同時擁有30個short-lived token。如果你issue超過30個short-lived token,則前面issue的token將會失效。 如何Issue一個short-lived token呢? 具體做法是透過 http post: 你可以針對 https://api.line.me/v2/oauth/accessToken 送出一個post,並且帶上grant_type, client_id, client_secret這幾個參數。而client_id, client_secret就是你在LINE Messanging API後台中的Channel Id和Channel Secret: 如果你用LineBotSDK則更簡單,只需要透過底下這樣的C#程式碼: 其...

the DevOps journey – 什麼? VSTS支援Public專案了!?

圖片
今天想要建立VSTS專案的時候發現了這個選項: 心想,MS買了Github之後果然霸氣,連VSTS都順便支援Public專案了! 咦?灰色的不能點? 看了說明原來Site Admin得先到Policy這個地方設定為開啟: 設定之後,你就可以建立Public Project了。 從此之後,在VSTS Project中你也可以讓匿名用戶檢視程式碼,commits、分支、pull requests,也可以檢視工作項、Wiki…等資訊… 咦?那我上課share code不就不需要用Github了嗎? (MS真是頗令人費解啊…) 更多資訊在… https://docs.microsoft.com/zh-tw/vsts/organizations/public/about-public-projects?view=vsts https://blogs.msdn.microsoft.com/devops/2018/04/27/vsts-public-projects-limited-preview/ ------------------------------ 本系列文章索引位於 http://studyhost.blogspot.tw/2017/02/the-devops-journey-index.html 相關教育訓練: http://www.studyhost.tw/NewCourses/ALM 若這篇文章對您有所幫助,請點選 這裡 加入FaceBook專頁按讚並追蹤,也歡迎您幫我們分享出去,謝謝您的支持。

使用C#開發Linebot(24) - 建立LINE Liff App

圖片
先前我們介紹過了Liff App這個機制 之後,我們的SDK也跟著進行升級,現在,你可以透過底下這樣的語法輕鬆地建立Liff: 第二行的AddLiffApp這個API,就可以建立一個Liff App,其中的參數ChannelAccessToken不需要解釋,而LiffURL是具體連結到你自己開發的Web應用程式,注意該網址必須是https。 第三個參數是Liff App的高度,你可以透過isRock.LIFF.ViewType來選擇tall, full… 使用前別忘記將LineBotSDK升級到至少 0.7.6-beta2的版本: 上述程式碼執行過後,你會發現line bot顯示了該Liff App的URL: 如果你點選它,會發現果然以指定的方式開啟了該WebApp: 透過這樣的方式你可以輕易地建立一個Liff App,如果要列出所有的Liff App,也可以透過底下這樣的Method: 其中foreach所列出的是登記在該ChannelAccessToken名下的所有Liff Apps,呈現結果如下: 建立與列出Liff App的範例程式碼在 https://github.com/isdaviddong/CreateAndListLiffApp   have fun~ ----------- 線上課程: https://www.udemy.com/line-bot/ 電子書: http://studyhost.blogspot.tw/2017/12/line-bot.html LineBotSDK: https://www.nuget.org/packages/LineBotSDK 如果需要即時取得更多相關訊息,可按 這裡 加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。