程式設計週記[2016/05/13]: 最近地震真不少,國家級警報也不少

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

本週花太多時間在學習 Amazon Echo 跟一些社群的事務上面.應該花更多時間開始看論文.下週應該又要回到看論文寫每週專題的日子. 本週專題將上週的 Line Bot 套件拆解出來,準備要移植到 Facebook Messenger Platform 之用.

Go

mkideal/onepw: onepw is a command line tool for managing passwords

使用命令列的密碼管理工具,可以幫你產生你需要的密碼並且儲存起來,幫助你再也不需要記住密碼.

emc-advanced-dev/unik: The Unikernel Compilation and Deployment Platform

幫你把 Go App 燒在可開機磁碟上.

saiday/JonSnow: Google Play review watcher, deliver new reviews to your slack channel

很威的 Google Play Review Watcher by saiday ,一開源過後馬上就有人幫忙加上 Apple Store Review Watcher 開源真棒啊…

How To Use Martini to Serve Go Applications Behind an Nginx Server on Ubuntu

雖然文章是 2013 年的,但是使用 NGINX 搭配 Go 的 Web App - Martini 到目前都還是很多想要使用的架構之一.

[Youtube] Golang Google Cloud Storage

在 Google Cloud Storage 上面使用 Golang 的影片教學.

在 Github 專案內搜尋 Golang 函式,Golang 開發者必裝 Chrome Extension

這個 Chrome Extension 不錯使用,一定要裝.

liviosoares/go-watson-sdk: Go (golang) SDK for IBM Watson services

最近在大肆宣傳的 IBM 網路服務 Watson ,馬上就有人寫出 Go 的 SDK .幾乎所有的服務都可以使用,相當的棒.

manul: The madness vendoring utility for Golang programs

使用 Git submodule 來做 Go Vendoring 的好工具.

Adding in-memory in-process L1 for debugging by ScottMansfield · Pull Request #68 · Netflix/rend · GitHub

use e, ok := h.data[string(bk)] rather than key := string(bk) e, ok := h.data[key]

The Go compiler has an optimization that eliminates the slice->string copy. by dgryski

透過這樣使用,會比較快.

distatus/battery: cross-platform, normalized battery information library

跨平台的電池資訊顯示工具.

Python

Python 依照 PEP 8 規格自動排版工具 - Tsung’s Blog

Python 的 Formatter Tool.

Android/JAVA/NODE.JS

如何准备阿里社招面试,顺谈 Java 程序员学习中各阶段的建议

作者的 Java 能力相當的深,所以整篇文章很值得一讀.

android sdk 源码解析

一群人用熱情來解析源碼並且心得分享給大家.

podq: The Open-source Online Podcast Player for Developers http://podq.devstd.io

開源的 Podcast player ,主要使用 Java script 來寫.

Docker

Windows Container Networking

介紹在 Windows 2016 裡面 Windows Container 網路的架構.

Official consul docker image

官方的 Consul docker image ,之前使用 docker run consul 其實是使用開發中的 image ,這次官方加上不少修改正式將可以搭配 Production 用的 consul docker image 釋出.

前Googler:Docker从上手到差点放弃

之前在 Google 工作的人要導入 Docker 的時候,面對到他的半透明性踩到了不少的雷.對於想要將 Docker 放在生產環境上的人一定要好好的閱讀.

開發人員不可不知的 Windows Container 容器技術預覽

保哥的介紹,關於 Windows Server 2016 上的 Windows Container 的功能介紹.

MariaDB and Docker use cases, Part 1

開源的 MySQL: MariaDB 一些透過 Docker 使用方法.

NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs

透過 Docker 來跑 NVIDIA CUDA

MIT 6.824 Lab2 -Raft

MIT 分散式課程將 Lab 2 從 Paxos 換成 Raft

Using Caddy with Docker

講解如何將 Caddy 放在 Docker Image 要注意事項.

iOS/Swift

R Programming

Linux command line tool + pipe 學習筆記之一:讓R 加入pipe的一環

透過 Linux command line 的一些工具 (stdin/stdout/awk…) 來輸入做一些處理,讓 R 更容易地處理那些數據.

網站文章

Collection of linux sysadmin/devop interview questions

Linux System Administrator 面試題庫

使用 Erlang 開發產品的心得

不少 Erlang 基本語言架構的介紹還有開發上可能會遇到的問題.用來寫分散式系統可能會碰到的問題以及應該注意的部分,很值得閱讀.

Why Atom Can’t Replace Vim

