Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产欧美日韩在线视频,丰满女人毛片免费播放,国产亚洲精品福利在线

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          將 75000 行原生 iOS 應(yīng)用程序移植到 Flutter 后,結(jié)果太驚訝!

          CSDN編者按】很少有文章,介紹如何將大型應(yīng)用,移植到Flutter。而本文的作者——一位來自澳洲的Native iOS & Flutter的開發(fā)者,嘗試這樣做了,結(jié)果讓他十分驚訝。到底是什么情況?一起來看文章吧!

          澳大利亞有一個(gè)名為Easy Diet Diary的原生iOS應(yīng)用程序。

          該應(yīng)用:

          ? 已被下載120萬次;

          ? 用Objective-C和Swift編寫,后端是Amazon AWS;

          ? 代碼統(tǒng)計(jì)工具CLOC,報(bào)告該應(yīng)用包含75,000行代碼。

          我在這家小公司工作了很長一段時(shí)間,他們的任務(wù)列表上一直有個(gè)安卓版本,但我們一直沒有開發(fā),因?yàn)椋?/p>

          ? 支持兩個(gè)代碼庫需要太多精力且難以管理。

          ? 跨平臺(tái)開發(fā)的主要選擇Xamarin和React Native都有重要缺陷(這是另一個(gè)故事)。

          最后,我們選擇進(jìn)入Flutter的世界!

          Flutter的速度很快,并且可以保證用戶界面體驗(yàn),而且一切都與原生應(yīng)用沒有區(qū)別(特別是有了2018年9月加入的iOS小窗體之后)。

          以下是本文的主干:

          ? 代碼行數(shù)與開發(fā)速度

          ? 架構(gòu)

          ? 社區(qū)

          ? 性能

          ? 語言

          ? 還缺少什么?

          ? 結(jié)論

          1代碼行數(shù)與開發(fā)速度

          第一階段我預(yù)估需要6個(gè)人月。但是,項(xiàng)目進(jìn)度居然領(lǐng)先了!對(duì)我來說,這簡(jiǎn)直太不可思議了。

          為什么?

          Flutter的布局并不是像iOS那樣,使用的不是Storyboard,或者像安卓那樣使用XML,而是在代碼中將窗體組合成窗體樹,即可創(chuàng)建應(yīng)用程序的用戶界面。這對(duì)我來說聽起來有點(diǎn)可怕,但是我做了嘗試,雖然花了一些時(shí)間來習(xí)慣,但不久我就可以靈活地使用這些窗體樹了。

          然后,大約第一個(gè)階段進(jìn)展到第三個(gè)月的時(shí)候,發(fā)生了一件很奇怪的事情。隨著我越來越熟練、越來越快地移植功能,項(xiàng)目中的代碼行卻開始迅速減少了。這很奇怪,因?yàn)槲乙浦驳臉I(yè)務(wù)邏輯數(shù)量非常龐大,這些邏輯在代碼數(shù)量上的比例幾乎是一比一。

          事情的真相是,我可以通過創(chuàng)建類和編寫函數(shù)來重用用戶界面部分的代碼,這比使用原生iOS更容易。通常,我可以利用幾個(gè)額外的參數(shù),簡(jiǎn)單地重構(gòu)用戶界面的窗體就可以重用它們。如果這樣不行,我還可以簡(jiǎn)單地在現(xiàn)有的窗體周圍再包上另一個(gè)窗體,就可以實(shí)現(xiàn)需要的行為了。這簡(jiǎn)直太贊了!

          最終我預(yù)計(jì)代碼行數(shù)將少于30,000(而原生iOS版本為75,000行)。當(dāng)然,原生iOS版本包含一些雖然當(dāng)時(shí)開發(fā)了最終卻被取代或未被使用的代碼。我估計(jì)未使用的代碼占15,000行。換句話說,需要移植的代碼量為60,000行。

          因此,總的來說,F(xiàn)lutter的代碼量只有原生iOS原有代碼的一半!

          此外,F(xiàn)lutter項(xiàng)目不包含任何Storyboard XML。Storyboard中有很多XML。原生iOS項(xiàng)目包含:

          ? 15個(gè)Storyboard;

          ? 47個(gè)Nib文件;

          ? 92個(gè)View Controllers。

          我與Storyboard斗爭(zhēng)了很多年,一直在嘗試遵循最佳實(shí)踐,最后感覺在Flutter中構(gòu)建用戶界面非常自由而且速度很快。

          以前我沒有意識(shí)到自己的大部分時(shí)間都用在了編寫與用戶界面相關(guān)的代碼,還要忍受大量的Storyboard和自動(dòng)布局限制。

          我無數(shù)次聽人說應(yīng)該將用戶界面布局與代碼分開,我非常同意,但就我的Flutter經(jīng)驗(yàn)而言,這一點(diǎn)未必是真的。而且關(guān)于用戶界面分離的這種概念也不僅僅是原生iOS的最佳實(shí)踐。

          我記得自己在微軟WPF中與XML作斗爭(zhēng),也見過Quora上有人問《為什么安卓使用XML來定義用戶界面而不僅僅是Java代碼?》

          Storyboard是一種自上至下的布局方式(適用于桌面應(yīng)用程序),而窗體采用自下而上的方法,在構(gòu)建移動(dòng)應(yīng)用程序時(shí),窗體可以極大地簡(jiǎn)化編程。我聽說這種方式類似于React Native和CSS flex-boxes的布局方式。Wm Leler在Hacker Noon上發(fā)表的文章《Flutter帶來了哪些創(chuàng)新》很好地解釋了這個(gè)問題。

          以下方式對(duì)于利用窗體構(gòu)建用戶界面很有幫助性:

          ? 大多數(shù)情況下,F(xiàn)lutter中支持狀態(tài)的“熱重載”功能可以在幾秒鐘內(nèi),將代碼更改無縫地整合到正在運(yùn)行的應(yīng)用程序中;

          ? Android Studio的快捷鍵Alt + Enter可以插入或刪除用戶界面的窗體(行、列或容器)。請(qǐng)查看這篇文章《使用Android Studio開發(fā)Flutter應(yīng)用程序的小竅門》(https://medium.com/@liewjuntung/tips-on-using-android-studio-to-develop-flutter-apps-9e42c047b7f4)。

          我覺得VS Code中應(yīng)該有類似的東西。這似乎微不足道,但我覺得這個(gè)快捷鍵十分有用。使用熱重載和Alt + Enter,我可以在幾分鐘內(nèi)做好一個(gè)畫面,甚至可以在用戶界面上做實(shí)驗(yàn)。

          ? 將debugPaintSizeEnabled設(shè)置為true。這會(huì)在所有用戶界面的窗體周圍顯示鮮艷的邊框。實(shí)際上這個(gè)功能用得并不如想象得多,但是當(dāng)布局出現(xiàn)問題時(shí)該功能確實(shí)非常有用。

          2架構(gòu)

          我在選擇架構(gòu)時(shí)做了如下幾件事:

          ? 看了幾遍Brian Egan的這個(gè)演講《保持簡(jiǎn)單、有狀態(tài):Flutter應(yīng)用的架構(gòu)》(https://www.youtube.com/watch?v=zKXz3pUkw9A&feature=youtu.be)。

          ? 讀了幾遍Eric Windmill的這篇文章《有效地使用Flutter的繼承窗體》(https://ericwindmill.com/posts/inherited_widget/)。

          ? 閱讀Flutter架構(gòu)示例:http://fluttersamples.com/。

          最終,我按照Eric的建議使用了一種名為Lifting State Up的架構(gòu)模式,這是Redux的第一步,看起來非常誘人。然而,Redux對(duì)我來說遙不可及。由于開發(fā)時(shí)間緊迫,學(xué)習(xí)和嘗試Redux似乎太令人生畏了。

          一路走來,我從Stack Overflowers上的人解答的關(guān)于架構(gòu)的問題中得到了許多幫助。這讓我想到了社區(qū)。

          3社區(qū)

          有關(guān)Flutter的開源社區(qū)非常多元化,并且非常樂于助人,讓我看到了人類的希望(特別是在這些瘋狂的時(shí)期)。

          舉個(gè)例子,當(dāng)時(shí)我正在使用Romain Rastel編寫的flutter_slidable軟件包,而且我還提了一個(gè)改善建議,僅僅48小時(shí)之內(nèi)他就實(shí)現(xiàn)了一個(gè)比我想象的更好的解決方案......類似這樣的事情比比皆是。

          我唯一遺憾的是,我一直忙于移植工作,與我收到的幫助相比,我給予別人的遠(yuǎn)遠(yuǎn)不夠。

          4性能

          總的來說,參加了內(nèi)部測(cè)試的用戶對(duì)Flutter的“活潑”非常滿意。在同一臺(tái)iOS設(shè)備上,同時(shí)并排運(yùn)行iOS應(yīng)用與Flutter應(yīng)用時(shí),并沒有看到性能明顯下降。

          我們的應(yīng)用沒有很多需要大量圖形的任務(wù),但有一個(gè)功能需要從數(shù)百個(gè)JSON文件讀取數(shù)據(jù),然后對(duì)該數(shù)據(jù)進(jìn)行一系列浮點(diǎn)計(jì)算,在該功能中Flutter的應(yīng)用明顯更快。

          我沒有花時(shí)間去研究導(dǎo)致差異的究竟是是讀取文件的功能、還是JSON解析或者是日期處理等等,因此我無法做出類別上的判斷,但我感覺這無疑是Flutter桂冠上的一顆明珠。

          很期待看到其他人能給出怎樣的性能測(cè)試數(shù)據(jù)。

          5語言

          Flutter使用Dart,這種語言已經(jīng)在Google之外萎靡不振,直到最近才隨著Flutter再次興起。

          然而,這門語言很成熟且易于學(xué)習(xí)。幸運(yùn)的是,我在加入Dart隊(duì)伍時(shí),擁有更強(qiáng)大的類型功能的Dart 2.0剛剛出現(xiàn),所以無需再在代碼中不斷地敲“new”關(guān)鍵字了。

          Dart可能沒有Swift和Kotlin所擁有的Null和非Null類型,但我很喜歡它的簡(jiǎn)單性。 例如:

          ? 以下劃線開頭的函數(shù)為私有;

          ? 自動(dòng)格式化意味著不必再頭疼我的習(xí)慣問題——我喜歡在末尾加上逗號(hào)將參數(shù)分行;

          ? 包管理很簡(jiǎn)單。

          還有很多很多。我喜歡這些功能,也許其他人可能不喜歡。對(duì)我而言,最重要的是我可以更快地(用奇怪但很愉悅的方式)實(shí)現(xiàn)功能。

          6還缺少什么?

          沒有太多缺少的東西。在原生iOS應(yīng)用中:

          ? 我在XCode中使用了很多Targets,并結(jié)合一堆#define創(chuàng)建bundle ID不同的各種版本的應(yīng)用。我不知道在Flutter中怎么處理這個(gè)問題;

          ? 我在iOS中使用了一個(gè)很好的第三方日志框架,叫做CocoaLumberjack。還沒找到能代替它的東西;

          ? 我使用UIKit框架中的WKWebView來加載并渲染本地的HTML文件(如使用條款、隱私政策等)。我在Flutter中沒找到正確的包來實(shí)現(xiàn)這個(gè)功能。最后只能使用一個(gè)包HTML2MD將HTML轉(zhuǎn)換成Markdown再使用另一個(gè)包flutter_markdown來渲染;

          ? 我使用AVFoundation框架,在單一的全屏視圖中實(shí)現(xiàn)條碼掃描、QR二維碼掃描和拍照。在Flutter中我還不能如此細(xì)致地進(jìn)行控制,雖然它的Camera包很適合拍照,另一個(gè)由facundomedica編寫的包fast_qr_reader_view很適合掃描條碼。在安卓設(shè)備上,這個(gè)包與Firebase的ML Kit配合從Camera包中獲取實(shí)時(shí)圖像。

          7結(jié)論

          讀到這里,你肯定不會(huì)驚訝為什么我如此贊美Flutter。到目前為止:

          ? Flutter的用戶界面幾乎與原生安卓和原生iOS的用戶界面沒有區(qū)別;

          ? 得益于Flutter用戶界面的構(gòu)建方式,利用Flutter制作新功能比原生代碼更快;

          ? 測(cè)試沒有收到有關(guān)性能劣化的報(bào)告;

          ? iOS版和安卓版之間的代碼共享目前達(dá)到了90%以上。我還沒有集成蘋果的HealthKit或Google Fit,但我覺得共享率應(yīng)該不會(huì)下降太多。

          盡管Flutter還不成熟(2018年5月才發(fā)布正式版),但對(duì)于我來說它已經(jīng)足夠強(qiáng)壯了。

          我遇到的唯一問題就是Dart同步讀取目錄的函數(shù)List Sync在最近的一次發(fā)布中出現(xiàn)了崩潰。我將它加到了Flutter在Github上的代碼庫中,然后改用異步版本。

          原文:https://medium.com/flutter-community/porting-a-75-000-line-native-ios-app-to-flutter-57c6571c57b4

          作者:Gary Hunter,Native iOS & Flutter的開發(fā)者。

          譯者:彎月,責(zé)編:胡巍巍

          “征稿啦!”

          CSDN 公眾號(hào)秉持著「與千萬技術(shù)人共成長」理念,不僅以「極客頭條」、「暢言」欄目在第一時(shí)間以技術(shù)人的獨(dú)特視角描述技術(shù)人關(guān)心的行業(yè)焦點(diǎn)事件,更有「技術(shù)頭條」專欄,深度解讀行業(yè)內(nèi)的熱門技術(shù)與場(chǎng)景應(yīng)用,讓所有的開發(fā)者緊跟技術(shù)潮流,保持警醒的技術(shù)嗅覺,對(duì)行業(yè)趨勢(shì)、技術(shù)有更為全面的認(rèn)知。

          如果你有優(yōu)質(zhì)的文章,或是行業(yè)熱點(diǎn)事件、技術(shù)趨勢(shì)的真知灼見,或是深度的應(yīng)用實(shí)踐、場(chǎng)景方案等的新見解,歡迎聯(lián)系 CSDN 投稿,聯(lián)系方式:微信(guorui_1118,請(qǐng)備注投稿+姓名+公司職位),郵箱(guorui@csdn.net)。

          ypora 是一款支持實(shí)時(shí)預(yù)覽的 Markdown 文本編輯器。它有 OS X、Windows、Linux 三個(gè)平臺(tái)的版本,目前完全免費(fèi)

          https://typora.io/#

          Markdown是一種輕量級(jí)標(biāo)記語言,創(chuàng)始人為約翰·格魯伯(英語:John Gruber)。 它允許人們使用易讀易寫的純文本格式編寫文檔,然后轉(zhuǎn)換成有效的XHTML(或者HTML)文檔。這種語言吸收了很多在電子郵件中已有的純文本標(biāo)記的特性。

          由于Markdown的輕量化、易讀易寫特性,并且對(duì)于圖片,圖表、數(shù)學(xué)式都有支持,目前許多網(wǎng)站都廣泛使用Markdown來撰寫幫助文檔或是用于論壇上發(fā)表消息。 如GitHub、Reddit、Diaspora、Stack Exchange、OpenStreetMap 、SourceForge、簡(jiǎn)書等,甚至還能被使用來撰寫電子書。

          在使用Dreamweaver編寫網(wǎng)頁時(shí),遇到需要插入代碼塊、流程圖、數(shù)學(xué)公式時(shí),總是顯得很無力,效率很低,效果不好,使用Typora會(huì)讓這些問題迎刃而解,且輕便,簡(jiǎn)單。

          直接看一個(gè)demo:

          導(dǎo)出為html:

          html網(wǎng)頁源代碼:

          其可以導(dǎo)出的格式有:

          流程圖樣式包括:

          1、標(biāo)準(zhǔn)流程圖源碼格式(橫向):

          ```flow
          st=>start: 開始框
          op=>operation: 處理框
          cond=>condition: 判斷框(是或否?)
          sub1=>subroutine: 子流程
          io=>inputoutput: 輸入輸出框
          e=>end: 結(jié)束框
          st(right)->op(right)->cond
          cond(yes)->io(bottom)->e
          cond(no)->sub1(right)->op
          ```

          2 mermaid語言庫繪流程圖

          Mermaid 是一個(gè)用于畫流程圖、狀態(tài)圖、時(shí)序圖、甘特圖的庫,使用 JS 進(jìn)行本地渲染,廣泛集成于許多 Markdown 編輯器中。

          Mermaid 作為一個(gè)使用 JS 渲染的庫,生成的不是一個(gè)“圖片”,而是一段 HTML 代碼,因此安全許多。

          官網(wǎng):https://mermaidjs.github.io/
          Github 項(xiàng)目地址:https://github.com/knsv/mermaid

          2.1 橫向流程圖源碼格式:

          graph LR
          A[方形] -->B(圓角)
              B --> C{條件a}
              C -->|a=1| D[結(jié)果1]
              C -->|a=2| E[結(jié)果2]

          2.2 豎向流程圖源碼格式:

          sequenceDiagram
          Title: 標(biāo)題:復(fù)雜使用
          對(duì)象A->對(duì)象B: 對(duì)象B你好嗎?(請(qǐng)求)
          Note right of 對(duì)象B: 對(duì)象B的描述
          Note left of 對(duì)象A: 對(duì)象A的描述(提示)
          對(duì)象B-->對(duì)象A: 我很好(響應(yīng))
          對(duì)象B->小三: 你好嗎
          小三-->>對(duì)象A: 對(duì)象B找我了
          對(duì)象A->對(duì)象B: 你真的好嗎?
          Note over 小三,對(duì)象B: 我們是朋友
          participant C
          Note right of C: 沒人陪我玩

          2.3 時(shí)序圖源碼復(fù)雜樣例

                  gantt
                  dateFormat  YYYY-MM-DD
                  title 軟件開發(fā)甘特圖
                  section 設(shè)計(jì)
                  需求                      :done,    des1, 2014-01-06,2014-01-08
                  原型                      :active,  des2, 2014-01-09, 3d
                  UI設(shè)計(jì)                     :         des3, after des2, 5d
              未來任務(wù)                     :         des4, after des3, 5d
                  section 開發(fā)
                  學(xué)習(xí)準(zhǔn)備理解需求                      :crit, done, 2014-01-06,24h
                  設(shè)計(jì)框架                             :crit, done, after des2, 2d
                  開發(fā)                                 :crit, active, 3d
                  未來任務(wù)                              :crit, 5d
                  耍                                   :2d
                  section 測(cè)試
                  功能測(cè)試                              :active, a1, after des3, 3d
                  壓力測(cè)試                               :after a1  , 20h
                  測(cè)試報(bào)告                               : 48h

          2.4 甘特圖樣例:

                  gantt
                  dateFormat  YYYY-MM-DD
                  title 軟件開發(fā)甘特圖
                  section 設(shè)計(jì)
                  需求                      :done,    des1, 2014-01-06,2014-01-08
                  原型                      :active,  des2, 2014-01-09, 3d
                  UI設(shè)計(jì)                     :         des3, after des2, 5d
              未來任務(wù)                     :         des4, after des3, 5d
                  section 開發(fā)
                  學(xué)習(xí)準(zhǔn)備理解需求                      :crit, done, 2014-01-06,24h
                  設(shè)計(jì)框架                             :crit, done, after des2, 2d
                  開發(fā)                                 :crit, active, 3d
                  未來任務(wù)                              :crit, 5d
                  耍                                   :2d
                  section 測(cè)試
                  功能測(cè)試                              :active, a1, after des3, 3d
                  壓力測(cè)試                               :after a1  , 20h
                  測(cè)試報(bào)告                               : 48h


          教程:

          Markdown 高級(jí)技巧 | 菜鳥教程(使用 Typora 編輯器講解 Markdown 的語法)

          https://www.runoob.com/markdown/md-advance.html

          ref

          1 Typora 完全使用詳解

          https://sspai.com/post/54912/

          2 用什么軟件畫流程圖好?-悟空問答

          https://www.wukong.com/question/6809962012198568195/

          3 Mermaid 實(shí)用教程

          https://blog.csdn.net/fenghuizhidao/article/details/79440583

          -End-


          關(guān)工具:

          1.PyMuPdf 組件, python組件包,含mupdf的核心功能并與mutool功能兼容

          PyMuPDFpypi.org/project/PyMuPDF/#files

          備選: FreePic2Pdf.exe 第三方PDF書簽管理工具,可直接提取PDF文檔目錄

          2.Python SDK包及PyCharm開發(fā)工具(PyCharm只需下載社區(qū)版本即可)

          Welcome to Python.orgwww.python.org/

          PyCharm: the Python IDE for Professional Developers by JetBrainswww.jetbrains.com/pycharm/

          相關(guān)操作:

          提取pdf的索引目錄: 有多種方法,常見的如: 1.直接拷貝目錄/OCR識(shí)別目錄 2.PDF閱讀器自帶獲取目錄 3.通過zotero和zotfile的提取功能 4.devonthink來創(chuàng)建TOC 5.通過FreePic2Pdf第三方提取軟件 6.通過mutool命令行工具包 都可以實(shí)現(xiàn), 這里放幾張展示圖:

          • 獲取PDF目錄(不需要Python):

          方法一:mutool工具執(zhí)行命令行獲取TOC方法二:mutool run javascript腳本來獲取方法三:FreePic2Pdf等第三方提取軟件

          如上所示: 我們提供的多種方法都可以不依賴Python實(shí)現(xiàn)提取PDF目錄,但為了后續(xù)的文章技術(shù)進(jìn)階,以及操作流程自動(dòng)化,我們?cè)诒疚拈_始引入python來實(shí)現(xiàn)我們的需求.因此這里我們采用的是PyMuPdf來實(shí)現(xiàn).具體的下載鏈接已放置于文章開頭.

          • 獲取PDF目錄(使用了Python)

          步驟一:配置基礎(chǔ)的開發(fā)環(huán)境

          Python的安裝比較簡(jiǎn)單,官網(wǎng)下載安裝包雙擊安裝即可,因此本文不再詳細(xì)講解,(只是要注意本文我們要下載大于2.7的版本來使用,如果你的python環(huán)境有問題,請(qǐng)和我的3.9版本保持一致)

          到官網(wǎng)下載后雙擊安裝

          上面安裝好python環(huán)境后,接著我們來安裝PyMuPDF Python組件包,相關(guān)幫助文檔可參考如下:

          https://pypi.org/project/PyMuPDF/#filespypi.org/project/PyMuPDF/#files

          按python版本二種方式選一種來安裝

          PyMuPDF Documentation - PyMuPDF 1.18.6 documentationpymupdf.readthedocs.io/en/latest/

          這里我們選擇的是下載whl包安裝按自己系統(tǒng)下載,我下載的是macos-cp39

          按上面方式2下載whl文件并雙擊安裝Mupdf Python組件后,接著我們開始配置PyCharm開發(fā)工具, 用最前面的鏈接下載PyCharm軟件并設(shè)置好PyCharm的Python SDK版本,具體如下所示:

          確保用的是Python3的SDK

          步驟二: 編寫Python代碼,執(zhí)行生成HTML:
          ## 提取章節(jié)信息import fitz # = PyMuPDFpdfName = "java2.pdf"doc = fitz.open(pdfName) # open PDFtoc = doc.getToC() # get current table of contentswith open("chapter-t.html", mode="w", encoding="utf-8") as f:
           for t in toc:
           t[2] = pdfName + "-" + str(t[2]) # show what we have so far
           chapterInfo = "{}{}-{}{}".format("<p>", t[1], t[2], "</p>
          ")
            print(chapterInfo)
           f.write(chapterInfo)

          用IE瀏覽器打開上面生成的HTML,用Ctrl+Shift+A導(dǎo)入至SuperMemo進(jìn)行Split命令分割,如圖:

          IE瀏覽器打開展示效果SM中使用自定義符號(hào)來分割PDF索引目錄導(dǎo)入SM操作最終的索引目錄導(dǎo)入效果

          步驟三: 開始PDF文檔的增量學(xué)習(xí)

          我們對(duì)上面的分支添加學(xué)習(xí)計(jì)劃并Ctrl+L開始學(xué)習(xí),同樣左側(cè)排列SM軟件,右側(cè)排列PDF閱讀器: 提示: 取消SuperMemo軟件的窗口背景選項(xiàng),才能進(jìn)行如下二個(gè)軟件的左右布局
          • 當(dāng)復(fù)習(xí)到對(duì)應(yīng)的元素時(shí)打開PDF(PDF學(xué)習(xí))

          基于Alfred/AHK/Quicker來編寫腳本,實(shí)現(xiàn)搜索并打開PDF,接著按頁或章節(jié)內(nèi)容跳轉(zhuǎn)到指定章節(jié)

          按PDF索引數(shù)據(jù)打開PDF基于PDF索引的增量閱讀

          • 添加/檢索/及批量管理注釋書簽(PDF提取)

          使用福昕閱讀器的注釋功能PDF注釋添加/刪除/管理(PDF提取)

          • 增量提取的子注釋同步回SM軟件(提取同步)

          因?yàn)槲覀兊腜DF內(nèi)容提取是在PDF閱讀器中實(shí)現(xiàn)的,為了能使提取的文章內(nèi)容也能在SM軟件中增量,我們考慮同步回SM軟件中,這個(gè)操作可按自己的需求或頻次來決定,不一定非得同步回SM軟件.

          同步回SM時(shí)唯一要注意的是最好不要覆蓋掉原來同步過的子元素內(nèi)容(確保保留學(xué)習(xí)進(jìn)度) 具體如何避免這個(gè)問題我在文章末尾會(huì)有較詳細(xì)的概述及相關(guān)方法.

          用福昕來閱讀只能導(dǎo)出文本注釋

          提示 : 上面導(dǎo)出的福昕閱讀器內(nèi)容注釋我們處理如下,接著再導(dǎo)入SuperMemo進(jìn)行Split分割:

          自己手動(dòng)處理下段落分割符號(hào)

          上面的注釋文本復(fù)制進(jìn)SuperMemo軟件,再使用Split命令分割就是按段落內(nèi)容正確的分割了.

          導(dǎo)入SuperMemo來分割處理最終處理結(jié)果(PDF提取同步)

          如上所述: 整個(gè)PDF增量閱讀提取流程結(jié)束.以后我們只需重復(fù)執(zhí)行這些步驟來閱讀即可.你可以參考我之前寫的一篇內(nèi)容來了解基于PDF目錄索引來進(jìn)行增量學(xué)習(xí)PDF文件的流程(鏈接如下):

          一只小胖子:流程-SuperMemo增量學(xué)習(xí)及間隔復(fù)習(xí)12 贊同 · 10 評(píng)論文章

          主要講解的是Mac系統(tǒng)下使用DevonThink及PDFExpert閱讀器來實(shí)現(xiàn)SuperMemo增量學(xué)習(xí)的整體思路.如果你用的是Windows系統(tǒng),那么你可以使用Everything/FileLocator Pro 工具代替DevonThink的功能,使用福昕閱讀器或者BookxNote閱讀器來代替PDFExpert的功能.

          考慮到要支持注釋中含有圖片的問題,我推薦在Mac操作系統(tǒng)下使用Highlights PDF閱讀器,在Windows下使用BookxNote閱讀器.如果還不能滿足你特定的需求,則建議用本文的PyMuPdf組件編寫一些簡(jiǎn)單的Python代碼,來實(shí)現(xiàn)更復(fù)雜及更自由化的需求.


          • Mac系統(tǒng)下的Highlights演示:

          Mac下的Highlights閱讀器靈活豐富的注釋導(dǎo)出功能

          由于html導(dǎo)出的是base64的圖片存儲(chǔ),因此建議導(dǎo)出TextBundle(本地圖片|markdown)格式:

          導(dǎo)出成markdown再轉(zhuǎn)成html

          說明:

          如上所示,如果是MAC系統(tǒng)使用Highlight作為PDF閱讀器,導(dǎo)出注釋時(shí). 第一種可以直接拷貝右側(cè)的注釋內(nèi)容至SuperMemo中,第二種則是導(dǎo)出右側(cè)注釋為TextBundle格式(圖片本地存儲(chǔ))并把md文件轉(zhuǎn)換成Html(如果直接Highlights導(dǎo)出為Html注釋筆記,里面的圖片為base64編碼,不能在SuperMemo直接導(dǎo)入)再導(dǎo)入SuperMemo.

          TextBundle對(duì)應(yīng)為本地圖片和md

          ## MarkDown -> Htmlpandoc text.md -o text1.html


          • Windows下BookxNote的演示:

          下圖為BookxNote閱讀器的功能演示,可在Windows下作為代替Mac端Highlights軟件部分功能:

          Windows下BookxNote演示

          步驟四: 提取內(nèi)容同步回SM軟件時(shí)保留學(xué)習(xí)進(jìn)度

          通過Python腳本來實(shí)現(xiàn)進(jìn)度同步功能,流程上依賴于時(shí)間戳標(biāo)記(不同于官方默認(rèn)的按ID同步),即閱讀時(shí)在PDF文件中通過文本注釋的形式添加時(shí)間戳標(biāo)識(shí)作為書簽,閱讀中斷后,我們會(huì)按上面的方式導(dǎo)出注釋,作為書簽使用的這個(gè)時(shí)間戳?xí)趯?dǎo)出的注釋(最終的html)中存在,這個(gè)html導(dǎo)入SuperMemo分割時(shí),用此時(shí)間戳作為分割符號(hào),即生成了每個(gè)元素都有了一個(gè)時(shí)間戳作為唯一ID使用.因此在重復(fù)導(dǎo)入的多個(gè)不同的集合中(跨集合)我們也可以遷移舊的學(xué)習(xí)進(jìn)度至新集合.

          PDF閱讀加時(shí)間戳作書簽及分割符腳本使用腳本來實(shí)現(xiàn)學(xué)習(xí)進(jìn)度同步功能該圖所示的網(wǎng)盤下載地址在評(píng)論區(qū)


          完結(jié):

          以上進(jìn)度同步功能的具體操作,后期會(huì)考慮直接錄制視頻來演示.因此本文不再繼續(xù)對(duì)細(xì)節(jié)進(jìn)行說明. 說明: 上圖的腳本下載鏈接詳見評(píng)論區(qū)...


          我是一只熱愛學(xué)習(xí)的小胖子,如果你也熱愛學(xué)習(xí),并且對(duì)SuperMemo感興趣,歡迎轉(zhuǎn)發(fā)和評(píng)論!


          主站蜘蛛池模板: 国产福利91精品一区二区| 国产日韩一区二区三区在线播放| 国产成人精品a视频一区| 人妻久久久一区二区三区 | 亚洲中文字幕无码一区| 天堂一区二区三区在线观看| 久久久久无码国产精品一区| а天堂中文最新一区二区三区| 亚洲一区二区影视| 亚洲一区二区三区日本久久九 | 日韩好片一区二区在线看| 亚洲午夜日韩高清一区| 日本美女一区二区三区| 精品免费国产一区二区| 一区二区三区视频| 中文字幕一区二区三区人妻少妇| 亚洲一区二区电影| 精品一区二区三区在线成人| 国产精品女同一区二区| 久久免费视频一区| 久久国产精品一区| 天堂Aⅴ无码一区二区三区| 八戒久久精品一区二区三区| 国产无人区一区二区三区| 亚洲精品伦理熟女国产一区二区| 国产福利一区二区三区在线观看| 亚洲视频在线观看一区| 精品无码AV一区二区三区不卡| 国产成人精品一区二区三区无码| 国产福利电影一区二区三区久久久久成人精品综合 | 国产一区二区精品久久91| 国产一区二区三区小说| 精品国产高清自在线一区二区三区 | 少妇一晚三次一区二区三区| 国产美女一区二区三区| 怡红院AV一区二区三区| 国产一区二区精品在线观看| 杨幂AV污网站在线一区二区| 国产福利电影一区二区三区,日韩伦理电影在线福 | 亚洲天堂一区在线| 成人在线观看一区|