跳到主要內容

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 設計偏重功能導向,可以改良更好的呈現方式等等。

留言

這個網誌中的熱門文章

WTL簡介

good Game Editor的視窗編輯器是以WTL作為框架實作的,因為WTL的資料非常稀少,本文就針對WTL作個簡單的入門介紹。 歷史背景 ATL(Active Template Library,或者ActiveX Template Library ) ,它本來的目的是為了要讓COM元件以及ActiveX元件的撰寫變得更容易。因為ATL是拿來寫COM元件的,所以它只有幾個非常基本的GUI類別,相當於MFC的CWnd和CDialog。 很幸運的是,這幾個 GUI類別有很足夠的彈性可以讓像WTL這樣的東西架構在它之上。 WTL實際上是ATL的一組擴充,它也和ATL一樣都是以C++ Template寫成。它擁有許多像MFC的強大GUI類別所提供的能力,同時還能編譯出更小的執行檔。如果你學習過 MFC的程式設計,那麼你會很習慣於像MFC那樣的元件包裝還有很彈性訊息處理機制,也就是說你會比較容易進入WTL的世界。 WTL有二個主要的修訂版本,版本3及7。版本的號碼對應到ATL的版本號碼,這也是為什麼不叫作版本1及2。一直到版本7.1之後微軟將WTL變成一個開源碼的專案,寄駐在Sourceforge上,而目前最新的版本已到8.1。 安裝 你可以在底下的位址下載到最新版本( http://sourceforge.net/projects/wtl/ ),目前最新的版本是8.1版,而good是使用8.0版本製作。在網站上提供了exe版的自解壓縮檔和zip格式的檔案。下載下來後,解壓縮到電腦上任意的位置。 解壓縮後,AppWiz、AppWizCE 和 AppWizMobile 三個資料夾,提供了以 Java Script撰寫成的針對不同版本Visual Studio的安裝程式。根據自己電腦上安裝的 VS.NET 版本,選擇對應的安裝程式來自動安裝 WTL 精靈到你的VS.NET資料夾。Samples資料夾裡有一些有趣的教學範例程式,有興趣的話可以自行研究看看。 因為WTL完全是以C++ Template實作,所以只有C++ Header檔,不需要任何Lib檔,所以我們只需要把include資料夾的位置加到自己專案的搜尋路徑裡就完成了安裝。因為 WTL可以是個通用的模組,所以一般來說我會選擇把它加入到全域的搜尋路徑裡,這樣就不必每個專案都新增一次搜尋路徑。 以 Visual Stud...

以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字元定義字串樣式,以下列出一些常規表示式所使用的符號。 . 表示除了換行字元...

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條鍊後,剩下來的部份就沒什麼特別的了,只需要應用基本法就能把所有剩餘數字填完。