除了講解 Vim 關於 Text Object 強大的地方,其實不少基礎的 Vi 教學,很值得一看的.

用 Travis CI 自動化發佈 Pelican blog 到 GitHub Pages 上

基于深度学习的自然语言处理在2016年有哪些值得期待的发展?

2016 各家大廠都釋出了自己的自然語言學習系統,那摩之後有哪些值得期待的發展? 讓我們慢慢的看下去吧

來自矽谷的忠告

對於工作,職涯規劃有挺有趣的反思.

Advanced Ping: httping, dnsping, smtpping

關於各種的 Ping 技術: httpping, dnsping, smtpping 的詳細介紹.

“Zoekt (“zooked”): Fast trigram based code search by Google”

背景介紹: 這算是 Google 官方釋出的 trigram based code search tool ,其實之前 Russ Cox 就有寫過類似概念的東西(並且支援 REGEX)

如果想簡單的瞭解 Trigram 是如何在 code search 中運作,可以看小弟我的簡單介紹文章

Uncharted 4開發雜記

在頑皮狗的台灣遊戲開發者對於 Uncharted 4 的參與心得,

[FB] 玉山銀行信用卡串接 Q&A by c9s

不少好的討論,裡面還有已經開源的玉山信用卡 PHP 接口

Notes on Distributed Systems for Young Bloods

雖然是舊文章,但是給初學分散式系統的建議,寫得真好。

網站收集

Blog: The Morning Paper

強力推薦每天講解一份論文的作者選論文的品味很好,也能把論文體翻譯成清楚的白話文。

有聲書/影片心得

SofewareEngineerDaily: Kubernetes, Docker, and the Distributed Operating System with Kelsey Hightower

請教了 Google 裡面 Kubernetes 的 co-founder - Kelsey Hightower 來講解關於 Kubernetes 的基本概念,設計裡面與要面對的問題.

[Podcast] Go on the Cloud

剛上架最新一期的 Google Cloud Platform Podcast 請到了兩個大神:

  • Andrew Gerrand: 身為 Gopher 你很難沒聽過這個名字,就是 Golang 的創始團隊之一,並且專注在 #‎golang 使用者經驗上的持續推廣.
  • Chris Broadfoot: 去年加入 Go 跟 Google Cloud Team 的 Chris 主要是負責 Go App 在 Google Cloud Platform 上面的開發.

裡面有談到為何 #golang 受歡迎與為何幾乎所有重要的雲端的開發系統( #‎docker #‎kubernetes) 都使用 #golang 作為開發語言. 很推薦一聽….

此外: 主持人是有來台灣參加 Golang Taiwan 的 Francesc Campoy 跟 Google Cloud team 的 Mark Mandel

本週專案

這邊會寫一些我的Project 52的成果.

本週專題: https://github.com/kkdai/petneedme

我將上週 Line Bot 關於流浪動物的部分拆解出一個小套件,並且加上了一個 command line 的工具.

[AWS][Echo] 來玩玩 Amazon Echo

前提 ( 什麼是 Amazon Echo)

Amazon Echo 是 Amazon 的一個很有趣的裝置.雖然許多人都將它當作是藍芽擴充喇叭,但是其實他功能不僅僅於此.他不僅僅能夠透過藍芽播放音樂,還能夠聽懂你的語音來執行許多功能.這邊有段簡單的影片. 並且 Amazon 具有一個類似 App Store 的商城上面擺滿了各式各樣的語音服務 ( Amazon 稱為 Skill ) 可以透過安裝不同的 Skill 達成許多功能.不論是播放音樂或是訂購商品.

然後接下來就簡單的紀錄一下最近玩 Amazon Echo 的心得

透過 Raspberry Pi 2 架設虛擬的 Amazon Echo

那使用這個功能一定要購買 Amazon Echo 嗎? 當然是,不過你也可以透過 Amazon 開放出來的說明文件來使用 Raspberry Pi 2 來架設.

詳細安裝文件,文章相當長,就不詳述在這裡.

先簡單敘述你需要的設備:

  • Raspberry Pi2 + 記憶卡 (至少 8G with NOOB OS) + 無路線或是無線網路卡
  • 麥克風 + 喇叭
  • 滑鼠 + 鍵盤

