分類
Startup

到府加油也是一門生意? Filld、Booster

雖然身處在這個電車越來越多的現代,汽油車仍然佔多數,因此汽油仍然是多數車的主要動力來源。想像今天你開車去公司上班剛好油表快歸零了,如果下班前車子油箱可以加滿那該有多好呢?

Costco Gas Station

在美國各州的油價都不同,即便是同一州同一個城市各個加油站的價格也都不盡相同,Costco加油站前大排長龍的場景大家應該不陌生,原因不為其他,主要就是他的油價比較便宜。有錢能省消費者就願意等,事實上對於許多開車的上班族來說,每次都去好市多加油,一個月下來可以省30-60美金左右,一年下來也省了不少費用。

事實上,加油並不是一件多困難的事情,一般人的住家或者是公司附近也肯定會有加油站(未必是最便宜的那間),消費者需要做的也不過就是很順路的開去加油站,然後加油如此而已;但也就是因為各家的加油站價格混亂,有對應的價差空間就有這些到府加油(on demand gas service)新創的切入點,根據Booster所提供的報導資料指出他們主要的顧客有兩種:

  • 第一個為視時間為金錢的消費者:此類族群多半為高薪水的上班族或者是經理階級,對他們來說,在加油站排隊為了省個$5, $10是不太合理的事情
  • 第二類為常出沒的地方附近只有較高油價的加油站,如Shell, Chevron,這類型的消費者目的主要就是可以省錢,當然同時也省了時間

另外也有許多的公司公務車包含在第一類的消費者中,畢竟是公司的帳務,如果要員工一輛一輛的開出去加油也是相當耗費人力成本,使用到府加油的服務就成為了一個好選擇,甚至某些公司的員工福利中汽油補助也包含在其中。

第一類還包含了一個高端客戶的類型,像是高級車賓利就願意提供此類免費的加油服務給車主,讓車主更願意去消費高級車款(luxury cars)。

使用到府加油的服務很簡單,線上註冊填寫車籍資料後,填寫地點以及預約付款,將車子的油箱蓋打開後,在指定時間即會有負責的人員完成汽油的遞送。

這樣的商業模式除了賺取油價的進價與銷售價差額之外,同時還包含了一次性的運費,如果加油車路線的演算法校正好的話,附近的需求可以使用一台車就滿足,省去不少重複的路線也保留了賺取運費的空間;另外就是資料,此類型的公司將會擁有你的車籍資料,以及你每次加油的消費習性,相信也會有其他的應用可以做延伸。

不過聽起來很好的事物,都會有潛在的風險,許多地方的消防法規是不允許這樣未經過安規篩檢的油車經常地開在市區甚至是停車,油車在路上一旦發生意外,將會是很嚴重的災難;一般運油的車都是固定停靠在加油站,然後繼續前往下一個點,並不會停靠或是經過一般的商業住宅區道路。許多城鎮的消防單位注意到此類服務,即通知立法單位禁止,導致目前此類型的服務尚未能夠完全的擴散到多數城市,仍然是集中在少數的地方服務,至於未來會怎麼發展,仍然需要時間去觀察。

Booster FuelsFilld 是目前比較大的兩間新創,皆有完成一定程度的募資;至於台灣目前供油的廠商原則上只有中油以及台塑,桃園有唯一一間的好市多加油站價格較為低廉,尚未有相關的到府加油服務,分享此特別的商業模式給創業者參考。

分類
Startup

什麼!?汽車也能訂閱 – Fair、canvas drive、carma

有買車經驗的人應該都經歷過以下情境:選車、買車、保險、註冊,經過這些手續後,終於交車然後擁有一輛屬於自己的車。

買車的步驟上,在美國有幾個常見的選項:現金、貸款(finance)、以租代購(leasing),leasing 的方式一般為與dealer先簽一紙為期3-5年的合約,期滿後有兩個選擇,一是將汽車歸還,另一的方式則是將汽車用剩餘價值買下,等於是你可以先開三年,喜歡這台車後再買下擁有。

擁有一輛車其實是一個甜蜜的負擔,不僅是有基本的花費開銷(油錢、燃料稅、牌照稅),若買了一台車後想換車,賣車又是另一個苦惱的開頭,新車的價值一年後銳減,但又不想在二手市場虧太多被二手車商大賺一筆…

