整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          我的筆記系統

          我的筆記系統

          個好的筆記系統,應該能把你所學習到的任何資料串聯起來,形成一個知識系統,在你需要他們的時候,可以很容易找到,進而形成自己新的知識。

          我在《用OneNote管理你的知識》這篇文章中介紹了如何用OneNote管理各種資料,雖然OneNote已經做的非常好了,依然存在以下問題無法達到我的要求:

          1. 排版不支持語法高亮。作為一個經常寫代碼的人,這點不能忍。
          2. 沒有Tag系統。無法很靈活的給頁面插入各種tag,導致資料無法有效互聯,形成一個個知識孤島,最終變成一個資料備份工具。
          3. 數據格式專有。只能用OneNote才能打開筆記本,假如微軟突然放棄了這個工具,那就很尷尬了。
          4. 體積龐大。在使用了近5年之后,我的OneNote已經有幾GB大小了,每次換電腦同步總是很慢,這可能和我的使用習慣有關系,遇到好的資料都是復制進去。
          5. 擴展能力差。無法安裝插件,也沒有定制能力,更無法將你的筆記發布成網站,也很難與別人分享你的知識。

          這些問題開始驅使我尋求新的解決方案,新方案應該滿足以下需求:

          1. 有強大的抓取能力。OneNote的這點很不錯,你可以通過OneNote的瀏覽器插件很容易將外部文章存至OneNote的分區中,也可以將微信公眾號文章發送給OneNote公眾號進行保存。
          2. 有好的Tag系統。可以將分散的知識串聯起來。雖然OneNote通過分頁這種樹形的方式組織相關的知識,但是資料一旦多了,分頁真的很不方便,會讓找資料變的很痛苦。
          3. 能容易的更新tag/link/text。如果重命名相關的資料名或者Tag,應該很方便去自動重命名關聯的鏈接。
          4. 文件格式最好是純文本的。如果不是純文本,至少格式也不是專有的才好。
          5. 有強大的擴展能力。能通過插件去擴展定制。
          6. 開源。這點可以讓我們放心的去使用,不太可能無人維護。

          經過一番查找對比后,最終找到兩個可以滿足我需求的工具,Emacs orgmode和Tiddlywiki。雖然wiki工具非常多,比如Wikipedia使用的mediawiki之類,但這類系統過于龐大,要運行起來也很麻煩。

          Emacs orgmode

          提到筆記系統,Emacs的orgmode總是繞不過去,當你想要找一個個人筆記系統的時候,在網上很容易看到大家對orgmode的盛贊,甚至很多人花長時間學習Emacs也是為了用orgmode。

          orgmode神奇的魔力在這篇文章中體現的淋漓盡致:Org Mode - Organize Your Life In Plain Text!。簡單來說,作者使用orgmode管理了他人生中的方方面面,比如寫作系統、待辦事項提醒、筆記系統等。得益于Emacs強大的定制開發能力,幾乎你的一切需求都可以通過編寫一些函數去擴展,這種擴展能力比VSCode/Vim/Sublime Text的插件系統等要強大的多。可以說,除了學習難度高,幾乎沒啥缺點了。它有以下特點:

          1. 17 years old。在時間的長河中,orgmode已經證明了自己。
          2. 定制能力強大。通過elisp去開發,幾乎無所不能。
          3. 純文本。可自動生成多種格式的文件,也很容易發布成網頁。
          4. 使用門檻很高。需要花費很多時間學習適應,這個“很多時間”可能比你想象的都要多一些。
          5. 生態差。由于高門檻,所以用戶就少一些,生態就差一些。當然你能力強,可以用它來實現各種功能,但是這樣挺累的。
          6. 技術遷移度差。elisp太古老了,emacs太獨特了,這種上古技術,就像一把絕世好劍,注定能用好它的人會很少。這意味著你寫出來的東西很多人都看不懂,當然也就無法進行技術交流互動了,自己造輪子造到心累。

          Tiddlywiki

          Tiddlywiki是一款獨特的非線性筆記本,用于捕獲、組織和分享復雜信息。其設計思想是將信息通過一種名為Tiddler的單元分割,利用它們之間豐富的關系模型,從而最大化信息的可復用性。 然后,通過聚合和構思來把片段編排在一起,以呈現具有敘述性的故事。

          它具備以下特點:

          1. 15 years old。這個歷史足夠久了,時間驗證了其穩定性和可持續性,而且是開源的。
          2. Tag系統強大。最讓我印象深刻的就是它的Tag系統,很容易通過Tag將不同的信息組織到一起。
          3. 單HTML文件架構。所有的信息都在一個Html中存放,你可以直接下載下來在瀏覽器中運行,非常的簡單。默認的空的系統在最新的版本5中大約是2MB,一般存儲幾千個條目(Tiddler)大概能增長幾MB,由于是單文件架構,為了不影響性能,應盡可能通過將圖片外部引用來降低總體積。
          4. 插件眾多。很容易通過JavaScript給其擴展功能。
          5. 無法多人協作。但可用作團隊知識共享簡單的wiki系統。

          orgmode VS Tiddlywiki

          在這里可以看到一些人對這兩個工具的對比評價。在花了幾天時間學習了orgmode之后,我被它復雜強大的能力勸退了,所有選擇了Tiddlywiki。

          Tiddlywiki使用指南

          Tiddlywiki的使用和運行是極其簡單的,就這點秒殺了orgmode。在這篇Learning文章中,你可以花費十幾分鐘了解下它的基本知識。

          在上圖右側點擊+號新增一個條目后:

          右側紅色的保存按鈕點擊了后,你會發現直接下載了一個名為tiddlywiki.html的文件,用瀏覽器打開后,會發現和你剛才在網上的tiddlywiki一摸一樣。當你再對這個本地tiddlywiki進行一番操作保存后發現它又給你下載了一個tiddlywiki.html,也就是說每當你保存的時候,都會通過下載副本的形式保存,因為它在瀏覽器中運行,不具備自己更新自己的能力,這種可以通過一個chrome的app來解決,下載tiddly-chrome-app,然后用此chrome app加載tiddlywiki.html即可自動更新了,當然也可以通過搭建Nodejs環境來實現自動保存,不過最簡單的還是這種方式。

          需要注意的有以下幾點:

          1. 備份。因為是單文件架構,所有的資料都在一個Html中存放,所以保護好這個文件至關重要,可以通過Git去備份。比如我的tiddlywiki就在GitHub中備份。
          2. 性能。圖片、文件等資源最好通過存放第三方的云盤中,然后通過引用鏈接等方式引入。
          3. Relink。當你重新命名一個條目或者Tag的時候,可以通過安裝這個tw5-relink插件解決。

          Capture方案

          Capture是一個筆記系統很重要的能力,這方面OneNote做的很好,但是tiddlywiki做的卻不好,不過可以有一些方法來解決。讓我們先來重新思考下一個筆記記錄的過程:

          1. 你看到一篇好文章,想要保存起來。這篇文章可能是一個網頁,也可能是個郵件或者文件之類。
          2. 你把這篇文章直接全部扔到筆記本中存起來,想象某天會用到它,或者你會將里面的某個章節,某個圖片單獨保存起來。

          當我在用OneNote的時候,對于微信中的文章,我一般直接通過發送到公眾號去保存,然后就忘了這個事情。而對于電腦端看到的一些資料,我會直接復制到OneNote中去。在某些時候我會整理一下這些資料,但是大多數它們就被遺忘了,甚至當我需要的時候,我都不記得之前保存過這些資料。

          在這個場景中,暴露了以下這幾個問題:

          1. 資料沒有被處理就直接被存儲了。
          2. 大多數資料都是全部被存放到OneNote中去。

          因為tiddlywiki本質是個網頁,無法像OneNote一樣可以直接復制一篇文章到里面去,而且這種復制手法會導致你的筆記越來越大,找尋有效信息變得越來越難。所以這本質是個習慣問題,資料必須被二次處理后才能進入筆記系統中,否則這個存儲毫無意義,只需要存放一個鏈接即可了。

          經過一些思考,我制定了自己資料長期歸檔的方式:

          1. 引用文章可以保存到Wayback Machine中;
          2. 文件可以保存到GitHub私有庫和網盤中(包括s3等專業云存儲,還有各大互聯網公司的網盤);
          3. 通過第三方備份Capture資料,筆記中只存儲鏈接。

          在我的Capture方案,對于網上閱讀的一些資料,考慮到互聯網信息丟失的速度,大部分文章存活的壽命并不長,為了能長期保存,我會把這些網頁使用Wayback Machine備份,這樣再也不會丟失了,我只需要把它的鏈接存儲起來即可,對于需要單獨存儲的資料可以存放到筆記系統中。對于需要存儲的圖片,我會存放到AWS S3中,然后引用其鏈接即可,當然這類云存儲方案很多,你也可以選擇國內七牛云(需要域名備案)等。

          Wayback Machine

          20多年的歷史,互聯網的記憶,數字圖書館,網站時光機。這是一個非商業的項目,創立目的就是給整個互聯網的網站做不停的備份,目前已經有4500多億的緩存頁面了,在這個網站你可以看到很多網站的歷史,像時光機一樣穿梭在網站的不同歷史版本中去。

          它具備以下能力:

          1. 可爬取網頁HTML及其外部鏈接。
          2. 可生成網頁快照圖片。
          3. 可將網頁存儲至自己的Wayback Machine賬戶。
          4. 可以使用API來請求網頁緩存。

          VSCode插件一鍵存儲圖片至S3

          在Markdown文檔中當你想把網頁的圖片黏貼過去是件很麻煩的事情,首先你要把圖片下載到本地(引用網頁圖片地址不太好,圖片可能會神秘消失),然后在文檔中使用相對路徑引用這個圖片,當圖片很多的時候,這是個非常痛苦的過程。

          能不能做到復制網頁圖片后,在VSCode中黏貼后自動插入一個S3的鏈接到Markdown文檔中去呢?我找到一款插件,可以做到一鍵上傳七牛/GitHub/sm.ms等,但是它沒有提供S3的支持,所以我fork后加了這個功能,如果你也需要這個功能的話,可以在這里下載安裝: markdown image paste

          有了這個插件后,寫wiki/md文件遇到圖片復制后黏貼進去自動插入S3鏈接,這樣圖片永遠存放到你的S3賬號中去,還自帶全球CDN加速。

          Netlify發布網站

          公共wiki是重新整理后的知識資料集合,其中非文本的資源如圖片、PDF、Office格式文件、Keynote等存放至Amazon S3/Aliyun OSS等云服務,網頁等內容的快照可使用Wayback Machine備份,然后將這些鏈接存放至wiki系統。

          wiki資料通過GitHub公共倉庫托管,通過netlify生成靜態網站。

          我的wiki網站就是通過netlify自動發布,每次更新wiki后,push到GitHub,netlify自動發布,這個過程只需要不到十幾秒。

          私有Note

          私人備忘和工作涉及的私有非公開的資料集合,其中非文本的資源如圖片、PDF、Office格式文件、Keynote等存放至Google Drive/Microsoft OneDrive。然后將這些鏈接存放至私有Markdown文件中,通過GitHub私有庫托管。

          重要資料

          密鑰等信息通過1Password托管,重要的資料制作成md文件后通過Google Drive/Microsoft OneDrive等托管,經常需要的重要的資料可通過手機備忘錄加密存放。

          References

          1.https://www.slant.co/versus/5116/8769/~tiddlywiki_vs_org-mode

          2.https://github.com/bmpi-dev/wiki.bmpi.dev

          3.https://web.archive.org/web/20191230143823/https://gigaom.com/2012/09/19/the-disappearing-web-information-decay-is-eating-away-our-history/

          4.https://aws.amazon.com/cn/s3/

          5.https://en.wikipedia.org/wiki/Wayback_Machine

          6.https://wiki.bmpi.dev/#wayback%20machine


          文/ThoughtWorks馬大偉

          在構建面向企業項目、多端的內容聚合類在線服務API設計的過程中,由于其定制特點,采用常規的restful開發模式,通常會導致大量雷同API重復開發的窘境,本文介紹一種GraphQL查詢語言+網關編排聯合的實踐,解決大量重復定制的問題。

          早期與車廠合作過程中,基于高德已有的數據、引擎能力和一些較為重要的相關CP服務(如停車場、加油站、天氣等),形成的在線服務協作模式是針對客戶需求,采用REST API提供針對每個車廠、每個項目以及每個終端提供不同的API實現,然而數據核心獨立服務實際上就有十余種,然而由于車線業務維護周期長,定制多,2-3年下來,API規模已達幾百個,而且持續發散級增長,這給持續開發和維護帶來不小挑戰。

          分解業務開發過程,無非兩類工作,業務需求能力數據的獲取和非業務訴求但是必不可少的如鑒權等通用化能力,當前來看,其實這兩個問題是幾乎所有業務團隊都會遇到的問題,因此解決方案也基本類似,如服務聚合、流程編排、API網關等。

          本文簡要介紹下車聯網在線服務改造舊架構的一些實踐。

          有關名詞

          • GraphQL:GraphQL既是一種用于API的查詢語言也是一個滿足數據查詢的運行時。GraphQL對API中的數據提供了一套易于理解的完整描述,使得客戶端能夠準確地獲得它需要的數據,而且沒有任何冗余,也讓API更容易地隨著時間推移而演進,還能用于構建強大的開發者工具。
          • DSL:指的是專注于某個應用程序領域的計算機語言。又譯作領域專用語言。不同于普通的跨領域通用計算機語言(GPL),領域特定語言只用在某些特定的領域。 比如用來顯示網頁的HTML,以及Emacs所使用的Emac LISP語言。
          • API網關:API網關是一個服務器,是系統的唯一入口。從面向對象設計的角度看,它與外觀模式類似。API網關封裝了系統內部架構,為每個客戶端提供一個定制的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜態響應處理。

          存在的問題

          車線業務在線服務舊架構如下:

          面臨以下問題:

          改進

          針對上述問題,主要從以下幾個方面思考改進:

          • 服務能力原子化:目標是做穩,讓上層通過組合實現業務需求;
          • 構建查詢引擎:支持強大的查詢組合能力,實現原子服務能力任意聚合和定制;
          • API網關:對非業務數據能力需求進行抽象提供插件,實現插件編排。

          下面分別介紹。

          實現穩定、獨立演進的原子能力服務

          對已有的服務進行梳理,抽象出不同應該獨立開發、部署演進的核心能力,對于引擎能力沒有什么工作,重點是對于一些歷史對接的外部CP,主要實現以下目標:

          • 向上提供穩定接口,向下屏蔽底層復雜性(數據訪問,多源差異);
          • 以位置為中心有機整合,構建完備原子化能力集合。

          這部分工作主要是解決歷史遺留的一些服務組合不合理,跟隨業務過度定制的問題。

          定制代碼開發轉換為定義查詢語句

          這里主要目的就是將服務聚合、定制邏輯等原來需要的代碼開發轉換為編寫查詢語言的方式實現,只需要編寫出聲明式的查詢語句即完成服務發布,特性如下:

          • 向上提供標準化查詢語言
          • 向下實現原子能力組合
          • 歸納業務共性,提煉定制模式,提升復用

          本文選擇GraphQL作為查詢語言基礎,然而,直接采用GraphQL有這樣兩個主要問題需要解決:

          • 數據查詢N+1放大問題,直接采用Fackbook提出的dataloader來解決,原理是批量加緩存;
          • GraphQL規范限制,一些定制難以實現,如:
          1. 入參定制:如參數關聯,類型轉換等;
          2. 輸出格式:字段展現形式,如時間、經緯度等;
          3. 配置表定制:主要是部分業務邏輯需要根據配置表定制,如深度返回字段等;
          4. 模型連接:原子能力服務盡可能獨立,同時也無法枚舉定義模型關系,但是定制業務需求需要大量關聯透出,減少業務請求降低延時,所以模型自由關聯能力是必要的,由于本方案最終的查詢控制在內部,對外暴露REST API,因此不會關聯自由度造成的難理解性并不是一個問題。

          需要通過嵌入簡單的DSL實現:

          • 內置和自定義函數功能;
          • 模型動態關聯查詢,上下文參數獲取;
          • 可以方便擴展自定義函數。

          這里嵌入DSL需要控制好度,因為DSL如果過于復雜,那么,使用者或者發布者無法快速寫出查詢的話,對比寫代碼提效就會打折扣,偏離本來的價值,所以基本原則是簡單、可擴展。

          業務無關功能通過API網關插件配置化

          由于之前每個API的定制開發基本所有功能混合在一起,能復用部分就是鑒權提供裝飾器,常規性的響應格式定制提供一些工具函數,任何需求變更都需要變更代碼,走發布流程,有了上面第一步的改造,這個步驟期望將非業務數據部分的定制功能抽象出處理鏈,每個處理節點提供多實現(包含通用和定制),通過數據庫存儲插件鏈實現編排。

          車線業務由于鑒權方式需要根據客戶定制,因此存在多樣性,實現上是通過Web中間件實現多種鑒權插件:

          • HTTP簽名,參考這里:主要面向ToB(車廠后臺、合作方)的請求;
          • JWT認證:主要面向車機、手機等終端;
          • API Key。

          對于API網關來說,這些鑒權插件并沒有什么不同之處,只是工程要處理一些定制場景,比如對于不同車廠的JWK管理刷新策略,JWT驗證策略等,具體需要根據業務訴求抽象建模,通過插件屬性來實現配置控制。

          另外,網關還實現了一些變換器,主要用于將GraphQL的輸出變換為REST API接口透出,這一方面由于一些舊接口要做兼容支持,另外,一些重點客戶的全球化架構背景下自己已經完全定義好了接口式樣,目前主要實現了:

          • 入參變換:使用REST API參數填充GraphQL查詢模板;
          • Header變換:主要用于適配不同客戶規范;
          • JSON變換,使用場景如下:
          1. 可復用標準接口,但是不同客戶的響應結構規范不一致
          2. 定制非標接口,需要對GraphQL輸出進行轉換

          而插件的使用則通過控制臺或API實現將插件配置信息存儲于數據庫中進行管理,使用時根據請求特征從DB中提取并緩存起來使用。

          改造后的新架構如下:

          小結

          通過上述改造,將車聯網在線服務開發模式進行了升級,實現API控制臺動態發布,大幅提升定制開發效率:

          • 提效開發:正交化原子能力編排,通過輕量級定義取代定制化代碼開發:
          1. 定制化開發占比下降60%;
          2. 單接口開發從2-3人日→2-3人時。
          • 協議兼容:混合REST方案,對外提供標準協議、支持既有適配協議。

          作者:高德技術小哥

          用Emacs + hugo + github構建寫作環境

          題外話,世界運行的底層邏輯

          物質世界有無機物和有機物組成

          有機物與無機物的區別:

          有機物是碳化合物,無機物由水和無機離子組成

          有機物熔點低,不溶于水

          無機物是良好的溶劑,反應快

          有機物不溶于水,反應慢

          回到問題,有機物通過復制延續

          無機物通過轉化延續

          復制,與轉化具有普遍性所以說是底層邏輯

          復制的特點是簡單、速度快、穩定

          轉化的特點復雜、不穩定

          為何牽扯出了這些概念,以下就是博客發布

          經歷的幾次轉化

          轉化就代表了能量消耗

          之所以有機物選擇了復制,本質目的是減少能量的損耗

          基本思路

          博客文件格式的幾次轉化

          .org > .md > restApi > githubApi > workflow > .html

          自動化發布在保存⑩添加了鉤子,通過調用接口方式自動上傳md文件到github

          github設置了hugo發布鉤子,監聽發布動作,自動生產靜態html頁面

          第一次轉化 Org 文件轉化為MarkDown文件 使用到emacs插件ox-hugo

          第二次轉化 使用的是github workflow

          自己實現的部分是擴展ox-hugo,監聽生成md文件后獲取兩個值

          1. todo狀態是否已經完成
          2. md文件路徑 用于后續自動上傳

          獲取兩個變量后,用elisp判斷todo狀態為完成

          調用外部程序新起進程處理上傳任務

          上傳實現可以參考我的java版本 post-blog項目


          主站蜘蛛池模板: 精品少妇人妻AV一区二区| 亚洲国产欧美一区二区三区 | 亚洲色大成网站www永久一区| 香蕉视频一区二区三区| 中文字幕在线一区二区在线| 波多野结衣一区二区三区88| 亚洲av无码一区二区三区网站| 亚洲AV无码国产精品永久一区| 熟妇人妻系列av无码一区二区| 福利一区二区视频| 在线成人一区二区| 午夜福利一区二区三区高清视频| 老湿机一区午夜精品免费福利| 在线日产精品一区| 久久亚洲一区二区| 国产av成人一区二区三区| 日韩一区二区三区精品| 国产av一区最新精品| 日产精品久久久一区二区| 狠狠色成人一区二区三区| 色一情一乱一伦一区二区三区| 无码人妻精品一区二区三区不卡| 色噜噜狠狠一区二区三区果冻 | 成人区精品一区二区不卡亚洲| 国精产品一区一区三区免费视频| 视频一区二区三区免费观看| 国内精品视频一区二区八戒| 亚洲一区免费视频| 91在线一区二区| 少妇精品无码一区二区三区| 国产精品视频一区二区三区四 | 无码人妻一区二区三区免费| 色窝窝无码一区二区三区成人网站| 一区二区三区中文字幕| 波多野结衣在线观看一区| 精品在线一区二区| 福利一区二区视频| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 久久久久人妻精品一区二区三区| 国产成人AV一区二区三区无码| 丰满爆乳一区二区三区|