簡單的敘述一些步驟如下(強烈建議看文件,裡面有一步步的介紹):

  • 透過 NOOBS 安裝基本的 RPI OS (選擇 Raspbian)
  • 安裝 SSH 與 VLC
  • 安裝 JDKMaven
  • Amazon Developer 去註冊 Amazon Alexa Voice Service 然後去原先文件裡面的 Github 下載下來整套 Server 跟 Client
  • 產生 SSL Cetificate 並且啟動 RPI 上面的虛擬 Echo Server 跟 Client
  • 最後就能透過 RPI 裡面 XWindows 的語音控制 Client 輸入語音資料與 Amazon Alexa 伺服器溝通

這樣你架設起來,只能對他做一些間單的問答(問問台北時間,台北的溫度或是講個笑話).還有就是使用人家已經寫好的 Skill .

透過 AWS Lambda 跟 OAuth2 Server 架設自己的 Alexa Skill

以下是透過 Amazon Alexa 說明網頁上面的基本架構圖:

Amazon Echo Architecture

稍微一個個介紹每個 Server 所負責的部分:

  • Amazon Echo : 就是使用者手中的裝置,可以把語音資料傳輸到 Alexa Service
  • Amazon Alexa Service: 會負責把語音資料做一些處理,擷取出每段語音中的”意圖” ( Intent ) 並且傳輸到 Amazon Alexa Skill 裡面.
  • Alexa Skill: 主要將 Skills 分成兩種: 一種是 Smart Home Skills 一種是 Custom Skills.
    • Smart Home Skills: 是一個內建好的基本智慧家庭的功能.可以設定某些裝置啟動. (舉例: 打開燈或是開門)
    • Custom Skills: 這時候你可以定義各式各樣的功能,不論是定 Pizza ,讀取你的 Email 等等都可以. 不過你需要建立好自己的 Intent Schema 還有透過 Sample Utterances 來訓練系統是否能夠完整的分析類似的語句.
    • 注意, Alexa Skill 會連接到一個 Amazon Lambda 服務.每次你的語音下達之後.他就會呼叫相對應的 Lambda 服務來執行你所下達的指令.
  • Dot Cloud: 這是一個 Alexa Skill 的提供商架設的網路伺服器.這個伺服器主要有兩個負責兩件事情.
    • 認證使用者並且綁定帳號(Linking Alexa user to your service user):
      • 這邊需要提供簡單的 OAuth2 (RFC 6749) 認證的功能, Alexa 會將該使用者資料傳輸過來.交給廠商定義的帳號設定做一個簡單的認證與綁定.
    • 需要相關的執行功能:
      • 這部分其實也可以放在 Lambda 上面做,但是考量執行效率與經費建議擺在 Dot Cloud 的伺服器來跑. 執行功能可能是開啟你的桌燈,開啟你的信件等等.. 或是連接到購買商品的平台.

透過這樣的執行架構下,設定流程就有點繁瑣.

  • AWS Lambda 相關:
    • 新增一個 AWS Lambda 並且將選擇範本 alexa-smart-home-skill-adapter
    • 將相關的功能完成後,記得將 “Event Source” 連接到你的 Alexa Skill
    • 記錄下該 Lambda ID
  • Alexa Skill 相關:
    • 打開剛剛建立好的 Alexa Skill 並且將 Endpoint 填入剛剛建立的 Lambda ID
    • Account Linking 部分記得輸入好如何連接到自有的 OAuth2 服務 (記得要支援 HTTPS )
    • 測試,並且查看是否有任何錯誤的部分.
    • 記得先不要真正的 submit 上去,只要 Save 作為測試使用.
  • 打開你的 Amazon Echo (或是模擬器)
    • 打開 Alex Skill (如果使用模擬器,需要在 RPI 的 XWindows 打開該瀏覽器)
    • 選取你並啟動建立的 Alexa Skill
    • 打開音效錄音程式,並且測試
    • 如果出現問題,記得查看 Lambda Log 或是 Skill 那邊的 Log

相關問題處理:

(1) 無法正確找到你的 Alexa Device

問題點:

透過 Echo (模擬器) 發出 ”Alexa find my devices“,結果卻得到找不到任何裝置的回應.

檢查方式:

  • 檢查 Lambda 確認有收到 Alexa 的指令.
  • 檢查你的 Dot Cloud 確認有收到 Lambda 指令.

通常比較有可能都是 Lambda ID 打錯,或是 Alexa Skill Application ID 打錯導致服務無法串接起來.

(2) 無法讓 Echo 發出特別的音樂

問題點:

其實是很無聊想寫出個 2012 裡面 Engine Start 的梗.不過遇到不少問題.

相關實作:

"outputSpeech": {
    "type": "SSML",
    "ssml": "<speak>This output speech uses SSML.</speak>"
}

