跳到主要內容

MyTime 雙向關聯的個人行為圖譜系統

 


[Android]

MyTime 是一套個人生活資料庫(Personal Life Database)與行為分析引擎(Behavior Analytics Engine)。

透過簡單的時間記錄與標籤系統,將日常生活中的每一個行為轉化為可分析的資料。

無論是閱讀、飲食、運動、通勤、購物、休閒或睡眠,都可以被長期累積與追蹤。

隨著資料增加,MyTime 會從你的生活紀錄中建立統計、關聯與趨勢分析,幫助你看見:

  • 你的時間都花在哪裡
  • 哪些習慣正在形成或改變
  • 哪些地點、人物或事件與你的生活最相關
  • 過去一年、數月或數週的行為模式變化

MyTime 不只是記錄時間。

它是一套用資料理解自己的工具。

特色

  • ✓ 秒速開始記錄
  • ✓ 自由的活動與標籤系統
  • ✓ 日、週、月、年與全期間分析
  • ✓ 行為與標籤雙向關聯分析
  • ✓ 長期趨勢與統計洞察(Insights)
  • ✓ 本機資料儲存,重視隱私

記錄生活。

累積資料。

理解自己。

把人生變成可以探索的資料庫。


隨著年紀增長,我越來越喜歡把許多東西紀錄下來。像上次發表的 Greatest Notes Compiler 知識蒸餾流程,就是我對於自己的各種文字記錄所得到的一個成果。

而 MyTime,則是另一塊拼圖。

某天我突然想到:自己每天都在作的事情,到底做了幾次?總共做了多久?我想要知道這些資訊。

這個 APP 我已經連續兩年半每天都使用,到現在才 Release。老實說,MyTime 並不太適合一般大眾,而是針對像我這種有強迫症傾向的數據控。否則我怎麼會連續兩年半,每天記,隨時記。幾乎把每天裡面可以記錄的大小事都紀錄下來,除了晚上睡覺不記(不過白天小睡午睡我也會記)。

不管怎樣,在這個紀錄和開發的過程中,我學到很多。所以在這裡作一些心得分享。

1. 為什麼選擇 SQLite?

之前我己經使用 SQLite 作為資料庫儲存我的書籍和讀書等資料(這也是一類記錄),但我是使用第3方的 app / tool 來維護。

而這次正好有機會讓我直接在應用程式裡面讀寫 DB,選擇使用 SQLite 可以讓我學到新東西。

SQLite 用來儲存幾萬、幾十萬、甚至上百萬筆這種關聯式的小資料完全沒問題,效能也沒問題。備份維護都很容易。

2.每天都在使用(Eat Your Own Dogfood)

每天都要使用,而且大量使用。

使用的過程中,才會發現有什麼不足,才會發現真正的需求,才會發現設計是否有問題。

3. 有新想法不要急著加功能

只要長時間大量使用,除非你的產品己經達到完美,否則一定會有新需求或問題產生。

在使用的過程中,有時會蹦出來一個念頭說,如果有一個 XXX 就好了,或者想說如果能 YYY 應該不錯。

但是有這些想法時要有耐心,不要急著去改。

而是再等等,讓子彈再飛一下。經過一段時間後,再看看這些想法是不是還在。

4. 只有「長時間一直被需要」的功能才做

經過一段時間的沉澱,如果上面的新想法或需要還是一直不時的跳出來,那通常就是真正的需求了。

這時候再把它實作出來。

繼續使用,繼續測試,作驗證。

5. 沒用的功能,果斷拿掉

有時候,加入的功能用了一陣子後,發覺其實也沒什麼,後來也漸漸的少使用了。

經過觀察,發現其實它是可有可無時,請毫不猶豫地把它刪除。

拿掉它後如果發現對日常使用沒有什麼影響,那它真的是沒用的功能。

否則拿掉後覺得怪怪的,它可能只是需要作調整。需要改變呈現的方式,或改變操作邏輯等等。

6. 功能優先,視覺細節留到最後

驗證新功能都是以能不能 work 優先考量,而不是美不美觀。

需要按鈕就直接加,完全不需要考慮 icon、顏色、邊距或排版。

只要達到能驗證想要驗證的功能即可。

7. 利用 AI 探索與進化

現在 AI 很強大,可以利用 AI 深入探索改進空間。

例如 MyTime 裡的 Insights 的功能就是利用 AI 的協助,從討論中發掘出來的改良點。

PS: 最上面的介紹,也是讓 AI 幫忙寫的。

8. 最後的 UI 美化工作

原本這個 APP 完全只是個人使用,原始設計完全是功能導向。

後來才有要公開的念頭,這時利用 AI 幫我把 UI 改頭換面,這樣才能勉強適合讓人使用,拿到 Google Play 商店上架。




以上就是我想分享的。

當然還有許多改進空間。比如內容有大量文字和數據,UI 設計偏重功能導向,可以改良更好的呈現方式等等。

留言

這個網誌中的熱門文章

以lex/yacc實作算式計算機