未售出的汽車農場,來源: zerohedge

而事實上每年銷售不出去的新車或者是囤積在各個車商的二手車數量更是眾多,在這樣的情境下,出現了一個新的擁有車子的模式即為訂閱制,讓單純想擁有一台汽車但不希望擔負相對應的買賣風險,同時也不需要像是以租代買的模式,而是可以短期的擁有一台車幾個月甚至是一年,另外還有單純想擁有一台車來開Uber, Lyft的司機族群,每個月僅需支出固定費用即可擁有一台汽車,標題所述的三大新創公司都是做這樣的服務:Car as a service。

Fair: start from LA
canvas drive: start from SF
CARMA: from Detroit

三間新創分別從不同的地方開始:Fair是從LA開始,Canvas drive是從舊金山而Carma則是從汽車城底特律,以目前市場佔有率來看,二手車(6年內)為Fair最大,而新車市場則是canvas做得比較好,Carma則是提供美國本土的福特以及GM旗下的車款為主體也在中西部搶到不少市場,畢竟有底特律地利之便。

對於一般使用者來說,需要做的只有在網路上選車,可以選新車、二手車,里程數以及相關的照片都可以在線上瀏覽,選後下訂也都是在網站上以及APP裡即可以完成,相關的保險、註冊行照等等公司都會直接寄到所填寫的地址中,省去使用者不少時間,想換車也是直接在線上做選擇,即可以看到如何換車相關的地點資訊等等。

三間的融資狀況也分別在不同的階段,有興趣的朋友可以上crunchbase參考:

台灣市場仍然就需要交給熟悉台灣汽車市場的創業者自行評估囉。

分類
Startup

Karat 這個新創讓你面試也能外包

在矽谷,軟體人才是各公司的一級戰區,畢竟擁有一流的軟體工程師在手等於是擁有最佳機會產出好產品或者是下一個時代的產品,保持技術領先,矽谷以及美國許多城市有經驗的軟體工程師年薪超越25萬美金大概也不是什麼新鮮事,對於各大公司軟體工程師薪水有興趣的也可以參考levels ,裡面有大家回報的各大公司標準薪資包,看過的都說準。

Karat並非誕生於矽谷的新創,而是近年也非常火紅發展科技的西雅圖,想像一下以下情境:軟體大公司的人資,每天有收不完的履歷表,篩選完後還要安排各部門的工程師做電話面試,各部門工程師的時間也不好安排,面試者的(availability)時間可能也不多,如果這個項目也能外包那該有多好呢?

Karat的商業模式主要是幫各公司做技術的電話面試。Karat也有一點Uber, Airbnb的概念在裡面,Karat上面有各大公司內想賺外快的軟體工程師,怎麼賺取這個外快就是透過Karat這個平台電話面試求職者(candidate),Karat內部有一套面試者篩選機制,不過筆者猜測大概就是優先取用Google, Facebook等FLANG級別的工程師,畢竟他們已經成功闖關難度很高的資料結構、演算法面試,由他們來面試別人聽起來也是非常合理的事項。

值得一提的是,對於在職求職者來說,你多了許多時間可以做電話面試,Karat讓你可以預約晚上的時段甚至是假日,只要媒合的工程師可以配合即可以進行面試,對於求職者來說增添了不少方便性。

Karat收費方式除了每次媒合面試收取費用外,若此candiate未來申請同一公司的職位,過去的面試紀錄也可以保存分享等資料觀看費用,有其他報導指出若求職者onsite interview也順利錄取,也可以收取相關的placement commision,不過目前沒有看到官方文章指出有類似的收費機制。

我個人有實際使用過,發現有一個缺點是媒合機制,Karat可能會將不同類別的軟體工程師放在一起面試,如此的評鑑效果可能會受到影響,不過相信隨著面試者越來越多,未來媒合機制也會越來越準。

幾個月前Karat剛完成了series B輪的募資,金額達到了2800萬美金,業務持續成長,值得看看未來的發展性。至於台灣適不適合發展這個項目,就讀者自行想像了。

分類
Startup

矽谷新創點點名之:Wag – Uber模式 for 遛狗

由於辦公室是可以帶狗來上班的,所以跟有養狗的同事開啟話題最好的方式當然就是聊毛小孩,當聊到毛小孩時有個服務是有養狗的人都很常使用的:Wag