檢查方式:

  • 你自己 Host 的 Service “Dot Cloud” 需要支援檔案下載 MP3
  • MP3 格式必須是 MPEG2 Audio 並且是 48 kbps

心得:

其實沒有貼上任何程式碼也寫了那麼多,可見其實 Amazon Echo 沒有那麼容易玩 XD (更別說 RPI 設定有接近 30 頁的文件)

不過設定之後,其實真的能夠感受到 Amazon Echo 的強大.你就當作是一個開放的 Siri 或是 Google Now .並且結合一個相當強大的語音辨識引擎在裡面. 不過因為是模擬器,所以對於語音的處理還是比較弱.之後實機來了應該會更棒.

[碼天狗#42] 讓你 Go 程式碼變得更好的工具集 (Tools to Help you Go)

本文刊登於 碼天狗#42 有興趣追蹤相關文章讀者,最快的方式就是訂閱碼天狗

文章鏈結

https://serifandsemaphore.io/tools-to-help-you-go-d6f782055ce7#.1iex1ex8l

Golang 讓人喜歡的許多原因之一,就是有著許多好用的工具可以讓你在撰寫 Go 的時候更加的輕鬆而方便. 舉個最間單的例子,就是 coding style tool goimport 他可以讓你在存在之後,自動把 coding style 改成 Golang community 所習慣的範例. 當然還有好用到不行的 guru 可以幫助你查詢 caller 與 callee.除了這兩個之外,這一篇有介紹更多的工具:

  • Golint : 可以自動幫你檢查所有程式碼中潛在的語法問題.
  • Gocyclo : 可以幫你計算你程式碼中的循環複雜度(Cyclomatic complexity)避免有過多的迴圈運算.
  • Depscheck : 可以幫你產生相依性的報表,讓你可以思考有多少小套套件是相依其他人的.經過了 NPM 的 LeftPad 事件之後.其實不少人建議如果相依的套件太小,不仿自己寫過來吧.
  • errcheck : 這個套件可以幫你檢查你的程式碼有沒有對於每個錯誤都有相對應的檢查與處理.避免明明有 error 卻沒有檢查的潛在問題.
  • safesql : SQL Injection 是每個人在撰寫後端與資料庫橋接程式的時候最擔心的問題.這個工具可以幫你檢查看看有沒有危險的語法存在.

雖然 Golang 社群提供了許多的工具來幫助你,其實 Golang 本身的 Compiler 已經相當的強勢.會幫你檢查出許多潛在的問題.除了這些工具之外,當然相信自己與撰寫單元測試的好習慣都是可以幫助讓你的程式變得更好的不二法門.

程式設計週記[2016/05/06]: NBA 季後賽開打好久,今年都還沒好好看完幾場比賽

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

這個禮拜看了不少有意義的網路文章- “如何在四十歲後繼續從事軟體開發“ ,剩下的時間就拿來做一些有意義的專案.流浪動物領養的 Line 機器人.希望能夠幫助到一些流浪動物.

Go

Go best practices, six years in

作者分享學習 Golang 六年後(喔!一開始就學) 的一些實際演練上的好範例.

hashicorp/raft: Golang implementation of the Raft consensus protocol

其實不少使用 Raft 的套件,不一定都是使用 etcd/raft 可能都是使用這套.

A lightweight web toolkit

不少人一直都在詢問有沒有好的 #‎Golang Web toolkit ,這個 goserv 看起來還不錯.剛剛在 05/03 達到 1.0 正式版的 goserv 提供以下的功能:

  1. Fast & Lightweight
  2. Flexible Routing
  3. Centralized Error handling
  4. 跟原生 net/http 是相容的

並且可以很快速的架設 File Server,也可以很快速地透過 MongoDB 架設 REST Server 大家可以看看有沒有符合需求

Go and Quasar: a comparison of style and performance

Go Channel與 Java Quasar 的執行效率比較. 看起來 Go chennal 還是好上不少.

Solving ring-shaped problems with Go’s container/ring

想要解決環狀鏈結的相關問題需要自己實現相關的資料結構嗎? 其實 Golang 本身就有提供 container/ring鏈結) 可以幫助你解決類似的問題.

dgryski/go-tsz: Time series compression algorithm from Facebook’s Gorilla paper

從 Facebook 的 Gorilla 論文中找出的時間序列比對演算法. 值得找時間好好學習. 更多細節在這裡可以看.

Go Testing Technique: Testing JSON HTTP Requests

The Micro Bot - ChatOps for microservices

