2020年4月23日 星期四

Inspired 產品專案管理全書 - 探索客戶計畫:用來提醒 Product Manager 的實用查核表

source: pngwave


工程師背景的我們,從以前最擅長與專注的就是在 Deliver 的優化,以及學習相關的方法論,但是隨著在社會闖蕩碰壁多年,漸漸發現其實 Define and Discovery 的方法論更是至關重要,可以幫助我們減少許多白費工的狀況發生(工程師最怕需求一直改,改出來又沒人用)。

去年聽了 Marty Cagan 的演講 - Product Is Hard ,就開始仔細閱讀『Inspired 產品專案管理全書』,並且思索如何應用在現在的產品,有許多內容和方法真是相見恨晚,在第 39 章整理了 Marty Cagan 在 2013 年寫的一篇文章  The Power of Reference Customers,而這個套路在矽谷的 SaaS company 更是隨處可見,可以在許多產品的業面看到以下訊息:


2020年4月20日 星期一

你知道在 Azure 上有幾種 On Demand 啟動 Spark 的方法嗎?



最近需要開始分析一些 Log ,最直覺的方式就是使用最熟悉的 Spark 來分析,於是開始研究最近有什麼方便在 Azure 啟動 Spark 的方式,在 AWS 和 GCP 上,之前就已經有研究過專門支援的 PaaS 服務:
我知道 Azure 有 HDInsight ,但是之前使用覺得沒有 GCP Dataproc 好用,不知道 2020 年的今天,有沒有什麼新的 Solution 呢?畢竟 Azure 的 "強項" 就是透過大量跟 3rd-party ISV 整合來壯大自己的服務

Azure 小筆記 - 關於 Azure Data Exploer 又稱 Kusto




Kusto 簡單來說就是 Azure 版的 BigQuery,可用於儲存和執行巨量資料的互動式分析。它是以關聯式資料庫管理系統為基礎,支援資料庫、資料表和資料行之類的實體,並提供複雜的分析查詢運算子 (例如,計算結果欄、搜尋和篩選資料列、依匯總分組、聯結)。

Kusto 藉由「犧牲」執行個別資料列和跨資料表條件約束/交易的就地更新功能,提供絕佳的資料內嵌和查詢效能。 因此,它會代替 (而不是取代) OLTP 和資料倉儲處理等案例的傳統 RDBMS 系統。身為巨量資料服務,Kusto 會處理結構化、半結構化 (類似 JSON 的巢狀類型) 和非結構化 (自然語言) 資料。

資料來源:開始使用 Kusto

2020年4月16日 星期四

Go 小教室 - 如何檢驗 Go struct isEmpty




最近踩到一個 buffalo-pop ORM 的一個雷,範例如下:


type Job struct {
 ID             string         `json:"id" db:"id"`
 JobCreateType  JobCreateType  `json:"job_create_type" db:"job_create_type"`
 FileName       string         `json:"file_name" db:"file_name"`
 Status         JobStatus      `json:"status" db:"status"`
 CreatedAt      time.Time      `json:"created_at" db:"created_at"`
 UpdatedAt      time.Time      `json:"updated_at" db:"updated_at"`
 JobSourceInfo  *JobSourceInfo `json:"source_info" has_one:"job_source_infos" fk_id:"job_id"`
}

type JobSourceInfo struct {
 ID               string        `json:"id" db:"id"`
 JobID            string        `json:"job_id" db:"job_id"`
 SourceURL        string        `json:"source_url" db:"source_url"`
 }


一個 Job Struct 裡面有一個 Embedded Struct JobSourceInfo ,在資料庫裡面是 1 - 1 的關係,一開始產生 Job 時,並不預期一定會產生 JobScoureInfo,這時我們都會宣告為指標,理論上只要如下面範例,檢查是不是 nil 就能知道這個物件有沒被產生。

var ji *JobSourceInfo

if ji == nil {
    ji = new(JobSourceInfo)
    // do stuff 
}


但是.... Buffalo 的 ORM 的 Eager func 卻自作主張的幫我產生了一個 Empty Struct ,原本只需要檢查,指標是否為 nil ,但是現在卻得檢查是否為 empty Struct...

那讓我們來看看檢驗 Empty Struct 有幾種方法?