為什麼說Wag是一個Uber模式呢?原則上Wag的服務就是讓有時間的愛狗人士幫你遛狗進而得到收入,而Wag平台本身抽成40%,剩餘的都歸給幫你遛狗之人(dog walker)。讓每個人(需經過平台篩選)可以透過平台進而提供遛狗服務,類似會開車的人可以透過Uber平台提供載客的服務。

Wag APP

當然就跟載客乘客的安全一樣,遛狗方面毛小孩的安全也格外重要,此方面該做的項目Wag大致上也都完成,諸如保險公司的簽約、遛狗時全程的路徑掌握、雙方互相的評價機制等,大致上想得到的項目Wag都已經有了。

目前Wag服務已經佈滿美國主要城市,下一步當然就是跨足相關的寵物產業,畢竟手上有完整的愛狗人士名單,這部分的垂直發展很好預測;同時在2018年初成功地向軟銀募了series C 資金,金額高達 3 億美金,如此大的現金流不僅可以加速拓展新的業務,也讓其他同行的競爭者望之卻步。

至於台灣是否適合發展此商業模式,相關法規保險是否可行,創業者們請自行評估囉。

分類
Startup

About team building / outing

矽谷是世界上科技最創新的城市之一,時常耳聞許多新創公司一路成功到IPO的案例,這篇文章跟大家聊聊上個月company outing學到的一些事項。

當日的agenda如下:

  • 早餐與集合
  • 各部門(team)分享上季所學以及下季展望
  • 午餐
  • Team building game
  • 與創投對談
  • Beer tour and dinner

部門報告

早上的每個部門分享是我個人覺得滿重要的,隨著公司逐漸成長,人數也越來越多,肯定有許多人是你不認識甚至有一些組別團隊你不知道他們的工作是什麼,早上的這個議程活動非常適合任何階段的新創公司,不僅可以讓團隊成員關係更緊密也可以讓公司不同部門未來合作更順暢。當然這個部分剛好公司是做OKR(Objectvies and Key Results),所以每個team都是用OKR的方式來呈現。

Team building game

下午玩的遊戲也是我很喜歡的部份,我們將全公司不同團隊打散分配到不同組別,簡單來說每個組別可能都會有一個工程師、一個行銷、一個業務、一個客戶經理等平均分配戰力,那進行的活動是什麼呢?

每個桌上會有不同問題的卡片,分別是業務或者是管理階層常被問到的問題:

  • 請用三個字形容你們的產品?
  • 我目前想購買大約50個帳號,我們公司有將近1000人,這樣子適合用嗎?
  • 你們公司目前有多少人呢?
  • 我們這樣大公司企業級的資料安全上有保障嗎?
  • 請問Cisco(或其他大客戶)在你們這邊的使用心得與策略是什麼呢?
  • 給我一個理由說服我購買你們的產品?
  • 各式各樣可能的問題…

遊戲進行的方式如下:每組的成員輪流抽一張問題卡,想像今天你自己就是在外面pitch的人(pitcher),回答你抽到的問題,那其他組員每個人身上會有錢、call me(再聯絡)、call my chief HR、don’t call me(不要煩我)等的卡片,根據每個人pitch的好壞其他組員可以選擇給你錢(等於我要買)或者是其他卡片,就這樣進行個幾輪後,根據你得到的錢來決定誰是贏家,每一組的贏家上台進行最後決賽。

這個遊戲看起來對不是業務的人來說很不公平,因為平常沒練習過怎麼銷售公司產品肯定很難贏,但實際上我經歷下來覺得有更深層的意義:第一個當然是讓同事互相交流,因為強迫平常話少的人也有話唬爛的機會,同時同事之前搞笑起來其實也滿有趣的;再來是讓公司的每一個人都更了解產品以及知道為什麼客戶會願意花錢購買產品,客戶的需求到底是什麼?這個目的我認為非常重要,對一間新創來說,要讓全公司向著共同的目標努力是很重要的事,alignment一致性能否達成往往是公司成敗的關鍵,這個遊戲透過讓每個人知道業務以及老闆會被問到的問題,進而讓公司的每個人都去思考公司的目標是什麼,是我個人非常喜歡的公司內部遊戲設計。