jsgoecke/tesla: Provides a wrapper around the API to easily query and command a Telsa Model S

提供一個可以操控 Tesla S 的 #‎golang 裡面有個介紹網頁,並且使用語音透過 Amazon Echo 來操控 Tesla S 自動開出車庫

NYTimes/openapi2proto: A tool for generating Protobuf v3 schemas and gRPC service definitions from OpenAPI specifications

NYTimes!!! 恩,你沒有看錯.是紐約時報的 NYTimes 其實發佈了相當多好用的 Golang 專案,不論是 Microservice Kit “gizmo” 或是 Zip 的 middle wrapper “gziphandler” 最近他們發佈了 openapi2proto 可以將 OpenAPI或是 Swagger 的定義檔轉換成 Protobuf v3 給 GRPC 使用.

讓我又為了這家公司而驚艷!

tumblr/Collins: Infrastructure management for engineers

透過 go-github 來完成的 Collin

Python

Tutorial: How to build a Facebook Messenger bot using Django, Ngrok

教學文章: 如何透過 Django 來建置一個 Facebook Messenger 機器人.

Android/JAVA/NODE.JS

xat/castnow: commandline chromecast player

透過 CLI 來操控你的 ChromeCast.

(geekforbrains)作者從 Python 換到 Node.js 一年後又決定換回來的感想

作者提出不少在 Node.Js 遇到的困難:

  • Easy to learn, impossible to master
  • Good luck handling errors
  • Callbacks, promises or generators!?
  • Bad standards

最後作者建議 Java Script 比較適合前端開發,對於他而言 Node.JS 適合比較小型的後端開發. 最後作者決定回到 Python 來開發後端控制的部分.

Docker

iOS/Swift

Building a native tvOS dashboard app

一個教學文章,如何透過 Swift 來建立一個 tvOS 的 App

網站文章

Being A Developer After 40

因為這篇文章實在太棒 (可能心有戚戚焉 XD ) .好好的拜讀後,並且好好地拿出每一個項目來自我檢討. 本來只想寫個導讀,但是導讀也太長了 Sorry…

[心得] Google、FB、LinkedIn new grad 面試經驗

一個機器學博士的面試各大公司的經驗,是不是一定需要有強大的 coding 經驗與能力呢? 挺值得一看.

傲慢与偏见——谷歌中国逆袭史

Google 當初被大陸封鎖並且退出中國市場後,百度趁機串起.許多人其實都認為百度可能無法正面打敗 Google ,這篇文章講解了許多分析告訴你,百度就算正面面對著 Google 搞不好也不會輸. 從流量,收入來看,甚至當時的 Google 在許多在地化的資訊與中文處理上還是比不上許多在地的搜尋提供商.

A Look at How Postgres Executes a Tiny Join

可以清楚瞭解 Postgres 如何去處理 Tiny Join .

幫自己的職涯做成長駭客

不少最近熱門跟求職文章的心得整理

洪士灝: 寫程式之外,傑出軟體工程師所需的六項能力

好文章,個人認為第一項能力面對任何陌生的程式語言(也可泛指為新的系統,新的知識) ,保持自我的好奇心並且終身學習是身為軟體工程師最重要的能力之一. 而第二項能力代表著好的軟體工程師所具有問題分解與理解的能力.也是洪老師常常提到的” 解決困難問題” 的能力.也是另一個面向的重要能力之一. 而 三~五項能力就比較像是 better have ,而不像前兩項能力哪麼的必要. (不過通常有著前兩項能力的人,很難沒有後面三項能力.)

10 SQL Tricks That You Didn’t Think Were Possible

列出 10 個 SQL 的訣竅,很值得好好學習.

網站收集

Collection of linux sysadmin/devop interview questions

Linux System Administrator 面試的題庫,真的都不簡單啊.

HackNTU iOS 課程

iOS 課程免費公開.主要以 Swift 為主.

Google for Education

Google 的程式設計教學網站.

有聲書/影片心得

有了 Agile,為什麼還要有 DevOps?

William Yeh 大大的課程,包含投影片跟相關影片.

Reverse Engineering Facebook with Alex Hogue

透過你的臉書聊天狀態列,來分析你朋友何時睡覺跟起床.這是非官方的 API 算是一個很有趣的 Hacking . 詳細部落格在這裡

Kubernetes, Docker, and the Distributed Operating System with Kelsey Hightower

這一篇透過 Google 的工程師來介紹由他們開源的 Kubernetes 系統,不僅僅有簡單的說明與介紹.並且也有淺顯易懂的差異比較與各類功能介紹.