前面我們透過 手工的方式 實作了一個簡易的算式計算機,現在我們要開始使用工具來作同樣的事,比較看看手工和使用工具有什麼不同的差別。首先要介紹的就是lex&yacc。 lex & yacc lex(Lexical Analyzar)及yacc(Yet Another Compiler Compiler)是用來輔助程式設計師製作語法剖析器的程式工具。lex的工作就是幫助我們將輸入的資料文字串流分解成一個個有意義的token,而yacc的工作就是幫我們分析這些token和我們定義的規則作匹配。下圖中所表示的是使用lex及yacc的一般工作流程。 首先看到yacc會讀入一個.y檔案,這裡.y檔案的內容就是我們使用類似(E)BNF語法定義的語法規則,yacc會分析這些語法規則後,幫我們產生可以用來解析這些規則的程式碼,而這個檔案一般名稱預設為y.tab.c,產生的程式碼裡面最重要的一個的函式叫作yyparse。 同yacc類似,lex也會讀入一個.l的檔案,這個檔案裡面定義的是如何從文字流裡解出token的規則,使用的方法是常規表示式(regular expression)。在圖的左側中間我們還可以看到有一個叫作y.tab.h的檔案從yacc產生出來並餵給lex作輸入,這個檔案是yacc根據在讀入的.y檔裡面所定義的token代號所產生出來的一個header,這樣yacc及lex產生出來的程式碼裡面就可以使用共通定義的代碼而不必各寫個的。lex分析過.l檔案後也會產生一個一般預設叫作lex.yy.c的原始碼檔案,裡頭最重要的一個函式叫作yylex。 最後,我們把yacc產生出來的y.tab.c還有lex產生出來的lex.yy.c,以及其它我們自己撰寫的原始碼檔案一起拿來編譯再作連結,最後產生出來的就是一個可以用來解析我們定義的語法的解析器工具。以上是整個lex及yacc的使用流程概觀。 常規表示式 在正式使用lex之前,我們首先來對常規表示法作一個基本的認識。常規表示法是一種用來表示字串樣式(pattern)的中繼語言,就好比前文所介紹的(E)BNF表示式一樣,都是用來描述其它語言的語言,只不過用途不太一樣罷了。 常規表示式使用一些中繼符號(meta-symbol)以及ASCII字元定義字串樣式,以下列出一些常規表示式所使用的符號。 . 表示除了換行字元...

單人撲克牌遊戲 - 蒙地卡羅

更多可在網頁玩的 單人撲克牌遊戲 ; 新增一個簡單的單人撲克牌遊戲: 蒙地卡羅 ,簡單介紹一下玩法。 下載 事先排列好5x5張牌。 每次移動一張可以配對的牌,並消除這對牌。在上下、左右及斜向相隣的二張牌,只要擁有同樣數字(不計花色),即可配對。 消除二張配對的牌後,剩餘的牌以往左往上的方式補滿空隙,接著在發新牌補滿後面的空格。 重覆步驟2~3,直到沒有牌可以配對及發完所有牌為止。 結果有二種。一個是勝利,成功的消除掉所有牌。另一個是Gameover沒有牌可以再作配對。

KillSudoku 4顆星精彩數獨詳解 - 鍊技巧

這題數獨(sudoku)題目估計為4+顆星,有點難度。解題需要應用多種技巧,過程非常精彩有趣,是個好題。 底下使用 KillSudoku 作詳細圖解。 1,使用基本排除法則,可以簡單填入6個數字。到此為止,開始使用 候選數法 來解題。如下所示,為填入6個數字後的狀態圖。 2,如下圖,使用進階排除法,在第9列和第4行可以先排除幾個候選數。 3,如圖,在第2行有一個 Naked Subset (3,4),可以對3,4候選數作排除。附帶提一下,反過來看在同一行裡面也可以說有另一個Hidden Subset(2,5,8)存在。Naked Subset和Hidden Subset常是一體二面同時存在,只不過對我們來說,Naked Subset是相對比較容易看的出來。 排除第2行的3,4後,又可以對第2列以外的3作排除,如下圖。 4,接著,在第5行又發現了一個 Naked Subset (3,7,8)。 對第5行三個Subset以外的候選數3,7,8作排除後,又接著產生可以對第5行以外的3作排除。 5,這一題解到此為止,開始進入高潮。大部份能解到3顆星題目的人,猜想應該就此卡住。以下開始需要應用更高級的鍊技巧,才能夠繼續進行。 應用X-Chains鍊技巧,可以找到一條由4條強連結組成的鍊,可以排除候選數2。這裡的鍊指的是由2條以上的強連結組成,而所謂的強連結是指在同一行、或同一列或同一個Box裡,由唯二的候選數構成的連結。如上圖中的第9行中,只有二個2,這二個2構成一條強連結。為什麼說這是一條強連結?因為在這條連結的AB二個端點中,肯定會有一個2存在,要麼是A點要麼是B點。鍊技巧就是將多條強連結串連起來作候選數排除的技巧,而X-Chains是高級的鍊技巧裡面的基本技巧。 接上圖,這樣一來就又可以應用基本排除方法,填入3個數字,如下圖所示。 6,接下來就是本題最精彩的部份,以下需要連續找到3條鍊,才能繼續往下解。 7,找出3條鍊後,剩下來的部份就沒什麼特別的了,只需要應用基本法就能把所有剩餘數字填完。