有趣的是有些訊息是你不能透露的,舉例來說,對方問你公司有多少人數,雖然你知道實際的人數,但你不應該告訴他正確的答案,畢竟你的目的是銷售產品透露太多反而未必有幫助,好的回答反而應該是:”因為我是業務,大多數的時間都在外面pitch,不曉得現在有多少人,不過每次回辦公室,又多了一些新面孔”;像是對方想知道其他大公司怎麼設定OKR的,這很明顯是需要保密的項目,你的回答當然就會變成是:”我不能告訴你對方是怎麼設定OKR,但我可以針對你們公司的狀況給你最好的建議”。

Fire side chat with GGV

與創投對談大家應該都不陌生,不過特別的是請來的創投是領投我們的GGV代表,GGV的portfolio相當驚人,許多耳熟能詳的公司像是:Airbnb、Square、Pandora、今日頭條(China)、小紅書(China)等都是他們投資的公司;提供一個機會讓員工都有機會直接向創投發問其實很特別,因為平常員工沒機會接觸到創投,當然也沒有機會詢問並了解創投看好我們的地方是什麼,認為這個市場獨特在哪邊等等不同觀點的問題。簡單來說,讓員工知道創投是真的投資我們看好我們也是一種凝聚向心力的方式。

最後的吃吃喝喝與製作啤酒體驗就用照片帶過了…

half moon bay brewing company

分類
Javascript

How to clear all javascript timeouts?

Javascript setTimeout() 提供一個function讓開發者可以延遲時間後執行片段程式碼,如要終止此timeout行為,我們可以使用 clearTimeout 這個function,這篇文章簡單聊聊要怎麼一次清掉頁面上所有timeout functions。

var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
var timeoutID = scope.setTimeout(function[, delay]);
var timeoutID = scope.setTimeout(code[, delay]);
The returned timeoutID is a positive integer value which identifies the timer created by the call to setTimeout(); this value can be passed to clearTimeout() to cancel the timeout.

簡單說,setTimeout會回傳給你一個timeout ID,後續可以用這個ID來清掉timeout;但如果今天你要寫一個function去清掉頁面上的所有timeout,由於我們並不知道頁面上有哪些timeout ID,所以這時候的小技巧是先新增一個無功能的timeout,在遞減向下清除所有timeout即可,程式碼如下:

function clearAllTimeouts()
{
    var id = window.setTimeout(null,0);
    while (id--) 
    {
        window.clearTimeout(id);
    }
}

分類
Javascript

Convert Javascript Local time to UTC time

在前端有時候需要操作顯示時間的問題,通常都與時區有關導致顯示的日期有一天的差距;由於看過太多錯誤的解法(即便是stackoverflow),甚至有些單純想依靠moment.js來解決問題的建議其實都不太正確,筆記一下正確處理的方式。

首先,我們要先拿個時間物件:

let now = new Date("2019-01-23");
/* Ex. Tue Jan 22 2019 16:00:00 GMT-0800 (Pacific Standard Time) */

你會看到每個時區相對應得到的時間日期並不相同,但這不是bug,而是前端工程師的日常,這也是發生日期時間差的主因。

所以到底怎麼轉換日期date變成UTC time才是正確的,其實很簡單,先取得計算過後的秒數 milliseconds ,再加上相對應的時間差 offset,再將他轉換回時間物件就可以得到正確的local date。

let nowUtc = new Date( now.getTime() + (now.getTimezoneOffset() * 60000) );
/* Wed Jan 23 2019 00:00:00 GMT-0800 (Pacific Standard Time) */

特別提一下是 getTimezoneOffset ,這個func回傳的單位是分鐘,這也是為什麼我們要將該值再乘以60000的原因,因為一分鐘有60秒,一秒是1000毫秒。

The getTimezoneOffset() method returns the time zone difference, in minutes, from current locale (host system settings) to UTC.


以上報告。

分類
Startup

矽谷新創點點名之:Forkable

人在矽谷,不如就來觀察一些很早期的新創團隊,看看別人怎麼執行的,這邊的新創其實很多也單純的是因應需求而產生的;畢竟,要像目前的幾間軟體龍頭可以自己去造就市場是非常不容易的事情。