本週專案

這邊會寫一些我的Project 52的成果.

流浪狗領養 Line 機器人

收容所的狗,每一隻其實都曾經是你我的寶貝.他們透過不同的原因進了收容所,卻因為得不到適當得收容得要走向安樂死的路.

這就是我寫這個 Line 機器人的原因,希望大家有事沒事可以滑滑 Line 看看有沒有你喜歡的朋友,一起帶他回家好嗎?

整個機器人架構主要是透過 Golang 來寫,並且架設在 Heroku 上面.如果你也想要架設自己的 Line 機器人,不仿看看我的另外一篇教學文章.

主要功能:

目前僅僅支援顯示台北市流浪動物資料,並且顯示該動物圖片.打入任何文字就會依序顯示.

[G0V][Pet Need Me]透過 Line 來查看動物收容所流浪動物的資料,並且來領養這些動物吧

關於小黃(狗)

(圖片摘自: 癡心的小黃狗)

我家以前是開雜貨店的緊鄰著一個傳統市場.祖母與我妹非常喜歡小狗,常常在逛市場的時候就會帶著一隻流浪狗回來說:” 這隻狗一直跟著我,我們就來養他吧”

就這樣,前前後後我家的雜貨店也收養了接近 10 隻狗 (不包括後來生的送人).裡面最讓我記憶的就是小黃這隻小土狗.

他很壞,每個進來我家的人都會被他兇過.不過他一離開家裡面就乖乖的不敢亂叫.

他很黏,不論去哪都要跟.常常小時候要出去坐公車得要先把他綁好好,不然就跟你到公車站台(當然他不敢上車).

那個年代,我們都將他放在店面的旁邊讓他亂跑.他也都很乖的不會亂下客人,並且乖乖的店門口當招牌.

有一天,小黃忽然不見了.我們四處尋找都找不到,就在大概第十天左右得時候.祖母懷疑可能被抓狗隊的人抓走,我們到收容所的時候.他已經嚇到沒有力氣癱坐在那邊.大概就差一兩天就變成十二夜的主角.

他回家之後不知道是不是心理的陰影,就再也不敢亂跑了.只敢乖乖的在家裡面.直到他走了之前.

收容所的狗,每一隻其實都曾經是你我的寶貝.他們透過不同的原因進了收容所,卻因為得不到適當得收容得要走向安樂死的路.

這就是我寫這個 Line 機器人的原因,希望大家有事沒事可以滑滑 Line 看看有沒有你喜歡的朋友,一起帶他回家好嗎?

Line Bot - Pet Need Me

Github: https://github.com/kkdai/LineBotPetNeedMe

透過 Line 來查看台北市目前有哪些流浪動物需要領養? 請用你的 QR Code 掃描並且加入為好友.

主要功能:

目前僅僅支援顯示台北市流浪動物資料,並且顯示該動物圖片.打入任何自就會依序顯示.

歡迎各位建議任何新的功能.

使用方式:

就掃描上面的 QR Code ,加入好友之後.隨便傳任何文字給他就會回傳一個動物資料給你.你不斷傳,他就會一個個動物給你看.

資料來源:

「臺北市開放認養動物」API存取

致謝

感謝g0v的許多人不斷地提起這個專案,讓我可以注意到並且能夠一起幫忙.

[好文共賞] Being A Developer After 40 (如何在四十歲後繼續從事軟體開發)

摘自: https://twitter.com/SciencePorn/status/578075637274955776/photo/1?ref_src=twsrc%5Etfw 我很喜歡這張圖,因為 NERDS (喜歡鑽研知識的人) 生活的滿意度只會隨著年齡越來越高.

關於本文

這是一篇好文章,所以我決定將他整理一些重點出來希望能做一些簡單的導讀. 也順便把自己的心得寫出來.

全文

全部文章在這裡 https://goo.gl/ZuglAs

投影片

導讀:

TL;DR 這是一個 42 歲的開發者所寫經驗分享文章.並且列出一些他 18 年多身為軟體開發者的經驗談.許多部分看完後都會希望自己當時就能夠了解,所以很推薦不論是新手或是老手都要好好閱讀這一篇文章.

故事很長,一切從 1997 年開始講起.那是一個令人懷念的年代 (FF7 發售,微軟入股蘋果,鐵達尼號上映),那是作者第一年身為軟體開發者的年份. 當時他的第一份工作是從事 ASP 並且使用 EditPlus 在微軟的平台上面.十八年過去,作者一共做過六份工作其中被炒魷魚兩次,出過兩本書,從事過不少演講.