今天跟大家介紹一間早期的團隊Forkable,這間看起來只是單純幫餐廳外送的公司在外送市場早已被Uber Eats, Grubhub, Doordash佔走大部分的狀況下,怎麼還有機會出現在創業的題目中呢?

Forkable的商業模式是幫助公司提供午餐給公司人數尚未達到可以請廚師或者是外燴中餐但仍然希望可以提供免費午餐給員工的公司,用系統化的方式,解決員工不同的用餐需求以及付款的問題;同時也媒合了各種中小型的餐廳增加餐廳的訂單。

a week lunch for employee

Forkable每天都會透過slack bot機器人推播提醒員工記得點餐,如果明天不到公司,員工也可以直接在線上取消,每個員工可以自行選擇要吃的,通常會有西式、中式甚至是印度料理可供選擇,公司會提供一個co-pay,假設額度12元,那麼12元以下的訂單當然就都是公司包,超過的員工可以自行綁定信用卡做超額的扣款。

這個模式當然就是針對中小型公司的以及許多B round以前的新創公司也都非常適用,至於能走多遠,就讓我們拭目以待了,畢竟forkable本身也只是一間seed round種子輪的新創公司。

參考:forkable

分類
About Mike

Web軟體工程師的階段感想

如果說當一個軟體工程師也有分階段(見山是山、見山不是山、見山又是山),那我想現在的我一定是在‘見山不是山‘的階段,寫下現在的想法,希望自己幾年後再來看,可以邁入見山又是山的階段。

網站的技術發展從Web2.0的年代到後來智慧型手機普及後RWD網站變成標配的現在,發展上不管是前端或是後端都經歷了很大的轉變,對我來說前後端是緊密不可分的;雖然常有人說沒有真正的full stack,不過我認為一個full stack並不是要同時專精於前後端,而是能夠知道前後端所需要處理的事項,如此一來不管工作是做前端還是後端,都可以知道另一邊的工作是什麼、雙方應該怎麼配合寫起來才順暢。

以往桌機 1024 x 768 的年代,多數的HTML都是使用<table>來完成,每個網站看起來標標準準整整齊齊,頁首、內容、頁尾排列方式大都相同,當時的設計,簡單的css樣式就能滿足,網站頁數通常也不多,常看到將css寫在頁面上的(in page style),並不是奇怪或者是很難維護的事。

網站應用程式開始發展後,開始出現了百萬人數訪問的網站(電子商務、售票網、大型論壇),這時候後端工程師常需要同時處理資料庫(現常稱為DB ENGINEER)以及伺服器(現常稱為DevOps),後端工程師的薪水往往大幅超越前端工程師。如何讓網站推不倒是當時主要的客題。

伺服器穩定後開始發展起了後端程式碼維護的相關模式,各種MVC design pattern陸續問世,Python Django, Ruby on Rails, PHP Symphony, Yii, CodeIgniter等framework 開始讓工程師互相合作整合程式碼,前端工程師專注在View and Controller(多數狀況只需要知道Controller吐出什麼資料),後端工程師專注在Model and Controller。

第一支智慧型手機問世後,網站開始要能在手機上瀏覽,開始了RWD( responsive web design )前端網頁開發的年代,大家開始用media query讓網頁可以自適應各種瀏覽器尺寸,從手機、平板、筆電、桌機都要能瀏覽,<table>這種本身非responsive的元件,反而變成能少用就少用。這時候出現了很多前端的切版框架:bootstrap, foundation, pure等css framework 幫助前端工程師能夠快速的切出一個RWD網站版型。

React Vue Angular

接下來進入了前端開發者的戰國時代,因應著JavaScript的廣泛使用,各種前端的框架開始出現,從最早的ember, backbone, angular, react一直到最近的vue ,每個框架主要目的都有些不同,但通常出發點都是能夠透過SPA( single page application )去減少伺服器的負載同時也減少前端的負載:簡單說,使用者換頁時不再需要重新發出請求到伺服器等待回傳一個新的頁面,而只要請求需要更新的資料然後更新頁面,減少了伺服器吐出的資料大小,也加速了使用者看到網頁變化的時間。

不過(轉折點來了)事情沒辦法就是這麼單純,SPA的缺點就是網頁只有一個頁面網址,即便透過一些前端router來操作網址,許多重要的meta資訊,網路爬蟲爬不到,甚至頁數不夠沒有結構化的頁面內容,如此一來網站的SEO排名就不容易上升,所以開發者們又開始專注以前沒有前端框架時不會處理到的問題,用SPA並且使用SSR( server side rendering )讓網站的SEO可以比較好。

打了這麼多,想說的是現在許多公司或者是開發者開始一窩蜂熱使用框架去開發網站往往是讓我最難理解的事情,事實上,多數的網站都是非高流量非高效能的一般網站應用程式,若是很單純的使用後端MVC不僅可以搞定基本前後端架構同時SEO也可以輕鬆達成,未必需要變成是一定要後端API搭配前端框架。

每種框架都有他的優缺點,如何判斷並且了解網站需要使用什麼樣的架構是每個資深工程師很重要的課題,技術的發展是用來解決問題,但近年來的開發者的選擇真的常常讓我不解;(舉例來說,一個只有一頁有預約功能網站也要做前後端分離然後導入React Js。) 如此一來,開發上往往為了達成某件事而要多做很多事,除了檯面上那幾個大型流量或者是特殊功能需要的網站之外,其他網站的架構真的需要這樣嗎?

回頭呼應首段,上面描述的多數是我個人心得,也簡單解釋了為什麼我認為我處於”見山不是山”的階段,這未必是個好比喻,但總覺得開發者在技術的發展以及選擇上只是在繞圈圈(SSR -> SPA -> SSR),希望這篇文章提醒自己在幫別人分析網站時可以跳脫出最火紅的框架去思考什麼是最好的建議,同時也希望幾年後回顧,我可以有重新的”見山又是山”的新領悟。

分類
Javascript

使用highchart.js來協助網頁繪圖: column chart

網頁開發常需要使用到各種圖表,今天介紹一款網頁繪圖工具:highchart.js ,點進去連結觀看你可以發現裡面有各式各樣的圖表功能,幾乎什麼圖表都有了,今天我們來用範例講解最基本的直條圖( column chart )。

進入程式範例之前先前情提要一下,highchart 基本上是透過 svg 來繪圖,等於是說他提供你 javascript 的語法控制,然後幫你使用 svg 繪圖在網頁上,所以你的成品會是一個 svg 圖檔,當然他也是會有基本的 RWD 各項功能。

最近剛結束九合一選舉,就讓我們使用最時事的選舉開票來做例子吧!以號稱台灣章魚哥的台北市天母天玉里來說(投開票所編號0281-0285),單以編號0281投開票所來看,我們查詢中選會網站的各候選人的得票數資料為:

  1. 吳萼洋:2
  2. 丁守中:390
  3. 姚文智:180
  4. 柯文哲:418
  5. 李錫錕:1

使用highchart起手式很簡單,就是將它提供的js file給引入即可,你可以使用 <script> 引入cdn,可以使用 npm install,這邊範例簡單起見使用 <script> 從 cdn 引入檔案。

<script src="https://code.highcharts.com/highcharts.js"></script>

在頁面上提供一個畫圖的區域 div 並給它一個 id:

<div id="container" style="width:100%; height:400px;"></div>

接下來就是寫 js 代碼了:

$(function () { 
          var myChart = Highcharts.chart('container', {
              chart: {
                  type: 'column'
              },
              title: {
                  text: '2018 台北市長選舉 0281投開票所選舉資料'
              },
              xAxis: {  
                  type: 'category'
              },
              yAxis: {
                  title: {
                      text: '單位:張',
                  },
              },
              series: [
                  {
                      name: '得票數',
                      colorByPoint: true,
                      data: [
                          {
                              name: '吳萼洋',
                              y: 2,
                          },
                          {
                              name: '丁守中',
                              y: 390,
                              color: "#031195",
                          },
                          {
                              name: '姚文智',
                              y: 180,
                              color: "#159818",
                          },
                          {
                              name: '柯文哲',
                              y: 418,
                              color: "#24d7d6",
                          },
                          {
                              name: '李錫錕',
                              y: 1,
                          },
                      ]
                  },   
              ],
          });
      });

首先我們指定 chart type 為 column,此圖表形態為直條圖,指定x軸以及y軸類別以及標題,並在series裡放上我們從中選會網站得到的資料,如此一來highchart就會協助我們製圖,同時可以客製化每個候選人的顏色,成果如下,方便起見我在codepen中引入了 jQuery。