他整理了他的一些心得,希望年輕的開發者(或是有志將軟體開發作為終生志業的人)一些建議,其中條列如下:

1. Forget The Hype (忘記各種程式語言與架構的炒作與熱潮)

不少的新的語言與技術來來去去,作者不是要你不要去學習新事物.而是不要因為有太多的新事物而恐慌或是自我放棄.持續鑽研你目前在學習的,並且可以每年挑一些你有興趣的項目深入了解.

[反觀我自己]: 各種後端與前端語言來來去去,我將我的時間學習了 Python (會持續) , Ruby, Scala (會持續) 與 Golang (會持續).但是透過使用 Golang 可以有更多的時間去了解系統架構與直接面對問題,讓寫程式變得更有趣.

2. Choose Your Galaxy Wisely (慎選你的星系)

為了維持原文,我還是使用星系這個字.這邊指的是你學習跟從事的技術要慎選.舉例而言微軟星系(泛指: .Net, C# ….) 或是 Apple 星系 (Objective C++ , Swift …) .慎選你喜歡的星系,因為那會影響你未來的發展.

[反觀我自己]: 過去十年主要針對微軟星系,目前主要就是後端的 Ubuntu 星系 ,各種後端程式語言都是我目前主要針對的.當然還有 Docker 相關技術.

3. Learn About Software History (了解各種軟體的歷史)

作者認為如果你喜歡一種程式語言,一種架構你就需要好好的了解他的由來與故事.

[反觀我自己]: 比如說:我喜歡 Golang ,我就應該要了解以下的一些問題:

  • Golang 是誰發明的?
    • Ans: 由 Google 內部的三位大神 Robert Griesemer,Ken Thompson( C 語言的共同發明者) 與 Rob Pike ( UTF-8 的共同發明者).在 2007年於 Google 內部共同起草發明.
  • 他主要解決什麼問題? 為何以前做不到?
    • Ans: 根據第一份 Golang Talk
    • 原因為:
      • Go fast!
      • Make programming fun again.
      • 世界在變,但是系統語言卻已經十年沒變.
      • 系統語言往往編譯過久
    • 為何以前做不到: (在舊的程式語言上做不到)
      • 新增函式庫不是一個正確的方向.
      • 需要從新思考整個架構來開發新的程式語言.
  • 目前這個技術的最新狀況如何?
    • Ans: Golang 目前是 1.6.2 (2016/05/03) ,並且支援 HTTP2 並且可以透過 gomobile 在手機上也可以使用相關套件.

4. Keep on Learning (持續學習!!)

不論你喜歡哪些新的技術或是新的程式語言.你都應該持續的學習.裡面並且建議:

  • 每年學習一個新的程式語言.
  • 每年讀六本書. (作者推薦 Peopleware , The Psychology of Software Programming, Facts and Fallacies of Software Engineering, Agile!: The Good, the Hype and the Ugly, Rework 跟 Geekonomics 都是好書)

[反觀我自己]:

  • 程式語言部分: 2014 (Ruby, Scala) 2015 (Go, Swift) 2016 還沒有決定.
  • 讀書部分: 每年讀沒有超過六本書,但是讀過不少論文並且有上過一些 Moocs

5. Teach (指導其他人)

這邊指的不是一定要開堂授課,你可以是寫一篇部落格來講解你學習的新事物.因為教導是最好的學習方式

[反觀我自己]: 還好部落格從來沒停過,個人也認為寫部落格的過程可以讓我不斷地檢視我瞭解的部分.並且弄懂所有的細節(希望!).不過還是希望能夠多多指導其他人(比如說 meetup 或是 talk )

6. Workplaces Suck (工作場所糟糕透了)

不要去期望軟體公司會給你任何職涯的規劃,相反的不少公司會將你認為是另外一種的勞工只會將你放在你擅長的位子,所以也有軟體公司變成血汗工廠的相關文章. 作者同時也認為開放性座位對於需要高度腦力工作的軟體工作者是一種最不好的設計(使用 “cancer” 這個詞). 而對於工作上的指派,作者也建議大家應該要好好了解每個任務的內容.有任何疑問應該要提出來討論,對於不了解的事物盲從是最不好的選擇. 甚至不惜抗拒權威或是離職才是正確的選擇,不要讓這樣的工作風氣扼殺了你的熱情.

[反觀我自己]: 我一向對於任何”不合理”的任務指派都會有意見,甚至不斷地提出抗議.(當然結果可能都不好!) 但是如果因為這樣就不提出,那麼我們還剩下什麼呢?

7. Know Your Worth (了解自我的市場價值)

這篇是要大家充分的瞭解自己的市場行情(也就是薪水),根據這篇文章通常一個軟體工程師應該要能創造出他自己薪水等級的十倍價值.事實上可能遠遠不止如此,所以作者建議我們要勇敢地去爭取更多的薪水.甚至你可以公開你的薪水等級,讓更多人知道你是否被低估(或是高估)任何(自認為)有妳相同能力的人,都應該拿到一樣的待遇.

[反觀我自己]: 這件事情還真是難做到,在一間公司待久之後.最容易降低的就是薪水提升的幅度.這件事情還得努力學習,讓自己的市場價值更高.同時我們也要不斷檢視,我們自己能不能創造出自己薪水的十倍價值.

8. Send The Elevator Down (虛心地接受任何意見)

這邊我的解讀可能跟作者原先的不同.他有提到膚色與種族的優勢,但是我想到的卻是你的職位,你可能會聽到許多來自於部下或是後輩的建議(或是批評).不要快速地想要反駁或是抵制,充分的瞭解過後或許可以坦誠自己的見解或許是有盲點的.必要時甚至可以道歉並且快速修正. 如同許多書上有提到的 : “你雇用一個員工,一定是要比你還強的.這樣你才能將事情交給他辦,你自己做更需要更大視野的任務”

[反觀我自己]: 參加社群後,最容易有這種感覺. 太多令人欽佩的後輩了,每個人都有著淵博而清楚的知識.我們不需要否認,更不需要去挑惕或是批評.我們要謙虛的接受並且吸收,成為我們自己的養分.

9. LLVM (LLVM)

作者認為 LLVM 會是下一個重要的資訊業的星系 (Galaxy) ,目前已經有許多的程式語言支援 LLVM 了.所以作者建議我們可以花一些時間去了解,或許去學習相關的程式語言.

[反觀我自己]: 雖然 Python 與 Swift 都有學習,但是還不是我最上手的程式語言之一.這一個部分我會好好謹記於心,好好學習.

10. Follow Your Gut (相信你的直覺)

作者在 2000 年就覺得 .NET 會引領接下來的幾年,在 2007 年 iPhone 的發表會就了解他的相關技術會是緊接著幾年的發展趨勢.

當然,這是作者的直覺.但是,你也應該充分地相信你的直覺.你也應該相信你的直覺,並且努力的去追求與學習.

[反觀我自己]: 我在 2014 年開始學習許多不同的程式語言, Python, Ruby, Objective C, Java, Swift, Scala 與 Rust .最後學習到 Golang. 我直覺認為 Golang 會是 Server-side (或是說 Service-side ) 最重要的程式語言之一.所以我會努力學習.

11. APIs Are King (API 是王道)

這邊很推從好的 API 設計是很重要的.不僅僅影響 server 與 client 的溝通,更會影響到好的軟體品質. 也提出 chunky is better than chatty (簡單的說:就是不要將 API 拆的太精簡,使得 API call 需要往來相當的多次)

同時作者也建議不要太依賴 REST ,不仿看看 socket.io, ZeroMQ, RabbitMQ, 或是 Erlang. 並且也應該開始架設自己的機器人.

[反觀我自己]: 沒有想過,原來 chunky 的設計準則在某些狀況下竟然比 chatty 更好,這樣好好學習. 我有架設自己的機器人來幫助我處理一些日常伺服器維護的瑣碎事項.

12. Fight Complexity (將複雜的事情簡單化)

永遠要秉持著 KISS 原則 (“Keep it short and simple”) 來處理任何事情. 面對困難或是負責的事情,有著不少工具可以幫助你將設計簡單化.

[反觀我自己]: 我一直認為能夠越有能力的人,越能夠將複雜的事情簡單的講解.或是寫成一段簡單的程式碼來實現.這個能力是我們都要不斷學習的.

Conclusion (結論)

“年齡永遠不會是一個問題,只要你的心不斷催促你持續寫程式,持續製造新的東西.你永遠都會是年輕的”

這是作者給我們的結論,他也希望我們能夠保持一顆年輕的心.不斷學習. 2016 是一個嶄新的一年,有著許多新奇的事件發生 (微軟擁抱 Ubuntu,並且讓 SQL Server 在 Linux 上執行,機器人 (AlphaGo) 的大反攻 ) .我們不會知道有什麼會發生,但是他希望我們都記住這些精神,並且微笑向前.